Tableau Prepで重複レコードを削除する方法　３種類＋LOD

Tableau Prepで重複したレコードを削除するにはどうすればよいですか？
データ準備ツールの中には、これを行うための特定の機能があります。
一見すると、Tableau Prepの最初のバージョンはこの機能を備えていないようです。

しかし、Tableau Prepで重複レコードを削除することはできます。
重複を取り除くことは非常に簡単です。（最後におまけ：Tableau PrepのLOD計算？）

# 1. Tableau Prepでの重複レコード
次のようなデータセットがあるとします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/a5c390be-a6ce-c7be-538e-1574573e8092.png)

従業員ID 3に2つの正確に同じ重複レコードがあることがわかります。すべてが同じです：
ID、名前、日付。
これは本当の重複です。
重複レコードに対して、Tableau Prepで次のことができます：

![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/ddb74405-fe17-99be-b2cd-9ff68d5f3a28.png)

集計を追加し、すべてのフィールドを[ グループ化フィールド]セクションに追加するだけです。ユニークな行のみが保持され、重複は目の前で消えます。
重複除外されたデータセットで、Tableau Prepフローを続行できます。（そしてこのアプローチを指摘してくれたTom Fullerに感謝します！）

# 2. 重複と似ている。厳密には重複ではない例
データセットを少し修正して、Tableau Prepの重複レコードを削除する方法を考えてみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/d8593f39-196b-95f5-de92-46e3746406a8.png)

この場合、Walvoordは1997年に一度雇用され、その後2014年に再雇用されました（このデータセットは理由を示していません - 彼は中間職を雇ったのか、それとも新しい職に就職しましたか）。
データからは、最新の雇用日がわかるだけです

この重複したデータを削除するフローは次のようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/8dc4b82b-5da5-3145-a3d1-bc934dd78390.png)

これは以前のソリューションと非常によく似ていますが、ここではEmployee IDとNameのみでグループ化し、HiredフィールドはMAXとして集計しています。つまり、ユニークな従業員ごとに、最高雇用日を取得します。
不要な重複レコードを削除し、この出力で終了します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/e544f785-8172-a715-5223-9857d48ef73e.png)

# 3. 重複したレコード　発展

![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/b68f6d66-e4ba-34ba-cf88-c18fda6032ef.png)

レコードの最新を取得する方法については既に説明しましたが、  重複するデータを重複除外する場合はうまくいきます。
さて、以前の入力データセットを拡張して、最新の雇用日だけでなくレコードに追加のデータを保持する場合は、単純にグループ化して集計することはできません。

Walvoordが2つの雇用日を持つ理由がわかりました。
これは2つの異なるPositionを表しています。したがって、最新の雇用日で記録を保持する必要がありますが、そのレコードの他の値もそのまま維持する必要があります。
私たちは2つのレコードを取得するため、前のGROUPへのアプローチをポジPositionで使用することはできません。そして、Position別に集計することはできません（MINまたはMAXでなければなりません
この特定のケースでは1つ機能するかもしれませんが、Positionの他の組み合わせは選択した結果が異なります） 。

代わりに、データセットが拡張されたときと同じように、フローを拡張します。
最初のステップは、ケース＃2と同じです。従業員IDと名前でグループ化し、最大雇用日を探します。上記の出力が我々の結果です。しかし、最新の日付でレコード全体を識別するために、その情報を取得して、それを使用して完全なデータセットに一致させる必要があります。それは次のようになります：
![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/53402127-1db2-a5e1-e534-c6039df0d34f.png)

Max Dateステップは、ケース＃2の重複排除ステップの名前の変更です。我々はそれをフローの前のステップに加えました！ 単にドラッグアンドドロップするだけです！

上記のように、結合は、従業員IDと、採用された日付（集計の最新の（MAX）日付に一致する元のデータセットのすべての日付）で行われます。そして、あなたが除外したい従業員3の以前の日付の赤い色も見ることができます。

# おまけ：Tableau PrepでのLOD計算
何だと思う？Case＃3の解は、Tableau PrepのLOD計算です！あなたが修正されたLODを書くことができるかどうか疑問に思っていたら - あなたはできます！これは単に見た目の話です

Tableau Desktopで最新のレコードを見つけるための計算をしているとします。あなたは書くだろう：

{FIXED [従業員ID]：MAX（[入社日]）
従業員一人あたりの最新の日付が表示されます。レコードの日付と一致するように計算を拡張し、最新であるかどうかを判断するブール値を取得することができます。

[雇用日] = {固定[従業員ID]：MAX（[雇用日]）
雇用日がLOD結果と一致した場合、その従業員の最新のレコードがあります。フィルタリングして真の値だけを保持し、データセットを削除しました。

"ちょっと待った！"と思うかもしれない。
"Tableau PrepはLOD構文をサポートしていません（少なくともバージョン1では）。

私たちは計算のロジックとTableau Prepのフローをマッチさせました。見てください：
![image.png](https://qiita-image-store.s3.amazonaws.com/0/192890/f0764bd4-c13d-18d8-4fab-ab2f3fe9b930.png)

どうでしょう。Tableau Prepの重複行を削除したり、Tableau Prepデータフローを使用してLODを代替して書くことGできるでしょう。

https://vizpainter.com/how-to-remove-duplicate-records-in-tableau-prep/