diff --git a/components/ExperimentDetail.tsx b/components/ExperimentDetail.tsx index 1c2c924..04af209 100644 --- a/components/ExperimentDetail.tsx +++ b/components/ExperimentDetail.tsx @@ -92,11 +92,15 @@ const ExperimentDetail: React.FC = ({ experimentId, onClo const asin = (r.asin || '').toUpperCase(); if (!asinMap.has(asin)) return; + const mkt = (r.marketplace || (r as any).customer || '').toLowerCase(); + const isMarket = !experiment.marketplace || experiment.marketplace === 'All' || mkt.includes(experiment.marketplace.toLowerCase()); + if (!isMarket) return; + const recordDate = new Date(r.year, 0, 1 + ((r.week || 1) - 1) * 7); if (recordDate >= startDate && recordDate <= endDate) { const d = asinMap.get(asin)!; - d.units += r.unitsTotal || 0; - d.revenue += r.salesTotal || 0; + d.units += (r.unitsTotal ?? (r as any).units ?? 0); + d.revenue += (r.salesTotal ?? (r as any).sellOut ?? 0); d.gv += r.glanceViews || 0; d.spend += r.cost || 0; } @@ -125,6 +129,10 @@ const ExperimentDetail: React.FC = ({ experimentId, onClo const asin = (r.asin || '').toUpperCase(); if (!asinSet.has(asin)) return; + const mkt = (r.marketplace || (r as any).customer || '').toLowerCase(); + const isMarket = !experiment.marketplace || experiment.marketplace === 'All' || mkt.includes(experiment.marketplace.toLowerCase()); + if (!isMarket) return; + const weekNum = r.week || 1; const yearStr = r.year || new Date().getFullYear(); const weekStr = `${yearStr}-W${String(weekNum).padStart(2, '0')}`; @@ -142,8 +150,8 @@ const ExperimentDetail: React.FC = ({ experimentId, onClo } const w = weeklyMap.get(weekStr); - w.units += r.unitsTotal || 0; - w.revenue += r.salesTotal || 0; + w.units += (r.unitsTotal ?? (r as any).units ?? 0); + w.revenue += (r.salesTotal ?? (r as any).sellOut ?? 0); w.gv += r.glanceViews || 0; w.spend += r.cost || 0; }); diff --git a/services/experiments.ts b/services/experiments.ts index 61ce24c..4cd1896 100644 --- a/services/experiments.ts +++ b/services/experiments.ts @@ -260,25 +260,29 @@ export const calculateExperimentPerformance = async ( const baselineData = salesData.filter(r => { const recordDate = new Date(r.year, 0, 1 + (r.week - 1) * 7); - return asinSet.has(r.asin.toUpperCase()) && + const mkt = (r.marketplace || (r as any).customer || '').toLowerCase(); + const isMarket = !experiment.marketplace || experiment.marketplace === 'All' || mkt.includes(experiment.marketplace.toLowerCase()); + return isMarket && asinSet.has(r.asin.toUpperCase()) && recordDate >= baselineStart && recordDate < baselineEnd; }); const experimentData = salesData.filter(r => { const recordDate = new Date(r.year, 0, 1 + (r.week - 1) * 7); - return asinSet.has(r.asin.toUpperCase()) && + const mkt = (r.marketplace || (r as any).customer || '').toLowerCase(); + const isMarket = !experiment.marketplace || experiment.marketplace === 'All' || mkt.includes(experiment.marketplace.toLowerCase()); + return isMarket && asinSet.has(r.asin.toUpperCase()) && recordDate >= startDate && recordDate <= endDate; }); - const baseline_units = baselineData.reduce((sum, r) => sum + (r.unitsTotal || 0), 0); - const baseline_revenue = baselineData.reduce((sum, r) => sum + (r.salesTotal || 0), 0); + const baseline_units = baselineData.reduce((sum, r) => sum + (r.unitsTotal ?? (r as any).units ?? 0), 0); + const baseline_revenue = baselineData.reduce((sum, r) => sum + (r.salesTotal ?? (r as any).sellOut ?? 0), 0); const baseline_gv = baselineData.reduce((sum, r) => sum + (r.glanceViews || 0), 0); const baseline_cvr = baseline_gv > 0 ? (baseline_units / baseline_gv) * 100 : 0; const baseline_spend = baselineData.reduce((sum, r) => sum + (r.cost || 0), 0); const baseline_acos = baseline_revenue > 0 ? (baseline_spend / baseline_revenue) * 100 : 0; - const experiment_units = experimentData.reduce((sum, r) => sum + (r.unitsTotal || 0), 0); - const experiment_revenue = experimentData.reduce((sum, r) => sum + (r.salesTotal || 0), 0); + const experiment_units = experimentData.reduce((sum, r) => sum + (r.unitsTotal ?? (r as any).units ?? 0), 0); + const experiment_revenue = experimentData.reduce((sum, r) => sum + (r.salesTotal ?? (r as any).sellOut ?? 0), 0); const experiment_gv = experimentData.reduce((sum, r) => sum + (r.glanceViews || 0), 0); const experiment_cvr = experiment_gv > 0 ? (experiment_units / experiment_gv) * 100 : 0; const experiment_spend = experimentData.reduce((sum, r) => sum + (r.cost || 0), 0);