1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

クロス集計のファクトの両端に文字列を付加する【Cognos Analytics】

Last updated at Posted at 2023-06-26

概要

クロス集計やリストの数値に、例えば()をつけたいときがあります。例としては、総人数のうち女性の人数を()内に記載することや、消費税表示をする場合などで見られます。
本記事では、()で囲みたい数値データを持つクエリーを定義し、そのクエリーからの値を参照する場合に()を付加する手順をご紹介します。
完成イメージはこちら↓
image.png

各年での製品毎の収益を出力するレポートで、総収益のうちプロモーションによって売れた金額を()内に表記するようにします。
作成するクロス集計表の構造としては以下です。

集計年
製品名 総収益
"(キャンペーン実績)" ([キャンペーンでの収益金額])

手順

1つ目の作例と同一のデータソース「GOデータウェアハウス(クエリー)」を選択。
クエリーを新規作成します。
image.png
クエリー名「全体販売実績」として、下記データアイテムをデータソースよりドラッグアンドドロップ

[販売 (クエリー)].[時間].[年]
  • 基本製品キー
[販売 (クエリー)].[製品].[基本製品キー]
  • 製品
[販売 (クエリー)].[製品].[製品]
  • キャンペーンコード
[販売 (クエリー)].[プロモーション].[キャンペーン コード]
  • 収益
[販売 (クエリー)].[販売の実状].[収益]

これで、プロモーションの有無に依らず年別の製品毎の収益を出力するクエリーが作成できました。
出来上がりイメージのインデックス列では、単に「製品名」だけでなく、製品名の行の下に「(キャンペーン実績)」が出力されます。このためインデックス列用のデータアイテムを用意します。
この行では製品での総収益を出力するため、インデックス列には製品名そのままで定義します。
image.png

また、後にキャンペーン有りのクエリーとユニオンするため、製品順に行を並べるため、ソートキーを定義します。
lpad関数は基本製品キーを3桁の文字列にし、基本製品キーが例えば1であれば001と変換するために使用しています。
キャンペーンに依らずすべての収益を出力する行であるため、末尾をAとしました。
image.png

続いて、キャンペーンがあった場合での製品別収益を持つクエリーを作成します。
先程作成した「全体販売実績」クエリーをコピーしクエリー画面に貼り付け。
詳細フィルターにて下記を追加。

[販売 (クエリー)].[プロモーション].[キャンペーン コード] <> 50

ソートキーの式の定義を下記で上書き

lpad([販売 (クエリー)].[製品].[基本製品キー],3,'0') || 'P'

インデックス列の式の定義を下記で上書き

'(キャンペーン実績)'

image.png

ここまでで、全体の販売実績をもつクエリーと、キャンペーンでの収益に絞られたクエリーの2つが完成しました。これらをユニオンして別の行として出力する準備をします。
image.png

挿入できるオブジェクトから「結合 (Union)」をドラッグアンドドロップ
image.png

これまで作成した2つのクエリーを結合対象とし、新規にできるクエリーの名前をResultと設定
挿入できるオブジェクトのソースタブから全データアイテムをドラッグアンドドロップ
image.png

この時点でクエリーを実行し、ソートキーを昇順とすると↓
製品名、製品のキャンペーン実績の順に並べられているが確認できました。
image.png

ここまででクエリーの編集作業は完了です。レポート画面を編集していきます。
ページ1にクロス集計を配置し、クエリーはResultを指定
image.png

まず、後続の作業のため、プロパティー左横の三点リーダー「...」からビジュアルエイド>視覚補助の有効化を選択してすべての視覚補助を有効化してください。これは、後にボックスのタイプをなしとしても表示を維持するためです。
image.png

クロス集計の行にインデックス列、列に年、クロス集計の交点には収益を、Resultクエリーからドラッグアンドドロップ
image.png

列のソートには「年」を昇順に指定
image.png

行のソートには「ソートキー」を昇順に指定
image.png

この時点でレポートを実行すると↓
image.png
(キャンペーン実績)が1行にのみ出力され、収益の金額が他より大きいことがわかります。これは、複数レコードであっても軸の内容が同一である場合にCognosが自動で集計をするためです。

これを回避するため、粒度の異なる軸を配置します。

基本製品キーをインデックス列の左に挿入、ボックスのタイプを「なし」に指定
image.png

本記事の主目的である「ある区分に当てはまるとき数値を文字列で囲む」処理をします。
クロス集計の交点のロックを解除した状態で、テーブルをドラッグアンドドロップ。テーブルは3列1行と設定
image.png

収益データアイテムを3列の中心に配置。表のセルの水平配置を「中央」にセット
image.png

テキスト・アイテムをテーブルの左セルにドロップ。今回はキャンペーン実績額を()で囲むため、"("でOK。テーブルの右セルも同様にして")"とします
image.png

ファクトの軸の区分により括弧書きを付加するため、"()"のテキスト・アイテムを選択し、条件付きスタイル>詳細な条件付きスタイルを作成
image.png

「通常販売」として条件付きスタイルを作成、「+」を選択して下記内容の式の定義を入力。

[Result].[キャンペーン コード] = 50

image.png

「スタイルを編集」から、詳細設定タブの表示を「いいえ」に
image.png

また、Cognosのレポート実行時に、ページ内レイアウトに無いプロパティー(ここでは「キャンペーンコード」)を条件付きスタイルなどの式の定義にしようするとエラーとなります。そのため、クロス集計の行を選択し、プロパティーにて「「キャンペーンコード」を選択します。
image.png

これによって、キャンペーンありの場合に収益を括弧で囲み出力することができました。
image.png

なお、このレポート出力には「ボックスのタイプ」を「なし」にしたことによりレイアウト上の問題があります。
2010年~2013年のクロス集計のヘッダ部分が右にずれてしまっていますね。この問題の解決方法を、「クロス集計スペーサー」によって解決することができます。
別の記事にて、この手順を解説しています。
https://qiita.com/i_toma/items/35bc7a8279afc70dbe8a

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?