1155 lines
44 KiB
SQL
1155 lines
44 KiB
SQL
-- Databricks notebook source
|
||
-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_ORG (
|
||
-- REGION_CODE STRING,
|
||
-- REGION_NAME_EN STRING,
|
||
-- RSM_NAME STRING,
|
||
-- RC_CODE STRING,
|
||
-- RC_NAME_EN STRING,
|
||
-- RC_NAME STRING,
|
||
-- REGIONCENTER STRING,
|
||
-- AUDIT_COD STRING,
|
||
-- MARKET STRING,
|
||
-- BU_CATEGORY STRING,
|
||
-- BU_NAME_EN STRING,
|
||
-- SUB_BU_NAME STRING,
|
||
-- SUB_BU_CODE_AUTH STRING,
|
||
-- BU_CODE_AUTH STRING,
|
||
-- DATA_SOURCE STRING,
|
||
-- REGION_RATIO FLOAT,
|
||
-- TEAM STRING,
|
||
-- MR_TRTY_CODE STRING,
|
||
-- NSD_KCODE STRING,
|
||
-- NSD_NAME STRING,
|
||
-- RSD_KCODE STRING,
|
||
-- RSD_NAME STRING,
|
||
-- RSM_KCODE STRING,
|
||
-- DSM_KCODE STRING,
|
||
-- DSM_NAME STRING,
|
||
-- MR_KCODE STRING,
|
||
-- MR_NAME STRING)
|
||
-- USING delta
|
||
-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_org';
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- MAGIC %run ../../../Common/config
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- MAGIC %python
|
||
-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide')
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- =============================================================================
|
||
-- CELL 1: 临时视图 dm_td_org_temp
|
||
-- 背景: 202601 起 EC BU 整体迁移至 Retail,需对历史字段做统一转换,
|
||
-- 避免下游 CTE 中重复写 CASE WHEN。
|
||
-- 修改时间: 20260130
|
||
-- =============================================================================
|
||
-- COMMAND ----------
|
||
|
||
CREATE OR REPLACE TEMPORARY VIEW dm_td_org_temp AS
|
||
SELECT
|
||
org_key,
|
||
mr_trty_tag,
|
||
district_code,
|
||
district_name,
|
||
rc_name,
|
||
region_name,
|
||
REGION_CODE,
|
||
rc_code,
|
||
bu_category,
|
||
rsm_kcode,
|
||
rsm_name,
|
||
rsd_kcode,
|
||
rsd_name,
|
||
mr_kcode,
|
||
mr_name,
|
||
dsm_kcode,
|
||
dsm_name,
|
||
dsm_trty_code,
|
||
rsm_trty_code,
|
||
rsd_trty_code,
|
||
mr_trty_code,
|
||
yyyymm,
|
||
|
||
-- ----------------------------------------------------------------
|
||
-- EC → Retail 字段映射(202601 起生效)
|
||
-- ----------------------------------------------------------------
|
||
CASE WHEN yyyymm >= '202601' AND bu_code = 'PC12' THEN 'PC09' ELSE bu_code END AS bu_code,
|
||
CASE WHEN yyyymm >= '202601' AND bu_report = 'EC' THEN 'Retail' ELSE bu_report END AS bu_report,
|
||
CASE WHEN yyyymm >= '202601' AND sub_bu_code = 'NA27' THEN 'NA06' ELSE sub_bu_code END AS sub_bu_code,
|
||
CASE WHEN yyyymm >= '202601' AND sub_bu_name = 'EC' THEN 'Retail' ELSE sub_bu_name END AS sub_bu_name,
|
||
CASE WHEN yyyymm >= '202601' AND sub_bu_name_en = 'EC' THEN 'Retail' ELSE sub_bu_name_en END AS sub_bu_name_en,
|
||
CASE WHEN yyyymm >= '202601' AND bu_name = 'EC' THEN 'Retail' ELSE bu_name END AS bu_name,
|
||
CASE WHEN yyyymm >= '202601' AND bu_name_en = 'EC' THEN 'Retail' ELSE bu_name_en END AS bu_name_en,
|
||
CASE WHEN yyyymm >= '202601' AND nsd_kcode = 'ND_EC0001_V' THEN 'KSGX559' ELSE nsd_kcode END AS nsd_kcode,
|
||
CASE WHEN yyyymm >= '202601' AND bu_name = 'EC'
|
||
AND nsd_name = 'Vacant' THEN '李白杨' ELSE nsd_name END AS nsd_name,
|
||
CASE WHEN yyyymm >= '202601' AND nsd_trty_code = 'ND_EC0001' THEN 'ND_RT0001' ELSE nsd_trty_code END AS nsd_trty_code,
|
||
CASE WHEN yyyymm >= '202601' AND bsd_kcode = 'VP_EC0001_V' THEN 'VP_RT0001_V' ELSE bsd_kcode END AS bsd_kcode,
|
||
CASE WHEN yyyymm >= '202601' AND bsd_trty_code = 'VP_EC0001' THEN 'VP_RT0001' ELSE bsd_trty_code END AS bsd_trty_code
|
||
|
||
FROM DM.dm_td_org
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- ---------------------------------------------------------------------------------------
|
||
-- --修改时间:20241105
|
||
-- --修改人:Fanxujia
|
||
-- --修改内容:
|
||
-- --for AIA Dashboard,新增NSD、RSD、RSM、DSM、MR、TEAM等信息
|
||
-- --仅AIA渠道的数据增加值,其他渠道都为空
|
||
-- ---------------------------------------------------------------------------------------
|
||
-- ---------------------------------------------------AIA------------------------------------------------------------------------------
|
||
-- --AIA参考CHPA
|
||
-- ------所有BU能看AIA
|
||
|
||
-- --从销量表取到全部的机构、市场组合
|
||
-- with ALL_AUDIT_Market as (
|
||
-- select distinct NVL(t1.AUDIT_COD,'ROC') AUDIT_COD,
|
||
-- NVL(t2.market,'ALL Market') market
|
||
-- from dm.dm_ext_aia_sales t1
|
||
-- left join dm.dm_td_ext_aia_market_pack_mapping t2
|
||
-- on t1.pack_cod = t2.PACK_CODE
|
||
-- )
|
||
-- ,pack_market as (
|
||
-- select distinct PACK_CODE AS PACK_COD,market
|
||
-- from dm.dm_td_ext_aia_market_pack_mapping
|
||
-- )
|
||
|
||
-- --获取城市与大区中心的mapping
|
||
-- ,EXTERNAL_GEO as (
|
||
-- select distinct
|
||
-- concat(city_c, '市') as city_c,
|
||
-- REGION_CENTER
|
||
-- from DM.DM_TD_EXTERNAL_GEO_TEMP
|
||
-- where DATA_SOURCE = 'AIA(Monthly)'
|
||
-- )
|
||
-- --CVH架构月
|
||
-- ,CVH_YM as (
|
||
-- select key_value as yyyymm
|
||
-- from dm.dm_td_date_config
|
||
-- where key_code = 'pfmc_cvh'
|
||
-- )
|
||
-- --org表
|
||
-- ,org as (
|
||
-- select distinct
|
||
-- t1.yyyymm,
|
||
-- t1.bu_category,
|
||
-- t1.bu_code,
|
||
-- t1.bu_name_en,
|
||
-- t1.sub_bu_code,
|
||
-- t1.sub_bu_name,
|
||
-- t1.REGION_CODE,
|
||
-- t1.region_name,
|
||
-- t1.rc_code,
|
||
-- t1.rc_name,
|
||
-- t1.district_name as team,
|
||
-- t1.mr_trty_code,
|
||
-- t1.nsd_kcode,
|
||
-- case when t1.nsd_name = 'Vacant' then t1.nsd_kcode else t1.nsd_name end as nsd_name,
|
||
-- t1.rsd_kcode,
|
||
-- case when t1.rsd_name = 'Vacant' then t1.rsd_kcode else t1.rsd_name end as rsd_name,
|
||
-- t1.rsm_kcode,
|
||
-- case when t1.rsm_name = 'Vacant' then t1.rsm_kcode else t1.rsm_name end as rsm_name,
|
||
-- t1.dsm_kcode,
|
||
-- case when t1.dsm_name = 'Vacant' then t1.dsm_kcode else t1.dsm_name end as dsm_name,
|
||
-- t1.mr_kcode,
|
||
-- case when t1.mr_name = 'Vacant' then t1.mr_kcode else t1.mr_name end as mr_name
|
||
-- from dm_td_org_temp t1
|
||
-- inner join CVH_YM t2
|
||
-- on t1.yyyymm = t2.yyyymm
|
||
-- )
|
||
-- --territory表
|
||
-- ,territory as (
|
||
-- select distinct
|
||
-- t1.yyyymm,
|
||
-- t1.trty_code,
|
||
-- t1.inst_code,
|
||
-- t1.family_code
|
||
-- from dm.dm_td_sd_territory_indication t1
|
||
-- inner join CVH_YM t2
|
||
-- on t1.yyyymm = t2.yyyymm
|
||
-- where t1.bu not in ('CUBE','KA')
|
||
-- and ((t1.key_hp in (2) and t1.bu <> 'Retail' and t1.trty_code <>'Eagle') or t1.key_hp = 1)--chenwu 20250904 排除双考影响
|
||
-- )
|
||
-- --将内部的Family_code转为外部的pack_cod
|
||
-- ,inst_pack_previous as (
|
||
-- select distinct
|
||
-- t1.yyyymm,
|
||
-- t1.trty_code,
|
||
-- t1.inst_code,
|
||
-- t2.city_name,
|
||
-- t5.market,
|
||
-- case when t2.area_code = 'SOUTH' then 'South'
|
||
-- when t2.area_code = 'WEST' then 'West'
|
||
-- when t2.area_code = 'CENTRAL' then 'Central'
|
||
-- when t2.area_code = 'NORTH' then 'North'
|
||
-- when t2.area_code = 'EAST' then 'East'
|
||
-- end as REGION_CENTER
|
||
-- from territory t1
|
||
-- left join dwd.dwd_td_institution t2
|
||
-- on t1.inst_code = t2.inst_code
|
||
-- left join cdw_dwd_dim_product_wide t3
|
||
-- on t1.family_code = t3.prd_family_cd
|
||
-- left join dwd.dwd_td_imscode_azcode t4
|
||
-- on t3.prd_brand_cd = t4.brandcode
|
||
-- left join pack_market t5
|
||
-- on t4.ims_pack_cod = t5.PACK_COD
|
||
-- )
|
||
-- /*
|
||
-- 20251207 Chenwu 把可定的架构复制到立普妥上,直接替换市场 'Atorvastatin Market' = 'Rosuvastatin Market'
|
||
-- */
|
||
-- ,inst_pack as (
|
||
-- select
|
||
-- yyyymm,
|
||
-- trty_code,
|
||
-- inst_code,
|
||
-- city_name,
|
||
-- market,
|
||
-- REGION_CENTER
|
||
-- from inst_pack_previous
|
||
-- union all
|
||
-- select
|
||
-- yyyymm,
|
||
-- trty_code,
|
||
-- inst_code,
|
||
-- city_name,
|
||
-- 'Atorvastatin Market' market,
|
||
-- REGION_CENTER
|
||
-- from inst_pack_previous
|
||
-- where market = 'Rosuvastatin Market'
|
||
-- )
|
||
|
||
-- ---------------------------------------------------------------------------------------
|
||
-- --修改时间:20250220
|
||
-- --修改人:Zhu chenwu
|
||
-- --修改内容:
|
||
-- --原本存在部分Eagel的机构和市场没有挂上架构,针对于没有挂上的部分,用dws.dws_td_eg_cityterritory中的city 和family的关系对应到市场挂上架构。
|
||
-- ----------------------------------------------m-----------------------------------------
|
||
-- ,eagle_trty as
|
||
-- (---eagle的city 和 family 对应的 trtycode取数据时,如果city和family对应的trtycode 有多个,以p12,p11,p11为准,取第一个。
|
||
-- select SP_TRTY_CD,CITY_CD,FAMILY_CD from (
|
||
-- select *
|
||
-- ,row_number() over (partition by CITY_CD,FAMILY_CD order by PROJECT_CD desc) as num
|
||
-- from (
|
||
-- select SP_TRTY_CD,CITY_CD,FAMILY_CD,PROJECT_CD from dws.dws_td_eg_cityterritory t1
|
||
-- inner join CVH_YM t2
|
||
-- on t1.YM = t2.yyyymm
|
||
-- where SP_TRTY_CD not in (select distinct trty_code from dm.dm_td_sd_territory_indication where bu = 'Eagle')
|
||
-- and PROJECT_CD in (select distinct project_code from DWS.dws_td_eg_project_instype WHERE ins_type='医院')
|
||
-- and cast(nvl(SALES_RATE,0) as decimal(20,6))<>'0.000000'
|
||
-- group by 1,2,3,4
|
||
-- )
|
||
-- ) where num = 1
|
||
-- )
|
||
-- ,family_mapping as (--family和brand的mapping
|
||
-- select prd_family_cd,prd_brand_cd from cdw_dwd_dim_product_wide
|
||
-- group by 1,2
|
||
-- )
|
||
-- ,packcode_mapping as (--pack 和 brand的mapping
|
||
-- select brandcode,ims_pack_cod from dwd.dwd_td_imscode_azcode
|
||
-- group by 1,2
|
||
-- )
|
||
-- ,geo_mapping as (--city的中文
|
||
-- select city_code,city_name from dm.dm_td_geography
|
||
-- group by 1,2
|
||
-- )
|
||
-- ,eagle_mapping (--eagle表中city和family所对应的 岗位编码
|
||
-- select SP_TRTY_CD,city_name,market from (
|
||
-- select
|
||
-- t1.SP_TRTY_CD
|
||
-- -- ,t1.FAMILY_CD
|
||
-- -- ,t3.prd_brand_cd
|
||
-- ,t4.ims_pack_cod
|
||
-- ,t5.city_name
|
||
-- from eagle_trty t1
|
||
-- left join family_mapping t3
|
||
-- on t1.FAMILY_CD = t3.prd_family_cd --转换family 成 brand
|
||
-- left join packcode_mapping t4
|
||
-- on t3.prd_brand_cd = t4.brandcode
|
||
-- left join geo_mapping t5
|
||
-- on t1.CITY_CD = t5.city_code) A
|
||
-- inner join pack_market B on A.ims_pack_cod = B.PACK_COD
|
||
-- group by 1,2,3
|
||
-- )
|
||
|
||
-- ,audit_geo as (--audit的城市信息
|
||
-- select AUDIT_COD,max(CITY_C) as city_c from DM.DM_TD_EXTERNAL_GEO
|
||
-- where DATA_SOURCE = 'AIA(Monthly)'
|
||
-- group by 1)
|
||
|
||
-- ,eagle_trty_with_city as ( --eagle中 挂上 部分机构归不到eagle的,按eagle的城市+品牌挂上
|
||
-- select
|
||
-- t0.AUDIT_COD,t0.market
|
||
-- ,t10.city_c
|
||
-- ,eagle_mapping.SP_TRTY_CD from ALL_AUDIT_Market t0
|
||
-- left join audit_geo t10 on t0.AUDIT_COD = t10.AUDIT_COD
|
||
-- left join eagle_mapping on eagle_mapping.city_name = t10.city_c and eagle_mapping.market = t0.market
|
||
-- where eagle_mapping.SP_TRTY_CD is not null
|
||
-- group by 1,2,3,4)
|
||
|
||
-- insert overwrite dm.DM_TD_EXT_AIA_ORG (
|
||
-- REGION_CODE,
|
||
-- region_name_en,
|
||
-- rc_code,
|
||
-- rc_name_en,
|
||
-- RegionCenter,
|
||
-- AUDIT_COD,
|
||
-- MARKET,
|
||
-- bu_category,
|
||
-- bu_name_en,
|
||
-- sub_bu_name,
|
||
-- sub_bu_code_auth,
|
||
-- bu_code_auth,
|
||
-- DATA_SOURCE,
|
||
-- REGION_RATIO,
|
||
-- RSM_Name,
|
||
-- RC_Name,
|
||
-- TEAM,
|
||
-- MR_TRTY_CODE,
|
||
-- NSD_KCODE,
|
||
-- NSD_NAME,
|
||
-- RSD_KCODE,
|
||
-- RSD_NAME,
|
||
-- RSM_KCODE,
|
||
-- DSM_KCODE,
|
||
-- DSM_NAME,
|
||
-- MR_KCODE,
|
||
-- MR_NAME
|
||
-- )
|
||
|
||
-- SELECT distinct
|
||
-- COALESCE(t2.REGION_CODE,t6.REGION_CODE,'ROC') as REGION_CODE,
|
||
-- COALESCE(t2.region_name,t6.region_name,'ROC') as region_name_en,
|
||
-- COALESCE(t2.rc_code,t6.rc_code,'ROC') as rc_code,
|
||
-- COALESCE(t2.rc_name,t6.rc_name,'ROC') as rc_name_en,
|
||
-- COALESCE(t1.REGION_CENTER,t4.REGION_CENTER,t7.REGION_CENTER,'') as RegionCenter,
|
||
-- t0.AUDIT_COD,
|
||
-- t0.MARKET,
|
||
-- COALESCE(t2.bu_category,t6.bu_category,'') as bu_category,
|
||
-- COALESCE(t2.bu_name_en,t6.bu_name_en,'') as bu_name_en,
|
||
-- COALESCE(t2.sub_bu_name,t6.sub_bu_name,'') as sub_bu_name,
|
||
-- COALESCE(t2.sub_bu_code,t6.sub_bu_code,'') as sub_bu_code_auth,
|
||
-- concat(COALESCE(t2.bu_code,t6.bu_code,''),'AIA(Monthly)') as bu_code_auth,
|
||
-- 'AIA(Monthly)' as DATA_SOURCE,
|
||
-- 1 REGION_RATIO,
|
||
-- COALESCE(t2.rsm_name,t6.rsm_name,'Vacant') as rsm_name,
|
||
-- COALESCE(t2.rsd_name,t6.rsd_name,'Vacant') as RC_Name,
|
||
-- COALESCE(t2.team,t6.team,'ROC') as team,
|
||
-- COALESCE(t2.mr_trty_code,t6.mr_trty_code,'Vacant') as mr_trty_code,
|
||
-- COALESCE(t2.nsd_kcode,t6.nsd_kcode,'Vacant') as nsd_kcode,
|
||
-- COALESCE(t2.nsd_name,t6.nsd_name,'Vacant') as nsd_name,
|
||
-- COALESCE(t2.rsd_kcode,t6.rsd_kcode,'Vacant') as rsd_kcode,
|
||
-- COALESCE(t2.rsd_name,t6.rsd_name,'Vacant') as rsd_name,
|
||
-- COALESCE(t2.rsm_kcode,t6.rsm_kcode,'Vacant') as rsm_kcode,
|
||
-- COALESCE(t2.dsm_kcode,t6.dsm_kcode,'Vacant') as dsm_kcode,
|
||
-- COALESCE(t2.dsm_name,t6.dsm_name,'Vacant') as dsm_name,
|
||
-- COALESCE(t2.mr_kcode,t6.mr_kcode,'Vacant') as mr_kcode,
|
||
-- COALESCE(t2.mr_name,t6.mr_name,'Vacant') as mr_name
|
||
-- -- ,t5.SP_TRTY_CD
|
||
-- from ALL_AUDIT_Market t0
|
||
-- left join inst_pack t1
|
||
-- on t0.AUDIT_COD = t1.inst_code
|
||
-- and t0.market = t1.market
|
||
-- left join org t2
|
||
-- on t1.trty_code = t2.mr_trty_code
|
||
-- and t1.yyyymm = t2.yyyymm
|
||
-- left join EXTERNAL_GEO t4
|
||
-- on t1.city_name = t4.city_c
|
||
|
||
-- left join eagle_trty_with_city t5
|
||
-- on t0.AUDIT_COD = t5.AUDIT_COD
|
||
-- and t0.market = t5.market and t1.inst_code is null
|
||
-- left join org t6
|
||
-- on t5.SP_TRTY_CD = t6.mr_trty_code
|
||
-- left join EXTERNAL_GEO t7
|
||
-- on t5.city_c = t7.city_c
|
||
|
||
-- COMMAND ----------
|
||
|
||
WITH
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [基础配置] CVH 考核月份白名单
|
||
-- ----------------------------------------------------------------------------
|
||
cvh_ym AS (
|
||
SELECT key_value AS yyyymm
|
||
FROM dm.dm_td_date_config
|
||
WHERE key_code = 'pfmc_cvh'
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [输入数据] 事实表中所有有效的 机构×市场 组合(作为主驱动集合)
|
||
-- ----------------------------------------------------------------------------
|
||
all_audit_market AS (
|
||
SELECT DISTINCT
|
||
NVL(s.AUDIT_COD, 'ROC') AS audit_cod,
|
||
NVL(m.market, 'ALL Market') AS market
|
||
FROM dm.dm_ext_aia_sales s
|
||
LEFT JOIN dm.dm_td_ext_aia_market_pack_mapping m
|
||
ON s.pack_cod = m.PACK_CODE
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [参照表] Pack → Market 映射
|
||
-- ----------------------------------------------------------------------------
|
||
pack_market AS (
|
||
SELECT DISTINCT
|
||
PACK_CODE AS pack_cod,
|
||
market
|
||
FROM dm.dm_td_ext_aia_market_pack_mapping
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [参照表] 城市 → 大区中心映射(AIA 渠道)
|
||
-- ----------------------------------------------------------------------------
|
||
external_geo AS (
|
||
SELECT DISTINCT
|
||
CONCAT(city_c, '市') AS city_c,
|
||
REGION_CENTER
|
||
FROM DM.DM_TD_EXTERNAL_GEO_TEMP
|
||
WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [内部组织] CVH 月份范围内的 org 层级数据
|
||
-- Vacant 岗位用 kcode 替代,便于前端展示
|
||
-- ----------------------------------------------------------------------------
|
||
org AS (
|
||
SELECT DISTINCT
|
||
o.yyyymm,
|
||
o.bu_category,
|
||
o.bu_code,
|
||
o.bu_name_en,
|
||
o.sub_bu_code,
|
||
o.sub_bu_name,
|
||
o.REGION_CODE,
|
||
o.region_name,
|
||
o.rc_code,
|
||
o.rc_name,
|
||
o.district_name AS team,
|
||
o.mr_trty_code,
|
||
o.nsd_kcode,
|
||
CASE WHEN o.nsd_name = 'Vacant' THEN o.nsd_kcode ELSE o.nsd_name END AS nsd_name,
|
||
o.rsd_kcode,
|
||
CASE WHEN o.rsd_name = 'Vacant' THEN o.rsd_kcode ELSE o.rsd_name END AS rsd_name,
|
||
o.rsm_kcode,
|
||
CASE WHEN o.rsm_name = 'Vacant' THEN o.rsm_kcode ELSE o.rsm_name END AS rsm_name,
|
||
o.dsm_kcode,
|
||
CASE WHEN o.dsm_name = 'Vacant' THEN o.dsm_kcode ELSE o.dsm_name END AS dsm_name,
|
||
o.mr_kcode,
|
||
CASE WHEN o.mr_name = 'Vacant' THEN o.mr_kcode ELSE o.mr_name END AS mr_name
|
||
FROM dm_td_org_temp o
|
||
INNER JOIN cvh_ym c ON o.yyyymm = c.yyyymm
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [正常路径 1/3] CVH 月份范围内的 Territory 指示表
|
||
-- 排除 CUBE、KA;双考场景仅保留 key_hp=1 或非 Eagle 的 key_hp=2 记录
|
||
-- 修改: chenwu 20250904
|
||
-- ----------------------------------------------------------------------------
|
||
territory AS (
|
||
SELECT DISTINCT
|
||
t.yyyymm,
|
||
t.trty_code,
|
||
t.inst_code,
|
||
t.family_code
|
||
FROM dm.dm_td_sd_territory_indication t
|
||
INNER JOIN cvh_ym c ON t.yyyymm = c.yyyymm
|
||
WHERE t.bu NOT IN ('CUBE', 'KA')
|
||
AND (
|
||
(t.key_hp = 2 AND t.bu <> 'Retail' AND t.trty_code <> 'Eagle')
|
||
OR t.key_hp = 1
|
||
)
|
||
),
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- [正常路径 2/3] Territory → 机构 → 城市 → 市场 映射
|
||
-- family_code 经 product_wide → imscode_azcode → pack_market 三跳转换
|
||
-- ----------------------------------------------------------------------------
|
||
inst_pack_base AS (
|
||
SELECT DISTINCT
|
||
t.yyyymm,
|
||
t.trty_code,
|
||
t.inst_code,
|
||
i.city_name,
|
||
pm.market,
|
||
CASE i.area_code
|
||
WHEN 'SOUTH' THEN 'South'
|
||
WHEN 'WEST' THEN 'West'
|
||
WHEN 'CENTRAL' THEN 'Central'
|
||
WHEN 'NORTH' THEN 'North'
|
||
WHEN 'EAST' THEN 'East'
|
||
END AS region_center
|
||
FROM territory t
|
||
LEFT JOIN dwd.dwd_td_institution i ON t.inst_code = i.inst_code
|
||
LEFT JOIN cdw_dwd_dim_product_wide p ON t.family_code = p.prd_family_cd
|
||
LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode
|
||
LEFT JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod
|
||
),
|
||
|
||
-- [正常路径 3/3] 可定架构(Rosuvastatin Market)复制到立普妥(Atorvastatin Market)
|
||
-- 修改: Chenwu 20251207
|
||
inst_pack AS (
|
||
SELECT * FROM inst_pack_base
|
||
UNION ALL
|
||
SELECT yyyymm, trty_code, inst_code, city_name,
|
||
'Atorvastatin Market' AS market,
|
||
region_center
|
||
FROM inst_pack_base
|
||
WHERE market = 'Rosuvastatin Market'
|
||
),
|
||
|
||
-- ============================================================================
|
||
-- [Eagle 回退路径] 部分机构未能通过正常 territory 路径挂上架构,
|
||
-- 改用 城市+品牌 关系匹配 Eagle territory code
|
||
-- 修改: Chenwu 20250220
|
||
-- ============================================================================
|
||
|
||
-- Eagle: city × family → territory code(多个时取 PROJECT_CD 最大者)
|
||
eagle_trty AS (
|
||
SELECT SP_TRTY_CD, CITY_CD, FAMILY_CD
|
||
FROM (
|
||
SELECT
|
||
SP_TRTY_CD, CITY_CD, FAMILY_CD,
|
||
ROW_NUMBER() OVER (PARTITION BY CITY_CD, FAMILY_CD ORDER BY PROJECT_CD DESC) AS rn
|
||
FROM (
|
||
SELECT eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD
|
||
FROM dws.dws_td_eg_cityterritory eg
|
||
INNER JOIN cvh_ym c ON eg.YM = c.yyyymm
|
||
-- 仅保留非 Eagle BU 已覆盖的 territory(Anti-Join,性能优于 NOT IN 子查询)
|
||
LEFT JOIN (
|
||
SELECT DISTINCT trty_code
|
||
FROM dm.dm_td_sd_territory_indication
|
||
WHERE bu = 'Eagle'
|
||
) ex ON eg.SP_TRTY_CD = ex.trty_code
|
||
-- 仅医院类项目
|
||
INNER JOIN (
|
||
SELECT DISTINCT project_code
|
||
FROM DWS.dws_td_eg_project_instype
|
||
WHERE ins_type = '医院'
|
||
) pi ON eg.PROJECT_CD = pi.project_code
|
||
WHERE ex.trty_code IS NULL -- Anti-Join 条件
|
||
AND NVL(eg.SALES_RATE, 0) <> 0 -- 排除零销售比例(原逻辑:cast <> '0.000000')
|
||
GROUP BY eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD
|
||
) base
|
||
) deduped
|
||
WHERE rn = 1
|
||
),
|
||
|
||
-- Eagle territory → 市场 映射(family → brand → pack → market,city code → city name)
|
||
eagle_mapping AS (
|
||
SELECT
|
||
et.SP_TRTY_CD,
|
||
g.city_name,
|
||
pm.market
|
||
FROM eagle_trty et
|
||
LEFT JOIN cdw_dwd_dim_product_wide p ON et.FAMILY_CD = p.prd_family_cd
|
||
LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode
|
||
LEFT JOIN dm.dm_td_geography g ON et.CITY_CD = g.city_code
|
||
INNER JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod
|
||
GROUP BY et.SP_TRTY_CD, g.city_name, pm.market
|
||
),
|
||
|
||
-- Audit 机构 → 城市 映射
|
||
audit_geo AS (
|
||
SELECT AUDIT_COD, MAX(CITY_C) AS city_c
|
||
FROM DM.DM_TD_EXTERNAL_GEO
|
||
WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
GROUP BY AUDIT_COD
|
||
),
|
||
|
||
-- 汇总:对 all_audit_market 中无法通过 inst_pack 匹配的记录,
|
||
-- 尝试用 Eagle 城市+市场 回退挂上 territory code
|
||
eagle_trty_with_city AS (
|
||
SELECT
|
||
am.AUDIT_COD,
|
||
am.market,
|
||
ag.city_c,
|
||
em.SP_TRTY_CD
|
||
FROM all_audit_market am
|
||
LEFT JOIN audit_geo ag ON am.AUDIT_COD = ag.AUDIT_COD
|
||
LEFT JOIN eagle_mapping em ON em.city_name = ag.city_c
|
||
AND em.market = am.market
|
||
WHERE em.SP_TRTY_CD IS NOT NULL -- 仅保留能匹配到 Eagle territory 的行
|
||
GROUP BY am.AUDIT_COD, am.market, ag.city_c, em.SP_TRTY_CD
|
||
)
|
||
|
||
-- ----------------------------------------------------------------------------
|
||
-- 主写入:覆盖写目标表
|
||
-- 优先级: t2(正常路径 org)> t6(Eagle 回退 org)> 硬编码默认值
|
||
-- ----------------------------------------------------------------------------
|
||
INSERT OVERWRITE dm.DM_TD_EXT_AIA_ORG (
|
||
REGION_CODE, region_name_en,
|
||
rc_code, rc_name_en,
|
||
RegionCenter,
|
||
AUDIT_COD, MARKET,
|
||
bu_category, bu_name_en,
|
||
sub_bu_name, sub_bu_code_auth, bu_code_auth,
|
||
DATA_SOURCE, REGION_RATIO,
|
||
RSM_Name, RC_Name, TEAM,
|
||
MR_TRTY_CODE,
|
||
NSD_KCODE, NSD_NAME,
|
||
RSD_KCODE, RSD_NAME,
|
||
RSM_KCODE,
|
||
DSM_KCODE, DSM_NAME,
|
||
MR_KCODE, MR_NAME
|
||
)
|
||
SELECT DISTINCT
|
||
COALESCE(t2.REGION_CODE, t6.REGION_CODE, 'ROC') AS REGION_CODE,
|
||
COALESCE(t2.region_name, t6.region_name, 'ROC') AS region_name_en,
|
||
COALESCE(t2.rc_code, t6.rc_code, 'ROC') AS rc_code,
|
||
COALESCE(t2.rc_name, t6.rc_name, 'ROC') AS rc_name_en,
|
||
COALESCE(t1.region_center, t4.REGION_CENTER, t7.REGION_CENTER, '') AS RegionCenter,
|
||
t0.audit_cod,
|
||
t0.market,
|
||
COALESCE(t2.bu_category, t6.bu_category, '') AS bu_category,
|
||
COALESCE(t2.bu_name_en, t6.bu_name_en, '') AS bu_name_en,
|
||
COALESCE(t2.sub_bu_name, t6.sub_bu_name, '') AS sub_bu_name,
|
||
COALESCE(t2.sub_bu_code, t6.sub_bu_code, '') AS sub_bu_code_auth,
|
||
CONCAT(COALESCE(t2.bu_code, t6.bu_code, ''), 'AIA(Monthly)') AS bu_code_auth,
|
||
'AIA(Monthly)' AS DATA_SOURCE,
|
||
1 AS REGION_RATIO,
|
||
COALESCE(t2.rsm_name, t6.rsm_name, 'Vacant') AS RSM_Name,
|
||
COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RC_Name,
|
||
COALESCE(t2.team, t6.team, 'ROC') AS TEAM,
|
||
COALESCE(t2.mr_trty_code, t6.mr_trty_code, 'Vacant') AS MR_TRTY_CODE,
|
||
COALESCE(t2.nsd_kcode, t6.nsd_kcode, 'Vacant') AS NSD_KCODE,
|
||
COALESCE(t2.nsd_name, t6.nsd_name, 'Vacant') AS NSD_NAME,
|
||
COALESCE(t2.rsd_kcode, t6.rsd_kcode, 'Vacant') AS RSD_KCODE,
|
||
COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RSD_NAME,
|
||
COALESCE(t2.rsm_kcode, t6.rsm_kcode, 'Vacant') AS RSM_KCODE,
|
||
COALESCE(t2.dsm_kcode, t6.dsm_kcode, 'Vacant') AS DSM_KCODE,
|
||
COALESCE(t2.dsm_name, t6.dsm_name, 'Vacant') AS DSM_NAME,
|
||
COALESCE(t2.mr_kcode, t6.mr_kcode, 'Vacant') AS MR_KCODE,
|
||
COALESCE(t2.mr_name, t6.mr_name, 'Vacant') AS MR_NAME
|
||
FROM all_audit_market t0
|
||
-- ── 正常路径 ──────────────────────────────────────────────────────────────
|
||
LEFT JOIN inst_pack t1 ON t0.audit_cod = t1.inst_code
|
||
AND t0.market = t1.market
|
||
LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code
|
||
AND t1.yyyymm = t2.yyyymm
|
||
LEFT JOIN external_geo t4 ON t1.city_name = t4.city_c
|
||
-- ── Eagle 回退路径(仅当正常路径未能匹配机构时) ──────────────────────────
|
||
LEFT JOIN eagle_trty_with_city t5 ON t0.audit_cod = t5.AUDIT_COD
|
||
AND t0.market = t5.market
|
||
AND t1.inst_code IS NULL -- 正常路径未命中
|
||
LEFT JOIN org t6 ON t5.SP_TRTY_CD = t6.mr_trty_code
|
||
LEFT JOIN external_geo t7 ON t5.city_c = t7.city_c
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- --修改时间:20240808
|
||
-- --修改人:FanXuJia
|
||
-- --修改背景:
|
||
-- --事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。
|
||
-- --因此需要从事实表补全这部分audit_cod
|
||
-- with sales as (
|
||
-- select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales
|
||
-- union
|
||
-- select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc
|
||
-- )
|
||
-- ,market_pack as (
|
||
-- select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping
|
||
-- )
|
||
-- ,org as (
|
||
-- select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_AIA_ORG
|
||
-- )
|
||
-- ,tmp_org as (
|
||
-- select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE
|
||
-- from sales a
|
||
-- left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE
|
||
-- left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET
|
||
-- where C.AUDIT_COD IS NULL
|
||
-- )
|
||
-- insert into table dm.DM_TD_EXT_AIA_ORG
|
||
-- (
|
||
-- REGION_CODE,
|
||
-- region_name_en,
|
||
-- RSM_Name,
|
||
-- rc_code,
|
||
-- rc_name_en,
|
||
-- RC_Name,
|
||
-- RegionCenter,
|
||
-- AUDIT_COD,
|
||
-- MARKET,
|
||
-- bu_category,
|
||
-- bu_name_en,
|
||
-- sub_bu_name,
|
||
-- sub_bu_code_auth,
|
||
-- bu_code_auth,
|
||
-- DATA_SOURCE,
|
||
-- REGION_RATIO,
|
||
-- TEAM,
|
||
-- MR_TRTY_CODE,
|
||
-- NSD_KCODE,
|
||
-- NSD_NAME,
|
||
-- RSD_KCODE,
|
||
-- RSD_NAME,
|
||
-- RSM_KCODE,
|
||
-- DSM_KCODE,
|
||
-- DSM_NAME,
|
||
-- MR_KCODE,
|
||
-- MR_NAME
|
||
-- )
|
||
-- select
|
||
-- 'ROC' as REGION_CODE,
|
||
-- 'ROC' as region_name_en,
|
||
-- 'Vacant' as RSM_Name,
|
||
-- 'ROC' as rc_code,
|
||
-- 'ROC' as rc_name_en,
|
||
-- 'Vacant' as RC_Name,
|
||
-- null as RegionCenter,
|
||
-- AUDIT_COD,
|
||
-- MARKET,
|
||
-- null as bu_category,
|
||
-- null as bu_name_en,
|
||
-- null as sub_bu_name,
|
||
-- null as sub_bu_code_auth,
|
||
-- DATA_SOURCE as bu_code_auth,
|
||
-- DATA_SOURCE,
|
||
-- 1 as REGION_RATIO,
|
||
-- 'ROC' as TEAM,
|
||
-- 'Vacant' as MR_TRTY_CODE,
|
||
-- 'Vacant' as NSD_KCODE,
|
||
-- 'Vacant' as NSD_NAME,
|
||
-- 'Vacant' as RSD_KCODE,
|
||
-- 'Vacant' as RSD_NAME,
|
||
-- 'Vacant' as RSM_KCODE,
|
||
-- 'Vacant' as DSM_KCODE,
|
||
-- 'Vacant' as DSM_NAME,
|
||
-- 'Vacant' as MR_KCODE,
|
||
-- 'Vacant' as MR_NAME
|
||
-- from tmp_org
|
||
-- where DATA_SOURCE = 'AIA(Monthly)'
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- DBTITLE 1,add
|
||
-- =============================================================================
|
||
-- CELL 3: INSERT INTO —— 补全缺失机构(Backfill)
|
||
--
|
||
-- 背景: 事实表(dm_tf_external_sales / _thc)与维度表来自不同手工文件,
|
||
-- 部分 audit_cod 有销量但维度表中缺失,导致前端漏数。
|
||
-- 此步骤找出差集并以默认值兜底写入。
|
||
-- 修改时间: 20240808 修改人: FanXuJia
|
||
-- =============================================================================
|
||
-- COMMAND ----------
|
||
|
||
WITH
|
||
-- 提前过滤 AIA 渠道,减少后续 JOIN 数据量
|
||
aia_sales AS (
|
||
SELECT PACK_CODE, AUDIT_CODE
|
||
FROM dm.dm_tf_ext_aia_sales
|
||
),
|
||
pack_market_ref AS (
|
||
SELECT DISTINCT PACK_CODE, MARKET
|
||
FROM dm.dm_td_ext_aia_market_pack_mapping
|
||
-- WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
),
|
||
existing_org AS (
|
||
SELECT DISTINCT AUDIT_COD, MARKET
|
||
FROM dm.DM_TD_EXT_AIA_ORG
|
||
WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
),
|
||
-- 找出:有销量 但 维度表中没有的 audit_cod × market 组合
|
||
missing_org AS (
|
||
SELECT DISTINCT
|
||
s.AUDIT_CODE,
|
||
m.MARKET
|
||
FROM aia_sales s
|
||
LEFT JOIN pack_market_ref m ON s.PACK_CODE = m.PACK_CODE
|
||
LEFT JOIN existing_org e ON s.AUDIT_CODE = e.AUDIT_COD
|
||
AND m.MARKET = e.MARKET
|
||
WHERE e.AUDIT_COD IS NULL -- Anti-Join: 维度表中不存在
|
||
AND m.MARKET IS NOT NULL -- 排除无法映射到市场的包装
|
||
)
|
||
|
||
INSERT INTO TABLE dm.DM_TD_EXT_AIA_ORG (
|
||
REGION_CODE, region_name_en,
|
||
RSM_Name, rc_code, rc_name_en, RC_Name, RegionCenter,
|
||
AUDIT_COD, MARKET,
|
||
bu_category, bu_name_en, sub_bu_name, sub_bu_code_auth, bu_code_auth,
|
||
DATA_SOURCE, REGION_RATIO,
|
||
TEAM,
|
||
MR_TRTY_CODE,
|
||
NSD_KCODE, NSD_NAME,
|
||
RSD_KCODE, RSD_NAME,
|
||
RSM_KCODE,
|
||
DSM_KCODE, DSM_NAME,
|
||
MR_KCODE, MR_NAME
|
||
)
|
||
SELECT
|
||
'ROC' AS REGION_CODE,
|
||
'ROC' AS region_name_en,
|
||
'Vacant' AS RSM_Name,
|
||
'ROC' AS rc_code,
|
||
'ROC' AS rc_name_en,
|
||
'Vacant' AS RC_Name,
|
||
NULL AS RegionCenter,
|
||
AUDIT_CODE,
|
||
MARKET,
|
||
NULL AS bu_category,
|
||
NULL AS bu_name_en,
|
||
NULL AS sub_bu_name,
|
||
NULL AS sub_bu_code_auth,
|
||
'AIA(Monthly)' AS bu_code_auth,
|
||
'AIA(Monthly)' AS DATA_SOURCE,
|
||
1 AS REGION_RATIO,
|
||
'ROC' AS TEAM,
|
||
'Vacant' AS MR_TRTY_CODE,
|
||
'Vacant' AS NSD_KCODE,
|
||
'Vacant' AS NSD_NAME,
|
||
'Vacant' AS RSD_KCODE,
|
||
'Vacant' AS RSD_NAME,
|
||
'Vacant' AS RSM_KCODE,
|
||
'Vacant' AS DSM_KCODE,
|
||
'Vacant' AS DSM_NAME,
|
||
'Vacant' AS MR_KCODE,
|
||
'Vacant' AS MR_NAME
|
||
FROM missing_org
|
||
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- -----------------------------------------------------------
|
||
-- --修改时间:20241118
|
||
-- --修改人:Fanxujia
|
||
-- --修改内容:
|
||
-- --使用手工文件排除掉每个渠道的不需要显示的市场
|
||
-- -----------------------------------------------------------
|
||
-- with hidden_market as (
|
||
-- select distinct
|
||
-- case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)'
|
||
-- when upper(data_source) = '科室市场' then 'XH Data(Quarterly)'
|
||
-- when upper(data_source) = 'EC' then 'EC(Monthly)'
|
||
-- when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)'
|
||
-- when upper(data_source) = 'CHC' then 'CHC(Quarterly)'
|
||
-- when upper(data_source) = 'AIA' then 'AIA(Monthly)'
|
||
-- when upper(data_source) = 'THC' then 'THC(Quarterly)'
|
||
-- when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)'
|
||
-- else data_source
|
||
-- end as data_source,
|
||
-- upper(hidden_market) as hidden_market
|
||
-- from dwd.dwd_gnd_ims_hidden_market
|
||
-- union all
|
||
-- select
|
||
-- 'AIA(Monthly)' as data_source,
|
||
-- 'AIA ALL Market'
|
||
-- )
|
||
|
||
|
||
-- MERGE into dm.DM_TD_EXT_AIA_ORG as t1
|
||
-- USING hidden_market t2
|
||
-- on t1.data_source = t2.data_source
|
||
-- and upper(t1.MARKET) = upper(t2.hidden_market)
|
||
-- WHEN MATCHED THEN
|
||
-- DELETE
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- DBTITLE 1,hidden_market
|
||
-- =============================================================================
|
||
-- CELL 4: MERGE DELETE —— 按隐藏市场规则清理不展示的行
|
||
--
|
||
-- 背景: 通过手工文件 dwd_gnd_ims_hidden_market 维护各渠道不需展示的市场列表,
|
||
-- 同时硬编码排除 'AIA ALL Market' 聚合行。
|
||
-- 修改时间: 20241118 修改人: Fanxujia
|
||
-- =============================================================================
|
||
-- COMMAND ----------
|
||
|
||
WITH hidden_market AS (
|
||
SELECT DISTINCT
|
||
-- 将手工文件中的简写 data_source 标准化为系统内的完整名称
|
||
CASE UPPER(data_source)
|
||
WHEN 'CHPA' THEN 'IQVIA-CHPA(Monthly)'
|
||
WHEN '科室市场' THEN 'XH Data(Quarterly)'
|
||
WHEN 'EC' THEN 'EC(Monthly)'
|
||
WHEN 'RETAIL' THEN 'Retail(Quarterly)'
|
||
WHEN 'CHC' THEN 'CHC(Quarterly)'
|
||
WHEN 'AIA' THEN 'AIA(Monthly)'
|
||
WHEN 'THC' THEN 'THC(Quarterly)'
|
||
WHEN 'COUNTY' THEN 'IQVIA-COUNTY(Quarterly)'
|
||
ELSE data_source
|
||
END AS data_source,
|
||
UPPER(hidden_market) AS hidden_market
|
||
FROM dwd.dwd_gnd_ims_hidden_market
|
||
|
||
UNION ALL
|
||
|
||
-- 固定排除 AIA 的全市场聚合行
|
||
SELECT 'AIA(Monthly)' AS data_source, 'ALL MARKET' AS hidden_market
|
||
)
|
||
|
||
MERGE INTO dm.DM_TD_EXT_AIA_ORG AS t1
|
||
USING hidden_market AS t2
|
||
ON t1.DATA_SOURCE = t2.data_source
|
||
AND UPPER(t1.MARKET) = t2.hidden_market -- hidden_market 已在 CTE 中 UPPER 化,减少重复计算
|
||
WHEN MATCHED THEN DELETE;
|
||
|
||
-- COMMAND ----------
|
||
|
||
-- WITH
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [基础配置] CVH 考核月份白名单
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- cvh_ym AS (
|
||
-- SELECT key_value AS yyyymm
|
||
-- FROM dm.dm_td_date_config
|
||
-- WHERE key_code = 'pfmc_cvh'
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [输入数据] 事实表中所有有效的 机构×市场 组合(作为主驱动集合)
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- all_audit_market AS (
|
||
-- SELECT DISTINCT
|
||
-- NVL(s.AUDIT_COD, 'ROC') AS audit_cod,
|
||
-- NVL(m.market, 'ALL Market') AS market
|
||
-- FROM dm.dm_ext_aia_sales s
|
||
-- LEFT JOIN dm.dm_td_ext_aia_market_pack_mapping m
|
||
-- ON s.pack_cod = m.PACK_CODE
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [参照表] Pack → Market 映射
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- pack_market AS (
|
||
-- SELECT DISTINCT
|
||
-- PACK_CODE AS pack_cod,
|
||
-- market
|
||
-- FROM dm.dm_td_ext_aia_market_pack_mapping
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [参照表] 城市 → 大区中心映射(AIA 渠道)
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- external_geo AS (
|
||
-- SELECT DISTINCT
|
||
-- CONCAT(city_c, '市') AS city_c,
|
||
-- REGION_CENTER
|
||
-- FROM DM.DM_TD_EXTERNAL_GEO_TEMP
|
||
-- WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [内部组织] CVH 月份范围内的 org 层级数据
|
||
-- -- Vacant 岗位用 kcode 替代,便于前端展示
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- org AS (
|
||
-- SELECT DISTINCT
|
||
-- o.yyyymm,
|
||
-- o.bu_category,
|
||
-- o.bu_code,
|
||
-- o.bu_name_en,
|
||
-- o.sub_bu_code,
|
||
-- o.sub_bu_name,
|
||
-- o.REGION_CODE,
|
||
-- o.region_name,
|
||
-- o.rc_code,
|
||
-- o.rc_name,
|
||
-- o.district_name AS team,
|
||
-- o.mr_trty_code,
|
||
-- o.nsd_kcode,
|
||
-- CASE WHEN o.nsd_name = 'Vacant' THEN o.nsd_kcode ELSE o.nsd_name END AS nsd_name,
|
||
-- o.rsd_kcode,
|
||
-- CASE WHEN o.rsd_name = 'Vacant' THEN o.rsd_kcode ELSE o.rsd_name END AS rsd_name,
|
||
-- o.rsm_kcode,
|
||
-- CASE WHEN o.rsm_name = 'Vacant' THEN o.rsm_kcode ELSE o.rsm_name END AS rsm_name,
|
||
-- o.dsm_kcode,
|
||
-- CASE WHEN o.dsm_name = 'Vacant' THEN o.dsm_kcode ELSE o.dsm_name END AS dsm_name,
|
||
-- o.mr_kcode,
|
||
-- CASE WHEN o.mr_name = 'Vacant' THEN o.mr_kcode ELSE o.mr_name END AS mr_name
|
||
-- FROM dm_td_org_temp o
|
||
-- INNER JOIN cvh_ym c ON o.yyyymm = c.yyyymm
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [正常路径 1/3] CVH 月份范围内的 Territory 指示表
|
||
-- -- 排除 CUBE、KA;双考场景仅保留 key_hp=1 或非 Eagle 的 key_hp=2 记录
|
||
-- -- 修改: chenwu 20250904
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- territory AS (
|
||
-- SELECT DISTINCT
|
||
-- t.yyyymm,
|
||
-- t.trty_code,
|
||
-- t.inst_code,
|
||
-- t.family_code
|
||
-- FROM dm.dm_td_sd_territory_indication t
|
||
-- INNER JOIN cvh_ym c ON t.yyyymm = c.yyyymm
|
||
-- WHERE t.bu NOT IN ('CUBE', 'KA')
|
||
-- AND (
|
||
-- (t.key_hp = 2 AND t.bu <> 'Retail' AND t.trty_code <> 'Eagle')
|
||
-- OR t.key_hp = 1
|
||
-- )
|
||
-- ),
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- [正常路径 2/3] Territory → 机构 → 城市 → 市场 映射
|
||
-- -- family_code 经 product_wide → imscode_azcode → pack_market 三跳转换
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- inst_pack_base AS (
|
||
-- SELECT DISTINCT
|
||
-- t.yyyymm,
|
||
-- t.trty_code,
|
||
-- t.inst_code,
|
||
-- i.city_name,
|
||
-- pm.market,
|
||
-- CASE i.area_code
|
||
-- WHEN 'SOUTH' THEN 'South'
|
||
-- WHEN 'WEST' THEN 'West'
|
||
-- WHEN 'CENTRAL' THEN 'Central'
|
||
-- WHEN 'NORTH' THEN 'North'
|
||
-- WHEN 'EAST' THEN 'East'
|
||
-- END AS region_center
|
||
-- FROM territory t
|
||
-- LEFT JOIN dwd.dwd_td_institution i ON t.inst_code = i.inst_code
|
||
-- LEFT JOIN cdw_dwd_dim_product_wide p ON t.family_code = p.prd_family_cd
|
||
-- LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode
|
||
-- LEFT JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod
|
||
-- ),
|
||
|
||
-- -- [正常路径 3/3] 可定架构(Rosuvastatin Market)复制到立普妥(Atorvastatin Market)
|
||
-- -- 修改: Chenwu 20251207
|
||
-- inst_pack AS (
|
||
-- SELECT * FROM inst_pack_base
|
||
-- UNION ALL
|
||
-- SELECT yyyymm, trty_code, inst_code, city_name,
|
||
-- 'Atorvastatin Market' AS market,
|
||
-- region_center
|
||
-- FROM inst_pack_base
|
||
-- WHERE market = 'Rosuvastatin Market'
|
||
-- ),
|
||
|
||
-- -- ============================================================================
|
||
-- -- [Eagle 回退路径] 部分机构未能通过正常 territory 路径挂上架构,
|
||
-- -- 改用 城市+品牌 关系匹配 Eagle territory code
|
||
-- -- 修改: Chenwu 20250220
|
||
-- -- ============================================================================
|
||
|
||
-- -- Eagle: city × family → territory code(多个时取 PROJECT_CD 最大者)
|
||
-- eagle_trty AS (
|
||
-- SELECT SP_TRTY_CD, CITY_CD, FAMILY_CD
|
||
-- FROM (
|
||
-- SELECT
|
||
-- SP_TRTY_CD, CITY_CD, FAMILY_CD,
|
||
-- ROW_NUMBER() OVER (PARTITION BY CITY_CD, FAMILY_CD ORDER BY PROJECT_CD DESC) AS rn
|
||
-- FROM (
|
||
-- SELECT eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD
|
||
-- FROM dws.dws_td_eg_cityterritory eg
|
||
-- INNER JOIN cvh_ym c ON eg.YM = c.yyyymm
|
||
-- -- 仅保留非 Eagle BU 已覆盖的 territory(Anti-Join,性能优于 NOT IN 子查询)
|
||
-- LEFT JOIN (
|
||
-- SELECT DISTINCT trty_code
|
||
-- FROM dm.dm_td_sd_territory_indication
|
||
-- WHERE bu = 'Eagle'
|
||
-- ) ex ON eg.SP_TRTY_CD = ex.trty_code
|
||
-- -- 仅医院类项目
|
||
-- INNER JOIN (
|
||
-- SELECT DISTINCT project_code
|
||
-- FROM DWS.dws_td_eg_project_instype
|
||
-- WHERE ins_type = '医院'
|
||
-- ) pi ON eg.PROJECT_CD = pi.project_code
|
||
-- WHERE ex.trty_code IS NULL -- Anti-Join 条件
|
||
-- AND NVL(eg.SALES_RATE, 0) <> 0 -- 排除零销售比例(原逻辑:cast <> '0.000000')
|
||
-- GROUP BY eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD
|
||
-- ) base
|
||
-- ) deduped
|
||
-- WHERE rn = 1
|
||
-- ),
|
||
|
||
-- -- Eagle territory → 市场 映射(family → brand → pack → market,city code → city name)
|
||
-- eagle_mapping AS (
|
||
-- SELECT
|
||
-- et.SP_TRTY_CD,
|
||
-- g.city_name,
|
||
-- pm.market
|
||
-- FROM eagle_trty et
|
||
-- LEFT JOIN cdw_dwd_dim_product_wide p ON et.FAMILY_CD = p.prd_family_cd
|
||
-- LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode
|
||
-- LEFT JOIN dm.dm_td_geography g ON et.CITY_CD = g.city_code
|
||
-- INNER JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod
|
||
-- GROUP BY et.SP_TRTY_CD, g.city_name, pm.market
|
||
-- ),
|
||
|
||
-- -- Audit 机构 → 城市 映射
|
||
-- audit_geo AS (
|
||
-- SELECT AUDIT_COD, MAX(CITY_C) AS city_c
|
||
-- FROM DM.DM_TD_EXTERNAL_GEO
|
||
-- WHERE DATA_SOURCE = 'AIA(Monthly)'
|
||
-- GROUP BY AUDIT_COD
|
||
-- ),
|
||
|
||
-- -- 汇总:对 all_audit_market 中无法通过 inst_pack 匹配的记录,
|
||
-- -- 尝试用 Eagle 城市+市场 回退挂上 territory code
|
||
-- eagle_trty_with_city AS (
|
||
-- SELECT
|
||
-- am.AUDIT_COD,
|
||
-- am.market,
|
||
-- ag.city_c,
|
||
-- em.SP_TRTY_CD
|
||
-- FROM all_audit_market am
|
||
-- LEFT JOIN audit_geo ag ON am.AUDIT_COD = ag.AUDIT_COD
|
||
-- LEFT JOIN eagle_mapping em ON em.city_name = ag.city_c
|
||
-- AND em.market = am.market
|
||
-- WHERE em.SP_TRTY_CD IS NOT NULL -- 仅保留能匹配到 Eagle territory 的行
|
||
-- GROUP BY am.AUDIT_COD, am.market, ag.city_c, em.SP_TRTY_CD
|
||
-- )
|
||
|
||
-- -- ----------------------------------------------------------------------------
|
||
-- -- 主写入:覆盖写目标表
|
||
-- -- 优先级: t2(正常路径 org)> t6(Eagle 回退 org)> 硬编码默认值
|
||
-- -- ----------------------------------------------------------------------------
|
||
|
||
-- -- SELECT DISTINCT
|
||
-- -- COALESCE(t2.REGION_CODE, t6.REGION_CODE, 'ROC') AS REGION_CODE,
|
||
-- -- COALESCE(t2.region_name, t6.region_name, 'ROC') AS region_name_en,
|
||
-- -- COALESCE(t2.rc_code, t6.rc_code, 'ROC') AS rc_code,
|
||
-- -- COALESCE(t2.rc_name, t6.rc_name, 'ROC') AS rc_name_en,
|
||
-- -- COALESCE(t1.region_center, t4.REGION_CENTER, t7.REGION_CENTER, '') AS RegionCenter,
|
||
-- -- t0.audit_cod,
|
||
-- -- t0.market,
|
||
-- -- COALESCE(t2.bu_category, t6.bu_category, '') AS bu_category,
|
||
-- -- COALESCE(t2.bu_name_en, t6.bu_name_en, '') AS bu_name_en,
|
||
-- -- COALESCE(t2.sub_bu_name, t6.sub_bu_name, '') AS sub_bu_name,
|
||
-- -- COALESCE(t2.sub_bu_code, t6.sub_bu_code, '') AS sub_bu_code_auth,
|
||
-- -- CONCAT(COALESCE(t2.bu_code, t6.bu_code, ''), 'AIA(Monthly)') AS bu_code_auth,
|
||
-- -- 'AIA(Monthly)' AS DATA_SOURCE,
|
||
-- -- 1 AS REGION_RATIO,
|
||
-- -- COALESCE(t2.rsm_name, t6.rsm_name, 'Vacant') AS RSM_Name,
|
||
-- -- COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RC_Name,
|
||
-- -- COALESCE(t2.team, t6.team, 'ROC') AS TEAM,
|
||
-- -- COALESCE(t2.mr_trty_code, t6.mr_trty_code, 'Vacant') AS MR_TRTY_CODE,
|
||
-- -- COALESCE(t2.nsd_kcode, t6.nsd_kcode, 'Vacant') AS NSD_KCODE,
|
||
-- -- COALESCE(t2.nsd_name, t6.nsd_name, 'Vacant') AS NSD_NAME,
|
||
-- -- COALESCE(t2.rsd_kcode, t6.rsd_kcode, 'Vacant') AS RSD_KCODE,
|
||
-- -- COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RSD_NAME,
|
||
-- -- COALESCE(t2.rsm_kcode, t6.rsm_kcode, 'Vacant') AS RSM_KCODE,
|
||
-- -- COALESCE(t2.dsm_kcode, t6.dsm_kcode, 'Vacant') AS DSM_KCODE,
|
||
-- -- COALESCE(t2.dsm_name, t6.dsm_name, 'Vacant') AS DSM_NAME,
|
||
-- -- COALESCE(t2.mr_kcode, t6.mr_kcode, 'Vacant') AS MR_KCODE,
|
||
-- -- COALESCE(t2.mr_name, t6.mr_name, 'Vacant') AS MR_NAME
|
||
-- -- FROM all_audit_market t0
|
||
-- -- -- ── 正常路径 ──────────────────────────────────────────────────────────────
|
||
-- -- LEFT JOIN inst_pack t1 ON t0.audit_cod = t1.inst_code
|
||
-- -- AND t0.market = t1.market
|
||
-- -- LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code
|
||
-- -- AND t1.yyyymm = t2.yyyymm
|
||
-- -- LEFT JOIN external_geo t4 ON t1.city_name = t4.city_c
|
||
-- -- -- ── Eagle 回退路径(仅当正常路径未能匹配机构时) ──────────────────────────
|
||
-- -- LEFT JOIN eagle_trty_with_city t5 ON t0.audit_cod = t5.AUDIT_COD
|
||
-- -- AND t0.market = t5.market
|
||
-- -- AND t1.inst_code IS NULL -- 正常路径未命中
|
||
-- -- LEFT JOIN org t6 ON t5.SP_TRTY_CD = t6.mr_trty_code
|
||
-- -- LEFT JOIN external_geo t7 ON t5.city_c = t7.city_c
|
||
-- select * from inst_pack t1
|
||
-- LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code
|
||
-- AND t1.yyyymm = t2.yyyymm
|
||
-- where t1.inst_code = 'ZJTZ006H'
|
||
|
||
-- and t1.market = 'Oral lipid-lowering Market(Excl Potent Statin)'
|