DBR更新,包含haoyi的调整
This commit is contained in:
2026-05-02 06:48:24 +00:00
parent 8b73f0cc7c
commit 3a03ba1ad2
6 changed files with 724 additions and 219 deletions

View File

@@ -1829,242 +1829,250 @@
"byteLimit": 2048000, "byteLimit": 2048000,
"rowLimit": 10000 "rowLimit": 10000
}, },
"finishTime": 1777652323660,
"inputWidgets": {}, "inputWidgets": {},
"nuid": "f8d0befe-3de4-48a8-ac53-cdc19c897d0f", "nuid": "f8d0befe-3de4-48a8-ac53-cdc19c897d0f",
"showTitle": false, "showTitle": false,
"submitTime": 1777537485091, "startTime": 1777652315675,
"submitTime": 1777652314433,
"tableResultSettingsMap": {}, "tableResultSettingsMap": {},
"title": "" "title": ""
} }
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"-- ============================================================\n", "-- -- ============================================================\n",
"-- 目标表tmp.tmp_zk_ec_sales_kpi_tmp\n", "-- -- 目标表tmp.tmp_zk_ec_sales_kpi_tmp\n",
"-- 功能B2C 电商直取数据 → KPI 宽表QTD 粒度)\n", "-- -- 功能B2C 电商直取数据 → KPI 宽表QTD 粒度)\n",
"-- 优化corp_map / brand_base / ta_base 各物化一次,避免重复扫表\n", "-- -- 优化corp_map / brand_base / ta_base 各物化一次,避免重复扫表\n",
"-- ============================================================\n", "-- -- ============================================================\n",
"INSERT OVERWRITE TABLE tmp.tmp_zk_ec_sales_kpi_tmp\n", "-- INSERT OVERWRITE TABLE tmp.tmp_zk_ec_sales_kpi_tmp\n",
"\n", "\n",
"WITH\n", "-- WITH\n",
"\n", "\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"-- CTE 1企业编码映射原 7 处重复子查询,合并为一次扫描)\n", "-- -- CTE 1企业编码映射原 7 处重复子查询,合并为一次扫描)\n",
"-- 东阳光仅取集团层ZK_Prod_C IS NULL其他企业全量\n", "-- -- 东阳光仅取集团层ZK_Prod_C IS NULL其他企业全量\n",
"-- 小表,适合 BROADCAST\n", "-- -- 小表,适合 BROADCAST\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"corp_map AS (\n", "-- corp_map AS (\n",
" SELECT DISTINCT ZK_Corp_C, CORP_COD\n", "-- SELECT DISTINCT ZK_Corp_C, CORP_COD\n",
" FROM dwd.dwd_inc_gnd_retail_b2c_label_total\n", "-- FROM dwd.dwd_inc_gnd_retail_b2c_label_total\n",
" WHERE (ZK_Corp_C = '东阳光' AND ZK_Prod_C IS NULL)\n", "-- WHERE (ZK_Corp_C = '东阳光' AND ZK_Prod_C IS NULL)\n",
" OR ZK_Corp_C != '东阳光'\n", "-- OR ZK_Corp_C != '东阳光'\n",
"),\n", "-- ),\n",
"\n", "\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"-- CTE 2B2C Top10 品牌驱动数据(当期 + 去年同期一次性关联)\n", "-- -- CTE 2B2C Top10 品牌驱动数据(当期 + 去年同期一次性关联)\n",
"-- 原 5 个 UNION 分支各自关联一次,现合并为单次自连接\n", "-- -- 原 5 个 UNION 分支各自关联一次,现合并为单次自连接\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"brand_base AS (\n", "-- brand_base AS (\n",
" SELECT\n", "-- SELECT\n",
" /*+ BROADCAST(m) */\n", "-- /*+ BROADCAST(m) */\n",
" m.CORP_COD,\n", "-- m.CORP_COD,\n",
" a.ytd,\n", "-- a.ytd,\n",
" a.platform,\n", "-- a.platform,\n",
" CASE WHEN a.store_type = '三方' THEN '第三方' ELSE a.store_type END AS store_type,\n", "-- CASE WHEN a.store_type = '三方' THEN '第三方' ELSE a.store_type END AS store_type,\n",
" CASE WHEN UPPER(a.rank) = 'TTL MKT' THEN 'Y' ELSE 'N' END AS total_flag,\n", "-- CASE WHEN UPPER(a.rank) = 'TTL MKT' THEN 'Y' ELSE 'N' END AS total_flag,\n",
" -- 当期指标\n", "-- -- 当期指标\n",
" a.yoy_gr,\n", "-- a.yoy_gr,\n",
" a.top1_brand_gr,\n", "-- a.top1_brand_gr,\n",
" a.top1_brand_val,\n", "-- a.top1_brand_val,\n",
" a.growth_driver_brand_val,\n", "-- a.growth_driver_brand_val,\n",
" a.growth_driver_brand_gr,\n", "-- a.growth_driver_brand_gr,\n",
" -- 去年同期指标ytd + 4 偏移)\n", "-- -- 去年同期指标ytd + 4 偏移)\n",
" c.yoy_gr AS yoy_gr_ly,\n", "-- c.yoy_gr AS yoy_gr_ly,\n",
" c.top1_brand_gr AS top1_brand_gr_ly,\n", "-- c.top1_brand_gr AS top1_brand_gr_ly,\n",
" c.growth_driver_brand_gr AS growth_driver_brand_gr_ly\n", "-- c.growth_driver_brand_gr AS growth_driver_brand_gr_ly\n",
" FROM dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", "-- FROM dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n",
" LEFT JOIN corp_map m\n", "-- LEFT JOIN corp_map m\n",
" ON a.corp = m.ZK_Corp_C\n", "-- ON a.corp = m.ZK_Corp_C\n",
" LEFT JOIN dwd.dwd_gnd_ec_b2c_top10_drives_brand c -- 同比:时间偏移 4 期\n", "-- LEFT JOIN dwd.dwd_gnd_ec_b2c_top10_drives_brand c -- 同比:时间偏移 4 期\n",
" ON a.corp = c.corp\n", "-- ON a.corp = c.corp\n",
" AND a.ytd = c.ytd + 4\n", "-- AND a.ytd = c.ytd + 4\n",
" AND a.platform = c.platform\n", "-- AND a.platform = c.platform\n",
" AND a.store_type = c.store_type\n", "-- AND a.store_type = c.store_type\n",
"),\n", "-- ),\n",
"\n", "\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"-- CTE 3TA 概览数据(当期 + 去年同期一次性关联)\n", "-- -- CTE 3TA 概览数据(当期 + 去年同期一次性关联)\n",
"-- 原 2 个 UNION 分支各自关联一次,现合并为单次自连接\n", "-- -- 原 2 个 UNION 分支各自关联一次,现合并为单次自连接\n",
"-- ────────────────────────────────────────────────────────────\n", "-- -- ────────────────────────────────────────────────────────────\n",
"ta_base AS (\n", "-- ta_base AS (\n",
" SELECT\n", "-- SELECT\n",
" /*+ BROADCAST(m) */\n", "-- /*+ BROADCAST(m) */\n",
" m.CORP_COD,\n", "-- m.CORP_COD,\n",
" a.ytd,\n", "-- a.ytd,\n",
" a.platform,\n", "-- a.platform,\n",
" a.store_type,\n", "-- a.store_type,\n",
" a.ta,\n", "-- a.ta,\n",
" a.rank,\n", "-- a.rank,\n",
" CASE WHEN LOWER(a.rank) = 'total' THEN 'Y' ELSE 'N' END AS total_flag,\n", "-- CASE WHEN LOWER(a.rank) = 'total' THEN 'Y' ELSE 'N' END AS total_flag,\n",
" REPLACE(a.sales_value, ',', '') AS sales_value, -- 清除千位分隔符\n", "-- REPLACE(a.sales_value, ',', '') AS sales_value, -- 清除千位分隔符\n",
" REPLACE(c.sales_value, ',', '') AS sales_value_ly\n", "-- REPLACE(c.sales_value, ',', '') AS sales_value_ly\n",
" FROM dwd.dwd_gnd_ec_ta_overview a\n", "-- FROM dwd.dwd_gnd_ec_ta_overview a\n",
" LEFT JOIN corp_map m\n", "-- LEFT JOIN corp_map m\n",
" ON a.corp_des = m.ZK_Corp_C -- 注意:此处关联键为 corp_des\n", "-- ON a.corp_des = m.ZK_Corp_C -- 注意:此处关联键为 corp_des\n",
" LEFT JOIN dwd.dwd_gnd_ec_ta_overview c -- 同比:时间偏移 4 期\n", "-- LEFT JOIN dwd.dwd_gnd_ec_ta_overview c -- 同比:时间偏移 4 期\n",
" ON a.ytd = c.ytd + 4\n", "-- ON a.ytd = c.ytd + 4\n",
" AND a.corp_des = c.corp_des\n", "-- AND a.corp_des = c.corp_des\n",
" AND a.platform = c.platform\n", "-- AND a.platform = c.platform\n",
" AND a.store_type = c.store_type\n", "-- AND a.store_type = c.store_type\n",
" AND a.ta = c.ta\n", "-- AND a.ta = c.ta\n",
")\n", "-- )\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 1市场整体 YOY 增长率top_yoygr— 数值型\n", "-- -- KPI 1市场整体 YOY 增长率top_yoygr— 数值型\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'top_yoygr' AS KPI_name,\n", "-- 'top_yoygr' AS KPI_name,\n",
" yoy_gr AS Kpi_val,\n", "-- yoy_gr AS Kpi_val,\n",
" yoy_gr_ly AS Kpi_val_ly,\n", "-- yoy_gr_ly AS Kpi_val_ly,\n",
" '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val, '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" '' AS ta\n", "-- '' AS ta\n",
"FROM brand_base\n", "-- FROM brand_base\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 2Top1 品牌增长率top1_brand_gr— 数值型\n", "-- -- KPI 2Top1 品牌增长率top1_brand_gr— 数值型\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'top1_brand_gr' AS KPI_name,\n", "-- 'top1_brand_gr' AS KPI_name,\n",
" top1_brand_gr AS Kpi_val,\n", "-- top1_brand_gr AS Kpi_val,\n",
" top1_brand_gr_ly AS Kpi_val_ly,\n", "-- top1_brand_gr_ly AS Kpi_val_ly,\n",
" '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val, '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" '' AS ta\n", "-- '' AS ta\n",
"FROM brand_base\n", "-- FROM brand_base\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 3Top1 品牌销售额top1_brand_val— 字符串型,无同比\n", "-- -- KPI 3Top1 品牌销售额top1_brand_val— 字符串型,无同比\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'top1_brand_val' AS KPI_name,\n", "-- 'top1_brand_val' AS KPI_name,\n",
" '' AS Kpi_val, '' AS Kpi_val_ly,\n", "-- '' AS Kpi_val, '' AS Kpi_val_ly,\n",
" top1_brand_val AS str_kpi_val,\n", "-- top1_brand_val AS str_kpi_val,\n",
" '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" '' AS ta\n", "-- '' AS ta\n",
"FROM brand_base\n", "-- FROM brand_base\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 4增量贡献品牌销售额incremental_brand— 字符串型,无同比\n", "-- -- KPI 4增量贡献品牌销售额incremental_brand— 字符串型,无同比\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'incremental_brand' AS KPI_name,\n", "-- 'incremental_brand' AS KPI_name,\n",
" '' AS Kpi_val, '' AS Kpi_val_ly,\n", "-- '' AS Kpi_val, '' AS Kpi_val_ly,\n",
" growth_driver_brand_val AS str_kpi_val,\n", "-- growth_driver_brand_val AS str_kpi_val,\n",
" '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" '' AS ta\n", "-- '' AS ta\n",
"FROM brand_base\n", "-- FROM brand_base\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 5增量贡献品牌增长率incremental_brand_gr— 数值型\n", "-- -- KPI 5增量贡献品牌增长率incremental_brand_gr— 数值型\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'incremental_brand_gr' AS KPI_name,\n", "-- 'incremental_brand_gr' AS KPI_name,\n",
" growth_driver_brand_gr AS Kpi_val,\n", "-- growth_driver_brand_gr AS Kpi_val,\n",
" growth_driver_brand_gr_ly AS Kpi_val_ly,\n", "-- growth_driver_brand_gr_ly AS Kpi_val_ly,\n",
" '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val, '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" '' AS ta\n", "-- '' AS ta\n",
"FROM brand_base\n", "-- FROM brand_base\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 6企业 TA 销售额top_corp_sales— 数值型\n", "-- -- KPI 6企业 TA 销售额top_corp_sales— 数值型\n",
"-- 注意ytd 直接填入 ytd 列ytd_src 留空(与 brand 系列相反)\n", "-- -- 注意ytd 直接填入 ytd 列ytd_src 留空(与 brand 系列相反)\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT\n", "-- SELECT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" ytd AS ytd,\n", "-- ytd AS ytd,\n",
" '' AS ytd_src,\n", "-- '' AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'top_corp_sales' AS KPI_name,\n", "-- 'top_corp_sales' AS KPI_name,\n",
" sales_value AS Kpi_val,\n", "-- sales_value AS Kpi_val,\n",
" sales_value_ly AS Kpi_val_ly,\n", "-- sales_value_ly AS Kpi_val_ly,\n",
" '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val, '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" ta\n", "-- ta\n",
"FROM ta_base\n", "-- FROM ta_base \n",
"-- -- left join ta_base c \n",
"-- -- on a.ytd = c.ytd + 100\n",
"-- -- and a.corp_des = c.corp_des \n",
"-- -- and a.platform = c.platform\n",
"-- -- and a.store_type = c.store_type\n",
"-- -- and a.ta = c.ta\n",
"\n", "\n",
"UNION ALL\n", "-- UNION ALL\n",
"\n", "\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"-- KPI 7企业 TA 排名top_rank— 字符串型,无同比\n", "-- -- KPI 7企业 TA 排名top_rank— 字符串型,无同比\n",
"-- DISTINCT 去重,避免多条重复排名行\n", "-- -- DISTINCT 去重,避免多条重复排名行\n",
"-- ════════════════════════════════════════════════════════════\n", "-- -- ════════════════════════════════════════════════════════════\n",
"SELECT DISTINCT\n", "-- SELECT DISTINCT\n",
" CORP_COD,\n", "-- CORP_COD,\n",
" '' AS ytd,\n", "-- '' AS ytd,\n",
" ytd AS ytd_src,\n", "-- ytd AS ytd_src,\n",
" platform,\n", "-- platform,\n",
" store_type,\n", "-- store_type,\n",
" 'ROC' AS geo_key,\n", "-- 'ROC' AS geo_key,\n",
" 'top_rank' AS KPI_name,\n", "-- 'top_rank' AS KPI_name,\n",
" rank AS Kpi_val,\n", "-- rank AS Kpi_val,\n",
" '' AS Kpi_val_ly,\n", "-- '' AS Kpi_val_ly,\n",
" '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", "-- '' AS str_kpi_val, '' AS str_kpi_val_ly,\n",
" '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", "-- '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n",
" total_flag,\n", "-- total_flag,\n",
" ta\n", "-- ta\n",
"FROM ta_base;" "-- FROM ta_base;"
] ]
}, },
{ {
@@ -2076,10 +2084,204 @@
"byteLimit": 2048000, "byteLimit": 2048000,
"rowLimit": 10000 "rowLimit": 10000
}, },
"finishTime": 1777652451150,
"inputWidgets": {},
"nuid": "9e6100db-d97c-41a6-8b30-4f7a774c1903",
"showTitle": false,
"startTime": 1777652447065,
"submitTime": 1777652446859,
"tableResultSettingsMap": {},
"title": ""
}
},
"outputs": [],
"source": [
"---------------------------------------将直取部分数据处理成KPI形式-----------------------------------------\n",
"insert overwrite table tmp.tmp_zk_ec_sales_kpi_tmp \n",
"select\n",
" b.CORP_COD,\n",
" '' as yyyymm,\n",
" a.ytd ,\n",
" a.platform,\n",
" case when a.store_type = '三方' then '第三方' else a.store_type end store_type ,\n",
" 'ROC' as geo_key,\n",
"'top_yoygr' as KPI_name,\n",
"a.yoy_gr as Kpi_val,\n",
"c.yoy_gr as Kpi_val_ly,\n",
"'' as str_kpi_val,\n",
"'' as str_kpi_val_ly,\n",
"'' as str_kpi_vol,\n",
"'' as str_kpi_vol_ly,\n",
"case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n",
"'' as ta\n",
"from dwd.dwd_gnd_ec_b2c_top10_drives_brand a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp = b.ZK_Corp_C\n",
"left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c \n",
"on a.corp = c.corp \n",
"and a.ytd = c.ytd + 100\n",
"and a.platform = c.platform\n",
"and a.store_type = c.store_type\n",
"-- where upper(a.rank) <> 'TTL MKT' \n",
"union all\n",
"select\n",
" b.CORP_COD,\n",
" '' as yyyymm,\n",
" a.ytd ,\n",
" a.platform,\n",
" case when a.store_type = '三方' then '第三方' else a.store_type end store_type ,\n",
" 'ROC' as geo_key,\n",
"'top1_brand_gr' as KPI_name,\n",
"a.top1_brand_gr as Kpi_val,\n",
"c.top1_brand_gr as Kpi_val_ly,\n",
"'' as str_kpi_val,\n",
"'' as str_kpi_val_ly,\n",
"'' as str_kpi_vol,\n",
"'' as str_kpi_vol_ly,\n",
"case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n",
"'' as ta\n",
"from dwd.dwd_gnd_ec_b2c_top10_drives_brand a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp = b.ZK_Corp_C\n",
"left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c \n",
"on a.corp = c.corp \n",
"and a.ytd = c.ytd + 100\n",
"and a.platform = c.platform\n",
"and a.store_type = c.store_type\n",
"-- where upper(a.rank) <> 'TTL MKT' \n",
"union all\n",
"select\n",
" b.CORP_COD,\n",
" '' as yyyymm,\n",
" a.ytd ,\n",
" a.platform,\n",
" case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n",
" 'ROC' as geo_key,\n",
"'top1_brand_val' as KPI_name,\n",
"'' as Kpi_val,\n",
"'' as Kpi_val_ly,\n",
"a.top1_brand_val as str_kpi_val,\n",
"'' as str_kpi_val_ly,\n",
"'' as str_kpi_vol,\n",
"'' as str_kpi_vol_ly,\n",
"case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n",
"'' as ta\n",
"from dwd.dwd_gnd_ec_b2c_top10_drives_brand a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp = b.ZK_Corp_C\n",
"-- where upper(a.rank) <> 'TTL MKT' \n",
"union all \n",
"select \n",
" b.CORP_COD,\n",
" '' as yyyymm,\n",
" a.ytd ,\n",
" a.platform,\n",
" case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n",
" 'ROC' as geo_key,\n",
" 'incremental_brand' as KPI_name,\n",
" '' as Kpi_val,\n",
" '' as Kpi_val_ly,\n",
" a.growth_driver_brand_val as str_kpi_val,\n",
" '' as str_kpi_val_ly,\n",
" '' as str_kpi_vol,\n",
" '' as str_kpi_vol_ly,\n",
" case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n",
" '' as ta\n",
"from dwd.dwd_gnd_ec_b2c_top10_drives_brand a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp = b.ZK_Corp_C\n",
"-- where upper(a.rank) <> 'TTL MKT' \n",
"union all\n",
"select \n",
" b.CORP_COD,\n",
" '' as yyyymm,\n",
" a.ytd ,\n",
" a.platform,\n",
" case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n",
" 'ROC' as geo_key,\n",
" 'incremental_brand_gr' as KPI_name,\n",
" a.growth_driver_brand_gr as Kpi_val,\n",
" c.growth_driver_brand_gr as Kpi_val_ly,\n",
" '' as str_kpi_val,\n",
" '' as str_kpi_val_ly,\n",
" '' as str_kpi_vol,\n",
" '' as str_kpi_vol_ly,\n",
" case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n",
" '' as ta\n",
"from dwd.dwd_gnd_ec_b2c_top10_drives_brand a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp = b.ZK_Corp_C\n",
"left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c \n",
"on a.corp = c.corp \n",
"and a.ytd = c.ytd + 100\n",
"and a.platform = c.platform\n",
"and a.store_type = c.store_type\n",
"-- where upper(a.rank) <> 'TTL MKT' \n",
"union all \n",
"select\n",
" b.CORP_COD,\n",
" a.ytd yyyymm,\n",
" '' as ytd,\n",
" a.platform,\n",
" a.store_type,\n",
" 'ROC' as geo_key,\n",
" 'top_corp_sales' as KPI_name,\n",
" replace(a.sales_value,',','' ) as Kpi_val,\n",
" replace(c.sales_value,',','' ) as Kpi_val_ly,\n",
" '' as str_kpi_val,\n",
" '' as str_kpi_val_ly,\n",
" '' as str_kpi_vol,\n",
" '' as str_kpi_vol_ly,\n",
" case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag,\n",
" a.ta\n",
"from dwd.dwd_gnd_ec_ta_overview a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp_des = b.ZK_Corp_C\n",
"left join dwd.dwd_gnd_ec_ta_overview c \n",
"on a.ytd = c.ytd + 100\n",
"and a.corp_des = c.corp_des \n",
"and a.platform = c.platform\n",
"and a.store_type = c.store_type\n",
"and a.ta = c.ta\n",
"-- where lower(a.rank) <> 'total'\n",
"union all \n",
"select distinct\n",
" b.CORP_COD,\n",
" '' yyyymm,\n",
" a.ytd as ytd,\n",
" a.platform,\n",
" a.store_type,\n",
" 'ROC' as geo_key,\n",
" 'top_rank' as KPI_name,\n",
" a.rank as Kpi_val,\n",
" '' as Kpi_val_ly,\n",
" '' as str_kpi_val,\n",
" '' as str_kpi_val_ly,\n",
" '' as str_kpi_vol,\n",
" '' as str_kpi_vol_ly,\n",
" case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag,\n",
" a.ta\n",
"from dwd.dwd_gnd_ec_ta_overview a \n",
"left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b \n",
"on a.corp_des = b.ZK_Corp_C\n",
"-- where lower(a.rank) <> 'total'\n"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"application/vnd.databricks.v1+cell": {
"cellMetadata": {
"byteLimit": 2048000,
"rowLimit": 10000
},
"finishTime": 1777652456889,
"inputWidgets": {}, "inputWidgets": {},
"nuid": "0c0fe2ec-f80e-4872-85bf-fd5d058cc8b8", "nuid": "0c0fe2ec-f80e-4872-85bf-fd5d058cc8b8",
"showTitle": false, "showTitle": false,
"submitTime": 1777537485097, "startTime": 1777652453844,
"submitTime": 1777652453744,
"tableResultSettingsMap": {}, "tableResultSettingsMap": {},
"title": "" "title": ""
} }

