diff --git a/dwh-modeling/sql/04_validation.sql b/dwh-modeling/sql/04_validation.sql index a2d31c3..3134451 100644 --- a/dwh-modeling/sql/04_validation.sql +++ b/dwh-modeling/sql/04_validation.sql @@ -12,10 +12,7 @@ BEGIN (SELECT COUNT(*) FROM dds.dim_customer); END $$; - - -- 3. Проверка: у каждого факта есть валидная дата (date_key существует) - DO $$ DECLARE expected_count bigint; @@ -44,41 +41,3 @@ BEGIN RAISE NOTICE '✅ SCD Type 2: клиент 101 имеет %s версий — история сохранена', version_count; 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; -