Tableauナレッジ - INSIGHT LAB

【Tableau Prep】マスタが無くてもデータを最新名称に統一する方法

作成者: okkun|2024年12月27日

はじめに

 こんにちは、okkunです。

 今回は表題の通り、マスタが無くとも最新の名称を元のデータ(トランザクションデータ)に反映する方法について紹介します。イメージとしては、以下の画像のことをTableau Prepで行っていきます。

 

準備

 マスタを作成する前に、データにNULLが含まれていないか確認してください。NULL値を「なし」などと置換しないと、NULL項目の顧客コード・顧客名が欠落してしまいます。方法は以下を参照してください。

 ①データをTableau Prepに取り込みます。

 ②クリーニングステップを作成し、[計算フィールドの作成] から以下の数式2つを記載します。

顧客コード
IF LEN([顧客コード])>0 THEN [顧客コード] ELSE "F999999" END
顧客名
IF LEN([顧客名])>0 THEN [顧客名] ELSE "なし" END

 

マスタの作成

 ①集計ステップを作成します。

 ②「日付」、「顧客コード」、「顧客名」を「グループ化したフィールド」へドラッグ&ドロップで移動します。

 ③クリーニングステップを作成し、[計算フィールドの作成] から以下の数式を記載します。

最新_顧客コードFlag
IF ({PARTITION [顧客コード]: {ORDERBY [日付] DESC: ROW_NUMBER() } } = 1) THEN 1 ELSE 0 END

※上記数式では、2024/8、2024/7、2024/6において同じ顧客コードが存在する場合は、2024/8の顧客コードに1、2024/7と2024/6の顧客コードに0を付与しています。

 ④「最新_顧客コードFlag」の1を保持します。(棒グラフをクリックすると青色にハイライトされるので、そのまま [保持] を押下してください。)

 ⑤判別しやすいように、フィールド名を「顧客コード」 → 「マスタ_顧客コード」 、「顧客名」 → マスタ_顧客名」 に変更します。

 ⑥集計ステップを作成し、マスタに必要な「マスタ_顧客コード」と「マスタ_顧客名」のみを抽出します。処理が上手くできていれば、顧客コードの数と顧客名の数が一致しているはずです。

 

最新項目の反映

 さて…。マスタを作成して終わり、というわけにはいきません。トランザクションデータには古い顧客名が残っているので、分析するにはこれをどうにかしないといけません。というわけで、このステップでは、トランザクションデータの顧客名をマスタの顧客名に差し替える方法を書いていきます。

 ①同じフロー図上で、再度トランザクションデータをフローペインにドラッグ&ドロップします。

 ②先ほど作成した「顧客マスタ」をトランザクションデータへドラッグし、「結合」がハイライトされたらドロップします。

 

 ④結合句と結合タイプを、以下の手順で変更します。

 ⅰ)結合句: [追加] から、「顧客コード」=「マスタ_顧客コード」に設定します。
 ⅱ)結合タイプ:ベン図内を押下し、左結合にします。

 ⑤クリーニングステップを作成し、 [計算フィールドの作成] から以下の数式を記載してマスタの顧客名を反映します。

最新_顧客名
IF [顧客コード]=[マスタ_顧客コード] THEN [マスタ_顧客名] END

 ⑥「顧客名」、「マスタ_顧客名」、「顧客コード」の3フィールドを削除します。※検索ボックスを使うと便利です。

 ⑦フィールド名を「最新_顧客名」 → 「顧客名」「マスタ_顧客コード」 → 「顧客コード」に変更します。

 ⑧出力ステップを作成し、編集したデータを出力します。これで、トランザクションの旧顧客名を最新の顧客名に差し替えたデータを作成することができました。

 

おわりに

 過去と現在で顧客名などの名称が変更されてしまうと、本来は同じデータのはずなのに異なるデータとして処理されてしまうことがあります。(私も過去にこのような問題に直面したことがありました。)

 今回のテクニックを使えば、最新のデータを反映したマスタが無くとも新旧名称を統一することができますので、同様の課題を抱えている方のお役に立てれば幸いです。