From d39402998c578992cd7d1bfe6d82fbc20670e3db Mon Sep 17 00:00:00 2001 From: chenwu Date: Wed, 20 May 2026 10:41:41 +0000 Subject: [PATCH] =?UTF-8?q?20260520=E7=94=9F=E4=BA=A7bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 retail的架构的陕西 对应 两个 RC 2 niad free report页面的market size ly值因直取出现未聚合的问题 3 Retail 的价格铺货率没有 1,2月份的值 --- ORG/DM_TD_EXT_RETAIL_ORG.sql | 10 +- Retail/13 DM_TF_EXT_RETAIL_SALES.sql | 166 +++++++++++++----- .../DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql | 27 +-- 3 files changed, 142 insertions(+), 61 deletions(-) diff --git a/ORG/DM_TD_EXT_RETAIL_ORG.sql b/ORG/DM_TD_EXT_RETAIL_ORG.sql index b98ad7a..a9f0df4 100644 --- a/ORG/DM_TD_EXT_RETAIL_ORG.sql +++ b/ORG/DM_TD_EXT_RETAIL_ORG.sql @@ -89,10 +89,10 @@ market_ta ( ) ,pack_market as ( -select distinct a.pack_cod,a.market,b.subbu - from dm.dm_td_external_market_pack_mapping a +select distinct a.pack_code as pack_cod,a.market,b.subbu + from dm.dm_td_ext_unionall_market_pack_mapping a left join market_ta b on a.MARKET = b.market -where data_source = 'Retail(Quarterly)' +where datasource = 'Retail(Quarterly)' ) ,external_geo as ( select distinct province_c,audit_cod,REGION_CENTER @@ -132,7 +132,7 @@ from dm.dm_td_sd_territory_indication t1 inner join YM_CVH t2 on t1.yyyymm = t2.key_value where bu in ('Retail') --20260320 chenwu Retail数据源的架构,去掉OBU,只保留Retail -and t1.key_hp<>3 --chenwu 20250904 排除双考影响 +and t1.key_hp=1 --chenwu 20260519 排除双考影响 ) ,province_market as ( select t1.trty_code, @@ -435,4 +435,4 @@ SELECT DISTINCT '' AS DSM_NAME, '' AS MR_KCODE, '' AS MR_NAME -FROM pack_2_market t2 \ No newline at end of file +FROM pack_2_market t2 diff --git a/Retail/13 DM_TF_EXT_RETAIL_SALES.sql b/Retail/13 DM_TF_EXT_RETAIL_SALES.sql index 1659949..8233c98 100644 --- a/Retail/13 DM_TF_EXT_RETAIL_SALES.sql +++ b/Retail/13 DM_TF_EXT_RETAIL_SALES.sql @@ -212,58 +212,132 @@ FROM -- 功能: 月份NIAD不进行季度汇总, 新建DM.DM_TF_EXT_RETAIL_NIAD_SALES表做关联 -- **************************************************** WITH NIAD_DWD_TABLE AS ( - select + SELECT a.month, - b.iqvia_pack_code as pack_code, + b.iqvia_pack_code AS pack_code, 'ROC' AS zk_region, - a.sales_unit, - a.sales_value, - a.sales_unit * (b.counting_unit/ coalesce(b.unit,1)) as counting_unit - from + SUM(a.sales_unit) AS sales_unit, + SUM(a.sales_value) AS sales_value, + SUM(a.sales_unit * (b.counting_unit / COALESCE(b.unit, 1))) AS counting_unit + FROM dwd.dwd_gnd_ext_retail_nataional_niad a - left join dwd.dwd_gnd_ext_retail_pack_property b - on case - when length(zk_product_id) < 7 then right(concat('0000000', zk_product_id), 7) - else zk_product_id - end = b.product_id - where + LEFT JOIN dwd.dwd_gnd_ext_retail_pack_property b + ON CASE + WHEN LENGTH(zk_product_id) < 7 THEN RIGHT(CONCAT('0000000', zk_product_id), 7) + ELSE zk_product_id + END = b.product_id + WHERE a.zk_region = '全国' + GROUP BY + a.month, b.iqvia_pack_code +), +UNION_TABLE AS ( + -- 当期 + SELECT + cur.month AS YYYYMM, + cur.pack_code AS PACK_CODE, + '' AS CORP_CODE, + cur.zk_region 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, + 0 AS SALES_UNIT_CAL_LY, + CAST(REPLACE(cur.sales_value, ',', '') AS DECIMAL(38, 10)) AS SALES_VALUE_CAL, + 0 AS SALES_VALUE_CAL_LY, + CAST(cur.counting_unit AS DECIMAL(38, 10)) AS CONUTING_UNIT, + 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 NIAD_DWD_TABLE cur + + UNION ALL + + -- 同期(去年) + SELECT + CAST(CAST(cur.month AS INT) + 100 AS STRING) AS YYYYMM, + cur.pack_code AS PACK_CODE, + '' AS CORP_CODE, + cur.zk_region AS AUDIT_CODE, + '' AS PLATFORM_TYPE, + '' AS STORE_NAME, + '' AS STORE_TYPE, + '' AS REGION_TYPE, + '' AS PACK_FLAG, + '' AS PROD_FLAG, + '' AS DTP_FLAG, + 0 AS SALES_UNIT_CAL, + CAST(REPLACE(cur.sales_unit, ',', '') AS DECIMAL(38, 10)) AS SALES_UNIT_CAL_LY, + 0 AS SALES_VALUE_CAL, + CAST(REPLACE(cur.sales_value, ',', '') AS DECIMAL(38, 10)) AS SALES_VALUE_CAL_LY, + 0 AS CONUTING_UNIT, + CAST(cur.counting_unit AS DECIMAL(38, 10)) 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 NIAD_DWD_TABLE cur + WHERE CAST(cur.month AS INT) + 100 <= (SELECT CAST(MAX(month) AS INT) FROM NIAD_DWD_TABLE) ) 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_region 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, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SUM(SALES_UNIT_CAL) AS SALES_UNIT_CAL, + SUM(SALES_UNIT_CAL_LY) AS SALES_UNIT_CAL_LY, + SUM(SALES_VALUE_CAL) AS SALES_VALUE_CAL, + SUM(SALES_VALUE_CAL_LY) AS SALES_VALUE_CAL_LY, + SUM(CONUTING_UNIT) AS CONUTING_UNIT, + SUM(CONUTING_UNIT_LY) AS CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + 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 NIAD_DWD_TABLE ) cur -LEFT JOIN (select * from NIAD_DWD_TABLE ) ly - ON CAST(CAST(ly.month AS INT) + 100 AS STRING) = cur.month - AND ly.pack_code = cur.pack_code - AND ly.zk_region = cur.zk_region +FROM UNION_TABLE +GROUP BY + YYYYMM, PACK_CODE, CORP_CODE, AUDIT_CODE, PLATFORM_TYPE, + STORE_NAME, STORE_TYPE, REGION_TYPE, PACK_FLAG, PROD_FLAG, + DTP_FLAG, DATA_SOURCE, INST_CODE, CMPS_FLAG, DEPT_NAME, + PRESCRIPTION, PRESCRIPTION_LY, NEW_CODE, AREA, H_LEVEL, + REIMBURSE, REIMBURSE_TYPE, PRESCRIPTION_SOURCE diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql index 930029e..babb351 100644 --- a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql +++ b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql @@ -143,16 +143,23 @@ niad_pack_cods AS ( -- 来源: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 = '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 ( 'digital_spread_rate', 'weighted_spread_rate') - AND ta = 'DM' - GROUP BY pack_code, YYYYMM, geo_key + select + a.month yyyymm, + b.iqvia_pack_code as pack_code, + 'ROC' AS geo_key, + max(a.digital_spread_rate) as DIGITAL_SPREAD_RATE, + max(a.weighted_spread_rate) as WEIGHTED_SPREAD_RATE + from + dwd.dwd_gnd_ext_retail_nataional_niad a + left join dwd.dwd_gnd_ext_retail_pack_property b + on case + when length(zk_product_id) < 7 then right(concat('0000000', zk_product_id), 7) + else zk_product_id + end = b.product_id + where + a.zk_region = '全国' + group by + a.month,b.iqvia_pack_code ) -- 主查询:提取所有关联市场的完整销售数据