diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql index e779c9d..a3720b4 100644 --- a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql +++ b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql @@ -28,7 +28,10 @@ -- DATE_KEY DATE, -- PLATFORM STRING, -- STORE_NAME STRING, --- STORE_TYPE STRING) +-- STORE_TYPE STRING, +-- PRICE STRING, +-- DIGITAL_SPREAD_RATE STRING, +-- WEIGHTED_SPREAD_RATE STRING -- USING delta -- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping_niad'; -- -- 上面是生产环境location,下面是测试环境location @@ -44,8 +47,6 @@ -- 修改日期:2026-04-02 -- **************************************************** -INSERT OVERWRITE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD - WITH -- CTE 1:获取NIAD市场的产品编码集合 @@ -55,6 +56,23 @@ niad_pack_cods AS ( FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES WHERE MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' AND DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') +), + +-- CTE 2:从KPI宽转长表中横向取出三个零售铺货率/价格指标 +-- 来源:Retail pack粒度数据(EC行join后为NULL,属正常) +-- 关联键:pack_code = PACK_COD, geo_key = AUDIT_COD, YYYYMM = YYYYMM +kpi_pivot AS ( + SELECT + pack_code, + YYYYMM, + geo_key, + MAX(CASE WHEN KPI_name = 'pack_price' THEN kpi_val END) AS PRICE, + MAX(CASE WHEN KPI_name = 'digital_spread_rate' THEN kpi_val END) AS DIGITAL_SPREAD_RATE, + MAX(CASE WHEN KPI_name = 'weighted_spread_rate' THEN kpi_val END) AS WEIGHTED_SPREAD_RATE + FROM dm.dm_zk_retail_sales_kpi + WHERE KPI_name IN ('pack_price', 'digital_spread_rate', 'weighted_spread_rate') + AND ta = 'DM' + GROUP BY pack_code, YYYYMM, geo_key ) -- 主查询:提取所有关联市场的完整销售数据 @@ -101,12 +119,23 @@ SELECT /*+ BROADCAST(m) */ CONCAT(t.AUDIT_COD, t.DATA_SOURCE) AS AUDIT_SOURCE, CONCAT(t.MARKET, t.DATA_SOURCE) AS MARKET_SOURCE, CONCAT(t.MARKET,t.CLASS, t.DATA_SOURCE) AS CLASS_SOURCE, - + -- 时间维度:优化为 TO_DATE 直接解析 yyyyMM 格式,避免字符串拼接 TO_DATE(t.YYYYMM, 'yyyyMM') AS DATE_KEY, PLATFORM_TYPE, STORE_NAME, - STORE_TYPE + STORE_TYPE, + + -- 零售铺货率 & 价格(仅 Retail 行有值,EC 行为 NULL) + CAST(kpi.PRICE AS string) AS PRICE, + CAST(round(kpi.DIGITAL_SPREAD_RATE,2) AS string)||'%' AS DIGITAL_SPREAD_RATE, + CAST(round(kpi.WEIGHTED_SPREAD_RATE,2) AS string)||'%' AS WEIGHTED_SPREAD_RATE + FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES t LEFT SEMI JOIN niad_pack_cods m ON t.PACK_COD = m.PACK_COD +LEFT JOIN kpi_pivot kpi + ON kpi.pack_code = t.PACK_COD + AND kpi.YYYYMM = t.YYYYMM + AND kpi.geo_key = t.AUDIT_COD + AND t.DATA_SOURCE = 'Retail(Quarterly)' WHERE t.DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') \ No newline at end of file