Cognosのクエリで使用されているSQLを表示できますか?Cognosからクエリ定義を取得する方法は?
あなたは(https://stackoverflow.com/a/24335760/361842からコピー)以下のSQLを使用することができますレポートのXML定義を取得するには、次の
SELECT CMOBJNAMES.NAME AS ObjName
, CMOBJECTS.PCMID
, CMCLASSES.NAME AS ClassName
, cast(CMOBJPROPS7.spec as xml) ReportDefinition
FROM CMOBJECTS
INNER JOIN CMOBJNAMES ON CMOBJECTS.CMID = CMOBJNAMES.CMID
INNER JOIN CMCLASSES ON CMOBJECTS.CLASSID = CMCLASSES.CLASSID
LEFT OUTER JOIN CMOBJPROPS7 ON CMOBJECTS.CMID = CMOBJPROPS7.CMID
WHERE CMOBJECTS.CLASSID IN (10, 37)
ORDER BY CMOBJECTS.PCMID;
を...と、そのXMLから、あなたは、多くの場合、基礎となるSQLを与えるsqltext
要素を見つけることができます。しかし、既存のクエリが使用されている場合、そのデータがどこから来ているのかを知ることは困難です。
私は、クエリの定義を見つけるために、上記のSQLと同等のものをたいと思います。これまでのところ、そのようなコラムは見つかりませんでした。
それに失敗すると、UIを通してこの定義を見つける方法はありますか?私はQuery Studioの下を見て、クエリの列に関するいくつかの情報を提供するクエリのlineage
が見つかりましたが、データのソースを明確にしません。
NB:クエリでは、私は、このようなクエリメーカーから下のスクリーンショットでR5BZDDAN_GRAPH
としてそれらを参照しています:
...ような方法でのCognosレポートで言及されるだろう以下のように:
<query name="Q_DEMO">
<source>
<model/>
</source>
<selection autoSummary="false">
<dataItem aggregate="none" name="REG_REG" rollupAggregate="none">
<expression>[AdvRepData].[Q_R5BZDDAN_GRAPH].[REG_REG]</expression>
</dataItem>
<dataItem aggregate="none" name="REG_ORG" rollupAggregate="none">
<expression>[AdvRepData].[Q_R5BZDDAN_GRAPH].[REG_ORG]</expression>
</dataItem>
<!-- ... -->
UPDATE
他人の利益のためは、ここでは上記のコードの修正版は、レポートdefinitonsを引き戻すためです:
;with recurse
as (
select Objects.CMID Id, ObjectClasses.Name Class, ObjectNames.NAME Name
, cast('CognosObjects' as nvarchar(max)) ObjectPath
from CMOBJECTS Objects
inner join CMOBJNAMES ObjectNames
on ObjectNames.CMID = Objects.CMID
and ObjectNames.IsDefault = 1 --only get 1 result per object (could filter on language=English (LocaleId=24/select LocaleId from CMLOCALES where Locale = 'en'))
inner join CMCLASSES ObjectClasses on ObjectClasses.CLASSID = Objects.CLASSID
where Objects.PCMID = objects.CMID --cleaner than selecting on root since not language sensitive
--where ObjectClasses.NAME = 'root'
union all
select Objects.CMID Id, ObjectClasses.Name Class, ObjectNames.NAME Name
, r.ObjectPath + '\' + ObjectNames.NAME ObjectPath --I use a backslash rather than forward slash as using this to build a windows path
from recurse r
inner join CMOBJECTS Objects
on objects.PCMID = r.Id
and Objects.PCMID != objects.CMID --prevent ouroboros
inner join CMOBJNAMES ObjectNames
on ObjectNames.CMID = Objects.CMID
and ObjectNames.IsDefault = 1 --only get 1 result per object (could filter on language=English (LocaleId=24/select LocaleId from CMLOCALES where Locale = 'en'))
inner join CMCLASSES ObjectClasses
on ObjectClasses.CLASSID = Objects.CLASSID
)
select *
from recurse
where Class in ('report','query')
order by ObjectPath
によって変更されるかもしれないことに注意してください平均。 「クエリ定義」と「既存のクエリ」は、正確にはどういう意味ですか?レポート内のクエリショートカット、レポート内のSQLソースを意味しますか?レポートの中にあれば、それはXMLにあります。問題は、パッケージ内のクエリーサブジェクトからレポートを作成するときです。パッケージに対してレポート定義を使用して評価する必要があり、どこにも格納されていません。 –
ありがとう@NickMcDermaid。私は今質問を明確にするためのスクリーンショットを追加しました。私はに精通しており、SQL文をレポートに直接埋め込むのに使用されています。この場合、私はあらかじめ定義されたクエリを理解することを望んでいます。あなたが「質問科目」と呼んでいると思います。確かにCognosの用語で詳しくは分かりませんが。再度、感謝します。 –
JohnLBevan