縦展開
横に並んだ列を、label(元の列名)と value(その中身)の 2 列に畳んで縦に積みます。月ごとに列が分かれている表を、1 行 1 件の形に直すときに使います。
分析プロジェクトとの違い
| 見るところ | SQLビルダー | 分析プロジェクト |
|---|---|---|
| 新しい列の名前 | label と value で固定 | 自分で決められる |
| 畳んだ値の型 | すべて文字列になる | 元の型が残る |
| 基準の列以外 | 落ちる | 落ちる |
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
設定項目
- 基準の列
- 縦に残す列。畳まれずにそのまま残り、行のぶんだけ繰り返されます。複数選べます。
- 縦展開する列
- 畳む列。複数選べます。ここで選んだ列の数だけ行が増えます。
- 列選択オプション
- 基準の列・縦展開する列のそれぞれに付いています。特定の文字列から始まる列・で終わる列・を含む列を一括で選べ、選択した列を除外するで裏返せます。
出力される列
| 列 | 中身 |
|---|---|
| 基準の列 | そのまま |
label | 畳んだ列の名前(文字列) |
value | その列に入っていた値。文字列に変換されます |
基準の列にも縦展開する列にも選ばなかった列は落ちます。
行数は「元の行数 × 縦展開する列の数」になります。売上_4月 〜 売上_6月 の 3 列を畳むと 3 倍です。
生成される SQL
PostgreSQL につないで、商品 を基準に 売上_4月 と 売上_5月 を畳んだ場合です。
SELECT "商品", CASE seq.num WHEN 0 THEN '売上_4月' WHEN 1 THEN '売上_5月' ELSE null END AS "label", CASE seq.num WHEN 0 THEN CAST("売上_4月" AS varchar) WHEN 1 THEN CAST("売上_5月" AS varchar) ELSE null END AS "value"FROM "sales"CROSS JOIN (SELECT 0 as num UNION ALL SELECT 1 as num) AS seq行を増やしているのは CROSS JOIN の方です。 畳む列の数だけ番号 (num) を並べた仮の表を作り、元の表のすべての行に掛け合わせています。CASE は、その番号に応じてどの列を見るかを切り替えています。
エラーと対処
どのエラーも、設定を直してノードを実行し直せば消えます。
上流にない列が選ばれている
前のノードで列が消えたあとに実行すると出ます。
存在しない列が選択されています
直し方 — 基準の列と縦展開する列を選び直してください。
入力がつながっていない
前のノードがつながっていないと出ます。
カラムが選択されていません。条件を確認してください
直し方 — 入力にノードをつないでください。
基準の列を 1 つも選んでいない
「基準の列」を空のまま実行すると出ます。翻訳された文言はなく、英語のまま出ます。
key columns is empty
直し方 — 縦に残す列を 1 つ以上選んでください。
縦展開する列を 1 つも選んでいない
「縦展開する列」を空のまま実行すると出ます。翻訳された文言はなく、英語のまま出ます。
gather columns is empty
直し方 — 畳む列を 1 つ以上選んでください。
よく使う例
1. 月別の列を縦に直す
お題 — 売上_4月 〜 売上_6月 が横に並んでいて、月ごとに集計できない
入力 — 商品 売上_4月 売上_5月 売上_6月
設定 — 基準の列 商品、縦展開する列に 3 列
出力 — 商品 label(売上_4月 など)value。行数は 3 倍
2. 一括選択で畳む列を指定する
お題 — 月の列が 12 本あって選ぶのが面倒
入力 — 商品 売上_1月 〜 売上_12月
設定 — 縦展開する列の列選択オプションで「特定の文字列から始まる列を一括選択」に 売上_ を入れる
出力 — 12 本が畳まれます
3. 基準の列以外を全部畳む
お題 — キー以外はすべて縦にしたい
入力 — 商品 と、月別の売上の列
設定 — 縦展開する列の列選択オプションでキー列を選び、「選択した列を除外する」を on にする
出力 — キー以外が畳まれます
4. 畳んでから数値に戻して集計する
お題 — 縦にしたあとで月ごとの合計を出したい
入力 — 商品 売上_4月 売上_5月 売上_6月(例 1 と同じ)
設定 — 縦展開 → 列の型変更で value を数値に → データ集計で label ごとに合計
出力 — label sum_value
5. 横に戻す
お題 — 畳んだものをもう一度横に並べたい
入力 — 商品 label value(例 1 の出力)
設定 — 横展開をつなぎ、横展開する列に label、値の列に value を指定する
出力 — label の値ごとの列に戻ります