UNPKG

sfcc-cip-analytics-client

Version:

SFCC Commerce Intelligence Platform Analytics Client

63 lines (62 loc) 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.querySearchQueryPerformance = void 0; const types_1 = require("../types"); const helpers_1 = require("../helpers"); /** * Query search term performance to identify revenue drivers and missed opportunities * Business Question: Which search terms drive revenue vs which represent missed opportunities? * Primary users: Merchandising and UX teams * @param client The Avatica client instance (must have an open connection) * @param params Query parameters including siteId, dateRange, and hasResults * @param batchSize Size of each batch to yield (default: 100) */ const querySearchQueryPerformance = async function* querySearchQueryPerformance(client, params, batchSize = 100) { const { sql, parameters } = querySearchQueryPerformance.QUERY(params); yield* (0, helpers_1.executeParameterizedQuery)(client, (0, types_1.cleanSQL)(sql), parameters, batchSize); }; exports.querySearchQueryPerformance = querySearchQueryPerformance; exports.querySearchQueryPerformance.metadata = { name: "search-query-performance", description: "Identify which search terms drive revenue vs missed opportunities", category: "Search Analytics", requiredParams: ["siteId", "hasResults", "from", "to"], }; exports.querySearchQueryPerformance.QUERY = (params) => { (0, helpers_1.validateRequiredParams)(params, ["siteId", "dateRange", "hasResults"]); const { startDate, endDate } = (0, helpers_1.formatDateRange)(params.dateRange); const sql = ` WITH conversion AS ( SELECT LOWER(sc.query) AS query, SUM(sc.num_searches) AS converted_searches, SUM(sc.num_orders) AS orders, SUM(sc.std_revenue) AS std_revenue, SUM(sc.std_revenue) / NULLIF(CAST(SUM(sc.num_orders) AS FLOAT), 0) AS std_revenue_per_order FROM ccdw_aggr_search_conversion sc JOIN ccdw_dim_site s ON s.site_id = sc.site_id WHERE sc.search_date >= '${startDate}' AND sc.search_date <= '${endDate}' AND s.nsite_id = '${params.siteId}' AND sc.has_results = ${params.hasResults} GROUP BY LOWER(sc.query) ) SELECT query, converted_searches, orders, std_revenue, std_revenue_per_order, CASE WHEN converted_searches > 0 THEN (CAST(orders AS FLOAT) / converted_searches) * 100 ELSE 0 END AS conversion_rate FROM conversion ORDER BY std_revenue DESC `; return { sql, parameters: [], }; };