sfcc-cip-analytics-client
Version:
SFCC Commerce Intelligence Platform Analytics Client
63 lines (62 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.queryTopReferrers = void 0;
const types_1 = require("../types");
const helpers_1 = require("../helpers");
/**
* Query top referrers to identify high-value traffic sources
* Business Question: Where is my traffic coming from and which sources drive the most valuable visitors?
* Primary users: Marketing teams
* @param client The Avatica client instance (must have an open connection)
* @param siteId The natural site ID to filter by
* @param dateRange Date range to filter results
* @param limit Number of top referrers to return (default: 20)
* @param batchSize Size of each batch to yield (default: 100)
*/
const queryTopReferrers = function queryTopReferrers(client, params, batchSize = 100) {
const { sql, parameters } = queryTopReferrers.QUERY(params);
return (0, helpers_1.executeParameterizedQuery)(client, (0, types_1.cleanSQL)(sql), parameters, batchSize);
};
exports.queryTopReferrers = queryTopReferrers;
exports.queryTopReferrers.metadata = {
name: "top-referrers",
description: "Identify high-value traffic sources and referrer performance",
category: "Traffic Analytics",
requiredParams: ["siteId", "from", "to"],
optionalParams: ["limit"],
};
exports.queryTopReferrers.QUERY = (params) => {
(0, helpers_1.validateRequiredParams)(params, ["siteId", "dateRange"]);
const { startDate, endDate } = (0, helpers_1.formatDateRange)(params.dateRange);
const limit = params.limit || 20;
const sql = `
WITH total AS (
SELECT SUM(num_visits) AS total_visits
FROM ccdw_aggr_visit_referrer
WHERE visit_date >= '${startDate}'
AND visit_date <= '${endDate}'
)
SELECT
vr.referrer_medium AS traffic_medium,
vr.referrer_source AS traffic_source,
SUM(vr.num_visits) AS total_visits,
SUM(vr.num_visits) * 100.0 / total.total_visits AS visit_percentage
FROM ccdw_aggr_visit_referrer vr
JOIN ccdw_dim_site s
ON s.site_id = vr.site_id
JOIN total ON TRUE
WHERE vr.visit_date >= '${startDate}'
AND vr.visit_date <= '${endDate}'
AND s.nsite_id = '${params.siteId}'
GROUP BY
vr.referrer_medium,
vr.referrer_source,
total.total_visits
ORDER BY total_visits DESC
LIMIT ${limit}
`;
return {
sql,
parameters: [],
};
};