2014-06-20 49 views
2

我想查詢Cognos 8中的元數據以查找所有報告和列名稱。如果可能的話,我想包括列定義。Cognos 8查詢查找所有報告和列名稱

我可以使用Cognos報告執行此操作還是需要查詢某個存儲庫?

謝謝。

+0

我不敢相信有人在那裏甚至知道Cognos是什麼!我認爲我的公司是唯一使用它的公司。無論如何...你可以看看「分析」。這應該給你一個結果樣本以及你正在尋找的數據類型。 – durbnpoisn

+0

你在詢問很多不同的信息。報告元數據被隱藏在內容存儲庫中,並且不容易出去,儘管一些Google搜索可能會給您一些疑問。列定義,您可能不得不退出各個FM模型。 – Andrew

+0

@durbnpoisn - 是的,它在這裏,我被我的部門分享了(暫時)。感謝分析技巧。 – jabs

回答

6

您可以選擇使用以下查詢從內容存儲庫報告的列表:

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,我相信在IBM Cognos 8 CMOBJNAMES_BASE表實際上是一個名爲「CMOBJNAMES」,不_基礎。

報表元數據作爲XML存儲在CMOBJPROPS7的'SPEC'列中。您可以解析此XML,以便刪除報告中使用的列。這不是一個簡單的任務。

如果您有時間而不是金錢,您可以編寫自己的代碼來解析該XML。如果你有更多的錢比時間,你可以購買第三方程序來完成這一點,如Motio或BSP Metamanager。

上面的查詢對於構建一個乾淨的列列表不太有用,但對搜索特定的數據項很有用。例如,您想要在數據源中更改列,但不確定哪個報表使用該列。運行上面的查詢,並搜索數據項。它將嵌入在Cognos MDX格式的XML中,即。 [Presentation View]。[Sales Summary]。[Sales]

編輯:如下所示,這是一個包含文件夾路徑的查詢。

-- 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; 
+0

我一直在尋找專門的列(標籤),所以這個查詢沒有完全捕獲它 - 此外,我被告知我們沒有SDK,我明白這是訪問內容存儲所必需的。不管怎麼說,還是要謝謝你。查詢+1。 – jabs

+0

SDK不需要查詢內容存儲。內容存儲庫是Cognos自己創建的DB2數據庫(eek,適用於演示,並非真正用於生產),或者更可能是您自己創建並指定Cognos的數據庫。使用Cognos使用的登錄到達內容存儲庫,您將擁有所有您需要的訪問權限。檢查返回的元數據,它具有用於構建最終網頁的數據,因此它可能包含您正在查找的標籤。 – Damienknight

+1

感謝Damienknight,查詢已幫助。但是,我想知道是否有添加報表名稱所在文件夾的方法? 例如,一些用戶已經創建了一個文件夾,然後是一個子文件夾,然後保存報告。我們有一些營業額,事情沒有記錄,他們應該是。我需要根據報告中生成的以前保存的Excel文件中的列標題查找報告。 謝謝... – CWinKY