QlikSense

QlikSenseのロードスクリプトでテーブルの行列を入れ変える方法(crosstable)

Crosstable
記事内に商品プロモーションを含む場合があります

既存のテーブルで「何でこんなレイアウトなんだろう?扱いにくい・・・」と思うことがありませんか?

今回はロード時にそんな扱いにくいテーブルの行と列を入れ替えて集計しやすい形に整形するためにcrosstableプレフィックスを使用します。

※プレフィックス=接頭辞

扱いにくいテーブルとは?

例えば、以下のテーブルはある商品の売り上げ額が月名のフィールドに格納されています。

フィールド名 値サンプル
商品コード A00001
売上年度 2019
4月売上 1,000,000
5月売上 1,200,000
6月売上 1,300,000
7月売上 1,000,000
8月売上 1,500,000
9月売上 1,600,000
10月売上 1,200,000
11月売上 1,000,000
12月売上 2,000,000
1月売上 1,800,000
2月売上 1,000,000
3月売上 1,000,000

この状況で2019年度の売上額を計算しようとすると、すべてのフィールドを合算しなければなりません。

(例)4月売上+5月売上+6月売上+7月売上+8月売上+9月売上+10月売上+11月売上+12月売上+1月売上+2月売上+3月売上

この場合は以下のようなレイアウトになっている方が集計しやすいですね。

フィールド名 値サンプル
商品コード A00001
売上年度 2019
売上月度 4
売上額 1,000,000

このような形であれば、Sum(売上)で合計売上金額を集計することができます。

という訳でCrosstableプレフィックスを使って、ロードする際に扱いにくいテーブルを扱いやすいテーブルに整形する方法をご紹介します。

ロードスクリプトサンプル

Crosstable (売上月度, 売上額, 2)
LOAD 
	商品コード,
    売上年度,
    "4月売上" AS 4,
    "5月売上" AS 5,
    "6月売上" AS 6,
    "7月売上" AS 7,
    "8月売上" AS 8,
    "9月売上" AS 9,
    "10月売上" AS 10,
    "11月売上" AS 11,
    "12月売上" AS 12,
    "1月売上" AS 1,
    "2月売上" AS 2,
    "3月売上" AS 3;
SQL SELECT 
	商品コード,
    売上年度,
    "4月売上",
    "5月売上",
    "6月売上",
    "7月売上",
    "8月売上",
    "9月売上",
    "10月売上",
    "11月売上",
    "12月売上",
    "1月売上",
    "2月売上",
    "3月売上"
FROM 売上テーブル;

Crosstable接頭辞を使って、「〇月売上」という項目を「〇(月)」という列名、「売上金額」という値に分割して取得するというものです。

先のサンプルに置き換えると、【4月売上】という項目を売上月度=4, 売上金額=1,000,000に分割して取得します。

ロードスクリプト解説

Crosstableプレフィックスは以下のように指定します。

Crosstableの指定方法

Crosstable(生成する列名, 値,  行見出しの項目数)

ポイントは【行見出しの項目数】です。

サンプルでは商品コードと売上年度の2項目はそのまま項目名として取得したいので「項目数=2」となります。

もし、商品コードだけが必要な場合は「1」です。

行見出しの項目数を指定しなかった場合のデフォルトは「1」なので、何も指定しなければ商品コード・売上月度・売上金額の3項目が取得できるということです。

結構使える方法なのでご活用ください。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。