UNPKG

sfcc-cip-analytics-client

Version:

SFCC Commerce Intelligence Platform Analytics Client

67 lines (66 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.queryPromotionDiscountAnalysis = void 0; const types_1 = require("../types"); const helpers_1 = require("../helpers"); /** * Query promotion discount analysis to measure incremental impact * Business Question: Are my promotions driving incremental sales or just discounting existing sales? * Primary users: Marketing and Merchandising teams * @param client The Avatica client instance (must have an open connection) * @param dateRange Date range to filter results * @param batchSize Size of each batch to yield (default: 100) */ const queryPromotionDiscountAnalysis = function queryPromotionDiscountAnalysis(client, params, batchSize = 100) { const { sql, parameters } = queryPromotionDiscountAnalysis.QUERY(params); return (0, helpers_1.executeParameterizedQuery)(client, (0, types_1.cleanSQL)(sql), parameters, batchSize); }; exports.queryPromotionDiscountAnalysis = queryPromotionDiscountAnalysis; exports.queryPromotionDiscountAnalysis.metadata = { name: "promotion-discount-analysis", description: "Measure promotional impact on sales and identify incremental revenue", category: "Promotion Analytics", requiredParams: ["from", "to"], }; exports.queryPromotionDiscountAnalysis.QUERY = (params) => { (0, helpers_1.validateRequiredParams)(params, ["dateRange"]); const { startDate, endDate } = (0, helpers_1.formatDateRange)(params.dateRange); const sql = ` WITH TOTAL_ORDERS AS ( SELECT ss.submit_date AS submit_day, SUM(num_orders) AS total_orders FROM ccdw_aggr_sales_summary ss WHERE ss.submit_date >= '${startDate}' AND ss.submit_date <= '${endDate}' GROUP BY ss.submit_date ), PROMOTION_DISCOUNT AS ( SELECT pss.submit_date AS submit_day, p.promotion_class AS promotion_class, SUM(std_total_discount) AS std_total_discount, SUM(num_orders) AS promotion_orders FROM ccdw_aggr_promotion_sales_summary pss JOIN ccdw_dim_promotion p ON p.promotion_id = pss.promotion_id WHERE pss.submit_date >= '${startDate}' AND pss.submit_date <= '${endDate}' GROUP BY pss.submit_date, p.promotion_class ) SELECT t.submit_day, t.total_orders, p.promotion_class, p.std_total_discount, p.promotion_orders, p.std_total_discount / p.promotion_orders AS avg_discount_per_order FROM TOTAL_ORDERS t LEFT JOIN PROMOTION_DISCOUNT p ON t.submit_day = p.submit_day `; return { sql, parameters: [], }; };