見出し画像

[Tableau Prep] LOD表現で最新日付のデータのみ利用(重複削除)

こちらは過去の記事記載のお悩みのひとつ(以下リンクユースケース④)について詳細を備忘録として残しておこうと思います。

まずはじめに以下のようなサンプルデータがあるとします
このリストは組織別の費用コードリストだとして、
Sample Center Code(以下SCC)をKeyに別テーブルで存在する発生費用を組織別で確認したいというのが今回やりたいことです。

組織別の費用コード(Sample Center Code)一覧 ※サンプル

問題はリストを見て頂きわかる通り、同一の費用コードが複数登録日別に存在してしまっている点です。(仮に組織の名称変更等があったためとしましょう)
これをそのまま費用とJoinしてしまうと、金額がどんどん倍々になってしまう恐れがありますね…

そこで今回はTableauでもおなじみのLOD表現を用いてこれらのダブりを解消していきたいと思います。

Step1:FIXEDを利用した最大値取得

まず「計算フィールドの作成」→フィールド名「SCC別の最新登録日」として以下を作成します。

{ FIXED [Sample Center Code]:MAX([Sample Center Code登録日])}

その上で、上記が各レコードのSCC登録日と等しい(=最新の登録日)もののみ残す処理を加えます。

Step2:ブール論理(True or False)で真偽判定

「計算フィールドの作成」→フィールド名「最新登録日判定」として以下を作成します。

[SCC別の最新登録日] = [Sample Center Code登録日]

イメージとしては下表のように左から2列の情報が加えられたことになります。

FIXEDとブール論理式追加したイメージ

この後は「最新登録日=登録日」のフィールドを「真(True)」のみ保持すればSample Center Code一意のデータを取得することができます。

最後に:ハマってしまった注意点

Prepにはデータサンプリング機能があることをご存知ですか?
プロファイルペイン上に[サンプリング済み]の文言があれば=サンプリングした結果がデータペイン上に反映されています。

今回のようにLOD表現等を用いたり、グループ化するなどしてデータを個別で変換したり絞ったりする場合には「すべてのデータを使用」(=行数:最大値)することをお勧めします

そもそも全てのデータを表示できていないのか?とTableauの仕様をよく理解していなかった私自身はその点調べて初めて知った点なのですが、Tableauデフォルトの動きとしてデータペインに表示されるデータは必ずしも全量とは限らない、という点が理由になります。(実際にフローを実行する際には、データの全量が読み込まれ全データに対する処理が実行されるとのことですが)

これはTableau側がパフォーマンス維持のためにフローに含まれるデータを代表的なサンプルに限定していることが関係しており、上記で紹介したような個別の変換やグルーピング等を進めると、抜けてしまう値がでてきたり本来欲しいものが得られなくなる恐れがあります。

以下はTableau公式ヘルプから引用になります。

データ サンプルのサイズの設定
ピーク パフォーマンスを維持するため、Tableau Prep では既定で、フローに含まれるデータはデータ セットの代表的なサンプルに制限されています。データ サンプルは、データ セットに含まれる合計フィールド数とそれらのフィールドのデータ型に基づき、最適な行数を計算することにより決定しています。その後、Tableau Prep は可能な限り迅速に、計算された量の最初の行数を取得します。

https://help.tableau.com/current/prep/ja-jp/prep_configure_dastaset.htm

データの行数選択について確認・変更するには「データサンプル」→「行数」にて自動(推奨)から最大値(遅く)に変更が必要です。

パフォーマンス維持のために、初期の段階でクリーニングや不要列やデータ対象の除外等を実施・グルーピング等実施した後で結合する、という流れも忘れずに実施したいですね。

以上LOD表現を用いた最新日付データの取得(重複削除)の流れでした。
同じお悩みもっている方、参考になると幸いです。

この記事が気に入ったらサポートをしてみませんか?