View File

@@ -38,6 +38,42 @@
-- COMMAND ---------- -- COMMAND ----------
-- CREATE TABLE catalog_e2_ngbi_qas.DM.DM_TF_EXT_RETAIL_NIAD_SALES (
-- YYYYMM STRING,
-- PACK_CODE STRING,
-- CORP_CODE STRING,
-- AUDIT_CODE STRING,
-- PLATFORM_TYPE STRING,
-- STORE_NAME STRING,
-- STORE_TYPE STRING,
-- REGION_TYPE STRING,
-- PACK_FLAG STRING,
-- PROD_FLAG STRING,
-- DTP_FLAG STRING,
-- SALES_UNIT_CAL DECIMAL(38,10),
-- SALES_UNIT_CAL_LY STRING,
-- SALES_VALUE_CAL DECIMAL(38,10),
-- SALES_VALUE_CAL_LY STRING,
-- CONUTING_UNIT DECIMAL(38,10),
-- CONUTING_UNIT_LY STRING,
-- DATA_SOURCE STRING,
-- INST_CODE STRING,
-- CMPS_FLAG STRING,
-- DEPT_NAME STRING,
-- PRESCRIPTION STRING,
-- PRESCRIPTION_LY STRING,
-- NEW_CODE STRING,
-- AREA STRING,
-- H_LEVEL STRING,
-- REIMBURSE STRING,
-- REIMBURSE_TYPE STRING,
-- PRESCRIPTION_SOURCE STRING,
-- ETL_INSERT_DT TIMESTAMP,
-- ETL_UPDATE_DT TIMESTAMP)
-- USING delta
-- COMMAND ----------
CREATE OR REPLACE TEMPORARY VIEW RETAIL_SALES CREATE OR REPLACE TEMPORARY VIEW RETAIL_SALES
AS AS
SELECT SELECT
@@ -168,3 +204,48 @@ SELECT
FROM FROM
RETAIL_SALES RETAIL_SALES
; ;
-- COMMAND ----------
-- ****************************************************
-- 创建日期2026-04-30
-- 功能: 月份NIAD不进行季度汇总, 新建DM.DM_TF_EXT_RETAIL_NIAD_SALES表做关联
-- ****************************************************
-- INSERT OVERWRITE TABLE DM.DM_TF_EXT_RETAIL_NIAD_SALES
SELECT
cur.month AS YYYYMM,
cur.pack_code AS PACK_CODE,
'' AS CORP_CODE,
cur.zk_regin AS AUDIT_CODE,
'' AS PLATFORM_TYPE,
'' AS STORE_NAME,
'' AS STORE_TYPE,
'' AS REGION_TYPE,
'' AS PACK_FLAG,
'' AS PROD_FLAG,
'' AS DTP_FLAG,
CAST(REPLACE(cur.sales_unit, ',', '') AS DECIMAL(38, 10)) AS SALES_UNIT_CAL,
IFNULL(CAST(REPLACE(ly.sales_unit, ',', '') AS DECIMAL(38, 10)), 0) AS SALES_UNIT_CAL_LY,
CAST(REPLACE(cur.sales_value, ',', '') AS DECIMAL(38, 10)) AS SALES_VALUE_CAL,
IFNULL(CAST(REPLACE(ly.sales_value, ',', '') AS DECIMAL(38, 10)), 0) AS SALES_VALUE_CAL_LY,
CAST(cur.counting_unit AS DECIMAL(38, 10)) AS CONUTING_UNIT,
IFNULL(CAST(ly.counting_unit AS DECIMAL(38, 10)), 0) AS CONUTING_UNIT_LY,
'Retail(Quarterly)' AS DATA_SOURCE,
'' AS INST_CODE,
'' AS CMPS_FLAG,
'' AS DEPT_NAME,
'' AS PRESCRIPTION,
'' AS PRESCRIPTION_LY,
'' AS NEW_CODE,
'' AS AREA,
'' AS H_LEVEL,
'' AS REIMBURSE,
'' AS REIMBURSE_TYPE,
'' AS PRESCRIPTION_SOURCE,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT
FROM (select * from tmp.tmp_retail_pack_rawdata where level_market = 'NIAD') cur
LEFT JOIN (select * from tmp.tmp_retail_pack_rawdata where level_market = 'NIAD') ly
ON CAST(CAST(ly.month AS INT) + 100 AS STRING) = cur.month
AND ly.pack_code = cur.pack_code
AND ly.zk_regin = cur.zk_regin

