コンテンツにスキップ

縦展開

横に並んだ列を、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 の値ごとの列に戻ります

関連