Tableau Prep について改めてご紹介します(続き)
2ヶ月前に、Tableau Prepを改めてご紹介(2)の記事を書かせて頂きました。
ユニオンもよく使う機能ですので、ぜひ正しく扱えるようになりましょう。
今回は、ピボットについて紹介させて頂きます。
※Tableauのピボット自体がどのようなものかは、過去記事でも紹介しておりますので、気になる方は”Tableauでのピボット操作について”をご覧ください。
ピボットも、ETLツールとしてデータの前処理をする際必ず必要になる基本的な機能ですので、正しい使い方は理解した上で扱う必要あります。
Tableauのピボットの方法はいくつかありますが、主に以下のような形となります。
ピボットの種類(DesktopとPrep)
Tableau Desktop
- データ読込み画面(データソースのシート)で、ピボット処理したいフィールドを指定【列 ➡ 行】 ※行➡列の変換はありません。
(TableauServerなど一部のデータはピボット処理不可)
以下のように、1つの列にまとめたいフィールドを選択して、”ピボット”を実行すると、変換が可能です。
Tableau Prep
1) 列 ➡ 行 の変換
複数の列フィールドを、1つの列に集約し行レベルに変換することが可能です。
2) 行 ➡ 列 の変換
行フィールドを、複数の列に変換することが可能です。(特定のメジャーを列の値に割当てます。以下例は各地域の列に売上金額を表現)
Tableau Prepの特徴としては、以下の2点になります。
・列➡行、行➡列 どちらも可能。
・TableauPrepで接続できるデータであればいづれもピボット処理が可能。(Tableau Desktopでは、TableauServerのデータなど一部についてはピボット不可)
Tableau Prepでピボット処理してみよう
Tableau Prepの例を見ていきましょう。
1)列➡行の変換処理の例
今回のサンプルデータは、サンプルスーパーストアですが、オーダー日と、地域別に売上のフィールドがあるようなデータを想定します。
横持ちのデータは扱いにくいことが多く、縦持ちに変換して利用するケースとします。
ピボットを追加すると、初期値は”列から行” の変換となっています。
<設定の流れ>
- ピボット(列➡行)設定で、左側に表示されるフィールド一覧から、縦持ちに変換したい列フィールドを選択し、ピボット設定欄にドラッグ&ドロップします。
(例では、各地域の列を選択して、ドラッグ&ドロップしています)
※以下のように個別で指定もできますし、任意のワードでワイルドカード検索で該当するものを一括処理することも可能です。
<ピボット処理の結果>
各地域の列フィールドの売上金額が、地域列と売上金額のフィールドに集約されます。
2)行➡列の変換処理の例
次に、縦持ちのフィールドを、行➡列のピボットで横持ちに変換する例を見て行きましょう。
ピボットのアイコンを追加し、設定欄にて「行から列」に変更すると、アイコンが変化します。
<設定の流れ>
① ピボット(行➡列)設定で、左側に表示されるフィールド一覧から、横持ち(列カラム)に変換したい列フィールドを選択し、ピボット設定欄(上段)にドラッグ&ドロップします。
(例では、地域の列を選択して、ドラッグ&ドロップしています)
② 次に、列フィールドに地域を設定したとき紐づける値を集計フィールド欄(下段)にドラッグ&ドロップします。
(例では、売上の列を選択して、ドラッグ&ドロップしています)
※順番が決まっていまして、ピボット対象のフィールドを先にセットして、集計対象のフィールドをセットします。
これにより、地域列と売上列だったものが、各地域の売上という列が地域の分だけ生成されます。
<ピボット処理の結果>
ここで、ピボットを扱う際の注意事項を把握しておきましょう。
ピボット機能が働かないことが稀に発生
ピボットのアイコンを設置して、処理したいフィールドを選択してドラッグ&ドロップしたとき、稀に反応しないことがあります。(原因は不明)
もしそのようなことが起こったら、、、、、慌てず、別の方法も検討してみてください。
例えば、列を行に変換するピボットがうまく機能しなかったとき・・・・、列の数にもよりますが、それほど多くない場合は、以下のように個別対応も可能です。
<ピボットを使わずに処理する例(列➡行)>
1)各フィールドのみの分岐をつくり、ユニオンで1つのカラムに集約する例となります。
この例は、地域毎の売上のカラムを、1地域毎に分岐した処理をつくり、地域フィールドで”地域”を記し、ユニオンで1つにするというものです。
この方法を取る場合は、別途、各地域で、地域フィールドを作る必要があります。
また、各地域の名称のフィールドに値(この例は売上金額)が入っていますが、これらを1つのフィールドにします。
すべて選択し、「フィールドのマージ」をクリックすると、1つのフィールドに集約が可能です。
名前はいづれか1つになりますので、適した名前にリネームします。
これで、元々地域フィールド毎に売上金額が入っていた列フィールドのテーブルを、地域フィールドと売上金額フィールドの2つにピボット(列➡行)することができました。万が一のときは試してみましょう。
行➡列 ピボットは、Prepのフロー全体で1つでもエラーが発生していると、利用不可
例えば、下図は、地域フィールドを列にピボットしたあと、フィールド名を変更した場合を見てみます。
地域フィールド名を変更します。
ここで、元のピボット処理の内容に変更が必要なことがわかり、以下のように修正を試みます。
1つの例は、以下のように、ピボット対象のフィールドはそのままで、集計対象を入れ替える例です。
こちらは、元のフィールドを消して、新たなフィールドをセットすれば、入れ替えは可能となります。
次に、ピボット対象の地域を触る例を見てみます。
”地域”のフィールドをピボットから削除すると、そのあとのフローで”地域”を扱う処理がある場所でエラーが発生(アラート表示)します。
この状態で、再度”地域”を入れても、以下のようにエラーが出てしまいます。
こうなると・・・・、このピボットアイコンは、ほかのエラーを一旦解消しないと使えなくなってしまいます。
この例だと、次のクリーニング8のエラーを解消する必要が出てきます。
以下の例はシンプルなフローなのでまだ解消は簡単ですが、このあとに多数の処理が含まれる大規模なフローなどを扱っていると、いたるところで関連するエラーが発生し大変なことになってしまいます。。。
この問題の回避方法としては、
行➡列ピボットの内容の変更が必要になった場合は、既存のは触らず、行➡列ピボットを新規に追加し、必要な設定を行い、内容に問題ないことを確認した上で、既存のピボットの接続を外し、新しいピボットに繋ぎ換える方法があります。
ピボット処理は簡単そうに見えて、少し独特な動きをしますので、注意して扱いましょう。
なんだかややこしい、、、、と思った方もいらっしゃるかもしれませんが、Prepでのピボット処理は、データの前処理をする上では色々と使う機会が出てくると思います。
Tableauのビジュアライズの上ではデータは縦持ちが扱いやすいですが、特定のフィールド同士で事前に計算などする際は、一旦 行➡列ピボットで変換して、フィールド同士の計算がしやすい状態にしてから必要な計算を行い、また 列➡行ピボット で元に戻すといったことも可能です。
今回は改めて、Tableau Prepのピボットについて注意する点をご紹介させて頂きました。
一見、単純な”ピボット” でも、気を付けないと誤ったデータを作成してしまいますので、注意しましょう。
前回の結合やユニオン、今回のピボットはよく使う処理です。データを自在に扱えるようになるため、正しく使えるようにしておきましょう。
※Tableau Prep 2022.2.1時点の情報となります