Проверки
This commit is contained in:
@@ -12,10 +12,7 @@ BEGIN
|
|||||||
(SELECT COUNT(*) FROM dds.dim_customer);
|
(SELECT COUNT(*) FROM dds.dim_customer);
|
||||||
END $$;
|
END $$;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- 3. Проверка: у каждого факта есть валидная дата (date_key существует)
|
-- 3. Проверка: у каждого факта есть валидная дата (date_key существует)
|
||||||
|
|
||||||
DO $$
|
DO $$
|
||||||
DECLARE
|
DECLARE
|
||||||
expected_count bigint;
|
expected_count bigint;
|
||||||
@@ -44,41 +41,3 @@ BEGIN
|
|||||||
RAISE NOTICE '✅ SCD Type 2: клиент 101 имеет %s версий — история сохранена', version_count;
|
RAISE NOTICE '✅ SCD Type 2: клиент 101 имеет %s версий — история сохранена', version_count;
|
||||||
END $$;
|
END $$;
|
||||||
|
|
||||||
-- 5. Проверка: сумма amount = qty * price_at_sale (без округления)
|
|
||||||
DO $$
|
|
||||||
DECLARE bad_rows INT;
|
|
||||||
BEGIN
|
|
||||||
SELECT COUNT(*) INTO bad_rows
|
|
||||||
FROM (
|
|
||||||
SELECT
|
|
||||||
f.sale_id,
|
|
||||||
f.amount,
|
|
||||||
oi.qty * oi.price_at_sale AS expected_amount
|
|
||||||
FROM dds.fact_sales f
|
|
||||||
JOIN ods.orders o ON f.date_key = CAST(TO_CHAR(o.order_date, 'YYYYMMDD') AS INT)
|
|
||||||
JOIN ods.order_items oi ON o.order_id = oi.order_id
|
|
||||||
WHERE ROUND(f.amount, 2) <> ROUND(oi.qty * oi.price_at_sale, 2)
|
|
||||||
LIMIT 10
|
|
||||||
) mismatches;
|
|
||||||
--
|
|
||||||
ASSERT bad_rows = 0,
|
|
||||||
'ОШИБКА: обнаружены расхождения между amount и qty * price_at_sale';
|
|
||||||
RAISE NOTICE '✅ Все суммы рассчитаны верно (amount = qty × price_at_sale)';
|
|
||||||
END $$;
|
|
||||||
|
|
||||||
-- ===============================================
|
|
||||||
-- Финальный отчёт для аналитика
|
|
||||||
-- ===============================================
|
|
||||||
SELECT
|
|
||||||
dc.customer_bk AS "ID клиента",
|
|
||||||
dc.email AS "Email",
|
|
||||||
dc.city AS "Город",
|
|
||||||
SUM(f.quantity) AS "Всего товаров",
|
|
||||||
SUM(f.amount) AS "Выручка, ₽"
|
|
||||||
FROM dds.fact_sales f
|
|
||||||
JOIN dds.dim_customer dc
|
|
||||||
ON f.customer_sk = dc.customer_sk
|
|
||||||
--AND dc.is_current -- только актуальная версия
|
|
||||||
GROUP BY dc.customer_bk, dc.email, dc.city
|
|
||||||
ORDER BY SUM(f.amount) DESC;
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user