Cognos レポートでデータアイテムを連結(Concatinate)してフィルターすると遅い
概要
ディスってるようなタイトルになってしまいましたが、こういうレポートを作っている場合は、こういう対応をして下さい、という前向きな情報連携です。
データアイテム連結とは、例えばこんなレポートです。
Cognosサンプルの「製品ライン名称」と「製品ラインコード」を、連結して表示しています。
このレポートで詳細フィルターを置き、連結された「製品ライン名称_コード」に対してフィルターしています。
その場合、以下のようなクエリーが発行されますが、このクエリーがデータベース上でとっても遅いです。
フィルター、つまりwhere句で、データアイテム連結した結果にパラメーターの値で絞り込んでいるところが遅いポイントです。
SELECT
"Product"."製品ライン" || '_' || "Product"."製品ライン_コード" AS "製品ライン名称_コード",
SUM("SLS_SALES_FACT"."QUANTITY") AS "数量"
FROM
(
SELECT
"SLS_PRODUCT_DIM"."PRODUCT_LINE_CODE" AS "製品ライン_コード",
"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_JA" AS "製品ライン",
"SLS_PRODUCT_DIM"."PRODUCT_KEY" AS "製品キー"
FROM
"GOSALESDW"."SLS_PRODUCT_BRAND_LOOKUP" "SLS_PRODUCT_BRAND_LOOKUP"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_DIM" "SLS_PRODUCT_DIM"
ON "SLS_PRODUCT_BRAND_LOOKUP"."PRODUCT_BRAND_CODE" = "SLS_PRODUCT_DIM"."PRODUCT_BRAND_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_COLOR_LOOKUP" "SLS_PRODUCT_COLOR_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_COLOR_CODE" = "SLS_PRODUCT_COLOR_LOOKUP"."PRODUCT_COLOR_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_LINE_LOOKUP" "SLS_PRODUCT_LINE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_LINE_CODE" = "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_CODE"
INNER JOIN
(
SELECT
"SLS_PRODUCT_LOOKUP"."PRODUCT_NUMBER" AS "PRODUCT_NUMBER"
FROM
"GOSALESDW"."SLS_PRODUCT_LOOKUP" "SLS_PRODUCT_LOOKUP"
WHERE
"SLS_PRODUCT_LOOKUP"."PRODUCT_LANGUAGE" = 'JA'
) "SLS_PRODUCT_LOOKUP0"
ON "SLS_PRODUCT_DIM"."PRODUCT_NUMBER" = "SLS_PRODUCT_LOOKUP0"."PRODUCT_NUMBER"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_SIZE_LOOKUP" "SLS_PRODUCT_SIZE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_SIZE_CODE" = "SLS_PRODUCT_SIZE_LOOKUP"."PRODUCT_SIZE_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_TYPE_LOOKUP" "SLS_PRODUCT_TYPE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_TYPE_CODE" = "SLS_PRODUCT_TYPE_LOOKUP"."PRODUCT_TYPE_CODE"
) "Product"
INNER JOIN "GOSALESDW"."SLS_SALES_FACT" "SLS_SALES_FACT"
ON "Product"."製品キー" = "SLS_SALES_FACT"."PRODUCT_KEY"
WHERE
"Product"."製品ライン" || '_' || "Product"."製品ライン_コード" IN (
:pPLC: )
GROUP BY
"Product"."製品ライン" || '_' || "Product"."製品ライン_コード" FOR FETCH ONLY
改善レポート
この改善策ですが、ユーザーはあくまで「製品ライン名称コード」でレポートを見たいので、
プロンプトページを作成し、値のプロンプトで、値の表示には「製品ライン名称コード」を置き、使用する値に「製品ラインコード」を指定します。
リストのクエリーのフィルターは、「製品ラインコード」に対してかけています。
レポートを実行すると、表示されるプロンプトは連結アイテムの表示で、ユーザーが求めているものです。
しかしながらクエリーは、where句が「製品ラインコード」をパラメーターで絞り込んでいるだけなので、これは高速にデータベースが結果を返してきます。
というチューニング例があるという事を頭の片隅で覚えて置いて頂き、データアイテム連結する時にパフォーマンスがよろしくない場合は、ちょっと思い出して頂けると幸いです。
SELECT
"Product"."製品ライン" || '_' || "Product"."製品ライン_コード" AS "製品ライン名称_コード",
SUM("SLS_SALES_FACT"."QUANTITY") AS "数量"
FROM
(
SELECT
"SLS_PRODUCT_DIM"."PRODUCT_LINE_CODE" AS "製品ライン_コード",
"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_JA" AS "製品ライン",
"SLS_PRODUCT_DIM"."PRODUCT_KEY" AS "製品キー"
FROM
"GOSALESDW"."SLS_PRODUCT_BRAND_LOOKUP" "SLS_PRODUCT_BRAND_LOOKUP"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_DIM" "SLS_PRODUCT_DIM"
ON "SLS_PRODUCT_BRAND_LOOKUP"."PRODUCT_BRAND_CODE" = "SLS_PRODUCT_DIM"."PRODUCT_BRAND_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_COLOR_LOOKUP" "SLS_PRODUCT_COLOR_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_COLOR_CODE" = "SLS_PRODUCT_COLOR_LOOKUP"."PRODUCT_COLOR_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_LINE_LOOKUP" "SLS_PRODUCT_LINE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_LINE_CODE" = "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_CODE"
INNER JOIN
(
SELECT
"SLS_PRODUCT_LOOKUP"."PRODUCT_NUMBER" AS "PRODUCT_NUMBER"
FROM
"GOSALESDW"."SLS_PRODUCT_LOOKUP" "SLS_PRODUCT_LOOKUP"
WHERE
"SLS_PRODUCT_LOOKUP"."PRODUCT_LANGUAGE" = 'JA'
) "SLS_PRODUCT_LOOKUP0"
ON "SLS_PRODUCT_DIM"."PRODUCT_NUMBER" = "SLS_PRODUCT_LOOKUP0"."PRODUCT_NUMBER"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_SIZE_LOOKUP" "SLS_PRODUCT_SIZE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_SIZE_CODE" = "SLS_PRODUCT_SIZE_LOOKUP"."PRODUCT_SIZE_CODE"
INNER JOIN "GOSALESDW"."SLS_PRODUCT_TYPE_LOOKUP" "SLS_PRODUCT_TYPE_LOOKUP"
ON "SLS_PRODUCT_DIM"."PRODUCT_TYPE_CODE" = "SLS_PRODUCT_TYPE_LOOKUP"."PRODUCT_TYPE_CODE"
) "Product"
INNER JOIN "GOSALESDW"."SLS_SALES_FACT" "SLS_SALES_FACT"
ON "Product"."製品キー" = "SLS_SALES_FACT"."PRODUCT_KEY"
WHERE
"Product"."製品ライン_コード" IN (
:pPC: )
GROUP BY
"Product"."製品ライン" || '_' || "Product"."製品ライン_コード" FOR FETCH ONLY
Author And Source
この問題について(Cognos レポートでデータアイテムを連結(Concatinate)してフィルターすると遅い), 我々は、より多くの情報をここで見つけました https://qiita.com/shinyama/items/1863b81e3d269c820281著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .