sfcc-cip-analytics-client
Version:
SFCC Commerce Intelligence Platform Analytics Client
67 lines (66 loc) • 2.63 kB
JavaScript
;
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: [],
};
};