View File

@@ -521,4 +521,147 @@ SELECT
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT
FROM FROM
joined; joined;
-- COMMAND ----------
INSERT into TABLE
DM.DM_TF_EXT_UNIONALL_MARKET_SALES
WITH
t1_filtered AS (
SELECT
*
FROM
DM.DM_TF_EXT_RETAIL_NIAD_SALES
),
mapping_cleaned AS (
SELECT
*
FROM
(
SELECT
PACK_CODE,
DATASOURCE,
MARKET,
KEY_COMPETITOR,
CLASS,
MARKET_RATIO,
Value_brand_Ratio,
Unit_brand_Ratio,
CountingUnit_brand_Ratio,
PDOT_brand_Ratio,
GREATEST (
starttime,
Value_brand_Ratio_start,
Unit_brand_start,
CountingUnit_brand_start,
PDOT_brand_start
) AS eff_start,
LEAST (
endtime,
Value_brand_Ratio_end,
Unit_brand_end,
CountingUnit_brand_end,
PDOT_brand_end
) AS eff_end
FROM
DM.dm_td_ext_unionall_market_pack_mapping
) tmp
WHERE
eff_start <= eff_end -- 在外层子查询中过滤
) ,
joined AS (
SELECT
/*+ BROADCAST(t2, t3) */
t1.*,
-- 当年 ratio
t2.MARKET,
t2.KEY_COMPETITOR,
t2.CLASS,
t2.MARKET_RATIO AS cy_market_ratio,
t2.Value_brand_Ratio AS cy_value_ratio,
t2.Unit_brand_Ratio AS cy_unit_ratio,
t2.CountingUnit_brand_Ratio AS cy_cu_ratio,
t2.PDOT_brand_Ratio AS cy_pdot_ratio,
-- 去年 ratio
t3.MARKET_RATIO AS ly_market_ratio,
t3.Value_brand_Ratio AS ly_value_ratio,
t3.Unit_brand_Ratio AS ly_unit_ratio,
t3.CountingUnit_brand_Ratio AS ly_cu_ratio,
t3.PDOT_brand_Ratio AS ly_pdot_ratio
FROM
t1_filtered t1
LEFT JOIN mapping_cleaned t2 ON t1.PACK_CODE = t2.PACK_CODE
AND t1.DATA_SOURCE = t2.DATASOURCE
AND t1.YYYYMM >= t2.eff_start
AND t1.YYYYMM <= t2.eff_end
LEFT JOIN mapping_cleaned t3 ON t1.PACK_CODE = t3.PACK_CODE
AND t1.DATA_SOURCE = t3.DATASOURCE
AND (t1.YYYYMM - 100) >= t3.eff_start
AND (t1.YYYYMM - 100) <= t3.eff_end
AND t2.MARKET = t3.MARKET -- 保持原逻辑
)
SELECT
NVL(MARKET, 'ALL Market') AS MARKET,
NVL(KEY_COMPETITOR, 'OTHERS') AS KEY_COMPETITOR,
CASE
WHEN trim(lower(CLASS)) = 'others' THEN 'OTHERS'
WHEN CLASS IS NULL THEN 'OTHERS'
ELSE CLASS
END AS CLASS,
YYYYMM,
PACK_CODE,
CORP_CODE,
AUDIT_CODE,
PLATFORM_TYPE,
STORE_NAME,
STORE_TYPE,
REGION_TYPE,
DATA_SOURCE,
PACK_FLAG,
PROD_FLAG,
DTP_FLAG,
CMPS_FLAG,
NEW_CODE,
INST_CODE,
NULL AS AIA_HP_FLAG,
DEPT_NAME,
H_LEVEL,
REIMBURSE,
REIMBURSE_TYPE,
PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE,
PRESCRIPTION,
PRESCRIPTION_LY,
-- 预计算公用因子,避免重复计算
NVL(NVL(cy_market_ratio, 1) * cy_value_ratio, 1) AS VA,
NVL(NVL(cy_market_ratio, 1) * cy_unit_ratio, 1) AS UT,
NVL(NVL(cy_market_ratio, 1) * cy_cu_ratio, 1) AS CU,
NVL(NVL(cy_market_ratio, 1) * cy_pdot_ratio, 1) AS PT,
CAST(
SALES_UNIT_CAL * NVL(cy_unit_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6)
) AS SALES_UNIT_CAL,
CAST(
SALES_UNIT_CAL_LY * NVL(ly_unit_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6)
) AS SALES_UNIT_CAL_LY,
CAST(
SALES_VALUE_CAL * NVL(cy_value_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6)
) AS SALES_VALUE_CAL,
CAST(
SALES_VALUE_CAL_LY * NVL(ly_value_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6)
) AS SALES_VALUE_CAL_LY,
CAST(
CONUTING_UNIT * NVL(cy_cu_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6)
) AS CONUTING_UNIT,
CAST(
CONUTING_UNIT_LY * NVL(ly_cu_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6)
) AS CONUTING_UNIT_LY,
CAST(
CONUTING_UNIT * NVL(cy_pdot_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6)
) AS PDOT,
CAST(
CONUTING_UNIT_LY * NVL(ly_pdot_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6)
) AS PDOT_LY,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT
FROM
joined;

