2016-12-10 7 views
0

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 Queries

...ような方法での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 
+0

によって変更されるかもしれないことに注意してください平均。 「クエリ定義」と「既存のクエリ」は、正確にはどういう意味ですか?レポート内のクエリショートカット、レポート内のSQLソースを意味しますか?レポートの中にあれば、それはXMLにあります。問題は、パッケージ内のクエリーサブジェクトからレポートを作成するときです。パッケージに対してレポート定義を使用して評価する必要があり、どこにも格納されていません。 –

+0

ありがとう@NickMcDermaid。私は今質問を明確にするためのスクリーンショットを追加しました。私はに精通しており、SQL文をレポートに直接埋め込むのに使用されています。この場合、私はあらかじめ定義されたクエリを理解することを望んでいます。あなたが「質問科目」と呼んでいると思います。確かにCognosの用語で詳しくは分かりませんが。再度、感謝します。 – JohnLBevan

答えて

1

用語:

  • クエリーサブジェクトは、テーブル
  • クエリ項目とみなすことができます列と見なすことができます

たとえば、SQL は、R5BZDDAN_GRAPHクエリーサブジェクトで定義され、Framework Managerモデルで定義されます。フレームワークマネージャモデルは、コンテンツストア内に全く存在しない.cpfファイルで定義されています。 (これはXMLファイルですが)。このファイルは、パッケージを作成するためにCognosに「公開」されています。

一般的に、この

に依存することは推奨されていないが、実際のCognosサーバー(.cqeファイル)のフレームワークマネージャファイルのキャッシュされたバージョンもあり、私はあなたのSQL 定義されるかもしれないと言います。クエリーサブジェクトがSQLクエリーサブジェクトの場合は、それが定義されています。クエリーサブジェクトがモデルクエリーサブジェクトである場合ならば、それはクエリーアイテム、他のクエリーサブジェクトからのリストだけです。これらは、Framework Managerで定義された結合を持つ他の多くのクエリーサブジェクトからのものです。だから、そこに定義された実際のSQLはありません - それは

は、私はあなたの最後の要件のかわからないが、SQLを取得するには、3つの他の方法があり、実行時に生成されます:あなたができるReport Authoringで

  • は "ショーのフレームワークマネージャでは、1つまたは複数のクエリーサブジェクトを選択することができますし、SQLを生成し表示し
  • 各クエリに「SQLを生成
  • あなたは、SQLが提出されているかを見るために、データベース上の監視ツールを使用することができます

レポートで数値がどのように生成されるかを知りたい場合は、最も直接的なソリューションはデータベースを監視することです。

最後に、いくつかのまれなケースでは、フレームワークマネージャで定義されたSQLは、それが何だ場合は、レポートのクエリ定義のすべては、レポートのXMLであるレポートが書かれている方法

+0

ありがとうニック;素晴らしい答え。参考資料:私の要件に関しては、主にCognosでどのように機能するかを理解することだけでした。これは私の以前のレポートでは、レポートの 'sqltext'定義に不十分なSQLを見つけ出し、同じように見えるだけのコミュニティメンバーのレポートを最適化するのを手伝ってくれた私はSQLを見つけることができなかったクエリの使用を見て。 – JohnLBevan

+0

ps。上記のコミュニティは安全なフォーラムです。誰かがアクセスして興味がある場合、そのスレッドはここにあります:https://community.inforxtreme.com/infor-eam-7i-ee-be-product-group/f/infor-eam-7i-ee-be-product -group --- discussion/8187/work-order-print-performance – JohnLBevan

+1

ご清聴ありがとうございます。あなたの努力に幸運 –

関連する問題