【Tableau Prep中級者以上向け】ベストプラクティス
アドベントカレンダー10日目の今回はTableau Prepを扱います!
ベストプラクティスへの思い
DATA Saberになった後にしばらくTableauから離れていましたが、
それから半年してTableau PrepをPreppin' Dataで実践し始めました。
Preppin' Dataの2019年分の課題をすべてやり遂げて、
ふとTableau Prepのベストプラクティスに興味を持って調べていました。
DATA Saber挑戦していたときに、
Tableauにおけるダッシュボード作成については、
「ベストプラクティス」は豊富にありました。
DATA SaberになるためにDATA Saberの方は、
資料を読み込んでは自問自答したであろう、
あの「ベストプラクティス」です!
下の資料に記載のベストプラクティスはざっと数えて50件以上!
一方のTableau Prepは、この記事を執筆途中に
公式に公開済みのドキュメントはこの2つで、
触れられているベストプラクティスはざっと10個前後…
Tableauダッシュボード作成のベストプラクティスとは
段違いに少ないです。
このような現状に悶々とした私は、
考えをまとめて投稿することから変化を生み出してみようと
至ったのです。
Tableau Prepベストプラクティス紹介
とはいえ、ここで紹介するベストプラクティスの8割ほどは、
「私個人の」理想的な実装で、Tableau公式の見解ではありません!
私の提示するベストプラクティスの理由付けは、
Preppin' Dataでの挑戦や実務経験を基にしています。
また「公式との見解と分ける」べく、
私個人のベストプラクティスを【非公式】と記載しました。
■マシンスペック
★用途
・正常かつ短時間に出力処理を実行する
基本的にTableau PrepはPCや導入先サーバーの処理スペックに依存しているため、定期的にPCや導入先サーバーの処理スペックに問題がないか確認が必要です。
■全ステップ共通
・全ステップと変更に説明をつける
★用途
・設定の背景や設定の用途を今後のメンテナンス等に活用する
・ステップに説明をつける
・変更に説明をつける
Prepフローを見て「このステップはこの用途に使うんだな」と
わかるように、説明をつけると良いです。
何らかの実装のコメントがなければ、
1日でも時間が経つにつれて必要なステップかどうか判断しにくくなるのが
Prepフローです。
またステップ名に表示される文字が少ないので、
名前の長いファイル名は説明に追記すると
どのデータがどのステップにあるのか確認しやすくなります。
※ただし説明の文字数上限が200文字のため、
簡潔な説明文を作成する必要あり。
・【非公式】ユニオン/結合ステップやステップ分岐の直前までは同じ色を割り当てる。
★用途
ユニオン/結合ステップで、どちらのテーブルの項目のものかを判別する
使用色数の低減による視認性が向上する
この2つのステップのみ、各項目に対して流入元のステップの色を割り当ててくれます。
判別できたらその後に以下のアクションが実行可能になります。
ユニオンできなかった項目の名前を変える OR 項目をマッピングする
結合できなかった行の探索 OR 結合後に削除する項目名の特定
また同じステップから2手以上に分かれたステップ間でユニオン/結合したときにも、その分岐後のステップ間に異なる色を割り当てていれば、上記のアクションができます。
またユニオンと結合以外はフローが一直線に並びがちのため、
同じ色を割り当てることでPrepフローが見やすくなります。
■クリーニング
・【非公式?】1つのクリーニングステップ=1つのクリーニング目的
★用途
・処理内容がどのステップにあるか見当が立ち、メンテナンス等で見つけやすくなる
例えば、下のキャプチャのように
日付を年月表示(日付を2013年12月の形式にする)の処理を
予算の単位を数値化の処理に混ぜたとします。
Prepフローを見返したときに「日付を年月表示にしたのはどこのステップだろう?」となるので、クリーニングステップは用途ごとに分けて作成したほうが良いと思います。
Tableau Conferenceで見るTableau社員のPrepフロー
他社のTableau Prepユーザの実装
でも見られるので、デザインやメンテナンス面での「暗黙のルール」みたいになっているのが現状です。
・【非公式】項目の削除では「変更1つ」につき「1つの項目」を削除
★用途
・「項目の削除」で削除した複数の項目のうち一部を復活させたい場合に、
一括削除していた他の項目も復活してしまうのを防ぐ。
下のキャプチャのように、
クリーニングステップで一括削除した複数の項目があったとします。
その後のメンテナンスのときに、
以降のステップで一括削除したうちの1つの項目が必要になったので、
この設定をなくす必要が出てきました。
そのときにこの設定をなくすと、
この設定で削除していた項目も復活してしまいます。
※Tableau Prep バージョン 2023.3時点
キャプチャのように、
画面サイズ次第では4つ目以降の項目は見えなくなるので、
どの項目が復活したのかわからなくなる可能性が出てきます。
そうなると、不要だった項目が復活したまま
Prepフローで出力されてしまうことがあるので、
個人的に項目は単体削除にしています。
また、下のキャプチャで変更ペーンの先頭で一括削除すると、
一括削除した項目が今開いている「予算の単位を数値化」で
見えないようになっています。
「予算の単位を数値化」ステップで追加で変更を加えたいときに、
・削除前の「日付を年月表示」ステップに一回移動する
・空の計算フィールドを「項目の削除」の前に作成する
方法のどちらかを対応しないと削除した項目を見ることはできません。
個人的には、
この設定は以下の単体削除のケースに直面したときで良いと思います。
わざわざ一括削除している既存のPrepフローで、
「削除した項目を使った変更を追加したい」というメンテナンスが
なければ、既存の状態を維持しましょう。
・【非公式?】計算フィールド内にコメントアウトを追記する
★用途
・計算フィールドの用途を今後のメンテナンス等に活かす。
Tableauダッシュボード作成と同じように、
計算フィールドにはコメントアウトを追記すると
数式の解釈がしやすくなり今後の管理・運用に役立ちます。
またステップや変更に追加できる「説明」と比べて、計算フィールドには
・許容文字数が多い
・改行ができる
・編集画面が広い
の3つの良い点があります。
詳細な説明を書くのにピッタリの場所です。
「//」(スラッシュ2つ)でコメントアウトを記載できます。
・【非公式?】標準搭載の機能を使用する
★用途
・標準搭載の機能を使ってTableau Prepの出力処理を軽くする(※未検証)
特にグループ化でCASE数式を使うこともありますが、
Tableau Prepに標準搭載の「グループ化」で対応できたら、
そちらを使うと良いのではないかと考えています。
現状、Tableau PrepでCASE数式とグループ化のどちらが処理が早いのかを
検証できていないので、この点でお困りの方は
Tableau PrepユーザやTableauサポートに確認してください。
■結合
・クロスデータベース結合をPrepフロー上で回避できないか検討する
★用途
・Prepフローの出力処理時間の短縮化
Tableau Conference '19にてクロスデータベース結合を回避すれば、
処理パフォーマンスにとって良いと紹介がありました。
あるお客様では、従来はExcelファイルとDBをPrepフローで結合していたようですが、ExcelファイルをDBのテーブルに追加しDB上で結合をしたことで、Prepフローの処理が安定したと説明がされています。
実際にDBとExcelを結合したケースに私が直面はしておりませんが、
どこかの機会に検証したいです。
・結合キーのデータ型は数値 > 文字列
★用途
・Prepフローの出力処理速度の短縮
下のTableau Conference '19にて
数値のほうが文字列よりも処理速度に早いと紹介されています。
既存のPrepフローで処理時間を短縮できないか考えている方は、
結合キーのデータ型を確認してみると良いかもしれないです。
個人的には日付・日付時間も含めて、
どこかの機会で処理パフォーマンスを検証してみたいです。
・フィルター/項目削除など他の種類のステップでできることは行わない。
★用途
クリーニングステップできる処理を結合に入れると、その設定を探しにくくなる。
Prepフローの出力処理時間の短縮
結合の編集画面を開いて、最初に出てくるのはどの設定でしょうか?
下のキャプチャのように、
「設定」(Settings)タブに表示される結合の設定です。
一方、クリーニングステップで使うフィルタなどは
「設定」タブの隣にある「変更」(Changes)に表示されます。
そもそも「結合ステップ=結合キーや結合方法を設定する」という使い方が
多いので、「変更」タブを見るということが少ないはずです。
特にメンテナンスの面で一番痛い目を見るでしょう。
「クリーニングステップにないの?結合ステップやピボット、集計など
別のステップから探さないといけない…」と作業負担がかかります。
Tableau Prepユーザの皆さん、後々負担として効いてくる設定は、
もう止める方針で進めてみませんか?
Tableau Conference '19では、
Prepの出力処理時間の短縮できる点で紹介されており、
普段の業務でもこの設定はしないよう対応しています。
Tableau社がなぜこの設定をできるように作ってしまったのか疑問に残りますが、ユーザ側で回避できることであれば対応しない手はないです。
Tableau Conferenceでは検証結果が紹介されていなかったので、
どこかの機会に処理時間の比較をしてみたいです。
・【非公式】左/右結合は併用しない
★用途
・意図しない結合による出力ミスを回避する
左結合と右結合の両方が設定されている
1つのPrepフローを頻繁に見かけます。
このようなPrepフローは、左/右結合のどちらかに統一させると
Prepフローの解釈のしやすさや見栄え向上に役立つと思います。
左右の結合方法を混ぜて使ったところで意味がなく、
メンテナンスに悪影響を及ぼすことがあります。
ではどんな影響があるでしょうか。
「この結合ステップでは右結合、次は左結合、次は右結合…」と、
結合ステップが増えればPrepフローの解釈が難しくなります。
例えば、「キー不一致のデータが見つかった」と
報告が上がってきたとします。
データを使いたいユーザーに早急に届けたいと要望を受けて、
複数ある、左/右結合に設定した結合ステップのなかから
「結合に使用しているこのテーブルがこういう状況で結合している、
だからキー不一致のデータが意図せず発生している」と
素早く結論出すことが必要になってきます。
そんなときに左右の結合が混ざっていたら、どうでしょうか。
使用するテーブル以外に、
左右の結合にも注意を向けて考えなければいけません。
結論を出すのに、たくさん考慮して頭がパンクするのは
人間よくあることです。
誰でも使いやすいデータ加工ツールが一つの魅力であるTableau Prepに
左/右結合の併用は不要ではありませんか?
・【非公式】結合方法に応じてステップの色を変える
★用途
・結合方法を結合ステップの編集画面を開かずにアイコンを見るだけで判別
結合ステップに入った、直前にある2つのステップが
以下のようにあったとします。
①内部結合/外部結合→直前にある2つのステップとは異なる色
②左・右結合→直前にある2つのステップのうち結合の左/右側にある色
左結合なら結合の左側に配置したステップの色を
割り当てると良いと思います。
右結合も同様です。
Prepフロー完成直後は右/左結合が正常に機能していても、
変化する運用環境に対応するべく
右/左結合では不要なデータが出てしまうことがあります。
例えば、集計対象の変更により、不一致のキーを持つ行は
「残してもよい」→「残さない」に変えることがあると思います。
そんなときにPrepフロー上に複数ある結合ステップから。
修正の必要なものを探し出しやすくなります。
また作成途中のPrepフローで欲しいデータが見つからないときに、
結合方法をステップを開かずに確認することもできるでしょう。
■ユニオン
・【非公式】直前のステップとは異なる色を割り当てる
★用途
・(強いていえば)ユニオンステップの視認性向上
集計ステップと異なり、フローが一直線になっていない点が
異なる色を割り当てる理由になっています。
・【非公式】フィルター・項目削除など「クリーニング」ステップでできることは行わない。
★用途
クリーニングステップできる処理をユニオンに入れるとその設定を探しにくくなる。
Prepフローの出力処理時間の短縮(※未検証)
「結合」ステップと同じく、「変更」タブで
ユニオンの前後にフィルター・項目名変更の処理を配置できます。
しかし、先ほどの結合ステップで「結合」のみ推奨と
公式見解があるように、ユニオンステップでは「ユニオン」のみ
処理したほうが良いと考えています。
こちらもどこかの機会に処理時間の比較をしたいです。
■集計
・【非公式】ステップの色は、直前のステップの色と同じ
★用途
・Prepフローのステップに使用する色数の低減による目の負担減
下のキャプチャのように、集計ステップまで
フローの流れが一直線にあるので、
色を増やしてまでも色は変えなくて良いと思っています。
・【非公式】フィルター・項目名変更など他の種類のステップでできることは行わない。
★用途
クリーニングステップできる処理を集計に入れるとその設定をPrepフロー上から探しにくくなる。
Prepフローの出力処理時間の短縮(※未検証)
「結合」・「ユニオン」ステップと同じく、
「変更」タブで集計の前後に
フィルター・項目名変更の処理を配置できます。
しかし結合ステップで説明した通りに、
集計ステップでは「集計」のみ処理したほうが良いと思います。
同じく、どこかの機会に処理時間の比較をしてみたいです。
■ピボット
・【非公式】フィルター・項目削除など「クリーニング」ステップでできることは行わない。
★用途
クリーニングステップできる処理をピボットに入れるとその設定を探しにくくなる。
Prepフローの出力処理時間の短縮(?)
「結合」・「ユニオン」・「集計」ステップと同じく、
変更タブでピボットの前後に
フィルター・項目名変更の処理を配置できます。
しかし先ほどの結合ステップで説明した通り、
ピボットステップでは「ピボット」のみ設定したほうが良いと思います。
同じく、どこかの機会に処理時間の比較をしてみたいです。
■スクリプト
スクリプトステップの概要や機能要件は以下のヘルプを参照ください。
・スクリプトでしか実現できない最新データ取得/複雑なテーブル作成処理に使う
★用途
・必要なセキュリティ面での安全確保
※スクリプトを使ってPrepフローを実装した経験がないため、
記載内容が異なる場合があります。
スクリプトが必要なケースにのみ
スクリプトステップをPrepで用いましょう。
『WEBサイトから「REST API」経由で、
昨日のドル円の値動きを取得したテーブルと
Prepで生成したテーブルをスクリプト上で1つのテーブルにしたい』などで
使うかと思います。
・なるべく自社で制作した、データ流出のないスクリプトを使う
※スクリプトを使ってPrepフローを実装した経験がないため、
記載内容が異なる場合があります。
外部のスクリプトを使う際には、
スクリプトを使うと外部にデータが流出しないか確認する必要があります。
残念ながら、ここではデータ流出を検証する
効果的な確認方法を提供できません。
生成AIにスクリプトを読み込ませて
解析してもらうというような方法であれば、
もしかしたら検証できるかもしれません。
スクリプトの文字上限に到達しない生成AIを探してみてもよいと思います。
個人的に、このあたりはPrepフローで
外部スクリプトを実装した経験のあるエンジニアに聞いてみたいです。
・【非公式】フィルター・項目削除など「クリーニング」ステップでできることは行わない。
★用途
クリーニングステップできる処理をピボットに入れるとその設定を探しにくくなる。
Prepフローの出力処理時間の短縮(※未検証)
実はスクリプトステップでも「変更」タブがあります。
上部には値をフィルター(Filter Values)が見えており、
クリーニングステップでできる設定がここでも可能なのです。
結合ステップで紹介したように、
ここの設定は「スクリプト」(Script)のみがある状態にしてください。
■予測ステップ
「予測ステップとは?」については下記ヘルプを参照ください。
・【非公式】フィルター・項目削除など「クリーニング」ステップでできることは行わない。
★用途
クリーニングステップできる処理をピボットに入れるとその設定を探しにくくなる。
Prepフローの出力処理時間の短縮(※未検証)
予測ステップにも「変更」タブがあります。
スクリプトステップと同様に意外なところにもあります。
予測ステップが実装されているケースは少ないでしょうが、
Prepフローの新規作成時やメンテナンス時に気をつけたい点です。
■抽出
・使用しない項目の削除
★用途
Prepフローの出力処理速度の短縮
Prepフローに表示される項目の減少に伴うPrep表示速度の短縮化
データ抽出段階で不要な項目は削除する設定は
上記の用途に記載の通り重要です。
クリーニングに一切使用していないのに
途中のステップで削除されているPrepフローをよく見るので、
項目を削除する際には、
「抽出時に削除できないか」を検討してみてください。
・行データのサンプルサイズを自動 OR 指定数に設定
★用途
・Prepフローの画面編集・表示処理速度の短縮化
行データのサンプルサイズをTableau Prepで指定できます。
基本は自動でよいですが、
Tableau Prep側が指定した行数だと処理が遅延気味な場合は、
ユーザ側が指定した数だけ行データを抽出する方法を採用してください。
・抽出データが行増分のみなら増分更新を有効化
★用途
・Prep出力処理速度の短縮化
ヘルプにしか記載がないのが勿体ない機能の一つに、
抽出データの増分更新があります。
日単位のPOSデータのように、
元データの項目名や項目数が一定で最新データが行として増える状態なら、
こちらの機能を有効化してみてください。
データの抽出を増分した行のみをPrepが処理して出力します。
有効化したPrepフローを本番稼働する前に、
必ずテストデータ等を使って挙動の確認をお願いします。
出力データが意図しないものになる可能性があるので、
初めて使うユーザやは注意してください。
詳細な使い方は下記のヘルプに記載があります。
・Prep上に表示する行データのサンプリングはクイック選択を指定
★用途
・Prepフロー画面表示処理速度の短縮
デフォルトでは、クイック選択(Quick select)になっています。
ユーザでは残り2つの設定を選択できますが、
処理は重くなるとのことです。
ランダム(Random)は文字通りランダムに行データを取得するので、
Prep画面の表示処理速度が重くなるとのことです。
層化(Stratefied)は、Prepユーザー側で気になる項目を指定して、
ユーザの指定した行数に合わせて
値が一意になるように行データを抽出する抽出方法です。
アメリカ合衆国の全州を対象にした大規模データであれば、
州名が一意になるように取得行数を
51(アメリカ合衆国の州数=51)にして、
1件ずつ取得するように抽出してくれます。
※Tableau Prep バージョン2023.3に実装された抽出方法
・抽出段階でフィルター可能であればフィルターを使用
★用途
・不要な行データ削除による、Prep出力処理時間の短縮
抽出時に不要なデータを削除することで、
その後のステップ全てにかかる負担を低減できます。
・【非公式】抽出後に空のクリーニングステップ追加
★用途
・抽出直後のデータをメンテナンス時に確認できる
これは元データの全体の値を確認するために配置します。
Preppin' Dataの模範解答でデータ抽出後に配置されていた、
「View Data」という空のクリーニングステップを見たのがきっかけです。
もし抽出直後のクリーニングステップで
フィルターなどの処理を追加したままにすると、
今後別の運用者が見たときに
「これが加工前のデータだ」と誤認する可能性があります。
実際に完成したPrepフローを後で見直したときに、
「実は項目がクリーニングステップで削除されていて
元データが見えない…」ということがありました。
また計算フィールドや分割などで作成した項目の名前を
元データにある項目と同じにして上書きしたケースで、
元データにある項目の値を確認したいときに役立つと思います。
出力された項目は計算フィールドで、
元データの項目のデータ型や値の長さと異なっていて
「確認する項目に誤りがあった」ということもあり得ます。
基本的に、完成したPrepフローは、
・各項目に想定内の値が入っている
・現在/今後の運用者に管理される
前提で運用されていきます。
今後の運用者が想定外の値に対するエラー対応を実施したり、
現在の運用者がPrepフローをパッと見返すことはあり得るので、
空のクリーニングステップが各データ抽出直後に
あったほうが良いと思っています。
■出力
・hyper > tde > csvの順に出力処理パフォーマンスが高い
★用途
・Prepの出力処理時間の短縮
Tableau Conference '19にて紹介のあったベストプラクティスです。
hyper形式で運用できるなら対応したほうが良いと思います。
■フローのグループ化
・【非公式】グループ展開/収納時の挙動を許容できるなら使用
★用途
・より整理しにくくなる点を回避する
2023.3のTableau Prep上でフローのグループ化を使用したときの感想です。
(※過去のバージョンは未検証)
複数のステップを選択して作成されるグループについて、
グループを一度展開すると頻繁に
「グループ外のステップが乱雑に再配置」されてしまいます。
グループはコンパクトなPrepフローを表示してくれる機能で良いのですが、
現状の挙動はむしろPrepフローを複雑にして見にくい状態です。
挙動に許容できる範囲で使用してください。
■フローの挿入
・フローの挿入用のデータの作り過ぎに注意
★用途
・データ量圧迫の回避
フローの挿入用にパブリッシュしたデータは必要なものだけにしましょう。
データ量の圧迫を防げると思います。
■出典
⚫画像
⚫記事