ตรวจสอบและทําความสะอาดข้อมูลในคลังสินค้า

นําไปใช้กับ:✅ Warehouse ใน Microsoft Fabric

หลังจาก ที่คุณสร้างตาราง และ โหลดข้อมูลเข้าไปแล้ว ให้ตรวจสอบความสมบูรณ์และถูกต้องของข้อมูลก่อนนําไปใช้ในการรายงานหรือการประมวลผลในขั้นตอนถัดไป บทความนี้ให้ตัวอย่างง่าย ๆ และสมจริงของคําสั่งค้นหาการตรวจสอบและทําความสะอาดที่คุณสามารถรันกับdbo.fact_saleตารางที่สร้างใน Create tables in warehouse

ข้อกำหนดเบื้องต้น

เมื่อต้องการเริ่มต้นใช้งาน ให้ทําตามข้อกําหนดเบื้องต้นต่อไปนี้:

  • มีสิทธิ์เข้าถึงรายการ Warehouse ภายในพื้นที่ทํางาน ความจุ Premium ที่มีสิทธิ์ผู้สนับสนุนหรือสูงกว่า
    • อย่าลืมเชื่อมต่อกับสินค้าคลังสินค้าของคุณ คุณไม่สามารถรันคําสั่งค้นหาโดยตรงในปลายทาง SQL analytics ของคลังสินค้าได้
  • เลือกเครื่องมือคิวรีของคุณ บทช่วยสอนนี้มีตัว แก้ไขคิวรี SQL ในพอร์ทัล Microsoft Fabric แต่คุณสามารถใช้เครื่องมือคิวรี T-SQL ใดก็ได้
  • ให้dbo.fact_saleตารางถูกเติมข้อมูลตามที่แสดงใน Create tables in warehouse

คําสั่งตรวจสอบความถูกต้องอาจมีตั้งแต่เงื่อนไขง่ายๆ (เช่น การตรวจสอบ 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 เนื่องจากการเปรียบเทียบ SQL ไม่เคย NULL ถูกประเมินเป็น true ดังนั้นควรตรวจสอบจํานวนที่ขาดหายไปอย่างชัดเจนเพื่อไม่ให้แถวเหล่านั้นถูกตัดออกอย่างเงียบ ๆ

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

ค้นหาแถวที่ซ้ํากัน

ตรวจสอบการรวมของคอลัมน์ธุรกิจที่ควรจะมีความซ้ําซ้อนร่วมกัน ถ้าโมเดลใบแจ้งหนี้ของคุณอนุญาตให้มีเพียงหนึ่งแถวต่อรายการสินค้าคงคลังในใบแจ้งหนี้ การรวมกันของ WWIInvoiceID และ StockItemKey ควรจะไม่ซ้ํากัน

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;

คุณยังสามารถตรวจสอบการซ้ําซ้อนโดยใช้การผสมผสานของคอลัมน์ธุรกิจที่แตกต่างกัน เป็นวิธีประเมินมากกว่ากฎที่เคร่งครัด เป็นเรื่องปกติที่พนักงานขายคนเดียวกันจะขายสินค้าคงคลังเดียวกันให้ลูกค้าคนเดียวกันมากกว่าหนึ่งครั้งในวันเดียวกัน ดังนั้นการมีมากกว่าหนึ่งแถวสําหรับการรวมของ CustomerKey, StockItemKey, InvoiceDateKey, และ SalespersonKey จึงควรตรวจสอบว่าอาจเป็นสินค้าซ้ํา ยืนยันกับระบบต้นทางก่อนที่จะถือว่าการจับคู่ได้รับการยืนยัน เพราะสามารถสั่งซื้อซ้ําที่ถูกต้องในวันเดียวกันได้

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;

ตรวจสอบความไม่สอดคล้องที่อาจเกิดขึ้นกับเจ้าของระบบต้นทางก่อนแก้ไขข้อมูลต้นทาง

ขั้นตอนถัดไป