View File

@@ -346,4 +346,4 @@ SELECT
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT,
FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT
FROM DM.DM_TF_EXT_XIEHE_SALES FROM DM.DM_TF_EXT_XIEHE_SALES
; ;

View File

@@ -473,7 +473,7 @@ SELECT
END AS CONUTING_UNIT, END AS CONUTING_UNIT,
CASE CASE
WHEN A.CONUTING_UNIT_LY = 0 THEN NULL WHEN A.CONUTING_UNIT_LY = 0 THEN NULL
https://adb-1064580724995799.3.databricks.azure.cn/editor/notebooks/3456519074298505?o=1064580724995799$0ELSE CAST(A.CONUTING_UNIT_LY AS DECIMAL(35, 10)) ELSE CAST(A.CONUTING_UNIT_LY AS DECIMAL(35, 10))
END AS CONUTING_UNIT_LY, END AS CONUTING_UNIT_LY,
CASE CASE
WHEN A.PDOT = 0 THEN NULL WHEN A.PDOT = 0 THEN NULL

View File

@@ -41,7 +41,7 @@
-- DBTITLE 1,NIAD单独页面 -- DBTITLE 1,NIAD单独页面
-- **************************************************** -- ****************************************************
-- 功能说明提取NIAD非胰岛素类抗糖尿病药物市场的销售数据并创建映射表 -- 功能说明提取NIAD非胰岛素类抗糖尿病药物市场的销售数据并创建映射表
-- 数据源EC(Monthly)月度电商数据 + Retail(Quarterly)季度零售数据 -- 数据源EC(Monthly)月度电商数据
-- 创建日期2026-04-02 -- 创建日期2026-04-02
-- 修改日期2026-04-02 -- 修改日期2026-04-02
-- **************************************************** -- ****************************************************
@@ -51,11 +51,91 @@ WITH
-- CTE 1获取NIAD市场的产品编码集合 -- CTE 1获取NIAD市场的产品编码集合
-- 注:直接下推双重过滤条件,减少扫描数据量 -- 注:直接下推双重过滤条件,减少扫描数据量
-- 20260430拆分
niad_pack_cods AS ( niad_pack_cods AS (
SELECT DISTINCT PACK_COD SELECT DISTINCT PACK_COD
FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES
WHERE MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' WHERE MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market'
AND DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') AND DATA_SOURCE ='EC(Monthly)'
)
-- 主查询:提取所有关联市场的完整销售数据
-- BROADCAST 小表 niad_markets避免大表 shuffle
SELECT
-- 业务维度
t.MARKET,
t.KEY_COMPETITOR,
t.CLASS,
t.YYYYMM,
-- 产品标识
t.PACK_COD,
t.AUDIT_COD,
-- 数据来源
t.DATA_SOURCE,
-- 调整系数
t.VA, -- Value Adjustment
t.UT, -- Unit Adjustment
t.CU, -- Counting Unit Adjustment
t.PT, -- PDOT Adjustment
-- 当期销售指标
t.SALES_UNIT_CAL,
t.SALES_VALUE_CAL,
t.CONUTING_UNIT, -- 注:字段名原始拼写保持不变
t.PDOT,
-- 去年同期指标
t.SALES_UNIT_CAL_LY,
t.SALES_VALUE_CAL_LY,
t.CONUTING_UNIT_LY,
t.PDOT_LY,
-- 处方指标
t.PRESCRIPTION,
t.PRESCRIPTION_LY,
-- 衍生组合键
CONCAT(t.PACK_COD, t.DATA_SOURCE) AS PACK_SOURCE,
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,
-- 零售铺货率(仅 Retail 行有值EC 行为 NULL
NULL AS DIGITAL_SPREAD_RATE,
NULL 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
WHERE t.DATA_SOURCE IN ('EC(Monthly)')
-- COMMAND ----------
-- ****************************************************
-- 功能说明提取NIAD非胰岛素类抗糖尿病药物市场的销售数据并创建映射表
-- 数据源Retail(Quarterly)季度零售数据
-- 创建日期2026-04-02
-- 修改日期2026-04-02
-- ****************************************************
INSERT into DM.DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD
WITH
-- CTE 1获取NIAD市场的产品编码集合
-- 注:直接下推双重过滤条件,减少扫描数据量
niad_pack_cods AS (
SELECT DISTINCT PACK_COD
FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES
WHERE MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market'
AND DATA_SOURCE IN ('Retail(Quarterly)')
), ),
-- CTE 2从KPI宽转长表中横向取出三个零售铺货率/价格指标 -- CTE 2从KPI宽转长表中横向取出三个零售铺货率/价格指标
@@ -66,11 +146,10 @@ kpi_pivot AS (
pack_code, pack_code,
YYYYMM, YYYYMM,
geo_key, 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 = '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 MAX(CASE WHEN KPI_name = 'weighted_spread_rate' THEN kpi_val END) AS WEIGHTED_SPREAD_RATE
FROM dm.dm_zk_retail_sales_kpi FROM dm.dm_zk_retail_sales_kpi
WHERE KPI_name IN ('pack_price', 'digital_spread_rate', 'weighted_spread_rate') WHERE KPI_name IN ( 'digital_spread_rate', 'weighted_spread_rate')
AND ta = 'DM' AND ta = 'DM'
GROUP BY pack_code, YYYYMM, geo_key GROUP BY pack_code, YYYYMM, geo_key
) )
@@ -137,4 +216,4 @@ LEFT JOIN kpi_pivot kpi
AND kpi.YYYYMM = t.YYYYMM AND kpi.YYYYMM = t.YYYYMM
AND kpi.geo_key = t.AUDIT_COD AND kpi.geo_key = t.AUDIT_COD
AND t.DATA_SOURCE = 'Retail(Quarterly)' AND t.DATA_SOURCE = 'Retail(Quarterly)'
WHERE t.DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') WHERE t.DATA_SOURCE IN ('Retail(Quarterly)')