既存のテーブルで「何でこんなレイアウトなんだろう?扱いにくい・・・」と思うことがありませんか?
今回はロード時にそんな扱いにくいテーブルの行と列を入れ替えて集計しやすい形に整形するために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(生成する列名, 値, 行見出しの項目数)
ポイントは【行見出しの項目数】です。
サンプルでは商品コードと売上年度の2項目はそのまま項目名として取得したいので「項目数=2」となります。
もし、商品コードだけが必要な場合は「1」です。
行見出しの項目数を指定しなかった場合のデフォルトは「1」なので、何も指定しなければ商品コード・売上月度・売上金額の3項目が取得できるということです。
結構使える方法なのでご活用ください。