Walidacja i czyszczenie danych w magazynie

Dotyczy:✅ Magazyn w systemie Microsoft Fabric

Po utworzeniu tabeli i załadowaniu danych do niej zweryfikowaj ich kompletność i poprawność przed użyciem ich do raportowania lub dalszego przetwarzania. Ten artykuł przedstawia proste, realistyczne przykłady zapytań służących do walidacji i oczyszczania, które można uruchamiać względem tabeli dbo.fact_sale, utworzonej w artykule Tworzenie tabel w magazynie.

Prerequisites

Aby rozpocząć pracę, wykonaj następujące wymagania wstępne:

  • Mieć dostęp do elementu magazynu w obszarze roboczym pojemności Premium z uprawnieniami współautora lub wyższymi.
    • Pamiętaj, aby nawiązać połączenie z przedmiotem magazynowym. Nie można uruchamiać zapytań bezpośrednio w punkcie końcowym analizy SQL magazynu.
  • Wybierz narzędzie do wykonywania zapytań. Ten samouczek zawiera edytor zapytań SQL w portalu usługi Microsoft Fabric, ale możesz użyć dowolnego narzędzia do wykonywania zapytań T-SQL.
  • Miej tabelę dbo.fact_sale wypełnioną danymi, jak pokazano w Utwórz tabele w magazynie.

Zapytania walidacyjne mogą obejmować zarówno bardzo proste predykaty (na przykład sprawdzanie NULL wartości), jak i bardziej zaawansowane sprawdzenia wykorzystujące wbudowane funkcje AI do oceny znaczenia lub jakości danych. Wybierz poziom weryfikacji, który odpowiada ryzyku i ważności danych, które sprawdzasz.

Traktuj wiersze zwrócone przez te zapytania jako wymagające przeglądu, a nie jako błędy wykryte automatycznie. Potwierdź regułę biznesową z właścicielem danych lub właścicielem systemu źródłowego przed skorygowaniem lub usunięciem wierszy oraz preferuj naprawę źródła lub transformacji zamiast bezpośredniej aktualizacji wierszy tabeli faktów.

Znajdź wiersze z brakującymi wartościami w kolumnie

Użyj prostej klauzuli WHERE, aby znaleźć wiersze, w których brakuje wartości w wymaganych kolumnach. To sprawdzenie jest jednym z najszybszych i najczęściej wykonywanych po załadowaniu danych do tabeli.

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;

Walidacja obliczeń

Porównaj przechowywane sumy z ich oczekiwanymi wartościami, aby wychwycić problemy z jakością danych pojawiające się podczas pobierania lub transformacji. Na przykład zawsze TotalIncludingTax powinno być równe TotalExcludingTax plus TaxAmount. Ponieważ porównania SQL z użyciem NULL nigdy nie dają wyniku true, sprawdź też jawnie brakujące kwoty, aby te wiersze nie zostały po cichu pominięte.

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);

Znajdź zduplikowane wiersze

Sprawdź kombinację kolumn biznesowych, które łącznie powinny być unikalne. Jeśli Twój model faktury pozwala na co najwyżej jeden wiersz na każdy element magazynowy na fakturze, kombinacja WWIInvoiceID i StockItemKey powinna być unikalna.

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;

Możesz też sprawdzać duplikaty, używając innej kombinacji kolumn biznesowych, jako heurystykę, a nie ścisłą regułę. Rzadko zdarza się, by ten sam sprzedawca sprzedawał ten sam produkt towarowy temu samemu klientowi więcej niż raz tego samego dnia, więc więcej niż jeden wiersz dla kombinacji CustomerKey, StockItemKey, InvoiceDateKey, i SalespersonKey warto przejrzeć jako możliwy duplikat. Zweryfikuj w systemie źródłowym, zanim uznasz dopasowanie za potwierdzone, ponieważ możliwe jest uzasadnione ponowne zamówienie tego samego dnia.

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;

Weryfikowanie zawartości

Sprawdź, czy wartości mieszczą się w oczekiwanym zbiorze lub zakresie. Na przykład Quantity i powinny UnitPrice zawsze być liczbami dodatnimi.

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

Walidacja danych za pomocą funkcji AI

W przypadku sprawdzeń, które trudno wyrazić jako proste predykaty, używaj funkcji AI do analizowania zawartości kolumny w języku naturalnym. W dbo.fact_saleDescription często zawiera informację o tym, czy produkt jest świeży, mrożony czy schłodzony, więc możesz użyć AI_GENERATE_RESPONSE, aby sprawdzić, czy jest to spójne z liczbami TotalDryItems i TotalChillerItems w tym wierszu. Zdefiniuj instrukcje jednokrotnie jako zmienną @prompt, a wartości właściwe dla danego wiersza przekaż jako osobny argument danych.

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;

Przeanalizuj możliwe niespójności z właścicielem systemu źródłowego przed korektą danych źródłowych.

Następny krok