Cognos 보고서에서 SQL을 직접 작성할 때 where 절에 프롬프트를 표시하는 예
7660 단어 SQLpromptmanyCognospromptwhere 절
개요
Cognos BI & Analytics에서 보고서 실행시 Cognos가 생각하는 SQL을 발행하지 않고 스스로 SQL을 직접 쓰고 파포츄하는 일이 있습니다만, where구에 프롬프트를 넣는 쓰는 방법의 예입니다.
내용
원래 이런 리포트가 있었다고 합니다.
간단한 리스트에 2개 아이템을 두고 있는 리포트입니다.
쿼리에는 pPL이라는 매개 변수 이름으로 필터가 있습니다.
이 필터의 동작을 SQL 직접 쓰면 어떤 식으로 쓸까 하는 이야기입니다.
우선 이 보고서의 SQL을 추출해 보겠습니다.
이런 식으로 SQL이 표시됩니다.
다음의 SQL이 발행되고 있으므로, 이것을 바탕으로 생각해 보겠습니다.
"coguda01"."PRODUCT_LINE_EN"= ?의 곳을, 어떻게 재기록하는가가 포인트입니다.
select "coguda01"."PRODUCT_LINE_EN" "Product_line" , sum("SLS_SALES_FACT"."QUANTITY") "Quantity"
from "GOSALESDW"."SLS_PRODUCT_DIM" "coguda00", "GOSALESDW"."SLS_PRODUCT_LINE_LOOKUP" "coguda01", "GOSALESDW"."SLS_PRODUCT_TYPE_LOOKUP" "coguda02", "GOSALESDW"."SLS_PRODUCT_LOOKUP" "coguda03", "GOSALESDW"."SLS_PRODUCT_COLOR_LOOKUP" "coguda04", "GOSALESDW"."SLS_PRODUCT_SIZE_LOOKUP" "coguda05", "GOSALESDW"."SLS_PRODUCT_BRAND_LOOKUP" "coguda06", "GOSALESDW"."SLS_SALES_FACT" "SLS_SALES_FACT"
where "coguda03"."PRODUCT_LANGUAGE" = 'EN' and "coguda00"."PRODUCT_LINE_CODE" = "coguda01"."PRODUCT_LINE_CODE" and "coguda00"."PRODUCT_NUMBER" = "coguda03"."PRODUCT_NUMBER" and "coguda00"."PRODUCT_SIZE_CODE" = "coguda05"."PRODUCT_SIZE_CODE" and "coguda00"."PRODUCT_TYPE_CODE" = "coguda02"."PRODUCT_TYPE_CODE" and "coguda00"."PRODUCT_COLOR_CODE" = "coguda04"."PRODUCT_COLOR_CODE" and "coguda06"."PRODUCT_BRAND_CODE" = "coguda00"."PRODUCT_BRAND_CODE" and "coguda01"."PRODUCT_LINE_EN" = ? and "coguda00"."PRODUCT_KEY" = "SLS_SALES_FACT"."PRODUCT_KEY"
group by "coguda01"."PRODUCT_LINE_EN" FOR FETCH ONLY
우선은 단일 선택으로 하고 싶은 경우. prompt 매크로를 사용합니다.
쿼리 탐색기에서 SQL을 원래 쿼리로 리디렉션하여 SQL을 직접 씁니다.
방금 추출한 SQL에서 "(더블 코테이션)을 모두 삭제하고 SQL의 마지막 FOR FETCH ONLY도 삭제하고 있습니다.
방금전의 ? 는 coguda01.PRODUCT_LINE_EN = #prompt('pPL','string','''Golf Equipment''')# 로 하고 있습니다.
SQL 속성에서 "Data Source"를 지정합니다.
실제 SQL은 여기입니다.
select coguda01.PRODUCT_LINE_EN Product_line , sum(SLS_SALES_FACT.QUANTITY) Quantity
from GOSALESDW.SLS_PRODUCT_DIM coguda00, GOSALESDW.SLS_PRODUCT_LINE_LOOKUP coguda01, GOSALESDW.SLS_PRODUCT_TYPE_LOOKUP coguda02, GOSALESDW.SLS_PRODUCT_LOOKUP coguda03, GOSALESDW.SLS_PRODUCT_COLOR_LOOKUP coguda04, GOSALESDW.SLS_PRODUCT_SIZE_LOOKUP coguda05, GOSALESDW.SLS_PRODUCT_BRAND_LOOKUP coguda06, GOSALESDW.SLS_SALES_FACT SLS_SALES_FACT
where coguda03.PRODUCT_LANGUAGE = 'EN' and coguda00.PRODUCT_LINE_CODE = coguda01.PRODUCT_LINE_CODE and coguda00.PRODUCT_NUMBER = coguda03.PRODUCT_NUMBER and coguda00.PRODUCT_SIZE_CODE = coguda05.PRODUCT_SIZE_CODE and coguda00.PRODUCT_TYPE_CODE = coguda02.PRODUCT_TYPE_CODE and coguda00.PRODUCT_COLOR_CODE = coguda04.PRODUCT_COLOR_CODE and coguda06.PRODUCT_BRAND_CODE = coguda00.PRODUCT_BRAND_CODE and coguda01.PRODUCT_LINE_EN = #prompt('pPL','string','''Golf Equipment''')# and coguda00.PRODUCT_KEY = SLS_SALES_FACT.PRODUCT_KEY
group by coguda01.PRODUCT_LINE_EN
각각의 데이터 아이템의 취득원을, 「SQL1」로 변경하는 일도 잊지 마세요.
또한 고급 필터도 삭제하고 있습니다.
보고서를 실행하면 프롬프트 화면이 호출되므로 적절한 값을 입력하여 실행합니다.
제대로 좁혀졌습니다.
다음은 다중 선택의 경우 SQL입니다. promptmany 매크로를 사용합니다.
예의 개소는, 이하의 기재로 하고 있습니다.
= 대신 in으로 설정되어 있으므로주의하시기 바랍니다.
coguda01.PRODUCT_LINE_EN in (#promptmany('pPL','string',sq('NoSelect'))#)
실제 SQL은 여기입니다.
select coguda01.PRODUCT_LINE_EN Product_line , sum(SLS_SALES_FACT.QUANTITY) Quantity
from GOSALESDW.SLS_PRODUCT_DIM coguda00, GOSALESDW.SLS_PRODUCT_LINE_LOOKUP coguda01, GOSALESDW.SLS_PRODUCT_TYPE_LOOKUP coguda02, GOSALESDW.SLS_PRODUCT_LOOKUP coguda03, GOSALESDW.SLS_PRODUCT_COLOR_LOOKUP coguda04, GOSALESDW.SLS_PRODUCT_SIZE_LOOKUP coguda05, GOSALESDW.SLS_PRODUCT_BRAND_LOOKUP coguda06, GOSALESDW.SLS_SALES_FACT SLS_SALES_FACT
where coguda03.PRODUCT_LANGUAGE = 'EN' and coguda00.PRODUCT_LINE_CODE = coguda01.PRODUCT_LINE_CODE and coguda00.PRODUCT_NUMBER = coguda03.PRODUCT_NUMBER and coguda00.PRODUCT_SIZE_CODE = coguda05.PRODUCT_SIZE_CODE and coguda00.PRODUCT_TYPE_CODE = coguda02.PRODUCT_TYPE_CODE and coguda00.PRODUCT_COLOR_CODE = coguda04.PRODUCT_COLOR_CODE and coguda06.PRODUCT_BRAND_CODE = coguda00.PRODUCT_BRAND_CODE and coguda01.PRODUCT_LINE_EN in (#promptmany('pPL','string',sq('NoSelect'))#) and coguda00.PRODUCT_KEY = SLS_SALES_FACT.PRODUCT_KEY
group by coguda01.PRODUCT_LINE_EN
보고서 실행시 프롬프트 화면입니다.
여러 선택으로 좁혀졌습니다.
또, 이 프롬프트는 「필수」가 되므로, 「옵션」으로 하고 싶은 경우는, 이쪽의 기사를 참조해 주세요.
Cognos 보고서에서 SQL을 직접 작성할 때 사용할 프롬프트 관리자를 선택하는 방법
htps : // 이 m / Shinyama / ms / 8f1 0877033cdb44396
날짜 프롬프트의 예도 둡니다.
= cast(#sq(prompt('pDate','Date','4000-12-31'))# as date)
기간에 지정하고 싶은 경우의 예.
between cast(#sq(prompt('pDate','Date','4000-12-31'))# as date) and cast(#sq(prompt('pDate','Date','4000-12- 31'))# as date) + 1 month
Reference
이 문제에 관하여(Cognos 보고서에서 SQL을 직접 작성할 때 where 절에 프롬프트를 표시하는 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinyama/items/d097b21b2dd4037ed125
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
원래 이런 리포트가 있었다고 합니다.
간단한 리스트에 2개 아이템을 두고 있는 리포트입니다.
쿼리에는 pPL이라는 매개 변수 이름으로 필터가 있습니다.
이 필터의 동작을 SQL 직접 쓰면 어떤 식으로 쓸까 하는 이야기입니다.
우선 이 보고서의 SQL을 추출해 보겠습니다.
이런 식으로 SQL이 표시됩니다.
다음의 SQL이 발행되고 있으므로, 이것을 바탕으로 생각해 보겠습니다.
"coguda01"."PRODUCT_LINE_EN"= ?의 곳을, 어떻게 재기록하는가가 포인트입니다.
select "coguda01"."PRODUCT_LINE_EN" "Product_line" , sum("SLS_SALES_FACT"."QUANTITY") "Quantity"
from "GOSALESDW"."SLS_PRODUCT_DIM" "coguda00", "GOSALESDW"."SLS_PRODUCT_LINE_LOOKUP" "coguda01", "GOSALESDW"."SLS_PRODUCT_TYPE_LOOKUP" "coguda02", "GOSALESDW"."SLS_PRODUCT_LOOKUP" "coguda03", "GOSALESDW"."SLS_PRODUCT_COLOR_LOOKUP" "coguda04", "GOSALESDW"."SLS_PRODUCT_SIZE_LOOKUP" "coguda05", "GOSALESDW"."SLS_PRODUCT_BRAND_LOOKUP" "coguda06", "GOSALESDW"."SLS_SALES_FACT" "SLS_SALES_FACT"
where "coguda03"."PRODUCT_LANGUAGE" = 'EN' and "coguda00"."PRODUCT_LINE_CODE" = "coguda01"."PRODUCT_LINE_CODE" and "coguda00"."PRODUCT_NUMBER" = "coguda03"."PRODUCT_NUMBER" and "coguda00"."PRODUCT_SIZE_CODE" = "coguda05"."PRODUCT_SIZE_CODE" and "coguda00"."PRODUCT_TYPE_CODE" = "coguda02"."PRODUCT_TYPE_CODE" and "coguda00"."PRODUCT_COLOR_CODE" = "coguda04"."PRODUCT_COLOR_CODE" and "coguda06"."PRODUCT_BRAND_CODE" = "coguda00"."PRODUCT_BRAND_CODE" and "coguda01"."PRODUCT_LINE_EN" = ? and "coguda00"."PRODUCT_KEY" = "SLS_SALES_FACT"."PRODUCT_KEY"
group by "coguda01"."PRODUCT_LINE_EN" FOR FETCH ONLY
우선은 단일 선택으로 하고 싶은 경우. prompt 매크로를 사용합니다.
쿼리 탐색기에서 SQL을 원래 쿼리로 리디렉션하여 SQL을 직접 씁니다.
방금 추출한 SQL에서 "(더블 코테이션)을 모두 삭제하고 SQL의 마지막 FOR FETCH ONLY도 삭제하고 있습니다.
방금전의 ? 는 coguda01.PRODUCT_LINE_EN = #prompt('pPL','string','''Golf Equipment''')# 로 하고 있습니다.
SQL 속성에서 "Data Source"를 지정합니다.
실제 SQL은 여기입니다.
select coguda01.PRODUCT_LINE_EN Product_line , sum(SLS_SALES_FACT.QUANTITY) Quantity
from GOSALESDW.SLS_PRODUCT_DIM coguda00, GOSALESDW.SLS_PRODUCT_LINE_LOOKUP coguda01, GOSALESDW.SLS_PRODUCT_TYPE_LOOKUP coguda02, GOSALESDW.SLS_PRODUCT_LOOKUP coguda03, GOSALESDW.SLS_PRODUCT_COLOR_LOOKUP coguda04, GOSALESDW.SLS_PRODUCT_SIZE_LOOKUP coguda05, GOSALESDW.SLS_PRODUCT_BRAND_LOOKUP coguda06, GOSALESDW.SLS_SALES_FACT SLS_SALES_FACT
where coguda03.PRODUCT_LANGUAGE = 'EN' and coguda00.PRODUCT_LINE_CODE = coguda01.PRODUCT_LINE_CODE and coguda00.PRODUCT_NUMBER = coguda03.PRODUCT_NUMBER and coguda00.PRODUCT_SIZE_CODE = coguda05.PRODUCT_SIZE_CODE and coguda00.PRODUCT_TYPE_CODE = coguda02.PRODUCT_TYPE_CODE and coguda00.PRODUCT_COLOR_CODE = coguda04.PRODUCT_COLOR_CODE and coguda06.PRODUCT_BRAND_CODE = coguda00.PRODUCT_BRAND_CODE and coguda01.PRODUCT_LINE_EN = #prompt('pPL','string','''Golf Equipment''')# and coguda00.PRODUCT_KEY = SLS_SALES_FACT.PRODUCT_KEY
group by coguda01.PRODUCT_LINE_EN
각각의 데이터 아이템의 취득원을, 「SQL1」로 변경하는 일도 잊지 마세요.
또한 고급 필터도 삭제하고 있습니다.
보고서를 실행하면 프롬프트 화면이 호출되므로 적절한 값을 입력하여 실행합니다.
제대로 좁혀졌습니다.
다음은 다중 선택의 경우 SQL입니다. promptmany 매크로를 사용합니다.
예의 개소는, 이하의 기재로 하고 있습니다.
= 대신 in으로 설정되어 있으므로주의하시기 바랍니다.
coguda01.PRODUCT_LINE_EN in (#promptmany('pPL','string',sq('NoSelect'))#)
실제 SQL은 여기입니다.
select coguda01.PRODUCT_LINE_EN Product_line , sum(SLS_SALES_FACT.QUANTITY) Quantity
from GOSALESDW.SLS_PRODUCT_DIM coguda00, GOSALESDW.SLS_PRODUCT_LINE_LOOKUP coguda01, GOSALESDW.SLS_PRODUCT_TYPE_LOOKUP coguda02, GOSALESDW.SLS_PRODUCT_LOOKUP coguda03, GOSALESDW.SLS_PRODUCT_COLOR_LOOKUP coguda04, GOSALESDW.SLS_PRODUCT_SIZE_LOOKUP coguda05, GOSALESDW.SLS_PRODUCT_BRAND_LOOKUP coguda06, GOSALESDW.SLS_SALES_FACT SLS_SALES_FACT
where coguda03.PRODUCT_LANGUAGE = 'EN' and coguda00.PRODUCT_LINE_CODE = coguda01.PRODUCT_LINE_CODE and coguda00.PRODUCT_NUMBER = coguda03.PRODUCT_NUMBER and coguda00.PRODUCT_SIZE_CODE = coguda05.PRODUCT_SIZE_CODE and coguda00.PRODUCT_TYPE_CODE = coguda02.PRODUCT_TYPE_CODE and coguda00.PRODUCT_COLOR_CODE = coguda04.PRODUCT_COLOR_CODE and coguda06.PRODUCT_BRAND_CODE = coguda00.PRODUCT_BRAND_CODE and coguda01.PRODUCT_LINE_EN in (#promptmany('pPL','string',sq('NoSelect'))#) and coguda00.PRODUCT_KEY = SLS_SALES_FACT.PRODUCT_KEY
group by coguda01.PRODUCT_LINE_EN
보고서 실행시 프롬프트 화면입니다.
여러 선택으로 좁혀졌습니다.
또, 이 프롬프트는 「필수」가 되므로, 「옵션」으로 하고 싶은 경우는, 이쪽의 기사를 참조해 주세요.
Cognos 보고서에서 SQL을 직접 작성할 때 사용할 프롬프트 관리자를 선택하는 방법
htps : // 이 m / Shinyama / ms / 8f1 0877033cdb44396
날짜 프롬프트의 예도 둡니다.
= cast(#sq(prompt('pDate','Date','4000-12-31'))# as date)
기간에 지정하고 싶은 경우의 예.
between cast(#sq(prompt('pDate','Date','4000-12-31'))# as date) and cast(#sq(prompt('pDate','Date','4000-12- 31'))# as date) + 1 month
Reference
이 문제에 관하여(Cognos 보고서에서 SQL을 직접 작성할 때 where 절에 프롬프트를 표시하는 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shinyama/items/d097b21b2dd4037ed125텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)