#reporting #cognos #cognos-8
#отчетность #cognos #cognos-8
Вопрос:
Я хочу запросить метаданные в Cognos 8, чтобы найти все имена отчетов и столбцов. Если возможно, я хотел бы включить определения столбцов.
Могу ли я сделать это с помощью отчета Cognos или мне нужно запросить какой-либо репозиторий?
Спасибо.
Комментарии:
1. Я не могу поверить, что есть кто-то, кто даже знает, что такое Cognos! Я думал, что моя компания была единственной, кто использовал его. В любом случае… Вы могли бы заглянуть в раздел «профилирование». Это должно дать вам образец результатов, а также типы данных, которые вы ищете.
2. Вы запрашиваете много разной информации. Метаданные отчета скрыты в хранилище содержимого, и их нелегко получить, хотя поиск в Google, вероятно, даст вам несколько запросов. Определения столбцов, возможно, придется извлекать из отдельных моделей FM.
3. @durbnpoisn — Да, это здесь, и я застрял (на данный момент) с долей моего отдела. Спасибо за совет по профилированию.
4. @durbnpoisn Да, мы, пользователи Cognos, прячемся здесь, в стеках. Здесь, в stackoverflow, отклоняется множество вопросов, относящихся к конкретным приложениям, но часто рассматриваются вопросы SQL, Framework и Report. Кстати, Cognos является ведущим инструментом бизнес-аналитики. Многие компании используют его для составления отчетов. Опытные компании используют его для аналитики. С Cognos Express небольшие магазины теперь тоже попадают в Cognos. Вы не в меньшинстве.
5. В зависимости от вашего бюджета вы можете приобрести инструмент у MotioPi motio.com/content/motiopi-cognos-administration-tools . Cognos, как и любой другой инструмент корпоративной отчетности, часто обвиняют в том, что на него указывают пальцем, но это не инструмент, за которым стоит поддержка бизнеса. Мусор в мусор.
Ответ №1:
Вы можете выбрать список отчетов из хранилища содержимого с помощью следующего запроса:
SELECT CMOBJNAMES_BASE.NAME AS ObjName, CMOBJECTS.PCMID, CMCLASSES.NAME AS ClassName, CMOBJPROPS7.spec
FROM CMOBJECTS
JOIN CMOBJNAMES_BASE ON CMOBJECTS.CMID = CMOBJNAMES_BASE.CMID
JOIN CMCLASSES ON CMOBJECTS.CLASSID = CMCLASSES.CLASSID
LEFT JOIN CMOBJPROPS7 ON CMOBJECTS.CMID = CMOBJPROPS7.CMID
WHERE CMOBJECTS.CLASSID IN (10, 37)
ORDER BY CMOBJECTS.PCMID;
Я использую это в Cognos 10. Я считаю, что в cognos 8 таблица CMOBJNAMES_BASE на самом деле называется «CMOBJNAMES» без _BASE.
ОБНОВЛЕНИЕ: протестировано и работает в Cognos 11r9.
Метаданные отчета хранятся в столбце «СПЕЦИФИКАЦИЯ» CMOBJPROPS7 в формате XML. Вы можете проанализировать этот XML, чтобы удалить столбцы, используемые в отчете. Это будет непростая задача.
Если у вас есть время, но нет денег, вы можете написать свой собственный код для анализа этого XML. Если у вас больше денег, чем времени, вы можете купить стороннюю программу для выполнения этой задачи, такую как Motio или BSP Metamanager.
Приведенный выше запрос менее полезен для создания чистого списка столбцов, но отлично подходит для поиска конкретных элементов данных. Например, у вас есть столбец, который вы хотите изменить в источнике данных, но вы не уверены, какой отчет использует этот столбец. Запустите приведенный выше запрос и выполните поиск элемента данных. Он будет встроен в XML в формате многомерных выражений Cognos, т.Е.. [Просмотр презентации].[Сводка продаж].[Продажи]
РЕДАКТИРОВАТЬ: как указано ниже, вот запрос, который включает пути к папкам.
-- List of Reports, the folder they are in, and the package they are using
select distinct temp2.name as package,temp1.folder,temp1.name from
(SELECT temp.PARENTNAME AS FOLDER,CMOBJECTS.PCMID,CMOBJNAMES.CMID, CMOBJNAMES.LOCALEID, CMOBJNAMES.MAPDLOCALEID, CMOBJNAMES.ISDEFAULT, CMOBJNAMES.NAME,
CMOBJECTS.CLASSID
FROM CMOBJNAMES INNER JOIN
CMOBJECTS ON CMOBJNAMES.CMID = CMOBJECTS.CMID
INNER JOIN
(SELECT P.CMID AS PARENT,P.NAME AS PARENTNAME FROM CMOBJNAMES P where P.LOCALEID between 24 and 52) temp
ON CMOBJECTS.PCMID = TEMP.PARENT
WHERE (CMOBJECTS.CLASSID = 10)
AND SUBSTR(TEMP.PARENTNAME,1,1) NOT IN ('1','2','3','4','5','6','7','8','9') AND
TEMP.PARENTNAME NOT LIKE 'Backup%') temp1
inner join
(SELECT CMREFNOORD1.CMID AS PID, CMREFNOORD1.REFCMID, CMOBJNAMES.NAME
FROM CMREFNOORD1 INNER JOIN
CMOBJECTS ON CMREFNOORD1.REFCMID = CMOBJECTS.CMID INNER JOIN
CMOBJNAMES ON CMOBJECTS.CMID = CMOBJNAMES.CMID
WHERE (CMREFNOORD1.PROPID = 31 AND CMOBJNAMES.LOCALEID between 24 and 52)) temp2
on temp1.cmid = temp2.pid and LOCALEID between 24 and 52;
Комментарии:
1. Я специально искал столбцы (метки), поэтому этот запрос не отражает его полностью — плюс, мне сказали, что у нас нет SDK, который, как я понимаю, необходим для доступа к хранилищу контента. В любом случае спасибо. 1 для запроса.
2. SDK не требуется для запроса хранилища содержимого. Хранилище содержимого — это либо база данных DB2, которую cognos создает самостоятельно (eek, подходит для демонстраций, на самом деле не предназначена для производства), либо, что более вероятно, база данных, которую вы создали сами и указали Cognos. Используйте логин, используемый Cognos, для доступа к хранилищу контента, и у вас будет весь необходимый доступ. Проверьте возвращенные метаданные, они содержат данные, используемые для создания окончательной веб-страницы, поэтому, вероятно, они содержат метки, которые вы ищете.
3. Спасибо Damienknight, запрос уже помог. Однако я хотел бы знать, есть ли способ добавить папку, в которой содержится имя отчета? Например, некоторые пользователи создали папку, затем вложенную папку, а затем сохранили отчет. У нас был некоторый оборот, и все не документировано так, как должно быть. Мне нужно найти отчеты на основе заголовков столбцов в ранее сохраненном файле Excel, который был сгенерирован из отчета. Спасибо…
4. Это отличный вопрос. Я пошел дальше и обновил ответ, включив в него запрос, который я написал, который также отображает пути к папкам.
Ответ №2:
Не уверен, что это кому-нибудь поможет, но в нашей версии нет таблицы с именем CMOBJNAMES_BASE .
Это то, что работает для меня:
select ob2.cmid, c.name as classname, n.name as objectname, o.DELIVOPTIONS as deliveryoptions, z2.name as owner
from CMOBJPROPS2 p
inner join CMOBJPROPS26 o on p.cmid=o.cmid
inner join CMOBJECTS ob on ob.cmid=o.cmid
inner join CMOBJECTS ob2 on ob.pcmid=ob2.cmid
inner join CMOBJNAMES n on n.cmid=ob2.cmid
inner join CMCLASSES c on ob2.classid=c.classid
left join CMREFNOORD2 z1 on z1.cmid = p.cmid
left join CMOBJPROPS33 z2 on z2.CMID = z1.REFCMID
where ACTIVE = 1 order by z2.name, objectName
Комментарии:
1. На какой версии Cognos вы работаете? Недавно я протестировал скрипт, и он работает в 11r9. Я предполагаю, что вы либо используете 11.1, либо какую-либо версию cognos express?