在 Tableau Prep 工作簿 "duplicates from union.tfl" 中,"January Orders"是 1 月份的第一份訂單報告。."January Orders (corrections)" 資料表是稍後發佈的報告,其中包含一些新訂單,但也對 "January Orders" 中已存在的訂單進行了校正。聯集兩個資料表時,將保留兩個資料表中的所有列,從而建立重複度量。
"duplicates from union.tfl" 中的第一個流程示範了此問題。
選項 1:保留一個資料表中的所有資料和其他資料表的不匹配資料
對於本例,我們需要「January Orders (corrections)」的所有資料以及未存在於「January Orders (corrections)」中的「January Orders」訂單。
- 在 "January Orders" 和 "January Orders (corrections)" 之間建立新聯結
- 在聯結 1 步驟中,執行以下動作:
- 對於所套用的聯結子句,在 [Order ID] = [Order ID] 上建立一個聯結子句
- 對於「聯結類型」,按一下卞氏圖表的各個部分,以便僅填充最左側的區段。Tableau Prep 將此稱為「Left unmatched only」聯結。
- 將 "January Orders (corrections)" 拖曳到「聯結 1」上,然後將資料表放在「新建聯集」上
選項 2:保留最近日期的記錄
例如,Ms. Mouse 女士變更了她的訂單以新增一件外套,但這一變更被意外記錄在 "January Orders" 中。正確的訂單是具有最新日期的訂單。
- 在 [訂單 ID] = [訂單 ID] 上的 "January Orders" 和 "January Orders (corrections)" 之間建立 FULL OUTER 聯結
- 從聯結 2 新增一個步驟
- 合併除日期欄位和度量值之外的所有匹配欄位:
- 在設定檔窗格中按一下其值應該取代另一個欄位的欄位
- 按一下 Ctrl 並按一下匹配的欄位
- 以滑鼠右鍵按一下欄位並選取「合併欄位」
- 合併欄位時,Tableau Prep 不會保留這兩個值(如果有兩個不同的值),而是保留首先選取的欄位中的值(如果有)。
- 例如,Horse 女士的名字在 "January Orders" 資料表中被意外記錄為 House 女士,她的正確名稱顯示在 "January Orders (corrections)中。合併 [Customer] 和 [Customer-1] 時,我想先選取 [Customer-1]。
- 您可以從合併欄位的名稱驗證哪個欄位將取代另一個欄位。名稱的格式類似於 [first field name & second field name]。首先列出的欄位名稱將是取代另一個欄位的欄位。
- 如果欄位以錯誤的順序合併,則可以透過以滑鼠右鍵按一下「設定檔窗格」中合併欄位名稱上方的合併圖示並選取「移除」來取消復原合併。
- 按一下「建立導出欄位…」按鈕
- 在開啟的 [導出欄位] 對話方塊中,執行下列動作,然後按一下 [確定]:
- 為導出欄位命名。在此範例中,導出欄位名稱為 "Most Recent Date"
- 在公式欄位中,建立類似於如下的導出欄位:
IF [Date] > [Date-1]
THEN [Date]
ELSE IFNULL( [Date-1], [Date] )
END
- 如果「更大」,則上述計算將返回 [Date],如果日期更近,則返回 [Date-1]。否則計算將返回 [Date-1]。
- 如果任一欄位為 null,則第一個條件將始終為 false。當 [Date-1] 為 null 時,IFNULL() 函式用 [Date] 取代 [Date-1]。 這意味著如果有的話,計算將始終返回非 null 值。
- 移除 [Date] 和 [Date-1]
- 使用類似於以下的計算建立一個名稱類似於 "New Cost" 的導出欄位:
IF [Date] > [Date-1]
THEN [Cost]
ELSE IFNULL( [Cost-1], [Cost] )
END
- 移除 [Cost] 和 [Cost-1]
- 為每個度量重複步驟 6-7
選項 3:每個重複項都應該以不同的方式處理
- 在 [訂單 ID] = [訂單 ID] 上的 "January Orders" 和 "January Orders (corrections)" 之間建立 FULL OUTER 聯結
- 從聯結 3 新增一個步驟
- 合併 a) 在兩個資料表中具有相同值,或 b) 應始終取代一個資料表中的值的所有欄位
- 按一下「建立導出欄位…」按鈕
- 在打開的「計算欄位」對話框中,執行以下作業,然後按一下「確定」:
- 命名此計算欄位。在此範例中,導出欄位名為 "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 應返回 [Date],然後由於 ELSE 陳述式,其他所有內容都將返回 [Date-1],如果 [Date-1] 為 null,則返回 [Date]。
- [Order ID-1 & Order ID] 值在 CASE 陳述式中使用,因為該欄位對於每列資料都具有唯一值。
- 這也意味著在將來重新執行此流程時,新增的任何新 ID 將返回 [Date-1]。
- 移除 [Date] 和 [Date-1]
- 對需要單獨處理重複項的所有欄位重複步驟 4-6