驗證並清理倉庫中的資料

適用於:Microsoft Fabric 中的✅ 資料庫

建立資料表並載入資料後,先驗證資料的完整性與正確性,再用於報告或後續處理。 本文提供一些簡單且貼近實際的驗證與清理查詢範例,你可以對在 dbo.fact_sale 中建立的 資料表執行這些查詢。

Prerequisites

要開始,請完成以下先決條件:

  • 在具有參與者或更高許可權的 Premium 容量 工作區中獲取倉儲項目的存取權。
    • 務必連結到你的庫存項目。 你不能直接在倉庫的 SQL 分析端點執行查詢。
  • 選擇您的查詢工具。 這個教學包含 Microsoft Fabric 入口網站中的 SQL 查詢編輯器 ,但你也可以使用任何 T-SQL 查詢工具。
  • 請在 dbo.fact_sale 倉庫中建立一個資料表,如同 在倉庫中建立資料表所示。

驗證查詢可以從非常簡單的謂詞(例如檢查 NULL 數值)到使用內建 AI 功能 評估資料意義或品質的更複雜檢查。 選擇與你所檢查資料的風險與重要性相符的驗證等級。

將這些查詢回傳的列視為審查候選,而非自動錯誤。 在修正或刪除資料列前,請先與資料或來源系統擁有者確認業務規則,並偏好先修正原始碼或轉換,而非原地更新事實列。

尋找欄位中缺少值的列

使用簡單的 WHERE 子句來尋找所需欄位中缺少值的列。 此檢查是載入資料表後執行的最快且最常見的檢查之一。

SELECT SaleKey, CustomerKey, StockItemKey, Quantity, UnitPrice
FROM dbo.fact_sale
WHERE CustomerKey IS NULL
   OR StockItemKey IS NULL
   OR Quantity IS NULL
   OR UnitPrice IS NULL;

驗證計算結果

將儲存的總數與預期值比較,以發現在擷取或轉換過程中產生的資料品質問題。 例如,TotalIncludingTax 應始終等於 TotalExcludingTax 加上 TaxAmount。 因為涉及 NULL 的 SQL 比較從不會被評估為真,也要明確檢查缺少的數量,避免那些列被默默排除。

SELECT SaleKey, TotalExcludingTax, TaxAmount, TotalIncludingTax,
       (TotalExcludingTax + TaxAmount) AS ExpectedTotalIncludingTax
FROM dbo.fact_sale
WHERE TotalExcludingTax IS NULL
   OR TaxAmount IS NULL
   OR TotalIncludingTax IS NULL
   OR TotalIncludingTax <> (TotalExcludingTax + TaxAmount);

尋找重複的列

檢查應該是獨一無二的商業欄位組合。 如果你的發票模型允許每個庫存項目在發票上最多只有一列,則 StockItemKey 與 WWIInvoiceID 的組合必須是唯一的。

SELECT WWIInvoiceID, StockItemKey, COUNT(*) AS NumberOfRows
FROM dbo.fact_sale
WHERE WWIInvoiceID IS NOT NULL
  AND StockItemKey IS NOT NULL
GROUP BY WWIInvoiceID, StockItemKey
HAVING COUNT(*) > 1;

你也可以用不同的商業欄位組合來檢查重複,這只是一種啟發式,而非嚴格的規則。 同一位銷售人員在同一天將同一庫存品項銷售給同一客戶超過一次的情況並不常見,因此,若 StockItemKey、InvoiceDateKey、SalespersonKey 和 CustomerKey 的組合出現超過一筆資料列,則值得檢查是否為可能的重複紀錄。 在將匹配視為確認前,請先與來源系統確認,因為同一天仍有合法重複訂單的可能性。

SELECT CustomerKey, StockItemKey, InvoiceDateKey, SalespersonKey, COUNT(*) AS NumberOfRows
FROM dbo.fact_sale
WHERE CustomerKey IS NOT NULL
  AND StockItemKey IS NOT NULL
  AND InvoiceDateKey IS NOT NULL
  AND SalespersonKey IS NOT NULL
GROUP BY CustomerKey, StockItemKey, InvoiceDateKey, SalespersonKey
HAVING COUNT(*) > 1;

驗證內容

檢查數值是否落在預期範圍內。 例如, Quantity 和 UnitPrice 應該總是正數。

SELECT SaleKey, Quantity, UnitPrice
FROM dbo.fact_sale
WHERE Quantity <= 0
   OR UnitPrice <= 0;

用 AI 功能驗證資料

對於難以用簡單謂詞表達的檢查,可以使用 AI 函數 以自然語言推理欄位內容。 在 dbo.fact_sale中 Description ,通常會提到產品是新鮮、冷凍還是冷藏,所以你可以用 AI_GENERATE_RESPONSE 來檢查它是否符合該行 TotalDryItems 數和 TotalChillerItems 數量的一致性。 將指令定義為 @prompt 變數一次,並將列特定的值作為獨立的資料參數傳遞。

DECLARE @prompt nvarchar(max) = N'A product description that mentions frozen or chilled items should usually have a nonzero chiller item count, and a description that mentions only dry or ambient items should usually have a nonzero dry item count. Based on the description, dry item count, and chiller item count below, respond with OK if the values look consistent, or a short phrase describing what might be worth reviewing.';

DECLARE @InvoiceDate date = '2013-01-01';

SELECT SaleKey, Description, TotalDryItems, TotalChillerItems,
       AI_GENERATE_RESPONSE(
           @prompt,
           CONCAT(
               'Description: ', Description,
               '. Dry item count: ', TotalDryItems,
               '. Chiller item count: ', TotalChillerItems
           )
       ) AS ReviewNote
FROM dbo.fact_sale
WHERE InvoiceDateKey = @InvoiceDate;

在修正原始資料前,請與來源系統擁有者確認可能存在的不一致之處。

後續步驟