Tableau Prep ワークブック "duplicates from union.tfl (union.tfl からの重複)" では、"January Orders (1 月オーダー)" が 1 月のオーダーの最初のレポートです。"January Orders (corrections) (1 月オーダー (修正))" 表は、新しいオーダーと "January Orders (1 月オーダー)" に既に存在するオーダーの修正が含まれたレポートであり、後からリリースされたものです。2 つの表をユニオンすると、両方の表のすべての行が維持され、メジャーが重複して作成されます。
"duplicates from union.tfl (union.tfl からの重複)" の最初のフローは、この問題について示しています。
オプション 1: 一方の表からはすべてのデータを維持し、もう一方の表からは不一致のデータを維持する
この例では、"January Orders (corrections) (1 月オーダー (修正))" からのデータをすべて維持し、"January Orders (1 月オーダー)" からは "January Orders (corrections) (1 月オーダー (修正))" に存在しないオーダーのみ維持する必要があります。
- "January Orders (1 月オーダー)" と "January Orders (corrections) (1 月オーダー (修正))" 間に新しい結合を作成します
- "Join 1 (結合 1)" ステップで、以下を実行します。
- [適用した結合句] で、[Order ID (オーダー ID)] = [Order ID (オーダー ID)] の結合句を作成します
- [結合タイプ] で、一番左のセグメントに色が付くようにベン図のセクションをクリックします。Tableau Prep では、これを [左の不一致のみ] 結合と呼びます。
- "January Orders (corrections) (1 月オーダー (修正))" を "Join 1 (結合 1)" までドラッグし、表を [ユニオンの新規作成] にドロップします
オプション 2: 最新日付のレコードを維持する
たとえば、Ms. Mouse がコートをもう 1 着追加するためにオーダーを変更しましたが、この変更が誤って "January Orders (1 月オーダー)" に記録されました。正しいオーダーは最新日付のものです。
- "January Orders (1 月オーダー)" と "January Orders (corrections) (1 月オーダー (修正))" 間に [Order ID (オーダー ID)] = [Order ID (オーダー ID)] で完全外部結合を作成します
- "Join 2 (結合 2)" から "Step (ステップ)" を追加します
- 日付フィールドとメジャー バリューを除いて、一致するすべてのフィールドをマージします。
- プロファイル ペインで値を他より優先する必要があるフィールドをクリックします
- 一致するフィールドを Ctrl キーを押しながらクリックします
- いずれかのフィールドを右クリックし、[フィールドのマージ] を選択します
- フィールドがマージされる際に、Tableau Prep で両方の値が維持されず (2 つの異なる値がある場合)、最初に選択されたフィールドに値がある場合はその値が維持されます。
- たとえば、Ms. Horse の名前が誤って Ms. House として "January Orders (1 月オーダー)" 表に記録され、彼女の正しい名前が "January Orders (corrections) (1 月オーダー (修正))" に表示されます。その場合、[Customer (顧客)] と [Customer-1 (顧客-1)] をマージするときに、[Customer-1 (顧客-1)] を最初に選択する必要があります。
- どのフィールドが他より優先されるかをマージされたフィールドから確認できます。名前は、[first field name & second field name (最初のフィールド名 & 2 番目のフィールド名)] のような書式になります。最初にリストされるフィールド名は、他より優先されるフィールドです。
- 間違ったオーダーでフィールドがマージされた場合、プロファイル ペインでマージされたフィールドの名前の上にあるマージ アイコンを右クリックして [削除] を選択することにより、マージを元に戻すことができます。
- [計算フィールドの作成…] ボタンをクリックします
- 開いた [計算フィールド] ダイアログ ボックスで次の操作を実行し、[OK] をクリックします。
- 計算フィールドに名前を付けます。この例では、計算フィールドに "Most Recent Date (最新日付)" という名前が付いています
- 式フィールドで、次のような計算を作成します。
IF [Date] > [Date-1]
THEN [Date]
ELSE IFNULL( [Date-1], [Date] )
END
- [Date (日付)] が [Date-1 (日付-1)] を超える場合、または [Date-1 (日付-1)] よりも最近の日付である場合、上記の計算は [Date (日付)] を返します。それ以外の場合、計算は [Date-1 (日付-1)] を返します。
- いずれかのフィールドが NULL の場合、最初の条件は常に false になります。[Date-1 (日付-1)] が NULL の場合、IFNULL() 関数によって [Date-1 (日付-1)] が [Date (日付)] と置き換えられます。つまり、計算は常に NULL 以外の値があればそれを返すということです。
- [Date (日付)] と [Date-1 (日付-1)] を削除します
- 「New Cost (新しい費用)」などの名前を付けて、次のような計算の計算フィールドを作成します。
IF [Date] > [Date-1]
THEN [Cost]
ELSE IFNULL( [Cost-1], [Cost] )
END
- [Cost (費用)] と [Cost-1 (費用-1)] を削除します
- すべてのメジャーについてステップ 6 ~ 7 を繰り返します
オプション 3: すべての重複を異なる方法で処理する必要がある
- "January Orders (1 月オーダー)" と "January Orders (corrections) (1 月オーダー (修正))" 間に [Order ID (オーダー ID)] = [Order ID (オーダー ID)] で完全外部結合を作成します
- "Join 3 (結合 3)" から "Step (ステップ)" を追加します
- a) 両方の表に同じ値があるすべてのフィールドか、または b) 一方の表からの値を常に優先させる必要がある値のすべてのフィールドをマージします。
- [計算フィールドの作成…] ボタンをクリックします
- 開いた [計算フィールド] ダイアログ ボックスで次の操作を行い、[OK] をクリックします。
- 計算フィールドに名前を付けます。この例では、計算フィールドに "New Cost (新しい費用)" という名前がついています
- 式フィールドで、次のような計算を作成します。
CASE [Order ID-1 & Order ID]
WHEN 5 THEN [Date]
WHEN 9 THEN [Date]
ELSE IFNULL([Date-1],[Date])
END
- 上記の計算では、[Order ID-1 & Order ID (オーダー ID-1 & オーダー ID)] の値がすべて読み取られ、指定した日付フィールドが返されます。わかりやすくするために、どの ID が [Date (日付)] を返す必要があるかだけを指定し、他はすべて [Date-1 (日付-1)] か、または [Date-1 (日付-1)] が NULL の場合は [Date (日付)] を返すように ELSE ステートメントで指定します。
- [Order ID-1 & Order ID (オーダー ID-1 & オーダー ID)] 値は、データの各行に対して一意の値を持つフィールドであるため、CASE ステートメントで使用されます。
- つまり、将来このフローが再実行されたときに、追加された新しい ID は [Date-1 (日付-1)] を返すということでもあります。
- [Date (日付)] と [Date-1 (日付-1)] を削除します
- 個別に重複を処理する必要があるすべてのフィールドでステップ 4 ~ 6 を繰り返します