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

@@ -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_UPDATE_DT
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_UPDATE_DT
FROM DM.DM_TF_EXT_XIEHE_SALES
;
;

View File

@@ -473,7 +473,7 @@ SELECT
END AS CONUTING_UNIT,
CASE
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,
CASE
WHEN A.PDOT = 0 THEN NULL

View File

@@ -41,7 +41,7 @@
-- DBTITLE 1,NIAD单独页面
-- ****************************************************
-- 功能说明提取NIAD非胰岛素类抗糖尿病药物市场的销售数据并创建映射表
-- 数据源EC(Monthly)月度电商数据 + Retail(Quarterly)季度零售数据
-- 数据源EC(Monthly)月度电商数据
-- 创建日期2026-04-02
-- 修改日期2026-04-02
-- ****************************************************
@@ -51,11 +51,91 @@ WITH
-- CTE 1获取NIAD市场的产品编码集合
-- 注:直接下推双重过滤条件,减少扫描数据量
-- 20260430拆分
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 ('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宽转长表中横向取出三个零售铺货率/价格指标
@@ -66,11 +146,10 @@ kpi_pivot AS (
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')
WHERE KPI_name IN ( 'digital_spread_rate', 'weighted_spread_rate')
AND ta = 'DM'
GROUP BY pack_code, YYYYMM, geo_key
)
@@ -137,4 +216,4 @@ LEFT JOIN kpi_pivot kpi
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)')
WHERE t.DATA_SOURCE IN ('Retail(Quarterly)')