Files
MarketAnalysis-ETL/Retail/z2 retail_load_data_作废.sql
chenwu 832c7bcd69 new file: 01 dm_tf_external_sales.sql
new file:   02 dm_td_external_keycompatitor.sql
	new file:   03 dm_td_external_brand_market.sql
	new file:   04 dm_td_external_calendar.sql
	new file:   05 dm_td_external_exchangerate.sql
	new file:   07 dm_td_external_packinfo.sql
	new file:   08 dm_td_external_corp.sql
	new file:   09 dm_td_external_geo_type.sql
	new file:   11 DM_TD_EXTERNAL_MARKET_NEW.sql
	new file:   12 dm_td_external_org.sql
	new file:   13 external auth.sql
	new file:   14 dm_tf_external_retail_special_bkp.sql
	new file:   AIA/01 dm_aia_pack_property.sql
	new file:   AIA/02 dm_ext_aia_sales.sql
	new file:   AIA/02 dm_ext_aia_sales_bakup_20230327.sql
	new file:   AIA/03 dm_aia_flag.sql
	new file:   AIA/04 dm_aia_provided_flag.sql
	new file:   AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql
	new file:   AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql
	new file:   AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql
	new file:   AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql
	new file:   AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql
	new file:   AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql
	new file:   AIA/11 dm_aia_targethp_flag.sql
	new file:   "AIA/z_03 dm_aia_flag_\345\244\207\344\273\275\347\224\250.sql"
	new file:   CHC/01 dm_chc_pack_property.sql
	new file:   CHC/02 DM_TF_EXT_CHC_SALES.sql
	new file:   CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql
	new file:   CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql
	new file:   CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql
	new file:   CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql
	new file:   CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql
	new file:   CHPA/01 dwd_ims_atc_hierarchy.sql
	new file:   CHPA/01 dwd_ims_nfc_hierarchy.sql
	new file:   CHPA/01 dwd_ims_td_manufacturer_corp.sql
	new file:   CHPA/01 dwd_ims_td_pack_property.sql
	new file:   CHPA/01 dwd_update.sql
	new file:   CHPA/01_FB_BLOB_TO_DWD.sql
	new file:   CHPA/02 DWS_IMS_TD_GEO.sql
	new file:   CHPA/02 dws_ims_td_atc_cn.sql
	new file:   CHPA/02 dws_ims_td_corp_cn.sql
	new file:   CHPA/02 dws_ims_td_date.sql
	new file:   CHPA/02 dws_ims_td_manu_cn.sql
	new file:   CHPA/02 dws_ims_td_market.sql
	new file:   CHPA/02 dws_ims_td_market_ta.sql
	new file:   CHPA/02 dws_ims_td_nfc_cn.sql
	new file:   CHPA/02 dws_ims_td_prod_cn.sql
	new file:   CHPA/02 tmp_ims_td_prod_tmp.sql
	new file:   CHPA/02 tmp_ims_tf_fact_sales.sql
	new file:   CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql
	new file:   CHPA/03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql
	new file:   CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql
	new file:   CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql
	new file:   CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql
	new file:   CHPA/03 DM_TF_EXT_CHPA_SALES.sql
	new file:   CHPA/03 dm_ims_td_calendar.sql
	new file:   CHPA/03 dm_ims_td_geo.sql
	new file:   CHPA/03 dm_ims_td_market_property.sql
	new file:   CHPA/03 dm_ims_td_org.sql
	new file:   CHPA/03 dm_ims_td_org_hvh.sql
	new file:   CHPA/03 dm_ims_td_pack_property.sql
	new file:   CHPA/03 dm_ims_tf_sales.sql
	new file:   CHPA/03 dm_td_chpa_market_definition.sql
	new file:   CHPA/03 dm_td_ims_city_mapping.sql
	new file:   EC/03 ec_load_data.sql
	new file:   EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql
	new file:   EC/05 DM_TF_EXT_EC_SALES.sql
	new file:   EC/06 DM_TD_EXT_EC_PACK2MARKET.sql
	new file:   EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql
	new file:   EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql
	new file:   EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql
	new file:   EC/1 (ec)blob_to_dwd.sql
	new file:   EC/2 dwd_inc_gnd_ext_ec_nationnal_pack_union_all.py
	new file:   Merged_Data/Merged_Data_Config_table_bkp.sql
	new file:   Merged_Data/Merged_Data_Config_table_bymonth.sql
	new file:   Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bkp.sql
	new file:   Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bymonth_bkp.sql
	new file:   ORG/DM_TD_EXT_AIA_ORG.sql
	new file:   ORG/DM_TD_EXT_CHC_ORG.sql
	new file:   ORG/DM_TD_EXT_CHPA_ORG.sql
	new file:   ORG/DM_TD_EXT_COUNTY_ORG.sql
	new file:   ORG/DM_TD_EXT_EC_ORG.sql
	new file:   ORG/DM_TD_EXT_RETAIL_ORG.sql
	new file:   ORG/DM_TD_EXT_THC_ORG.sql
	new file:   ORG/DM_TD_EXT_XIEHE_ORG.sql
	new file:   OTHERS/01 dm_td_report_url.sql
	new file:   OTHERS/02 dws_ext_email_warning.sql
	new file:   OTHERS/external_triggered_email.py
	new file:   Retail/01 load_tmp_data.py
	new file:   Retail/02 split_brand_data.py
	new file:   Retail/03 split_pack_data.py
	new file:   Retail/04 map_to_dws_table.py
	new file:   Retail/05 load_dtp_temp_data.py
	new file:   Retail/06 split_dtp_brand_data.py
	new file:   Retail/07 split_dtp_pack_data.py
	new file:   Retail/08 map_to_dtp_dws_table.py
	new file:   Retail/09 dwd_inc_gnd_ext_retail_nataional.py
	new file:   Retail/10 map_to_retail_dm_table.py
	new file:   Retail/11 map_to_overview_dm_table.py
	new file:   Retail/12 dws_tf_external_retail_dtp_special.sql
	new file:   Retail/13 DM_TF_EXT_RETAIL_SALES.sql
	new file:   Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql
	new file:   Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql
	new file:   Retail/16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql
	new file:   Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql
	new file:   Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql
	new file:   Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql
	new file:   Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql
	new file:   Retail/19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql
	new file:   Retail/19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql
	new file:   Retail/20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql
	new file:   Retail/20 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql
	new file:   "Retail/z1 dwd_inc_gnd_ext_retail_nataional_\344\275\234\345\272\237.py"
	new file:   "Retail/z2 retail_load_data_\344\275\234\345\272\237.sql"
	new file:   "Retail/z3 retail_overview_data_\344\275\234\345\272\237.sql"
	new file:   THC/01 dm_thc_pack_property.sql
	new file:   THC/02 dm_ext_thc_sales.sql
	new file:   THC/02 dm_ext_thc_sales_bakup_20260327.sql
	new file:   THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql
	new file:   THC/04 dm_tf_external_sales_thc.sql
	new file:   THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql
	new file:   THC/06 DM_TD_EXT_THC_PACK2MARKET.sql
	new file:   THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql
	new file:   THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql
	new file:   THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql
	new file:   UNIONALL/DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql
	new file:   UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql
	new file:   UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql
	new file:   UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql
	new file:   UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql
	new file:   UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql
	new file:   UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql
	new file:   XIEHE/01 xiehe_blob_to_dwd.py
	new file:   XIEHE/02 dm_xiehe_pack_property.sql
	new file:   XIEHE/03 dm_ext_xiehe_geo.sql
	new file:   XIEHE/04 dm_ext_xiehe_sales.sql
	new file:   XIEHE/05 dm_td_xiehe_core_dept.sql
	new file:   XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql
	new file:   XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql
	new file:   XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql
	new file:   XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql
	new file:   XIEHE/10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql
	new file:   XIEHE/11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql
	new file:   XIEHE/bkp_01 xiehe_blob2dwd.py
	new file:   XIEHE/bkp_02 dm_ext_xiehe_sales.sql
	new file:   XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql
	new file:   county/01 tmp_ims_county_fact_sales_sum.sql
	new file:   county/02 tmp_imscounty_Result.sql
	new file:   county/03 dm_ims_td_county_geo.sql
	new file:   county/04 dws_ext_county_tf_sales.sql
	new file:   county/05 dm_ext_county_td_pack_property.sql
	new file:   county/06 dm_td_county_pack_region.sql
	new file:   county/07 dm_ext_county_tf_sales_region.sql
	new file:   county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql
	new file:   county/09 DM_TF_EXT_COUNTY_SALES.sql
	new file:   county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql
	new file:   county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql
	new file:   county/12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql
	new file:   county/13 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql
	new file:   for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql
	new file:   for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql
	new file:   for_AIA_Dashboard/03 dm_td_aia_original_col.sql
	new file:   for_AIA_Dashboard/04 dm_td_aia_nosales_inst.sql
	new file:   for_AIA_Dashboard/05 dm_td_aia_is_eagle_flag.sql
	new file:   for_AIA_Dashboard/06 dm_td_aia_rank.sql
	new file:   for_AIA_Dashboard/07 dm_ext_aia_data_remove_flag.sql
	new file:   for_AIA_Dashboard/07 dm_td_aia_remove_special_ins_bkp.py
	new file:   for_AIA_Dashboard/08 dm_ext_aia_data_quality_flag.sql
	new file:   z 01 dm_tf_external_sales.sql
	new file:   "z 10 dm_td_external_market_pack_mapping_\344\275\234\345\272\237.sql"
	new file:   "z 11 dm_td_external_market_\344\275\234\345\272\237.sql"
	new file:   "\344\270\212\347\272\277\350\204\232\346\234\254.sql"
	new file:   "\346\225\260\346\215\256\351\252\214\350\257\201.sql"
2026-04-27 15:48:38 +08:00

6276 lines
233 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Databricks notebook source
-- MAGIC %md
-- MAGIC ### 维度信息计算
-- COMMAND ----------
-------------------------------------------------------------------------------------
--修改时间20240819
--修改人FanXujia
--修改内容:
--模板整合将原本的十几个手工表改成3个表。
--其中,
--新文件《全国-集团排名》筛选TA=Retail TotalRx/OTC= RxTop/Top Incre. = Top Sales对应了旧文件《全国-Rx-TOP集团》
--新文件《全国-集团排名》筛选TA <> Retail TotalTop/Top Incre. = Top Sales对应了旧文件《全国-分TA-TOP集团》
--《全国-集团排名》dwd.dwd_gnd_retail_national_corp_rank
--《全国-产品排名》dwd.dwd_gnd_retail_national_prd_rank
--《大区-集团排名》dwd.dwd_gnd_retail_region_corp_rank
-------------------------------------------------------------------------------------
-- COMMAND ----------
--直接写入旧的文件对应的表,这样后面的代码都不用改动。
--新文件《全国-集团排名》筛选TA=Retail TotalRx/OTC= RxTop/Top Incre. = Top Sales对应了旧文件《全国-Rx-TOP集团》
insert overwrite table dwd.dwd_gnd_ext_retail_nataional_top_corp
(
rank1,
corp_desc,
corporation,
corp_type,
sales_quarter,
sales_amount,
ytd_gr,
ytd_ms,
ytd_delta_ms,
builtinarchivedate,
source_file_path,
source_file_name,
etl_insert_dt
)
select
trim(rank1) as rank1,
corp_desc,
corporation,
`type` as corp_type,
sales_quarter,
sales_amount,
null as ytd_gr,
null as ytd_ms,
null as ytd_delta_ms,
builtinarchivedate,
source_file_path,
source_file_name,
etl_insert_dt
from dwd.dwd_gnd_retail_national_corp_rank
where upper(ta) = 'RETAIL TOTAL'
and upper(rx_otc) = 'RX'
and upper(top_top_incre) = 'TOP SALES'
-- COMMAND ----------
--直接写入旧的文件对应的表,这样后面的代码都不用改动。
--新文件《全国-集团排名》筛选TA <> Retail TotalTop/Top Incre. = Top Sales对应了旧文件《全国-分TA-TOP集团》
insert overwrite table dwd.dwd_gnd_ext_retail_nataional_ta_top_corp
(
rank1,
corp_desc,
corp_name,
corp_type,
source_name,
sales_quarter,
sales_amount,
ytd_gr,
ytd_ms,
ytd_delta_ms,
builtinarchivedate,
source_file_path,
source_file_name,
etl_insert_dt
)
select
trim(rank1) as rank1,
corp_desc,
corporation as corp_name,
`type` as corp_type,
case when ta = 'GI' then concat(ta,'-',rx_otc)
when ta = 'NIAD-excl. GLP1' then 'DM'
else ta end as source_name,
sales_quarter,
sales_amount,
null as ytd_gr,
null as ytd_ms,
null as ytd_delta_ms,
builtinarchivedate,
source_file_path,
source_file_name,
etl_insert_dt
from dwd.dwd_gnd_retail_national_corp_rank
where upper(ta) <> 'RETAIL TOTAL'
and upper(top_top_incre) = 'TOP SALES'
-- COMMAND ----------
-------------------从底表获取market 与ta 对应关系------------------------------
insert overwrite table dws.dws_ext_retail_td_ta
select
market,
ta,
from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt,
from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
from dwd.dwd_gnd_ext_retail_dim_ta;
-- COMMAND ----------
--增加retail的省份和城市 geo表
with t1 as (
----获取底表的 province_city
select province_city
from (select zk_region province_city from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
union all
select province_city from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all)
group by province_city
---增加dtp的部分
UNION
select distinct province_city from dwd.dwd_gnd_ext_dtp_zk_brand
)
, tmp as (
----------------按照retail 逻辑划分福厦泉、全国并从chpa的geo中提取其他维度信息---------------------
select distinct
case when t1.province_city = '全国' then 'CHT'
when t1.province_city = '福厦泉' then 'FXQ'
else
nvl(t2.geo_key, t3.geo_key)
end geo_key,
t4.AZ_City_tier
,t4.city_tier,
province_city,
t3.city_name,
t3.city_code,
t3.city_name_en,
case when t1.province_city = '福厦泉' then '福建'
when t1.province_city = '全国' then '全国'
else
nvl(t3.province_name,t2.province_name)
end province_name,
case when t1.province_city = '福厦泉' then 'FJ'
when t1.province_city = '全国' then 'National'
else
nvl(t3.province_code,t2.province_code)
end province_code,
case when t1.province_city = '福厦泉' then 'Fujian'
when t1.province_city = '全国' then 'National'
else
nvl(t3.province_name_en,t2.province_name_en)
end province_name_en,
case when t1.province_city = '福厦泉' then 'SOUTH'
when t1.province_city = '全国' then 'National'
else
nvl(t3.area_code,t2.area_code)
end area_code,
case when t1.province_city = '福厦泉' then '南部地区'
when t1.province_city = '全国' then 'National'
else
nvl(t3.area_name,t2.area_name)
end area_name,
case when t1.province_city = '福厦泉' then 'South China'
when t1.province_city = '全国' then 'National'
else
nvl(t3.area_name_en,t2.area_name_en)
end area_name_en,
case when t1.province_city = '福厦泉' then 'SOUTH'
when t1.province_city = '全国' then 'National'
else
nvl(t3.rc_code,t2.rc_code)
end rc_code,
case when t1.province_city = '福厦泉' then '南部地区'
when t1.province_city = '全国' then 'National'
else
nvl(t3.rc_name,t2.rc_name)
end rc_name,
case when t1.province_city = '福厦泉' then 'South China'
when t1.province_city = '全国' then 'National'
else
nvl(t3.rc_name_en,t2.rc_name_en)
end rc_name_en
from t1 left
join dm.dm_td_geography t2
on t1.province_city = t2.province_name and t2.geo_key = t2.province_code
left join dm.dm_td_geography t3
on t1.province_city = replace(t3.city_name,'','') and t3.geo_key = t3.city_code
left join dws.dws_ims_td_geo t4
on t1.province_city = replace(t4.AUDIT_DES_C,'','')
)
-------------------省份、自治区等处理-----------------------
insert overwrite table dm.dm_zk_retail_geo
SELECT
geo_key
,city_name_en
,replace(city_name,'') city_c
,case when city_code is not null then 'City' else 'Province' END city_type
,city_tier
,AZ_City_tier
,province_name_en
,province_name
,province_code
,city_name city_map
,case when province_code in ('TJ','CQ','BJ','SH') then concat(province_name,'')
when province_code in ('SC','YN','LN','SA','GZ','HN','HL','SX','ZJ','JS','SD','JL','FJ','GD','HU','AH','GS','HE','JX','HB') then concat(province_name,'')
when province_code ='GX' THEN concat(province_name,'壮族自治区')
when province_code ='IM' THEN concat(province_name,'自治区')
ELSE province_name
end province_map
,city_code
,province_city
,area_code
,area_name
,area_name_en
,rc_code
,rc_name
,rc_name_en
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
from tmp
UNION ALL
SELECT
'ROC'
,'Other Low Tiers'
,'Other Low Tiers'
,'City'
, 1
, 1
,'Other Low Tiers'
,'Other Low Tiers'
, null
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,'Other Low Tiers'
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
-- COMMAND ----------
/**
B2C标签表整合关联tblmarket 表获取market 信息
*/
insert overwrite table tmp.tmp_zk_retail_pack_property
with tmp1 as (
select distinct
prod.iqvia_lineno
,if( prod.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',prod.iqvia_pack_code),12),prod.iqvia_pack_code) as iqvia_pack_code --right(concat('0000000',prod.iqvia_pack_code),7)
, right(concat('000000000',prod.iqvia_prod_code),9) as PROD_COD
,prod.iqvia_notes
,prod.new_pack_flag
,prod.is_exists_chpa
,prod.product_id
,prod.prescription_nature
,prod.medicine_type
,prod.zk_medicine_tier1
,prod.zk_medicine_tier2
,prod.zk_medicine_tier3
,prod.zk_medicine_tier4
,prod.common_name
,prod.dosage_form
,prod.user_type
,prod.category_name
,prod.product_name
,prod.brand_name
,prod.zk_manu_des
,prod.zk_corp_des
,prod.zk_pack_des
,prod.counting_unit_a
,prod.dosage_unit_a
,prod.unit_a
,prod.app1_cod
,prod.app1_des
,prod.app1_des_c
,prod.app2_cod
,prod.app2_des
,prod.app2_des_c
,prod.app3_cod
,prod.app3_des
,prod.app3_des_c
,prod.atc1_cod
,prod.atc1_des
,prod.atc1_des_c
,prod.atc2_cod
,prod.atc2_des
,prod.atc2_des_c
,prod.atc3_cod
,prod.atc3_des
,prod.atc3_des_c
,prod.atc4_cod
,prod.atc4_des
,prod.atc4_des_c
,prod.bio_desc
,right(concat('000000',nvl(prod.cmps_cod,0 )),6) cmps_cod
,prod.cmps_des
,prod.cmps_des_c
,prod.corp_cod
,prod.corp_des
,prod.corp_des_c
,prod.edl_desc
,prod.eth_otc_desc
,prod.gene_orig_desc
,prod.gqce_desc
,prod.manu_cod
,prod.manu_des
,prod.manu_des_c
,prod.mnfl_cod
,prod.mnfl_des
,prod.nrdl_desc
,prod.pack_des
,prod.stgh_des
,prod.pack_lch
,prod.paed_desc
,prod.prod_des
,prod.prod_des_c
,prod.tcm_desc
,prod.vbp_desc
,prod.unit
,prod.counting_unit
,prod.dosage_unit
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,tblmkt.market
,tblmkt.bu
,nvl(tblmkt.extend_market_ratio,1) as extend_market_ratio
from dwd.dwd_gnd_ext_retail_pack_property prod
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON prod.iqvia_pack_code = MOLE.Pack_Code
left join (
select market
,bu
,atc1_code
,atc2_code
,atc3_code
,atc4_code
,nfc1_code
,nfc2_code
,nfc3_code
,pack_code
,Molecule_Code
,zk_common_name
,extend_market_ratio
,zk_product_id
,zk_dosage_form
,Product_Code
,not_in_flag
,extend_market
from dwd.dwd_gnd_ext_retail_tblmarket
-- where (market not in( 'ZOK Default Market', 'Inhaled Extended Market') or (case when market in( 'Inhaled Extended Market') then zk_product_id is not null end))
where 1=1
and Extend_Market IS NULL
AND ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' )
)tblmkt
on nvl(prod.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then nvl(prod.ATC1_COD,'') else tblmkt.ATC1_Code end
and nvl(prod.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then nvl(prod.ATC2_COD,'') else tblmkt.ATC2_Code end
and nvl(prod.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then nvl(prod.ATC3_COD,'') else tblmkt.ATC3_Code end
and nvl(prod.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then nvl(prod.ATC4_COD,'') else tblmkt.ATC4_Code end
and nvl(prod.APP1_COD,'') = case when tblmkt.NFC1_Code is null then nvl(prod.APP1_COD,'') else tblmkt.NFC1_Code end
and nvl(prod.APP2_COD,'') = case when tblmkt.NFC2_Code is null then nvl(prod.APP2_COD,'') else tblmkt.NFC2_Code end
and nvl(prod.APP3_COD,'') = case when tblmkt.NFC3_Code is null then nvl(prod.APP3_COD,'') else tblmkt.NFC3_Code end
and right(concat('000000000',nvl(prod.iqvia_prod_code,0 )),9) = case when tblmkt.Product_Code is null then right(concat('000000000',nvl(prod.iqvia_prod_code,0 )),9) else right(concat('000000000',nvl(tblmkt.Product_Code,0 )),9) end
and if(nvl(prod.iqvia_pack_code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(prod.iqvia_pack_code,0 )),12),nvl(prod.iqvia_pack_code,0 ))
= case when tblmkt.Pack_Code is null then if(nvl(prod.iqvia_pack_code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(prod.iqvia_pack_code,0 )),12),nvl(prod.iqvia_pack_code,0 ))
else if(nvl(tblmkt.Pack_Code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(tblmkt.Pack_Code,0 )),12),nvl(tblmkt.Pack_Code,0 )) end
-- and right(concat('00000',nvl(prod.iqvia_prod_code,0 )),5) = case when tblmkt.Product_Code is null then right(concat('00000',nvl(prod.iqvia_prod_code,0 )),5) else right(concat('00000',nvl(tblmkt.Product_Code,0 )),5) end
-- and right(concat('0000000',nvl(prod.iqvia_pack_code,0 )),7) = case when tblmkt.Pack_Code is null then right(concat('0000000',nvl(prod.iqvia_pack_code,0 )),7) else right(concat('0000000',tblmkt.Pack_Code ),7 ) end
and right(concat('000000',nvl(prod.cmps_cod,0 )),6) = case when tblmkt.Molecule_Code is null then right(concat('000000',nvl(prod.cmps_cod,0 )),6) else right(concat('000000',nvl(tblmkt.Molecule_Code,0 )),6) end
where tblmkt.market is not null
)
, tmp2 as (
select distinct
prod.iqvia_lineno
,if( prod.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',prod.iqvia_pack_code),12),prod.iqvia_pack_code) as iqvia_pack_code --right(concat('0000000',prod.iqvia_pack_code),7)
, right(concat('000000000',prod.iqvia_prod_code),9) as PROD_COD
,prod.iqvia_notes
,prod.new_pack_flag
,prod.is_exists_chpa
,prod.product_id
,prod.prescription_nature
,prod.medicine_type
,prod.zk_medicine_tier1
,prod.zk_medicine_tier2
,prod.zk_medicine_tier3
,prod.zk_medicine_tier4
,prod.common_name
,prod.dosage_form
,prod.user_type
,prod.category_name
,prod.product_name
,prod.brand_name
,prod.zk_manu_des
,prod.zk_corp_des
,prod.zk_pack_des
,prod.counting_unit_a
,prod.dosage_unit_a
,prod.unit_a
,prod.app1_cod
,prod.app1_des
,prod.app1_des_c
,prod.app2_cod
,prod.app2_des
,prod.app2_des_c
,prod.app3_cod
,prod.app3_des
,prod.app3_des_c
,prod.atc1_cod
,prod.atc1_des
,prod.atc1_des_c
,prod.atc2_cod
,prod.atc2_des
,prod.atc2_des_c
,prod.atc3_cod
,prod.atc3_des
,prod.atc3_des_c
,prod.atc4_cod
,prod.atc4_des
,prod.atc4_des_c
,prod.bio_desc
,right(concat('000000',nvl(prod.cmps_cod,0 )),6) cmps_cod
,prod.cmps_des
,prod.cmps_des_c
,prod.corp_cod
,prod.corp_des
,prod.corp_des_c
,prod.edl_desc
,prod.eth_otc_desc
,prod.gene_orig_desc
,prod.gqce_desc
,prod.manu_cod
,prod.manu_des
,prod.manu_des_c
,prod.mnfl_cod
,prod.mnfl_des
,prod.nrdl_desc
,prod.pack_des
,prod.stgh_des
,prod.pack_lch
,prod.paed_desc
,prod.prod_des
,prod.prod_des_c
,prod.tcm_desc
,prod.vbp_desc
,prod.unit
,prod.counting_unit
,prod.dosage_unit
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,tblmkt.market
,tblmkt.bu
,nvl(tblmkt.extend_market_ratio,1) as extend_market_ratio
,1 as f_flag
from dwd.dwd_gnd_ext_retail_pack_property prod
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON prod.iqvia_pack_code = MOLE.Pack_Code
left join (
select market
,bu
,atc1_code
,atc2_code
,atc3_code
,atc4_code
,nfc1_code
,nfc2_code
,nfc3_code
,pack_code
,Molecule_Code
,zk_common_name
,extend_market_ratio
,zk_product_id
,zk_dosage_form
,Product_Code
,not_in_flag
,extend_market
from dwd.dwd_gnd_ext_retail_tblmarket
-- where (market not in( 'ZOK Default Market', 'Inhaled Extended Market') or (case when market in( 'Inhaled Extended Market') then zk_product_id is not null end))
where 1=1
and Extend_Market IS NULL and NOT_IN_FLAG ='0'
)tblmkt
on nvl(prod.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then nvl(prod.ATC1_COD,'') else tblmkt.ATC1_Code end
and nvl(prod.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then nvl(prod.ATC2_COD,'') else tblmkt.ATC2_Code end
and nvl(prod.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then nvl(prod.ATC3_COD,'') else tblmkt.ATC3_Code end
and nvl(prod.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then nvl(prod.ATC4_COD,'') else tblmkt.ATC4_Code end
and nvl(prod.APP1_COD,'') = case when tblmkt.NFC1_Code is null then nvl(prod.APP1_COD,'') else tblmkt.NFC1_Code end
and nvl(prod.APP2_COD,'') = case when tblmkt.NFC2_Code is null then nvl(prod.APP2_COD,'') else tblmkt.NFC2_Code end
and nvl(prod.APP3_COD,'') = case when tblmkt.NFC3_Code is null then nvl(prod.APP3_COD,'') else tblmkt.NFC3_Code end
and right(concat('000000000',nvl(prod.iqvia_prod_code,0 )),9) = case when tblmkt.Product_Code is null then right(concat('000000000',nvl(prod.iqvia_prod_code,0 )),9) else right(concat('000000000',nvl(tblmkt.Product_Code,0 )),9) end
and if(nvl(prod.iqvia_pack_code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(prod.iqvia_pack_code,0 )),12),nvl(prod.iqvia_pack_code,0 ))
= case when tblmkt.Pack_Code is null then if(nvl(prod.iqvia_pack_code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(prod.iqvia_pack_code,0 )),12),nvl(prod.iqvia_pack_code,0 ))
else if(nvl(tblmkt.Pack_Code,0 ) REGEXP '^[0-9]' ,right(concat('000000000000',nvl(tblmkt.Pack_Code,0 )),12),nvl(tblmkt.Pack_Code,0 )) end
and right(concat('000000',nvl(prod.cmps_cod,0 )),6) = case when tblmkt.Molecule_Code is null then right(concat('000000',nvl(prod.cmps_cod,0 )),6) else right(concat('000000',nvl(tblmkt.Molecule_Code,0 )),6) end
where tblmkt.market is not null
)
, tmp3 as (
select distinct
tmp1.iqvia_lineno
,tmp1.iqvia_pack_code
,tmp1.PROD_COD
,tmp1.iqvia_notes
,tmp1.new_pack_flag
,tmp1.is_exists_chpa
,tmp1.product_id
,tmp1.prescription_nature
,tmp1.medicine_type
,tmp1.zk_medicine_tier1
,tmp1.zk_medicine_tier2
,tmp1.zk_medicine_tier3
,tmp1.zk_medicine_tier4
,tmp1.common_name
,tmp1.dosage_form
,tmp1.user_type
,tmp1.category_name
,tmp1.product_name
,tmp1.brand_name
,tmp1.zk_manu_des
,tmp1.zk_corp_des
,tmp1.zk_pack_des
,tmp1.counting_unit_a
,tmp1.dosage_unit_a
,tmp1.unit_a
,tmp1.app1_cod
,tmp1.app1_des
,tmp1.app1_des_c
,tmp1.app2_cod
,tmp1.app2_des
,tmp1.app2_des_c
,tmp1.app3_cod
,tmp1.app3_des
,tmp1.app3_des_c
,tmp1.atc1_cod
,tmp1.atc1_des
,tmp1.atc1_des_c
,tmp1.atc2_cod
,tmp1.atc2_des
,tmp1.atc2_des_c
,tmp1.atc3_cod
,tmp1.atc3_des
,tmp1.atc3_des_c
,tmp1.atc4_cod
,tmp1.atc4_des
,tmp1.atc4_des_c
,tmp1.bio_desc
,tmp1.cmps_cod
,tmp1.cmps_des
,tmp1.cmps_des_c
,tmp1.corp_cod
,tmp1.corp_des
,tmp1.corp_des_c
,tmp1.edl_desc
,tmp1.eth_otc_desc
,tmp1.gene_orig_desc
,tmp1.gqce_desc
,tmp1.manu_cod
,tmp1.manu_des
,tmp1.manu_des_c
,tmp1.mnfl_cod
,tmp1.mnfl_des
,tmp1.nrdl_desc
,tmp1.pack_des
,tmp1.stgh_des
,tmp1.pack_lch
,tmp1.paed_desc
,tmp1.prod_des
,tmp1.prod_des_c
,tmp1.tcm_desc
,tmp1.vbp_desc
,tmp1.unit
,tmp1.counting_unit
,tmp1.dosage_unit
,tmp1.NRDL_ENTRY_DATE
,tmp1.market
,nvl(t2.bu,tmp1.bu) as bu
,tmp1.extend_market_ratio
,IF(tmp1.corp_des_c in('阿斯利康制药集团') ,'Y','N') is_az
from tmp1 left join tmp2
on nvl(tmp1.ATC1_COD,'') = nvl(tmp2.ATC1_COD,'')
and nvl(tmp1.ATC2_COD,'') = nvl(tmp2.ATC2_COD,'')
and nvl(tmp1.ATC3_COD,'') = nvl(tmp2.ATC3_COD,'')
and nvl(tmp1.ATC4_COD,'') = nvl(tmp2.ATC4_COD,'')
and nvl(tmp1.APP1_COD,'') = nvl(tmp2.APP1_COD,'')
and nvl(tmp1.APP2_COD,'') = nvl(tmp2.APP2_COD,'')
and nvl(tmp1.APP3_COD,'') = nvl(tmp2.APP3_COD,'')
and nvl(tmp1.PROD_COD,'') = nvl(tmp2.PROD_COD,'')
and nvl(tmp1.iqvia_pack_code,'') = nvl(tmp2.iqvia_pack_code,'')
and nvl(tmp1.common_name ,'') = nvl(tmp2.common_name ,'')
and nvl(tmp1.product_id,'') = nvl(tmp2.product_id,'')
and nvl(tmp1.dosage_form ,'') = nvl(tmp2.dosage_form ,'')
and nvl(tmp1.CMPS_COD,'') = nvl(tmp2.CMPS_COD,'')
and nvl(tmp1.market ,'') = nvl(tmp2.market ,'')
left join (select Market, BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ext_retail_tblmarket
-- where (market not in( 'ZOK Default Market', 'Inhaled Extended Market') and Extend_Market IS NOT NULL
-- )or (case when market in( 'Inhaled Extended Market') then zk_product_id is not null end)
where Extend_Market IS NOT NULL
) t2 on tmp1.Market=t2.Extend_Market
where NVL(tmp2.f_flag,0) !=1
)
-- 合并所有市场数据
select
*
from tmp3
--没有匹配上的给默认市场Non AZ Retail Related Market
union all
select
prod.iqvia_lineno
,if( prod.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',prod.iqvia_pack_code),12),prod.iqvia_pack_code) as iqvia_pack_code
,right(concat('000000000',prod.iqvia_prod_code),9) as iqvia_prod_code
-- ,right(concat('0000000', prod.iqvia_pack_code ),7 ) iqvia_pack_code
-- ,right(concat('00000', prod.iqvia_prod_code ),5) iqvia_prod_code
,prod.iqvia_notes
,prod.new_pack_flag
,prod.is_exists_chpa
,prod.product_id
,prod.prescription_nature
,prod.medicine_type
,prod.zk_medicine_tier1
,prod.zk_medicine_tier2
,prod.zk_medicine_tier3
,prod.zk_medicine_tier4
,prod.common_name
,prod.dosage_form
,prod.user_type
,prod.category_name
,prod.product_name
,prod.brand_name
,prod.zk_manu_des
,prod.zk_corp_des
,prod.zk_pack_des
,prod.counting_unit_a
,prod.dosage_unit_a
,prod.unit_a
,prod.app1_cod
,prod.app1_des
,prod.app1_des_c
,prod.app2_cod
,prod.app2_des
,prod.app2_des_c
,prod.app3_cod
,prod.app3_des
,prod.app3_des_c
,prod.atc1_cod
,prod.atc1_des
,prod.atc1_des_c
,prod.atc2_cod
,prod.atc2_des
,prod.atc2_des_c
,prod.atc3_cod
,prod.atc3_des
,prod.atc3_des_c
,prod.atc4_cod
,prod.atc4_des
,prod.atc4_des_c
,prod.bio_desc
,right(concat('00000',nvl(prod.cmps_cod,0 )),6) cmps_cod
,prod.cmps_des
,prod.cmps_des_c
,prod.corp_cod
,prod.corp_des
,prod.corp_des_c
,prod.edl_desc
,prod.eth_otc_desc
,prod.gene_orig_desc
,prod.gqce_desc
,prod.manu_cod
,prod.manu_des
,prod.manu_des_c
,prod.mnfl_cod
,prod.mnfl_des
,prod.nrdl_desc
,prod.pack_des
,prod.stgh_des
,prod.pack_lch
,prod.paed_desc
,prod.prod_des
,prod.prod_des_c
,prod.tcm_desc
,prod.vbp_desc
,prod.unit
,prod.counting_unit
,prod.dosage_unit
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,'Non AZ Retail Related Market' as market
,tmp3.bu
,nvl(tmp3.extend_market_ratio,1) as extend_market_ratio
,IF(PROD.corp_des_c in('阿斯利康制药集团') ,'Y','N') is_az
from dwd.dwd_gnd_ext_retail_pack_property prod
left join tmp3 on prod.product_id = tmp3.product_id
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON prod.iqvia_pack_code = MOLE.Pack_Code
where tmp3.product_id is null
-- COMMAND ----------
-----处理 Nifedipine 上传时有特殊字符,无法匹配----
update tmp.tmp_zk_retail_pack_property
set market='Nifedipine Market'
where market like 'Nifedipine%'
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### brand拆分
-- COMMAND ----------
--------------------------------------------获取省份文件中的品牌的数据,用于后续比例拆分--------------------------
insert overwrite table tmp.tmp_retail_brand
SELECT
YYYYMM,
TA,
case
when zk_brand_category in ('氨氯地平阿托伐他汀钙片', '多达一', '天依宁', 'OTHERS') then zk_brand_category --
else b.PROD_DES_C
end as PROD_DES_C,
province_city,
brand_cat_type,
A.zk_common_name,
A.market,
SUM(sales_val) sales_val,
cast(SUM(sales_vol) as decimal(30,10)) sales_vol
FROM
dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all A
left JOIN (
select
distinct PROD_DES_C,
ZK_Prod_C
from
dwd.dwd_inc_gnd_retail_b2c_label_total
) B ON nvl(A.zk_brand_category, '') = nvl(B.ZK_Prod_C, '')
where
ranked_by = 'volume' --and brand_cat_type = '品牌' --and TA = 'CV'
GROUP BY
YYYYMM,
TA,
case
when zk_brand_category in ('氨氯地平阿托伐他汀钙片', '多达一', '天依宁', 'OTHERS') then zk_brand_category
else b.PROD_DES_C
end,
province_city,
A.market,
A.zk_common_name,
brand_cat_type
-- COMMAND ----------
------------------------------------------------------------------------------------------------------------
--修改时间20240903
--修改人FanXujia
--修改内容新增一个高血压的子市场《酒石酸美托洛尔》实为高血压市场里的一个分子式到pack、到省份粒度。品牌粒度文件中没有他。
-------------------------------------------------------------------------------------------------------------
-- COMMAND ----------
---------------------------把品牌、全国数据拆分,并得到比例----------------------------710 修改 ------------------
insert overwrite table tmp.tmp_zk_retail_brandTotal
WITH MKT AS (
----------------MKT 总值------------
select a.YYYYMM,ta,a.province_city,a.brand_cat_type,a.market,
a.sales_val
,a.sales_vol
,B.brand_mkt marketmapping
from tmp.tmp_retail_brand a
left join (SELECT DISTINCT brand_mkt,market_mapping FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA IN ('CV','GI')) B
on a.market=b.brand_mkt and B.brand_mkt = B.market_mapping
where brand_cat_type = '品类'
and A.TA IN ('CV','GI') AND B.brand_mkt IS not null
), brand_df AS (
-------归属于分子式子市场的品牌------
select a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city
,case when a.market = 'pack-CV-高血压-化学药-全国.xlsx' then '氨氯地平,阿托伐他汀'
when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '氨氯地平,阿托伐他汀' else A.market end submkt
,cmps_des_c
,case when a.market = 'pack-CV-高血压-化学药-全国.xlsx' then '高血压用药'
when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '他汀类+血脂康' else B.brand_mkt end marketmapping
-- when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '他汀类+血脂康' else coalesce(B.brand_mkt,A.market ) end marketmapping
,a.sales_val,a.sales_vol
from tmp.tmp_retail_brand a
left join (select distinct brand_mkt,category_name from dwd.dwd_gnd_ext_retail_corresponding_relationship where category_name is not null AND TA IN ('CV','GI') AND category_name<>brand_mkt) B
ON a.market=b.category_name
left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
where brand_cat_type = '品牌'
and a.market not in (select distinct brand_mkt from dwd.dwd_gnd_ext_retail_corresponding_relationship where brand_mkt is not null )
and TA IN ('CV','GI')
),cmps_total as (
---------------------分子式汇总值------------
select a.YYYYMM,ta,a.province_city,a.brand_cat_type --,c.zk_common_name,c.cmps_des_c
,a.market,a.sales_val,a.sales_vol,B.brand_mkt marketmapping
from tmp.tmp_retail_brand a
left join (SELECT DISTINCT brand_mkt,category_name FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA IN ('CV','GI')) B
on a.market=b.category_name and B.brand_mkt<> B.category_name
-- LEFT JOIN (select DISTINCT zk_common_name,cmps_des_c,marketmapping from brand_df) c on c.zk_common_name= a.market and B.brand_mkt = c.marketmapping
where brand_cat_type = '品类'
and A.TA IN ('CV','GI') and B.brand_mkt is not null
), mkt_brand as (
----直接归属mkt 下的brand ,不能按同一个比例处理,需单独减去------------------
select a.YYYYMM,a.TA,a.province_city,
case when a.market = 'pack-CV-高血压-化学药-全国.xlsx' then '氨氯地平,阿托伐他汀'
when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '氨氯地平,阿托伐他汀' else A.market end market
,concat('Others_cmps_',cmps_des_c ) cmps_des_c
,concat('Others_cmps_',a.market ) marketmapping
,a.PROD_DES_C
,case when a.market = 'pack-CV-高血压-化学药-全国.xlsx' then '氨氯地平,阿托伐他汀'
when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '氨氯地平,阿托伐他汀' else A.market end submkt
,a.sales_val,a.sales_vol
from tmp.tmp_retail_brand a
left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
where brand_cat_type = '品牌'
and case when a.market = 'pack-CV-高血压-化学药-全国.xlsx' then '氨氯地平,阿托伐他汀'
when a.market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '氨氯地平,阿托伐他汀' else A.market end in (select distinct brand_mkt from dwd.dwd_gnd_ext_retail_corresponding_relationship where brand_mkt is not null and ta IN ('CV','GI'))
and TA IN ('CV','GI')
and a.PROD_DES_C not in (select distinct PROD_DES_C from brand_df)
)
--------酒石酸美托洛尔
,metoprolol_tartrat as
(
select YYYYMM,
'CV' as TA,
zk_region as province_city,
'高血压用药' as marketmapping,
sum(sales_value) as sales_val,
sum(sales_unit) as sales_vol
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
where brand_flag = 'pack-CV-酒石酸美托洛尔.xlsx'
group by YYYYMM,zk_region
)
, brand_data AS (
--------------------计算others_cmps-----------------
--从others_cmps这里扣除酒石酸美托洛尔
select
MKT.YYYYMM
,MKT.ta,MKT.province_city
,MKT.market
,concat('Others_cmps_',mkt.market ) cmps_des_c
,concat('Others_cmps_',mkt.market ) prodmapping
,MKT.sales_val - b.sales_val - coalesce(val,0 ) - coalesce(metoprolol_tartrat.sales_val,0) sales_val
,MKT.sales_vol - b.sales_vol -coalesce(vol, 0 ) - coalesce(metoprolol_tartrat.sales_vol,0) sales_vol
FROM MKT inner JOIN
-- (select YYYYMM,province_city,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from cmps_total group by YYYYMM,province_city,marketmapping) b
(
select
YYYYMM,province_city,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol
from (
select YYYYMM,province_city,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from cmps_total group by YYYYMM,province_city,marketmapping
union all
select YYYYMM,province_city
,case when market = 'pack-CV-高血压-化学药-全国.xlsx' then '高血压用药'
when market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '他汀类+血脂康' end marketmapping
,sum(sales_val),sum(sales_vol)
from tmp.tmp_retail_brand where PROD_DES_C in ('多达一', '氨氯地平阿托伐他汀钙片', '天依宁', 'OTHERS')
group by YYYYMM,province_city
,case when market = 'pack-CV-高血压-化学药-全国.xlsx' then '高血压用药'
when market = 'pack-CV-他汀类+血脂康-全国.xlsx' then '他汀类+血脂康' end
) group by YYYYMM,province_city,marketmapping
) b
on MKT.YYYYMM=b.YYYYMM and MKT.province_city=b.province_city and MKT.market=b.marketmapping
left join (select YYYYMM,TA,province_city,market,marketmapping,sum(sales_val) val ,sum(sales_vol) vol
from mkt_brand
group by YYYYMM,TA,province_city,market,marketmapping
) mkt_brand on MKT.YYYYMM =mkt_brand.YYYYMM and MKT.market =mkt_brand.market and MKT.province_city=mkt_brand.province_city
left join metoprolol_tartrat
on MKT.YYYYMM = metoprolol_tartrat.YYYYMM AND MKT.market = metoprolol_tartrat.marketmapping AND MKT.province_city = metoprolol_tartrat.province_city
union all
--------------计算others_cmps_brand-----------------
--cmps_total里没有酒石酸美托洛尔因此这里不用减酒石酸美托洛尔
SELECT a.YYYYMM,a.ta,a.province_city
,a.marketmapping market
,cmps_des_c
,CASE WHEN A.MARKET ='其他拉唑类' THEN 'Others_其他拉唑类' ELSE coalesce(concat('Others_',b.cmps_des_c),concat('Others_',A.marketmapping) ) END prodmapping
,a.sales_val - coalesce(b.sales_val,0 ) sales_val
,a.sales_vol - coalesce(b.sales_vol,0 ) sales_vol
from cmps_total a
LEFT JOIN (select YYYYMM,province_city,submkt,cmps_des_c,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from brand_df GROUP BY YYYYMM,province_city,submkt,marketmapping,cmps_des_c ) b
on a.YYYYMM=b.YYYYMM and a.province_city=b.province_city and a.marketmapping=b.marketmapping and a.market=b.submkt
union all
--------------归属于分子式子市场的品牌-----------
SELECT
YYYYMM,TA,province_city
,marketmapping market
,cmps_des_c
,PROD_DES_C
,sales_val
,sales_vol
FROM brand_df
union all
-------------直接归属于市场的品牌
select
YYYYMM,TA,province_city
,market
,cmps_des_c
,prod_des_c
,sales_val
,sales_vol
from mkt_brand
------这里不用union上酒石酸美托洛尔因为他有pack粒度的数不需要计算比例
)
-----计算拆分比例------
SELECT
YYYYMM
,ta
,province_city
,market
,case when ta='CV' AND prodmapping ='OTHERS' THEN '氨氯地平,阿托伐他汀'
WHEN TA='GI' AND cmps_des_c IS NULL THEN '其他拉唑类'
ELSE cmps_des_c END cmps_des_c
,prodmapping
,sales_val
,sales_vol
,nvl(cast(sales_val as decimal(38,15)) / sum(sales_val) over(PARTITION BY YYYYMM,ta,market,prodmapping),0.0384615384615385) valRate
,nvl(cast(sales_vol as decimal(38,15)) / sum(sales_vol) over(PARTITION BY YYYYMM,ta,market,prodmapping),0.0384615384615385) volRate
from (
-------------倒减ROC--------------
SELECT
A.YYYYMM
,A.ta
,'ROC' province_city
,A.market
,cmps_des_c
,case when A.prodmapping ='OTHERS' THEN 'Others_氨氯地平阿托伐他汀钙片' ELSE A.prodmapping END prodmapping
,A.sales_val - coalesce(B.sales_val ,0 ) sales_val
,A.sales_vol - coalesce(B.sales_vol,0) sales_vol
FROM brand_data A
LEFT JOIN (select YYYYMM,market,prodmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from brand_data where province_city<>'全国' GROUP BY YYYYMM,market,prodmapping) B
ON A.YYYYMM =B.YYYYMM AND A.prodmapping=B.prodmapping AND A.markeT=B.market
WHERE A.province_city ='全国'
union all
------计算好的比例拆分基础数据----
select
YYYYMM,ta,province_city,market,cmps_des_c
,case when A.prodmapping ='OTHERS' THEN 'Others_氨氯地平阿托伐他汀钙片' ELSE A.prodmapping END prodmapping
,sales_val,sales_vol
FROM brand_data A
where province_city <>'全国'
)
-- COMMAND ----------
-- ----------------------------------------------pack全国数据 rd 抗血栓2通用名 不用补数,niad GI,re 逻辑特殊所以排除仅保留CV 他汀、高血压数据-------------------------------------------------
------对pack 进行处理关联维度表获取prod ,cmps,market 等数据同时对省份文件有的品牌填充原有品牌值省份文件存在分子式但品牌不在的用others_cmps方式记录其他为others_market,用于按特定比例拆分数据---
create or replace table tmp.tmp_zk_retail_pack
using delta
as
--将酒石酸美托洛尔的数据从高血压的数据中排除掉
------------------注意事项---------------------------------------------------------------
--使用相减的方法每个省份都会剩下0.0几
--因此直接使用not in的方法
-----------------------------------------------------------------------------------------
with pack_without_metoprolol_tartrat as (
select *
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
-- 新数据中不含 酒石酸美托洛尔
-- where zk_product_id not in (
-- select distinct zk_product_id from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
-- where brand_flag = 'pack-CV-酒石酸美托洛尔.xlsx'
-- )
)
,tmp as (
select
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
E.market_mapping market,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null then 'OTHERS_氨氯地平,阿托伐他汀'
else B.prod_des_c
end prod_des_c,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null
THEN 'Others_氨氯地平阿托伐他汀钙片'
ELSE coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
END PROD_MAPPING,
-- coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) ) PROD_MAPPING,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
pack_without_metoprolol_tartrat A
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit/coalesce(unit,1) counting_unit,
cmps_des_c
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
LEFT JOIN (
SELECT
DISTINCT brand_mkt,
file_name,
market_mapping
FROM
DWD.dwd_gnd_ext_retail_corresponding_relationship
) E ON A.brand_flag = E.file_name
LEFT JOIN (
SELECT
DISTINCT YYYYMM,
prodmapping,
market
FROM
tmp.tmp_ZK_retail_brandTotal
) C ON A.YYYYMM = C.YYYYMM
AND B.prod_des_c = C.prodmapping
AND E.market_mapping = C.market ---NIAD 直接取pack数据gi market 剔除逻辑RE根据maket拆分 、RE包含雾化器数据-----
left join (SELECT DISTINCT cmps_des_c FROM TMP.tmp_zk_retail_brandTotal where cmps_des_c is NOT null ) F
ON B.cmps_des_c=F.cmps_des_c
where
brand_flag NOT in (
'pack-DM-口服降糖化学药.xlsx',
'pack-GI-慢性胃炎胃溃疡-全国.xlsx',
'pack-RE-慢阻肺-全国.xlsx',
'pack-雾化器-全国&县域数据.xlsx',
'pack-CV-抗血栓2通用名-全国.xlsx',
'pack-RD-肾科-全国.xlsx'
)
GROUP BY
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null then 'OTHERS_氨氯地平,阿托伐他汀'
else B.prod_des_c
end,
E.market_mapping,
--coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null
THEN 'Others_氨氯地平阿托伐他汀钙片'
ELSE coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
END
)
-------美托洛尔 包含琥珀酸美托洛尔 需要通过market 重新定义拆分归属------------
select
YYYYMM,zk_product_id,iqvia_pack_code,market,prod_des_c
,case when PROD_MAPPING ='Others_美托洛尔' and flag is not null then 'Others_美托洛尔'
when PROD_MAPPING ='Others_美托洛尔' and flag is null then 'Others_cmps_高血压用药'
else PROD_MAPPING
end PROD_MAPPING
,sales_value,sales_unit,counting_unit
from tmp
left join (select distinct iqvia_pack_code flag from tmp.tmp_zk_retail_pack_property where market ='Metoprolol Succinate Market') fl on tmp.iqvia_pack_code =fl.flag
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### NIAD
-- COMMAND ----------
-------------------niad 全国数据拆分-------------------------------------------------------------------
-- -----------------NIAD 加工 ,将拆分的数据替换成pack 源数据------------------------20240701修改版本------
insert overwrite table tmp.tmp_retail_sales_niad
WITH national_pack as (
-------获取niad 的全国pack 基础数据--------
select
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
E.market_mapping market,
B.prod_des_c,
CONCAT(E.brand_mkt, '_Others') PROD_MAPPING,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all A
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit/coalesce(unit,1 ) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
LEFT JOIN (
SELECT
DISTINCT brand_mkt,
file_name,
market_mapping
FROM
DWD.dwd_gnd_ext_retail_corresponding_relationship
) E ON A.brand_flag = E.file_name
where
A.brand_flag in ('pack-DM-口服降糖化学药.xlsx')
and A.zk_region = '全国' --and A.YYYYMM='202312' --,'pack-雾化器-全国&县域数据.xlsx')
GROUP BY
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
B.prod_des_c,
CONCAT(E.brand_mkt, '_Others'),
E.market_mapping
),
pack_prov as (
-------获取niad 的省份pack 基础数据--------
select
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
E.market_mapping market,
A.brand_flag,
B.prod_des_c,
NVL(B.PROD_DES_C, CONCAT(E.market_mapping, '_Others')) PROD_MAPPING,
SUM(A.sales_value) sales_value,
SUM(A.sales_unit) sales_unit,
A.zk_region,
sum(sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all A
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit/coalesce(unit,1 ) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
LEFT JOIN (
SELECT
DISTINCT brand_mkt,
file_name,
market_mapping
FROM
DWD.dwd_gnd_ext_retail_corresponding_relationship
) E ON A.brand_flag = E.file_name
where
A.brand_flag in ('pack-DM-口服降糖化学药.xlsx')
and A.zk_region != '全国' --and A.YYYYMM='202312' --,'pack-雾化器-全国&县域数据.xlsx')
GROUP BY
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
B.prod_des_c,
E.market_mapping,
A.brand_flag,
A.zk_region
)
/*
修改人chenwu
修改时间20250319
修改内容NIAD不藏数据用于页面藏数逻辑。brand_flag 默认都给1
*/
--拆分NIAD数据到ROC
SELECT
A.YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,A.PROD_MAPPING
,'ROC' province_city
,A.market
,A.Sales_value - nvl(sales_V ,0) Sales_value
,A.sales_unit - nvl(SALES_U,0) sales_unit
,A.counting_unit - nvl(COUNT_U,0) counting_unit
,2 pack_flag
,1 brand_flag --case when c.mapp is null then 2 else 1 end brand_flag
FROM national_pack A
LEFT JOIN (
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,market
,SUM(sales_value) sales_V
,SUM(sales_unit) SALES_U
,SUM(counting_unit) COUNT_U
FROM pack_prov
GROUP BY
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,market
)B ON A.YYYYMM=B.YYYYMM
AND A.zk_product_id=B.zk_product_id
left join (select b.PROD_DES_C mapp from
(select distinct zk_brand_category from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all where brand_cat_type='品牌' and market='NIAD') a
left join (select distinct PROD_DES_C,ZK_Prod_C from dwd.dwd_inc_gnd_retail_b2c_label_total ) b on a.zk_brand_category =b.ZK_Prod_C ) c
on a.prod_des_c = c.mapp
union all
--pack+省份 原始数据
select
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,zk_region province_city
,market
,sales_value
,sales_unit
,counting_unit
,1 pack_flag
,1 brand_flag --case when b.mapp is null then 2 else 1 end brand_flag
from pack_prov a
left join (select b.PROD_DES_C mapp from
(select distinct zk_brand_category from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all where brand_cat_type='品牌' and market='NIAD') a
left join (select distinct PROD_DES_C,ZK_Prod_C from dwd.dwd_inc_gnd_retail_b2c_label_total ) b on a.zk_brand_category =b.ZK_Prod_C ) b
on a.PROD_MAPPING = b.mapp
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### RE
-- COMMAND ----------
-- ------------------------------------------------------------RE 数据拆分-------------------------------------------
-- ------------------
-- insert overwrite table tmp.tmp_retail_result_re
-- with Inhaled_tmp as (
-- ----拼接Respules Market数据---Inhaled
-- select a.YYYYMM,a.zk_product_id,b.iqvia_pack_code,a.zk_region,sum(a.sales_value) sales_value,sum(sales_unit) sales_unit ,sum(a.sales_unit*(b.counting_unit/coalesce(b.unit,1 ))) counting_unit
-- ,1 pack_flag
-- ,1 brand_flag
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id=b.product_id
-- where brand_flag= 'pack-雾化器-全国&县域数据.xlsx' and a.zk_region <>'全国'
-- -- and iqvia_pack_code in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Inhaled Extended Market by Brand')
-- group by a.YYYYMM,b.iqvia_pack_code,a.zk_region,a.zk_product_id
-- union all
-- -- -inhaled ROC数据----
-- select
-- a.YYYYMM
-- ,a.zk_product_id
-- ,A.iqvia_pack_code
-- ,'ROC' province_city
-- ,a.sales_value -inh.sales_value sales_value
-- ,a.sales_unit -inh.sales_unit sales_unit
-- ,a.counting_unit-inh.counting_unit counting_unit
-- ,2 pack_flag
-- ,1 brand_flag
-- from (
-- -----re 数据筛选--respules Market数据汇总到全国--
-- select a.YYYYMM,a.zk_product_id,b.iqvia_pack_code,a.zk_region,sum(a.sales_value) sales_value,sum(sales_unit) sales_unit ,sum(a.sales_unit* (b.counting_unit/coalesce(b.unit,1 ))) counting_unit
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id=b.product_id
-- where brand_flag='pack-RE-慢阻肺-全国.xlsx'
-- -- and b.iqvia_pack_code in (select iqvia_pack_code from dm.dm_zk_retail_pack_property where market ='Respules Market')
-- and b.iqvia_pack_code in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Respules Market')
-- group by a.YYYYMM,a.zk_region,b.iqvia_pack_code,a.zk_product_id
-- ) a INNER join (
-- select
-- a.YYYYMM
-- ,a.zk_product_id
-- ,c.iqvia_pack_code
-- ,coalesce(b.sales_value,0)sales_value
-- ,coalesce(b.sales_unit,0) sales_unit
-- ,coalesce(b.counting_unit,0) counting_unit
-- from ( select YYYYMM,zk_product_id from
-- (select distinct zk_product_id from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all where zk_region <>'全国')
-- cross join (select distinct YYYYMM from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all where zk_region <>'全国')
-- ) a
-- left join (select a.YYYYMM,a.zk_product_id,b.iqvia_pack_code,sum(a.sales_value) sales_value,sum(sales_unit) sales_unit,sum(a.sales_unit* (b.counting_unit/coalesce(b.unit,1 ))) counting_unit
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id=b.product_id
-- where brand_flag= 'pack-雾化器-全国&县域数据.xlsx' and a.zk_region <>'全国'
-- group by a.YYYYMM,b.iqvia_pack_code,a.zk_product_id) b
-- on a.YYYYMM=b.YYYYMM and a.zk_product_id=b.zk_product_id
-- left join dwd.dwd_gnd_ext_retail_pack_property c on a.zk_product_id=c.product_id
-- -- WHERE b.iqvia_pack_code IN (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Inhaled Extended Market by Brand')
-- ) inh on a.YYYYMM =inh.YYYYMM and a.zk_product_id=inh.zk_product_id
-- )
-- ,mkt as (
-- -------------补充mark 的roc 部分数据
-- select YYYYMM,ta,province_city,brand_cat_type,market,sales_val,sales_vol
-- from tmp.tmp_retail_brand where ta='RE' AND brand_cat_type ='品类' and market ='慢性阻塞性肺疾病'
-- union all
-- select
-- a.YYYYMM,a.ta,'ROC' ,a.brand_cat_type,a.market,a.sales_val - b.sales_val sales_val ,a.sales_vol-b.sales_vol sales_vol
-- from
-- (select YYYYMM,ta,brand_cat_type,market,sum(sales_val) sales_val,sum(sales_vol) sales_vol
-- from tmp.tmp_retail_brand where ta='RE' AND brand_cat_type ='品类' and market ='慢性阻塞性肺疾病' and province_city ='全国'
-- group by 1,2,3,4
-- ) a
-- left join
-- (
-- select YYYYMM,ta,brand_cat_type,market,sum(sales_val) sales_val,sum(sales_vol) sales_vol
-- from tmp.tmp_retail_brand where ta='RE' AND brand_cat_type ='品类' and market ='慢性阻塞性肺疾病' and province_city <>'全国'
-- group by 1,2,3,4
-- )b on a.YYYYMM =b.YYYYMM and a.ta=b.ta and a.brand_cat_type=b.brand_cat_type and a.market=b.market
-- )
-- ,total_no_inhaled as (
-- ----------------剔除inhaled 后剩余 MKT 总值------------
-- select a.YYYYMM,a.ta,a.province_city,a.brand_cat_type,a.market
-- ,B.brand_mkt marketmapping
-- ,sales_val - coalesce(val,0 ) sales_val
-- ,sales_vol - coalesce(vol,0 ) sales_vol
-- -- ,sales_val - coalesce(sales_value,sal ) sales_val
-- -- ,sales_vol - coalesce(sales_unit,vol) sales_vol
-- from mkt a
-- left join (SELECT DISTINCT brand_mkt,market_mapping FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA='RE') B
-- on a.market=b.brand_mkt and B.brand_mkt = B.market_mapping
-- -- left join (select YYYYMM,zk_region,sum(sales_value) sales_value,sum(counting_unit) sales_unit from Inhaled_tmp group by 1,2) c on a.province_city=c.zk_region and a.YYYYMM=c.YYYYMM
-- -- left join (select YYYYMM,'全国' zk_region,sum(sales_value) sal,sum(counting_unit) vol from Inhaled_tmp group by 1) d on a.YYYYMM=d.YYYYMM and a.province_city=d.zk_region
-- left join (
-- select YYYYMM,TA,province_city,brand_cat_type,market,sales_val val,sales_vol vol from tmp.tmp_retail_brand where ta='RE' AND market ='Inhaled Extended Market' AND brand_cat_type ='品类'
-- UNION ALL
-- select
-- a.YYYYMM,a.TA,'ROC',a.brand_cat_type,a.market
-- ,a.sales_val-b.sales_val
-- ,a.sales_vol-b.sales_vol
-- from (select YYYYMM,TA,brand_cat_type,market,sales_val ,sales_vol from tmp.tmp_retail_brand where ta='RE' AND market ='Inhaled Extended Market' AND brand_cat_type ='品类' and province_city ='全国') a
-- left join (select YYYYMM,TA,brand_cat_type,market,sum(sales_val) sales_val,sum(sales_vol) sales_vol from tmp.tmp_retail_brand where ta='RE' AND market ='Inhaled Extended Market' AND brand_cat_type ='品类' AND province_city<>'全国'
-- group by YYYYMM,TA,brand_cat_type,market ) b on a.YYYYMM=b.YYYYMM AND a.brand_cat_type=b.brand_cat_type AND a.market=b.market
-- ) c on a.province_city=c.province_city and a.YYYYMM=c.YYYYMM
-- where a.brand_cat_type = '品类'
-- and A.TA ='RE' AND B.brand_mkt IS not null
-- ), others as (
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city,a.market,cmps_des_c,a.market
-- ,a.sales_val-b.sales_val sales_val, a.sales_vol-b.sales_vol sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0
-- union all
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,'ROC',a.market,a.cmps_des_c,a.market,a.sales_val - b.sales_val,a.sales_vol-b.sales_vol
-- from (
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city,a.market,
-- cmps_des_c,a.market
-- ,a.sales_val-b.sales_val sales_val, a.sales_vol-b.sales_vol sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0 and a.province_city='全国'
-- ) a left join (
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,a.market,
-- cmps_des_c,a.market
-- ,sum(a.sales_val-b.sales_val) sales_val, sum(a.sales_vol-b.sales_vol) sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0 and a.province_city <> '全国'
-- group by a.YYYYMM,a.TA,a.PROD_DES_C,a.market, cmps_des_c,a.market
-- ) b on a.YYYYMM=b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.market=b.market and a.cmps_des_c=b.cmps_des_c
-- )
-- , brand_of_no_inhaled as (
-- -------------剔除inhaled 品牌数据及ROC数据------------
-- select a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city
-- , A.market submkt
-- ,cmps_des_c
-- ,B.brand_mkt marketmapping
-- ,a.sales_val,a.sales_vol
-- from tmp.tmp_retail_brand a
-- left join (select distinct brand_mkt,category_name from dwd.dwd_gnd_ext_retail_corresponding_relationship where category_name is not null AND TA ='RE' AND category_name<>brand_mkt) B
-- ON a.market=b.category_name
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where brand_cat_type = '品牌'
-- and a.market not in (select distinct brand_mkt from dwd.dwd_gnd_ext_retail_corresponding_relationship where brand_mkt is not null )
-- and TA ='RE' AND A.market <> 'Inhaled Extended Market'
-- union all
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,'ROC' province_city
-- ,a.submkt,a.cmps_des_c,a.marketmapping,a.sales_val-b.sales_val sales_val,a.sales_vol-b.sales_vol sales_vol
-- from (select a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city
-- , A.market submkt
-- ,cmps_des_c
-- ,B.brand_mkt marketmapping
-- ,a.sales_val,a.sales_vol
-- from tmp.tmp_retail_brand a
-- left join (select distinct brand_mkt,category_name from dwd.dwd_gnd_ext_retail_corresponding_relationship where category_name is not null AND TA ='RE' AND category_name<>brand_mkt) B
-- ON a.market=b.category_name
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where brand_cat_type = '品牌'
-- and a.market not in (select distinct brand_mkt from dwd.dwd_gnd_ext_retail_corresponding_relationship where brand_mkt is not null )
-- and TA ='RE' AND A.market <> 'Inhaled Extended Market' and a.province_city='全国'
-- ) a
-- left join (select a.YYYYMM,a.TA,a.PROD_DES_C
-- , A.market submkt
-- ,cmps_des_c
-- ,B.brand_mkt marketmapping
-- ,sum(a.sales_val) sales_val,sum(a.sales_vol) sales_vol
-- from tmp.tmp_retail_brand a
-- left join (select distinct brand_mkt,category_name from dwd.dwd_gnd_ext_retail_corresponding_relationship where category_name is not null AND TA ='RE' AND category_name<>brand_mkt) B
-- ON a.market=b.category_name
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where brand_cat_type = '品牌'
-- and a.market not in (select distinct brand_mkt from dwd.dwd_gnd_ext_retail_corresponding_relationship where brand_mkt is not null )
-- and TA ='RE' AND A.market <> 'Inhaled Extended Market' and a.province_city<>'全国'
-- group by 1,2,3,4,5,6
-- ) b on a.YYYYMM =b.YYYYMM and a.PROD_DES_C =b.PROD_DES_C and a.submkt=b.submkt and a.marketmapping=b.marketmapping
-- union all
-- ----拼接 re 部分比inhaled 多出的brand 数据
-- select * from others
-- ),cmps_total as (
-- ------cmps 剔除inhaled 后 的基础数据----
-- select a.YYYYMM,ta,a.province_city,a.brand_cat_type,a.market,B.brand_mkt marketmapping
-- ,a.sales_val,a.sales_vol
-- from tmp.tmp_retail_brand a
-- left join (SELECT DISTINCT brand_mkt,category_name FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA='RE') B
-- on a.market=b.category_name and B.brand_mkt<> B.category_name
-- where brand_cat_type = '品类'
-- and A.TA ='RE' and B.brand_mkt is not null AND a.market <>'Inhaled Extended Market'
-- union all
-- select
-- a.YYYYMM,a.ta,'ROC' ,a.brand_cat_type,a.market,a.marketmapping,a.sales_val-b.sales_val sales_val,a.sales_vol-b.sales_vol sales_vol
-- from ( select a.YYYYMM,ta,a.province_city,a.brand_cat_type --,c.zk_common_name,c.cmps_des_c
-- ,a.market,a.sales_val,a.sales_vol,B.brand_mkt marketmapping
-- from tmp.tmp_retail_brand a
-- left join (SELECT DISTINCT brand_mkt,category_name FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA='RE') B
-- on a.market=b.category_name and B.brand_mkt<> B.category_name
-- where brand_cat_type = '品类'
-- and A.TA ='RE' and B.brand_mkt is not null AND a.market <>'Inhaled Extended Market' and a.province_city = '全国'
-- )a left join (
-- select a.YYYYMM,ta,a.brand_cat_type ,B.brand_mkt marketmapping
-- ,a.market,sum(a.sales_val) sales_val,sum(a.sales_vol) sales_vol
-- from tmp.tmp_retail_brand a
-- left join (SELECT DISTINCT brand_mkt,category_name FROM dwd.dwd_gnd_ext_retail_corresponding_relationship WHERE category_name IS NOT NULL AND TA='RE') B
-- on a.market=b.category_name and B.brand_mkt<> B.category_name
-- where brand_cat_type = '品类'
-- and A.TA ='RE' and B.brand_mkt is not null AND a.market <>'Inhaled Extended Market' and a.province_city<>'全国'
-- group by 1,2,3,4,5
-- )b on a.YYYYMM =b.YYYYMM and a.ta=b.ta and a.marketmapping=b.marketmapping and b.market =a.market and a.brand_cat_type=b.brand_cat_type
-- union all
-- select
-- a.YYYYMM,a.TA,a.province_city,'',cmps_des_c,a.market
-- ,a.sales_val-b.sales_val sales_val, a.sales_vol-b.sales_vol sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0
-- union all
-- select
-- a.YYYYMM,a.TA,'ROC','',a.cmps_des_c,a.market,a.sales_val - b.sales_val,a.sales_vol-b.sales_vol
-- from (
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,a.province_city,a.market,
-- cmps_des_c,a.market
-- ,a.sales_val-b.sales_val sales_val, a.sales_vol-b.sales_vol sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0 and a.province_city='全国'
-- ) a left join (
-- select
-- a.YYYYMM,a.TA,a.PROD_DES_C,a.market,
-- cmps_des_c,a.market
-- ,sum(a.sales_val-b.sales_val) sales_val, sum(a.sales_vol-b.sales_vol) sales_vol
-- from (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='慢性阻塞性肺疾病' ) a
-- inner join (select YYYYMM,TA,PROD_DES_C,province_city,market,sales_val,sales_vol from tmp.tmp_retail_brand where TA='RE' AND brand_cat_type ='品牌' and market ='Inhaled Extended Market') b
-- on a.YYYYMM =b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.province_city =b.province_city
-- left join (select distinct prod_des_c,cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) C ON A.PROD_DES_C=C.prod_des_c
-- where a.sales_val-b.sales_val >0 and a.province_city <> '全国'
-- group by a.YYYYMM,a.TA,a.PROD_DES_C,a.market, cmps_des_c,a.market
-- ) b on a.YYYYMM=b.YYYYMM and a.PROD_DES_C=b.PROD_DES_C and a.market=b.market and a.cmps_des_c=b.cmps_des_c
-- ),ratio as (
-- select
-- YYYYMM
-- ,ta
-- ,province_city
-- ,market
-- ,cmps_des_c
-- ,prodmapping
-- ,sales_val
-- ,sales_vol
-- ,sales_val /sum(sales_val)over(PARTITION BY YYYYMM,ta,market,prodmapping) radio_val
-- ,sales_vol / sum(sales_vol)over(PARTITION BY YYYYMM,ta,market,prodmapping) radio_vol
-- from (
-- select
-- MKT.YYYYMM
-- ,ta,MKT.province_city
-- ,market
-- ,concat('Others_cmps_',market ) cmps_des_c
-- ,concat('Others_cmps_',market ) prodmapping
-- ,MKT.sales_val - b.sales_val sales_val
-- ,MKT.sales_vol - b.sales_vol sales_vol
-- FROM total_no_inhaled MKT inner JOIN (select YYYYMM,province_city,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from cmps_total group by YYYYMM,province_city,marketmapping) b
-- on MKT.YYYYMM=b.YYYYMM and MKT.province_city=b.province_city and MKT.market=b.marketmapping
-- where mkt.province_city <>'全国'
-- union all
-- ------------计算others_cmps_brand-----------------
-- SELECT a.YYYYMM,a.ta,a.province_city
-- ,a.marketmapping market
-- ,cmps_des_c
-- , coalesce(concat('Others_',b.cmps_des_c),concat('Others_',A.marketmapping) ) prodmapping
-- ,a.sales_val - coalesce(b.sales_val,0 ) sales_val
-- ,a.sales_vol - coalesce(b.sales_vol,0 ) sales_vol
-- from cmps_total a
-- LEFT JOIN (select YYYYMM,province_city,submkt,cmps_des_c,marketmapping,sum(sales_val) sales_val,sum(sales_vol) sales_vol from brand_of_no_inhaled GROUP BY YYYYMM,province_city,submkt,marketmapping,cmps_des_c ) b
-- on a.YYYYMM=b.YYYYMM and a.province_city=b.province_city and a.marketmapping=b.marketmapping and a.market=b.submkt
-- where a.province_city <> '全国'
-- union all
-- SELECT
-- YYYYMM,TA,province_city
-- ,marketmapping market
-- ,cmps_des_c
-- ,PROD_DES_C
-- ,sales_val
-- ,sales_vol
-- FROM brand_of_no_inhaled
-- where province_city <> '全国'
-- )
-- )
-- select TMP.YYYYMM,tmp.zk_product_id,iqvia_pack_code,province_city,sales_value*radio_val sales_value,tmp.sales_unit*radio_vol sales_unit ,tmp.counting_unit*radio_vol counting_unit
-- ,2 pack_flag,case when tmp.PROD_MAPPING like 'Others_%' then 2 else 1 end brand_flag
-- from (
-- select a.YYYYMM,a.zk_product_id
-- ,b.prod_des_c,b.cmps_des_c
-- ,coalesce(c.PROD_DES_C,concat('Others_',F.cmps_des_c),concat('Others_cmps_',e.brand_mkt)) PROD_MAPPING
-- ,b.iqvia_pack_code,a.zk_region,sum(a.sales_value) sales_value,sum(sales_unit) sales_unit,sum(a.sales_unit* (b.counting_unit/coalesce(b.unit,1 ))) counting_unit
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id=b.product_id
-- left join (select distinct PROD_DES_C from tmp.tmp_retail_brand where TA='RE' AND market ='慢性阻塞性肺疾病' and brand_cat_type ='品牌') c on b.prod_des_c =c.PROD_DES_C
-- left join (select distinct cmps_des_c from ratio where cmps_des_c not in ( select cmps_des_c from others ))f on b.cmps_des_c =f.cmps_des_c
-- LEFT JOIN (SELECT DISTINCT brand_mkt,file_name FROM DWD.dwd_gnd_ext_retail_corresponding_relationship) E ON A.brand_flag = E.file_name
-- where brand_flag='pack-RE-慢阻肺-全国.xlsx'
-- AND b.iqvia_pack_code NOT IN (
-- select b.iqvia_pack_code from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id=b.product_id
-- where brand_flag= 'pack-雾化器-全国&县域数据.xlsx' and a.zk_region <>'全国')
-- -- AND b.iqvia_pack_code not in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Inhaled Extended Market by Brand')
-- AND b.iqvia_pack_code in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='RE Market')
-- group by a.YYYYMM,b.iqvia_pack_code,a.zk_region,a.zk_product_id ,b.prod_des_c,b.cmps_des_c
-- ,coalesce(c.PROD_DES_C,concat('Others_',F.cmps_des_c),concat('Others_cmps_',e.brand_mkt))
-- ) tmp inner join ratio rate on TMP.YYYYMM=rate.YYYYMM and nvl(tmp.PROD_MAPPING ,'' )= nvl(rate.prodmapping,'' )
-- union all
-- select
-- a.YYYYMM
-- ,a.zk_product_id
-- ,A.iqvia_pack_code
-- ,zk_region province_city
-- ,sales_value
-- ,sales_unit
-- ,counting_unit,pack_flag,brand_flag
-- from Inhaled_tmp a
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## brand 比例拼接到 pack
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### Inhaled 直取pack
-- COMMAND ----------
/*
修改日期20250311
修改人chenwu
修改内容新增Inhaled直取逻辑属于 RE 慢性阻塞性肺疾病
*/
create or replace temporary view Inhaled_pack_direct
as
with
---Inhaled
Inhaled_prov as (
select
a.YYYYMM,
a.zk_product_id,
b.iqvia_pack_code,
a.zk_region,
'慢性阻塞性肺疾病' market,
B.prod_des_c,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
where
brand_flag = 'pack-雾化器-全国&县域数据.xlsx'
and a.zk_region <> '全国' -- and iqvia_pack_code in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Inhaled Extended Market by Brand')
group by 1,2,3,4,5,6
)
--全国的数据
,Inhaled_all as (
select
a.YYYYMM,
a.zk_product_id,
b.iqvia_pack_code,
'全国' zk_region,
'慢性阻塞性肺疾病' market,
B.prod_des_c,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
where
brand_flag = 'pack-雾化器-全国&县域数据.xlsx'
and a.zk_region = '全国'
group by 1,2,3,4,5,6
)
--倒减ROC部分 = 全国 - 省份
SELECT
A.YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,'ROC' province_city
,A.market
,A.Sales_value - nvl(sales_V ,0) Sales_value
,A.sales_unit - nvl(SALES_U,0) sales_unit
,A.counting_unit - nvl(COUNT_U,0) counting_unit
,2 pack_flag
,1 brand_flag
FROM Inhaled_all A
LEFT JOIN (
SELECT
YYYYMM
,zk_product_id
,iqvia_pack_code
,SUM(sales_value) sales_V
,SUM(sales_unit) SALES_U
,SUM(counting_unit) COUNT_U
FROM Inhaled_prov --省份
GROUP BY
YYYYMM
,zk_product_id
,iqvia_pack_code
)B ON A.YYYYMM=B.YYYYMM AND A.zk_product_id=B.zk_product_id
--拼接省份的数据
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
zk_region as province_city,
market,
Sales_value,
sales_unit,
counting_unit,
1 pack_flag,
1 brand_flag
from Inhaled_prov
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### 布地奈德雾化溶液 直取pack
-- COMMAND ----------
/*
修改日期20250311
修改人chenwu
修改内容:新增 布地奈德雾化溶液 直取逻辑,属于 RE 慢性阻塞性肺疾病
*/
create or replace temporary view bdnd_pack_direct
as
with
---布地奈德雾化溶液
bdnd_prov as (
select
a.YYYYMM,
a.zk_product_id,
b.iqvia_pack_code,
a.zk_region,
'慢性阻塞性肺疾病' market,
B.prod_des_c,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
where
zk_common_name ='布地奈德' and brand_flag = 'pack-RE-慢阻肺-全国.xlsx'
and a.zk_region <> '全国' -- and iqvia_pack_code in (select iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market ='Inhaled Extended Market by Brand')
group by 1,2,3,4,5,6
)
--全国的数据
,bdnd_all as (
select
a.YYYYMM,
a.zk_product_id,
b.iqvia_pack_code,
'全国' zk_region,
'慢性阻塞性肺疾病' market,
B.prod_des_c,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
where
zk_common_name ='布地奈德' and brand_flag = 'pack-RE-慢阻肺-全国.xlsx'
and a.zk_region = '全国'
group by 1,2,3,4,5,6
)
--倒减ROC部分 = 全国 - 省份
SELECT
A.YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,'ROC' province_city
,A.market
,A.Sales_value - nvl(sales_V ,0) Sales_value
,A.sales_unit - nvl(SALES_U,0) sales_unit
,A.counting_unit - nvl(COUNT_U,0) counting_unit
,2 pack_flag
,1 brand_flag
FROM bdnd_all A
LEFT JOIN (
SELECT
YYYYMM
,zk_product_id
,iqvia_pack_code
,SUM(sales_value) sales_V
,SUM(sales_unit) SALES_U
,SUM(counting_unit) COUNT_U
FROM bdnd_prov --省份
GROUP BY
YYYYMM
,zk_product_id
,iqvia_pack_code
)B ON A.YYYYMM=B.YYYYMM AND A.zk_product_id=B.zk_product_id
--拼接省份的数据
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
zk_region as province_city,
market,
Sales_value,
sales_unit,
counting_unit,
1 pack_flag,
1 brand_flag
from bdnd_prov
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### 补数据 pack直取
-- COMMAND ----------
/*
修改日期20250311
修改人chenwu
修改内容:
补数据
--1 月份数据会比季度数据提前来,没有拆分比例的时候,保留全国的数据。
--2 因为没有买 高血压总分子式 的数据,所以 高血压其他分子式 数据会漏掉,补进来。
*/
create or replace temporary view tmp_zk_retail_pack_lost
as
with all_with_no_brand_province as (
select a.*,
case when YYYYMM > b.last_yyymm then 'new_m' else 'lost' end as datatype
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left join (select max(yyyymm) last_yyymm from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all ) b
where YYYYMM > b.last_yyymm
or (
brand_flag ='pack-CV-高血压-化学药-全国.xlsx'
)
)
,tmp as (
select
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
E.market_mapping market,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null then 'OTHERS_氨氯地平,阿托伐他汀'
else B.prod_des_c
end prod_des_c,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null
THEN 'Others_氨氯地平阿托伐他汀钙片'
ELSE coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
END PROD_MAPPING,
-- coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) ) PROD_MAPPING,
datatype,
SUM(A.sales_value) sales_value,
sum(sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
all_with_no_brand_province A
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit/coalesce(unit,1) counting_unit,
cmps_des_c
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
LEFT JOIN (
SELECT
DISTINCT brand_mkt,
file_name,
market_mapping
FROM
DWD.dwd_gnd_ext_retail_corresponding_relationship
) E ON A.brand_flag = E.file_name
LEFT JOIN (
SELECT
DISTINCT YYYYMM,
prodmapping,
market
FROM
tmp.tmp_ZK_retail_brandTotal
) C ON A.YYYYMM = C.YYYYMM
AND B.prod_des_c = C.prodmapping
AND E.market_mapping = C.market ---NIAD 直接取pack数据gi market 剔除逻辑RE根据maket拆分 、RE包含雾化器数据-----
left join (SELECT DISTINCT cmps_des_c FROM TMP.tmp_zk_retail_brandTotal where cmps_des_c is NOT null ) F
ON B.cmps_des_c=F.cmps_des_c
where
brand_flag in (
'pack-GI-慢性胃炎胃溃疡-全国.xlsx',
"pack-CV-高血压-化学药-全国.xlsx"
,'pack-CV-他汀类+血脂康-全国.xlsx'
-- 'pack-雾化器-全国&县域数据.xlsx',
--'pack-DM-口服降糖化学药.xlsx'
--'pack-RE-慢阻肺-全国.xlsx',
-- ,'pack-RD-肾科-全国.xlsx' ,'pack-CV-抗血栓2通用名-全国.xlsx' 下面会单独拉取全部
)
GROUP BY
A.YYYYMM,
a.zk_product_id,
B.iqvia_pack_code,
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null then 'OTHERS_氨氯地平,阿托伐他汀'
else B.prod_des_c
end,
E.market_mapping,
--coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
case
when b.cmps_des_c = '氨氯地平,阿托伐他汀'
and b.prod_des_c is null
THEN 'Others_氨氯地平阿托伐他汀钙片'
ELSE coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
END
,datatype
)
, result(
select
YYYYMM,zk_product_id,iqvia_pack_code,market,prod_des_c
,case when datatype = 'lost' and PROD_MAPPING ='Others_美托洛尔' and flag is not null then 'Others_美托洛尔'
when datatype = 'lost' and PROD_MAPPING ='Others_美托洛尔' and flag is null then 'Others_cmps_高血压用药'
else PROD_MAPPING
end PROD_MAPPING
,datatype
,sales_value,sales_unit,counting_unit
from tmp
left join (select distinct iqvia_pack_code flag from tmp.tmp_zk_retail_pack_property where market ='Metoprolol Succinate Market') fl on tmp.iqvia_pack_code =fl.flag
)
select yyyymm,zk_product_id,iqvia_pack_code,market,prod_des_c,PROD_MAPPING
,sales_value
,sales_unit
,counting_unit
from result
where (PROD_MAPPING = 'Others_cmps_高血压用药' and datatype='lost') or datatype <> 'lost'
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### 小儿咳喘
-- COMMAND ----------
--小儿咳喘的brand省份拆分比例
insert overwrite table tmp.tmp_zk_retail_brandTotal_xiaoer
with
xiaoer_mkt as (--小儿咳喘 总数( 包含布地奈德)
select
YYYYMM
,TA
,province_city
,market
,zk_brand_category
,zk_common_name
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all
where market ='小儿咳喘' and TA = 'RE' and brand_cat_type = '品类'
and ranked_by = 'volume'
group by 1,2,3,4,5,6
)
--布地奈德雾化溶液
,bdnd as (
select
YYYYMM
,TA
,province_city
,market
,zk_brand_category
,zk_common_name
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all
where market ='布地奈德雾化溶液' and zk_brand_category = '布地奈德雾化溶液' and TA = 'RE' and brand_cat_type = '品类'
and ranked_by = 'volume'
group by 1,2,3,4,5,6
)
--小快克,可威,希舒美,美林,易坦静
,xiaoer_brand as (
select
YYYYMM
,TA
,province_city
,market
,zk_brand_category
,zk_common_name
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all
where market ='小儿咳喘' and TA = 'RE' and brand_cat_type = '品牌'
and zk_brand_category in (
'可威-颗粒' --奥司他韦
,'可威-胶囊' --奥司他韦
,'美林-混悬滴剂' --布洛芬
,'美林-混悬液' --布洛芬
-- ,'普米克令舒' --布地奈德
,'速福达-干混悬剂' --玛巴洛沙韦
,'速福达-片剂' --玛巴洛沙韦
-- ,'天晴速畅' --布地奈德
,'希舒美' --阿奇霉素
,'小快克' --氨酚黄那敏
,'易坦静' --氨溴特罗
)
and ranked_by = 'volume'
group by 1,2,3,4,5,6
)
--小儿 - (布地奈得 和 各品牌的 )= 小儿others
,xiaoer_mkt_m_bdnd as (
select
A.YYYYMM
,A.TA
,A.province_city
,A.market
,'others_xiaoer' zk_brand_category
,'others_xiaoer' zk_common_name
,case when sum(A.sales_val) - coalesce(sum(B.sales_val),0) - coalesce(sum(c.sales_val),0) <=0 then 0
else sum(A.sales_val) - coalesce(sum(B.sales_val),0) - coalesce(sum(c.sales_val),0) end sales_val
,case when sum(A.sales_vol) - coalesce(sum(B.sales_vol),0) - coalesce(sum(c.sales_vol),0) <=0 then 0
else sum(A.sales_vol) - coalesce(sum(B.sales_vol),0) - coalesce(sum(c.sales_vol),0) end sales_vol
from xiaoer_mkt A
left join (
select
YYYYMM
,province_city
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from bdnd
group by 1,2
) B on A.YYYYMM = B.YYYYMM and A.province_city = B.province_city
left join (
select
YYYYMM
,province_city
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from xiaoer_brand
group by 1,2
) C on A.YYYYMM = C.YYYYMM and A.province_city = C.province_city
group by 1,2,3,4,5,6
)
-- 所有的数据
, all_xiaoer_formated as (
select *
from xiaoer_mkt_m_bdnd
union all
select *
from xiaoer_brand
)
-- 倒减去roc
, all_xiaoer_w_roc as (
select
A.YYYYMM
,A.TA
,'ROC' province_city
,A.market
,A.zk_brand_category
,A.zk_common_name
,A.sales_val - coalesce(B.sales_val,0) as sales_val
,A.sales_vol - coalesce(B.sales_vol,0) as sales_vol
from all_xiaoer_formated A
left join (
select
YYYYMM
,TA
,market
,zk_brand_category
,zk_common_name
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from all_xiaoer_formated
where province_city <> '全国'
group by 1,2,3,4,5
) B on A.TA = B.TA and A.YYYYMM=B.YYYYMM
and A.market = B.market
and A.zk_brand_category= B.zk_brand_category
and A.zk_common_name = B.zk_common_name
where A.province_city = '全国'
union all
select
YYYYMM
,TA
,province_city
,market
,zk_brand_category
,zk_common_name
,sales_val
,sales_vol
from all_xiaoer_formated
where province_city <> '全国'
)
-- 计算拆分比例
SELECT
YYYYMM
,TA
,province_city
,market
,zk_common_name
,zk_brand_category
,sales_val
,sales_vol
,nvl(cast(sales_val as decimal(38,15)) / sum(sales_val) over(PARTITION BY YYYYMM,TA,market,zk_brand_category),0.0384615384615385) valRate
,nvl(cast(sales_vol as decimal(38,15)) / sum(sales_vol) over(PARTITION BY YYYYMM,TA,market,zk_brand_category),0.0384615384615385) volRate
from all_xiaoer_w_roc
-- COMMAND ----------
create or replace temporary view tmp_pack_xiaoer
as
with xiaoer_all_pack as (
select
a.YYYYMM,
a.zk_product_id,
a.zk_common_name,
a.zk_product_name,
a.zk_category_name,
b.iqvia_pack_code,
-- -- c.province_city,
'' market,
B.prod_des_c,
SUM(A.sales_value) sales_value,
sum(A.sales_unit) sales_unit,
SUM(A.sales_unit * b.counting_unit) counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) B ON A.zk_product_id = B.product_id
where
brand_flag = 'pack-RE-慢阻肺-全国.xlsx' and a.zk_region = '全国'
and zk_common_name <>'布地奈德'
group by 1,2,3,4,5,6,7,8
)
,tmp_brand_2_pack_xiaoer as (
select 1 id ,'布洛芬' b_cmp ,'美林-混悬滴剂' b_brand ,'布洛芬' p_cmp ,'美林' p_product ,'布洛芬混悬滴剂' p_category union all
select 2 id ,'布洛芬' b_cmp ,'美林-混悬液' b_brand ,'布洛芬' p_cmp ,'美林' p_product ,'布洛芬混悬液' p_category union all
select 3 id ,'奥司他韦' b_cmp ,'可威-颗粒' b_brand ,'奥司他韦' p_cmp ,'可威' p_product ,'磷酸奥司他韦颗粒' p_category union all
select 8 id ,'奥司他韦' b_cmp ,'可威-胶囊' b_brand ,'奥司他韦' p_cmp ,'可威' p_product ,'磷酸奥司他韦胶囊' p_category union all
select 4 id ,'阿奇霉素' b_cmp ,'希舒美' b_brand ,'阿奇霉素' p_cmp ,'希舒美' p_product ,'阿奇霉素干混悬剂' p_category union all
select 5 id ,'氨酚黄那敏' b_cmp ,'小快克' b_brand ,'氨酚黄那敏' p_cmp ,'小快克' p_product ,'小儿氨酚黄那敏颗粒' p_category union all
select 6 id ,'氨溴特罗' b_cmp ,'易坦静' b_brand ,'氨溴特罗' p_cmp ,'易坦静' p_product ,'氨溴特罗口服溶液' p_category union all
select 9 id ,'玛巴洛沙韦' b_cmp ,'速福达-片剂' b_brand ,'玛巴洛沙韦' p_cmp ,'速福达' p_product ,'玛巴洛沙韦片' p_category union all
select 10 id ,'玛巴洛沙韦' b_cmp ,'速福达-干混悬剂' b_brand ,'玛巴洛沙韦' p_cmp ,'速福达' p_product ,'玛巴洛沙韦干混悬剂' p_category union all
select 7 id ,'others_xiaoer' b_cmp ,'others_xiaoer' b_brand ,'others_xiaoer' p_cmp ,'others_xiaoer' p_product ,'others_xiaoer' p_category
)
select
A.YYYYMM
,A.zk_product_id
,A.iqvia_pack_code
,case when c.YYYYMM is null then '全国' else c.province_city end as province_city --如果季度拆分比例没有则不扩展province直接为全国
,'小儿咳喘' market
,A.prod_des_c
,'小儿咳喘' PROD_MAPPING
,case when C.YYYYMM is null then A.sales_value else cast(A.sales_value * C.ValRate as decimal(38, 10)) end as sales_value
,case when C.YYYYMM is null then A.sales_unit else cast(A.sales_unit * C.VolRate as decimal(38, 10)) end as sales_unit
,case when C.YYYYMM is null then A.counting_unit else cast(A.counting_unit * C.VolRate as decimal(38, 10)) end as counting_unit
-- ,C.ValRate
-- ,B.B_cmp
,case when c.YYYYMM is null then 1 else 2 end as pack_flag --2 按比例拆分的1 不拆分比例的
,case when c.YYYYMM is not null and B.B_cmp is null then 2 else 1 end as brand_flag --2 others_xiaoer 倒减出来的比例1 是brand省份的比例
from xiaoer_all_pack A --pack数据
left join tmp_brand_2_pack_xiaoer B --brand 和 pack 的mapping
on A.zk_common_name = B.p_cmp
and A.zk_product_name = B.p_product
and A.zk_category_name = B.p_category
left join (select * from tmp.tmp_zk_retail_brandTotal_xiaoer ) C --拆分比例
on A.YYYYMM = C.YYYYMM
and case when B.B_cmp is null then 'others_xiaoer' else B.B_cmp end = C.zk_common_name -- 没有拆分比例的 归为others
and case when B.B_brand is null then 'others_xiaoer' else B.B_brand end = C.zk_brand_category
-- where A.iqvia_pack_code = '1092502'
-- and A.YYYYMM = '202412'
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ### pack 拼接省份比例
-- COMMAND ----------
---------------------------------------------将所有数据拆分到省份拼接--------------------------------------------------------------------
insert overwrite table tmp.tmp_retail_result
with tmp as (
-- 选取pack 粒度基础数据 用于筛选 抗血栓2通用名 和 rd 数据
select A.YYYYMM,a.zk_product_id,B.iqvia_pack_code,E.market_mapping market,A.brand_flag,B.prod_des_c,NVL(B.PROD_DES_C,CONCAT(E.market_mapping,'_Others')) PROD_MAPPING,SUM(A.sales_value) sales_value,SUM(A.sales_unit) sales_unit,A.zk_region,sum(sales_unit * b.counting_unit) counting_unit
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all A
left JOIN (select distinct product_id, prod_des_c,iqvia_pack_code,counting_unit/coalesce(unit,1 ) counting_unit from dwd.dwd_gnd_ext_retail_pack_property) B ON A.zk_product_id = B.product_id
LEFT JOIN (SELECT DISTINCT brand_mkt,file_name,market_mapping FROM DWD.dwd_gnd_ext_retail_corresponding_relationship) E ON A.brand_flag = E.file_name
where A.zk_product_id not in (
select distinct zk_product_id from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
where brand_flag = 'pack-CV-酒石酸美托洛尔.xlsx'
)
GROUP BY A.YYYYMM,a.zk_product_id,B.iqvia_pack_code,B.prod_des_c, E.market_mapping ,A.brand_flag,A.zk_region
) ,GI AS (
--- gi 数据需要从 GI 文件中获取 market 为gi 的数据---
select A.YYYYMM,a.zk_product_id,B.iqvia_pack_code,E.market_mapping market,B.prod_des_c
,coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) ) PROD_MAPPING
,SUM(A.sales_value) sales_value,sum(sales_unit) sales_unit ,SUM(A.sales_unit * b.counting_unit) counting_unit
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all A
left JOIN (select distinct product_id, prod_des_c,iqvia_pack_code,counting_unit/coalesce(unit,1 ) counting_unit,CASE WHEN cmps_cod IN ('001658','002782','008617','001051','001853','008467') THEN '其他拉唑类' ELSE cmps_des_c END cmps_des_c from dwd.dwd_gnd_ext_retail_pack_property ) B ON A.zk_product_id = B.product_id
LEFT JOIN (SELECT DISTINCT brand_mkt,file_name,market_mapping FROM DWD.dwd_gnd_ext_retail_corresponding_relationship) E ON A.brand_flag = E.file_name
LEFT JOIN (SELECT DISTINCT YYYYMM,prodmapping,market FROM tmp.tmp_zk_retail_brandTotal) C ON A.YYYYMM = C.YYYYMM AND B.prod_des_c = C.prodmapping AND E.market_mapping = C.market
left join (SELECT DISTINCT cmps_des_c FROM TMP.tmp_zk_retail_brandTotal where cmps_des_c is NOT null ) F on b.cmps_des_c =f.cmps_des_c
where brand_flag in ( 'pack-GI-慢性胃炎胃溃疡-全国.xlsx')
and (
b.product_id in ( select distinct a.product_id from tmp.tmp_zk_retail_pack_property a where a.market ='Antacid anti GI swelling agent+PPI Oral' )
-- b.product_id in ( select distinct a.product_id from dws.dws_zk_retail_pack_property a where a.market ='Retail_GI Market' )
)
GROUP BY A.YYYYMM,a.zk_product_id,B.iqvia_pack_code,B.prod_des_c
,coalesce(C.prodmapping,concat('Others_',F.cmps_des_c),CONCAT('Others_cmps_',E.brand_mkt) )
,E.market_mapping
)
--酒石酸美托洛尔
,national_metoprolol_tartrat as (
select
t1.YYYYMM,
t2.iqvia_pack_code,
t1.zk_product_id,
t2.prod_des_c,
NVL(t2.prod_des_c, '酒石酸美托洛尔_Others') PROD_MAPPING,
t1.zk_region as province_city,
'酒石酸美托洛尔' as market,
t1.sales_value,
t1.sales_unit,
t1.sales_unit * NVL(t2.counting_unit,1) as counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all t1
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) t2 ON t1.zk_product_id = t2.product_id
where
t1.brand_flag = 'pack-CV-酒石酸美托洛尔.xlsx'
and t1.zk_region = '全国'
),
prov_metoprolol_tartrat as (
select
t1.YYYYMM,
t2.iqvia_pack_code,
t1.zk_product_id,
t2.prod_des_c,
NVL(t2.prod_des_c, '酒石酸美托洛尔_Others') PROD_MAPPING,
t1.zk_region as province_city,
'酒石酸美托洛尔' as market,
t1.sales_value,
t1.sales_unit,
t1.sales_unit * NVL(t2.counting_unit,1) as counting_unit
from
dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all t1
left JOIN (
select
distinct product_id,
prod_des_c,
iqvia_pack_code,
counting_unit / coalesce(unit, 1) counting_unit
from
dwd.dwd_gnd_ext_retail_pack_property
) t2 ON t1.zk_product_id = t2.product_id
where
t1.brand_flag = 'pack-CV-酒石酸美托洛尔.xlsx'
and t1.zk_region <> '全国'
),
all_metoprolol_tartrat as (
select
t1.YYYYMM,
t1.iqvia_pack_code,
t1.zk_product_id,
t1.prod_des_c,
t1.PROD_MAPPING,
'ROC' as province_city,
t1.market,
t1.sales_value - t2.sales_value sales_value,
t1.sales_unit - t2.sales_unit sales_unit,
t1.counting_unit - t2.counting_unit counting_unit,
2 as pack_flag,
2 as brand_flag
from
national_metoprolol_tartrat t1
left join (
select
YYYYMM,
zk_product_id,
sum(sales_value) sales_value,
sum(sales_unit) sales_unit,
sum(counting_unit) counting_unit
from
prov_metoprolol_tartrat
group by
YYYYMM,
zk_product_id
) t2 on t1.YYYYMM = t2.YYYYMM
and t1.zk_product_id = t2.zk_product_id
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
PROD_MAPPING,
province_city,
market,
sales_value,
sales_unit,
counting_unit,
1 as pack_flag,
2 as brand_flag
from
prov_metoprolol_tartrat
)
---他汀类+血脂康 + 高血压用药-----------
---拆分、倒减 pack_flag brand_flag 为0 取源数据为1
--这里tmp_zk_retail_pack和tmp_zk_retail_brandTotal都已将酒石酸美托洛尔排除
select A.YYYYMM,a.iqvia_pack_code,a.zk_product_id,a.prod_des_c,A.PROD_MAPPING,b.province_city,A.market,cast(a.sales_value*b.ValRate as decimal(38,10)) sales_value,cast(a.sales_unit*b.VolRate as decimal(38,10)) sales_unit,cast(a.counting_unit * b.VolRate as decimal(38,10)) counting_unit
,2 pack_flag
,case when PROD_MAPPING IN ('多达一', '氨氯地平阿托伐他汀钙片', '天依宁', 'OTHERS_氨氯地平,阿托伐他汀') or flag is null then 2 else 1 end brand_flag
from tmp.tmp_zk_retail_pack a
inner join tmp.tmp_zk_retail_brandTotal b on a.YYYYMM = b.YYYYMM and nvl(a.PROD_MAPPING ,'' )= nvl(b.prodmapping,'' ) and a.market = b.market
left join (select distinct PROD_DES_C flag from tmp.tmp_retail_brand) on a.prod_des_c = flag
UNION ALL
--- NIAD
SELECT YYYYMM,iqvia_pack_code,zk_product_id,prod_des_c, PROD_MAPPING,province_city,market,sales_value,sales_unit ,counting_unit,pack_flag,brand_flag from tmp.tmp_retail_sales_niad
--- GI
UNION ALL
select A.YYYYMM,a.iqvia_pack_code,a.zk_product_id,a.prod_des_c,A.PROD_MAPPING,b.province_city,A.market,a.sales_value*b.ValRate sales_value,a.sales_unit*b.VolRate sales_unit,a.counting_unit * b.VolRate counting_unit
,2 pack_flag
-- ,case when a.PROD_MAPPING =concat('Others_',a.market ) then 2 else 1 end brand_flag
,case when (a.PROD_MAPPING like 'Others_%' and a.PROD_MAPPING not like 'Others_cmps%') or flag is null then 2 else 1 end brand_flag
from GI a
inner join tmp.tmp_zk_retail_brandTotal b on a.YYYYMM = b.YYYYMM and a.PROD_MAPPING = b.prodmapping and a.market = b.market
left join (select distinct PROD_DES_C flag from tmp.tmp_retail_brand) on a.prod_des_c = flag
--RD和抗血栓
union all
select
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,'全国' zk_region
,case when brand_flag = 'pack-RD-肾科-全国.xlsx' then 'RD Market' else 'Brilinta Market' end market
,sales_value
,sales_unit
,counting_unit
,2 pack_flag
,2 brand_flag
from tmp
where brand_flag in ( 'pack-CV-抗血栓2通用名-全国.xlsx','pack-RD-肾科-全国.xlsx')
-- 补充漏掉的部分
union all
select
a.YYYYMM
,a.iqvia_pack_code
,a.zk_product_id
,a.prod_des_c
,a.PROD_MAPPING
,'全国' zk_region
,a.market
,a.sales_value
,a.sales_unit
,a.counting_unit
,1 pack_flag
,1 brand_flag
FROM tmp_zk_retail_pack_lost a
-----拼接re结果
-- union all
-- select
-- a.YYYYMM
-- ,a.iqvia_pack_code
-- ,a.zk_product_id
-- ,b.prod_des_c
-- ,b.prod_des_c
-- ,a.province_city
-- ,'慢性阻塞性肺疾病' market
-- ,a.sales_value
-- ,a.sales_unit
-- ,a.counting_unit
-- ,pack_flag
-- ,case when c.mapp is null then 2 else 1 end brand_flag
-- from tmp.tmp_retail_result_re a
-- left join dwd.dwd_gnd_ext_retail_pack_property b
-- on a.zk_product_id =b.product_id
-- left join (select b.PROD_DES_C mapp from
-- (select distinct zk_brand_category from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all where brand_cat_type='品牌' and market='慢性阻塞性肺疾病') a
-- left join (select distinct PROD_DES_C,ZK_Prod_C from dwd.dwd_inc_gnd_retail_b2c_label_total ) b on a.zk_brand_category =b.ZK_Prod_C ) c
-- on b.prod_des_c = c.mapp
-- --酒石酸美托洛尔
-- union all
-- select
-- YYYYMM,
-- iqvia_pack_code,
-- zk_product_id,
-- prod_des_c,
-- PROD_MAPPING,
-- province_city,
-- market,
-- sales_value,
-- sales_unit,
-- counting_unit,
-- pack_flag,
-- brand_flag
-- from all_metoprolol_tartrat
-- inhaled直取数据
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
'' PROD_MAPPING,
province_city,
market,
Sales_value,
sales_unit,
counting_unit,
pack_flag,
brand_flag
from Inhaled_pack_direct
--bdnd数据
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
'' PROD_MAPPING,
province_city,
market,
Sales_value,
sales_unit,
counting_unit,
pack_flag,
brand_flag
from bdnd_pack_direct
--小儿咳喘
union all
select
YYYYMM,
iqvia_pack_code,
zk_product_id,
prod_des_c,
'' PROD_MAPPING,
province_city,
market,
Sales_value,
sales_unit,
counting_unit,
pack_flag,
brand_flag
from tmp_pack_xiaoer
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## 写入dws
-- COMMAND ----------
------------------------------将数据写入dws 并获取同期数据----------------------------
insert overwrite table dws.dws_zk_retail_sales
select
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,province_city
,market
,sum(sales_value) as sales_value
,sum(sales_value_ly) as sales_value_ly
,sum(sales_unit) as sales_unit
,sum(sales_unit_ly) as sales_unit_ly
,sum(counting_unit) as counting_unit
,sum(counting_unit_ly) as counting_unit_ly
,pack_flag
,brand_flag
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt
from (
select
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,province_city
,market
,sales_value as sales_value
,0 as sales_value_ly
,sales_unit as sales_unit
,0 as sales_unit_ly
,counting_unit as counting_unit
,0 as counting_unit_ly
,pack_flag
,brand_flag
from tmp.tmp_retail_result
union all
select
cast(YYYYMM + 100 as int)
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,province_city
,market
,0 as sales_value
,sales_value as sales_value_ly
,0 as sales_unit
,sales_unit as sales_unit_ly
,0 as counting_unit
,counting_unit as counting_unit_ly
,pack_flag
,brand_flag
from tmp.tmp_retail_result
where YYYYMM + 100 <=(select max(yyyymm) from tmp.tmp_retail_result)
)
group by
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,PROD_MAPPING
,province_city
,market
,pack_flag
,brand_flag
-- COMMAND ----------
/*
剔除利尿剂数据
*/
insert overwrite table tmp.tmp_zk_retail_sales
select a.* from dws.dws_zk_retail_sales a
left join dwd.dwd_gnd_ext_retail_pack_property c on a.zk_product_id = c.product_id
where lower( c.atc2_cod ) <> 'c03' and a.market = 'RD Market'
union all
select * from dws.dws_zk_retail_sales a
where a.market <> 'RD Market'
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## 将ta总数写入 dwd层保持原有逻辑不动
-- COMMAND ----------
-- /*
-- 修改时间20250311
-- 修改人chenwu
-- 修改内容由于TA大数没有了所以要用pack的数据往上汇总写入到原先的 dwd.dwd_gnd_ext_retail_nataional_ta_top_corp中
-- */
-- with corp_type_mapping as (-- corp 的类型
-- select
-- case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END CORP_COD
-- ,case when upper(MNFL_DES) = 'LOCAL' then 'LOCAL' else 'MNC' end CORP_TYPE
-- from dwd.dwd_inc_gnd_retail_b2c_label_total
-- group by
-- case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END
-- ,case when upper(MNFL_DES) = 'LOCAL' then 'LOCAL' else 'MNC' end
-- )
-- ,packcode_corp_mapping as (--pack 和 corp 关系
-- select iqvia_pack_code, nvl(max(corp_cod),'others') corp_cod,nvl( max(corp_des), 'others') corp_des, nvl(MAX(corp_des_c),'others') corp_des_c
-- from tmp.tmp_zk_retail_pack_property
-- group by 1
-- )
-- ,market_ta_mapping as (
-- select '慢性阻塞性肺疾病' market ,'RE' ta union all
-- select '慢性胃炎、胃溃疡' market ,'GI' ta union all
-- select 'Inhaled Extended Market' market ,'RE' ta union all
-- select 'NIAD' market ,'NIAD' ta union all
-- select 'Brilinta Market' market ,'CV-2' ta union all
-- select '他汀类+血脂康' market ,'CV-3' ta union all
-- select '小儿咳喘' market ,'XIAOER' ta union all
-- select '高血压用药' market ,'CV-1' ta union all
-- select 'RD Market' market ,'RD' ta
-- )
-- ,ta_sumall as (
-- select
-- B.corp_des_c as corp_desc
-- ,B.CORP_COD as corp_name --code 暂时替代 英文名称
-- -- ,B.corp_cod as corp_cod
-- ,C.CORP_TYPE as corp_type
-- ,A.YYYYMM as sales_quarter
-- ,cast(sum(sales_value)/1000000.000000 as decimal(38,6)) sales_amount
-- ,D.ta as source_name_old
-- from tmp.tmp_zk_retail_sales A
-- left join packcode_corp_mapping B on A.iqvia_pack_code = B.iqvia_pack_code
-- left join corp_type_mapping C on B.corp_cod = C.CORP_COD
-- left join market_ta_mapping D on D.market = A.market
-- where a.market<>'小儿咳喘' --and A.YYYYMM ='202412'
-- group by
-- B.corp_des_c
-- ,B.corp_cod
-- -- ,B.corp_cod
-- ,C.CORP_TYPE
-- ,A.YYYYMM
-- ,D.ta)
-- ,sumall (--cv、niad
-- select *,'CV' AS source_name from ta_sumall where left(source_name_old,2)='CV' UNION ALL
-- select *,'CVRM' AS source_name from ta_sumall where left(source_name_old,2)='CV' OR source_name_old IN ('NIAD', 'RD') UNION ALL
-- select *,'GI' AS source_name from ta_sumall where source_name_old='GI' UNION ALL
-- select *,'RD' AS source_name from ta_sumall where source_name_old='RD' UNION ALL
-- select *,'RE' AS source_name from ta_sumall where source_name_old='RE' UNION ALL
-- select *,'NIAD' AS source_name from ta_sumall where source_name_old='NIAD'
-- )
-- ,rankresult ( --计算排名
-- select
-- row_number() over(partition by sales_quarter,source_name order by sales_amount desc) rank1
-- ,corp_desc
-- ,corp_name
-- ,corp_type
-- ,sales_quarter
-- ,sales_amount
-- ,source_name
-- from sumall
-- )
-- -- 写入数据到 dwd层
-- insert into table dwd.dwd_gnd_ext_retail_nataional_ta_top_corp
-- (rank1,
-- corp_desc,
-- corp_name,
-- corp_type,
-- source_name,
-- sales_quarter,
-- sales_amount
-- -- ytd_gr,
-- -- ytd_ms,
-- -- ytd_delta_ms,
-- -- builtinarchivedate,
-- -- source_file_path,
-- -- source_file_name,
-- -- etl_insert_dt
-- )
-- select
-- rank1
-- ,corp_desc
-- ,corp_name
-- ,corp_type
-- ,source_name
-- ,sales_quarter
-- ,sales_amount
-- from rankresult
-- where rank1<=20 --数量太多
-- -- and sales_quarter ='202412' and source_name='NIAD'
-- COMMAND ----------
----------------将 ta_top_corp 的数据处理到dws-------------------
insert overwrite table dws.dws_zk_retail_ta_top_corp --------------------获取 ta total 本同期数据,用于后续取 total 及 az 值------------------------
SELECT
source_name,
rank1,
corp_desc,
CORP_COD,
yyyymm,
sum(sales_amount) sales_amount,
sum(sales_amount_ly) sales_amount_ly
FROM
(
SELECT
a.rank1,
source_name,
A.corp_desc,
B.CORP_COD, --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code
CAST(sales_quarter AS int ) yyyymm ,
sales_amount * 1000000 AS sales_amount,
0 AS sales_amount_ly
FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a
LEFT JOIN (SELECT DISTINCT ZK_Corp_C,CORP_COD FROM dwd.dwd_inc_gnd_retail_b2c_label_total) b
ON a.corp_desc = b.ZK_Corp_C
UNION ALL
SELECT
a.rank1,
source_name,
A.corp_desc,
B.CORP_COD, --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code
CAST(sales_quarter + 100 AS int ) yyyymm ,
0 AS sales_amount,
sales_amount * 1000000 AS sales_amount_ly
FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a
LEFT JOIN (SELECT DISTINCT ZK_Corp_C,CORP_COD FROM dwd.dwd_inc_gnd_retail_b2c_label_total) b
ON a.corp_desc = b.ZK_Corp_C
WHERE
CAST(sales_quarter + 100 AS int )
<=( SELECT max(CAST(sales_quarter AS int ))
FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp )
)
GROUP BY
1,2,3,4,5
-- COMMAND ----------
--------------------------------------------------将 top_corp 的数据处理到dws----------------------------------------------------
--------------------获取 全国total 本同期数据------------------------
insert overwrite table dws.dws_zk_retail_top_corp
SELECT
yyyymm,
rank1,
corp_desc,
corporation,
-- source_name,
sum(sales_amount) as sales_amount,
sum(sales_amount_ly) as sales_amount_ly
FROM
(
SELECT
nvl(rank1,'' ) as rank1 ,
corp_desc,
corporation,
corp_type,
-- source_name,
CAST(sales_quarter AS int ) as yyyymm,
sales_amount * 1000000 AS sales_amount,
0 AS sales_amount_ly
FROM dwd.dwd_gnd_ext_retail_nataional_top_corp
UNION ALL
SELECT
nvl(rank1,'' ) rank1,
corp_desc,
corporation,
corp_type,
-- source_name,
CAST(sales_quarter + 100 AS int ) as yyyymm,
0 AS sales_amount,
sales_amount * 1000000 AS sales_amount_ly
FROM dwd.dwd_gnd_ext_retail_nataional_top_corp
WHERE CAST(sales_quarter + 100 AS int )
<=(SELECT
max(CAST(sales_quarter AS int ))
FROM dwd.dwd_gnd_ext_retail_nataional_top_corp ) )
GROUP BY
yyyymm,
rank1,
corp_desc,
corporation
-- source_name
-- COMMAND ----------
------------------对 配置表的pack 对应公司、分子式 根据 dwd_gnd_tbl_corp_change 表进行产品重新归属---------
insert overwrite table tmp.tmp_zk_retail_pack_property_corp
select distinct a.iqvia_pack_code
,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod
,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des
,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c
,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod
,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des
,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c
from (select DISTINCT iqvia_pack_code,corp_cod,corp_des,corp_des_c,right(concat('000000',manu_cod),6 ) manu_cod,manu_des,manu_des_c,prod_cod from tmp.tmp_zk_retail_pack_property) a
left join (select right(concat('000000000',prod_cod ),9) prod_cod,corp_cod,corp_des,right(concat('000000',manu_cod),6 ) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is null ) b
on right(concat('000000000',A.prod_cod ),9)= b.prod_cod
left join (select if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,corp_cod,corp_des,right(concat('000000',manu_cod),6 ) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is not null ) c
on a.iqvia_pack_code = c.pack_cod
left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d
on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod
Left join (select distinct right(concat('000000',manu_cod),6 ) manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e
On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod
-- COMMAND ----------
-----------------------------计算others ta 和 cv others ---------------------------------------
-- 他汀类+血脂康 高血压用药 Brilinta Market 三个标签属于CV 需要倒减 cv others 及az_others --
--增加酒石酸美托洛尔这个也属于CV
-------------------------------------CV OTHERS-------------------------------------------
-- total - market
insert overwrite table tmp.tmp_dm_zk_retail_sales_tmp
WITH TEMP_CV AS (
-------------------------------------------------CV数据关联 去重pack避免数据重复-----------------------------------------------------
SELECT
a.YYYYMM
,a.iqvia_pack_code
,a.zk_product_id
,a.prod_des_c
,a.province_city
,a.sales_value
,a.sales_value_ly
,a.sales_unit
,a.sales_unit_ly
,a.counting_unit
,a.counting_unit_ly
,pack_flag
,brand_flag
,collect_list(a.market) source
FROM tmp.tmp_zk_retail_sales a
inner join (
---CV 中对重复数据任意取一个文件来源的 pack ,避免数据重复---
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,max(market) market
FROM tmp.tmp_zk_retail_sales
where market in ('他汀类+血脂康','高血压用药','Brilinta Market','酒石酸美托洛尔')
group by 1,2,3,4,5
) b on a.yyyymm = b.yyyymm
and a.iqvia_pack_code =b.iqvia_pack_code
and a.zk_product_id = b.zk_product_id
and a.province_city = b.province_city
and a.market = b.market
where a.market in ('他汀类+血脂康','高血压用药','Brilinta Market','酒石酸美托洛尔')
group by 1,2,3,4,5,6,7,8,9,10,11,12,13
)
, CV_PACK_CORP_DATA AS (
-------------------------------------获取pack + corp 粒度 的CV数据 并倒减cv下 az others 值-----------------------------------------------
--------------------拼接CV 原始AZ PACK数据--------------------
SELECT
YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,A.province_city
,B.corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
from TEMP_CV A
inner JOIN (select distinct iqvia_pack_code,corp_cod,corp_des,corp_des_c from tmp.tmp_zk_retail_pack_property_corp) b
ON A.iqvia_pack_code=B.iqvia_pack_code
where corp_cod ='A5Z'
UNION ALL
--------------------CV下的AZ OTHERS,即 cv 下的 AZ 汇总值减 pack 粒度az 汇总--------------------
SELECT
CV_PACK.YYYYMM
,'CV_AZ_OTHERS' as iqvia_pack_code
,'CV_AZ_OTHERS' as zk_product_id
,null as prod_des_c
,'ROC' as province_city
,CV_PACK.corp_cod
,0--,case when Total.sales_amount is not null then Total.sales_amount - CV_PACK.sales_value else 0 end as sales_value
,0--,case when Total.sales_amount_ly is not null then Total.sales_amount_ly - CV_PACK.sales_value_ly else 0 end as sales_value_ly
,0,0,0,0
,null
,0 pack_flag
,0 brand_flag
FROM (
SELECT
YYYYMM
,corp_cod
,sum(sales_value) sales_value
,sum(sales_value_ly) sales_value_ly
from TEMP_CV a
inner join (select distinct iqvia_pack_code,corp_cod,corp_des,corp_des_c from tmp.tmp_zk_retail_pack_property_corp ) b
on a.iqvia_pack_code = b.iqvia_pack_code
where corp_cod ='A5Z'
group by 1,2
) CV_PACK
LEFT JOIN ( select yyyymm,sales_amount,sales_amount_ly from dws.dws_zk_retail_ta_top_corp where source_name='CV' --AND CORP_COD='A5Z'
AND CORP_COD ='A5Z'
) Total
ON CV_PACK.YYYYMM = Total.YYYYMM
UNION ALL
--------------------拼接CV CORP非az 值--------------------
SELECT
YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,A.province_city
,B.corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
from TEMP_CV A
left JOIN (select distinct iqvia_pack_code,corp_cod,corp_des,corp_des_c from tmp.tmp_zk_retail_pack_property_corp ) b
ON A.iqvia_pack_code=B.iqvia_pack_code
where nvl(corp_cod,'') <>'A5Z'
)
------ 倒减完 AZ 的所有CV PACK 数据---------
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
,'CV' FLAG
from CV_PACK_CORP_DATA
UNION ALL
------- 获取 CV_OTHERS----------
SELECT
CV_PACK.YYYYMM
,'CV_OTHERS' as iqvia_pack_code
,'CV_OTHERS' as zk_product_id
,null as prod_des_c
,'ROC' as province_city
,'CV_OTHERS' AS corp_cod
,0--,case when Total.sales_amount is not null then Total.sales_amount - CV_PACK.sales_value else 0 end as sales_value
,0--,case when Total.sales_amount_ly is not null then Total.sales_amount_ly - CV_PACK.sales_value_ly else 0 end as sales_value_ly
,0,0,0,0
,null
,0 pack_flag
,0 brand_flag
,'CV'
FROM (
-------获取所有CV 数据-------
SELECT
YYYYMM
,sum(sales_value) sales_value
,sum(sales_value_ly) sales_value_ly
from CV_PACK_CORP_DATA
group by 1
) CV_PACK
LEFT JOIN ( select yyyymm,sales_amount,sales_amount_ly from dws.dws_zk_retail_ta_top_corp where source_name='CV' --AND CORP_COD='A5Z'
AND rank1 ='Total'
) Total
ON CV_PACK.YYYYMM = Total.YYYYMM
UNION ALL
---------- 除了 CV 外的其他数据----------
SELECT DISTINCT
YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,A.province_city
,B.corp_cod
,round(sales_value,2) sales_value
,round(sales_value_ly,2) sales_value_ly
,round(sales_unit,2) sales_unit
,round(sales_unit_ly,2) sales_unit_ly
,round(counting_unit,2) counting_unit
,round(counting_unit_ly,2) counting_unit_ly
,collect_list(market) source
,pack_flag
,brand_flag
,CASE WHEN A.market IN ('NIAD','RD Market') THEN 'CVRM' ELSE '' END FLAG
from tmp.tmp_zk_retail_sales A
LEFT JOIN (select distinct iqvia_pack_code,corp_cod from tmp.tmp_zk_retail_pack_property_corp ) b
ON A.iqvia_pack_code=B.iqvia_pack_code
where market not in ('他汀类+血脂康','高血压用药','Brilinta Market','酒石酸美托洛尔')
group by
YYYYMM
,A.iqvia_pack_code
,A.zk_product_id
,A.prod_des_c
,A.province_city
,B.corp_cod
,round(sales_value,2)
,round(sales_value_ly,2)
,round(sales_unit,2)
,round(sales_unit_ly,2)
,round(counting_unit,2)
,round(counting_unit_ly,2)
,pack_flag
,brand_flag
,CASE WHEN A.market IN ('NIAD','RD Market') THEN 'CVRM' ELSE '' END
-- COMMAND ----------
--------------------------------------------------------------------倒减cvrm az 及cvrm total -----------------------------------------------------
insert overwrite table tmp.tmp_dm_zk_retail_sales_tmp2
with alldata as (
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
,FLAG
FROM TMP.tmp_dm_zk_retail_sales_tmp
UNION ALL
SELECT
A.YYYYMM
,'CVRM_AZ_OTHERS' iqvia_pack_code
,'CVRM_AZ_OTHERS' zk_product_id
,NULL prod_des_c
,'ROC'
,A.corp_cod
,0--,case when B.sales_amount is not null then B.sales_amount - A.sales_value else 0 end sales_value
,0--case when B.sales_amount_ly is not null then B.sales_amount_ly - A.sales_value_ly else 0 end sales_value_ly
,0 sales_unit
,0 sales_unit_ly
,0 counting_unit
,0 counting_unit_ly
,NULL source
,0 pack_flag
,0 brand_flag
,'CVRM'
FROM ( SELECT
YYYYMM,corp_cod
,SUM(sales_value) sales_value
,SUM(sales_value_ly) sales_value_ly
FROM tmp.tmp_dm_zk_retail_sales_tmp WHERE corp_cod ='A5Z' AND FLAG IN ('CV','CVRM')
GROUP BY 1,2
) A
LEFT JOIN (select CORP_COD,yyyymm,sales_amount,sales_amount_ly from dws.dws_zk_retail_ta_top_corp where source_name='CVRM' AND CORP_COD='A5Z') B
ON A.YYYYMM=B.yyyymm AND A.corp_cod=B.CORP_COD
)
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
,FLAG
from alldata
union all
SELECT
A.YYYYMM
,'CVRM_OTHERS' iqvia_pack_code
,'CVRM_OTHERS' zk_product_id
,NULL prod_des_c
,'ROC'
,'CVRM_OTHERS' corp_cod
,0--,case when B.sales_amount is not null then B.sales_amount - A.sales_value else 0 end sales_value
,0--case when B.sales_amount_ly is not null then B.sales_amount_ly - A.sales_value_ly else 0 end sales_value_ly
,0 sales_unit
,0 sales_unit_ly
,0 counting_unit
,0 counting_unit_ly
,NULL source
,0 pack_flag
,0 brand_flag
,'CVRM'
FROM ( SELECT
YYYYMM
,SUM(sales_value) sales_value
,SUM(sales_value_ly) sales_value_ly
FROM alldata WHERE FLAG IN ('CV','CVRM')
GROUP BY 1
) A
LEFT JOIN (select yyyymm,sales_amount,sales_amount_ly from dws.dws_zk_retail_ta_top_corp where corp_desc='CVRM') B
ON A.YYYYMM=B.yyyymm
-- COMMAND ----------
------------------------8.2不上线,但后续肯定会上线-----------------
-- -----Non AZ Retail Related Market 逻辑,仅需要全国数据,该市场均为各文件中没有市场的数据,逻辑中存在仅取 gi re 文件数据,原因是 高血压、他汀血脂康、niad 在拆分时 使用的时整个文件拆分而RD 、抗血栓 整个文件是全取non az 市场数据若有,就已经存在结果表里; 反之 GI 、RE(含Inhaled) 拆分时通过 tblmarket 框选了对应市场的数据进行拆分,其他数据被排除了(即NON AZ 市场数据该数据不属于任何TA ,但归属于TOTAL),后续这部分数据需要 在pbi 展示,所有需要在倒减 others_ta 时加上。
-- INSERT INTO tmp.tmp_dm_zk_retail_sales_tmp2
-- select
-- YYYYMM
-- ,iqvia_pack_code
-- ,zk_product_id
-- ,prod_des_c
-- ,province_city
-- ,corp_cod
-- ,SUM(sales_value) sales_value
-- ,SUM(sales_value_ly) sales_value_ly
-- ,SUM(sales_unit) sales_unit
-- ,SUM(sales_unit_ly) sales_unit_ly
-- ,sum(counting_unit) counting_unit
-- ,sum(counting_unit_ly) counting_unit_ly
-- ,source
-- ,pack_flag
-- ,brand_flag
-- ,flag
-- from (
-- --------------获取本期、同期数据----------
-- select
-- a.YYYYMM
-- ,b.iqvia_pack_code
-- ,a.zk_product_id
-- ,b.prod_des_c
-- ,'ROC' province_city
-- ,coalesce(c.corp_cod,b.corp_cod ) corp_cod
-- ,sum(a.sales_value) sales_value
-- ,0 sales_value_ly
-- ,sum(a.sales_unit) sales_unit
-- ,0 sales_unit_ly
-- ,sum(a.sales_unit *(a.counting_unit / coalesce(b.unit,1 ))) counting_unit
-- ,0 counting_unit_ly
-- ,collect_list(a.brand_flag ) source
-- ,2 pack_flag
-- ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
-- ,null flag
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id = b.product_id
-- left join tmp.tmp_zk_retail_pack_property_corp c on c.iqvia_pack_code = right(concat('0000000',b.iqvia_pack_code ),7 )
-- left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
-- LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c FROM tmp.tmp_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
-- ) prod on b.prod_des_c=prod.prod_des_c
-- where b.iqvia_pack_code in ( select distinct iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market = 'Non AZ Retail Related Market' )
-- and a.zk_region ='全国'
-- AND a.brand_flag in ('pack-GI-慢性胃炎胃溃疡-全国.xlsx','pack-RE-慢阻肺-全国.xlsx')
-- and b.iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_dm_zk_retail_sales_tmp )
-- group by a.YYYYMM,b.iqvia_pack_code,a.zk_product_id,b.prod_des_c,a.brand_flag
-- ,coalesce(c.corp_cod,b.corp_cod )
-- ,case when prod.prod_des_c is null
-- THEN 2 else 1
-- END
-- union all
-- select
-- cast(a.YYYYMM + 100 as int ) YYYYMM
-- ,b.iqvia_pack_code
-- ,a.zk_product_id
-- ,b.prod_des_c
-- ,'ROC' province_city
-- ,coalesce(c.corp_cod,b.corp_cod ) corp_cod
-- ,0 sales_value
-- ,sum(a.sales_value) sales_value_ly
-- ,0 sales_unit
-- ,sum(a.sales_unit) sales_unit_ly
-- ,0 counting_unit
-- ,sum(a.sales_unit *(a.counting_unit / coalesce(b.unit,1 ))) counting_unit_ly
-- ,collect_list(a.brand_flag ) source
-- ,2 pack_flag
-- ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
-- ,null flag
-- from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a
-- left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id = b.product_id
-- left join tmp.tmp_zk_retail_pack_property_corp c on c.iqvia_pack_code = right(concat('0000000',b.iqvia_pack_code ),7 )
-- left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
-- LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c FROM tmp.tmp_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
-- ) prod on b.prod_des_c=prod.prod_des_c
-- where b.iqvia_pack_code in ( select distinct iqvia_pack_code from tmp.tmp_zk_retail_pack_property where market = 'Non AZ Retail Related Market' )
-- and a.zk_region ='全国'
-- AND a.brand_flag in ('pack-GI-慢性胃炎胃溃疡-全国.xlsx','pack-RE-慢阻肺-全国.xlsx')
-- and b.iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_dm_zk_retail_sales_tmp )
-- and a.YYYYMM + 100 <= (select max(YYYYMM) from tmp.tmp_dm_zk_retail_sales_tmp )
-- group by cast(a.YYYYMM + 100 as int )
-- ,b.iqvia_pack_code,a.zk_product_id,b.prod_des_c,a.brand_flag
-- ,coalesce(c.corp_cod,b.corp_cod )
-- ,case when prod.prod_des_c is null
-- THEN 2 else 1
-- END
-- ) group by
-- YYYYMM,iqvia_pack_code,zk_product_id,prod_des_c,province_city,corp_cod,source,pack_flag,brand_flag,flag
-- COMMAND ----------
-------------------------------------------------倒减OTHERS TA\ others az 并写入dm-----------------------------------------
insert overwrite table dm.dm_zk_retail_sales
with all_ta_data as (
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
,FLAG
from tmp.tmp_dm_zk_retail_sales_tmp2
UNION ALL
SELECT
mkt.YYYYMM
,'OTHERS_AZ_TA' as iqvia_pack_code
,'OTHERS_AZ_TA' as zk_product_id
,null as prod_des_c
,'ROC' as province_city
,mkt.corp_cod
,case when Total.sales_amount is not null then Total.sales_amount - mkt.sales_value else 0 end as sales_value
,case when Total.sales_amount_ly is not null then Total.sales_amount_ly - mkt.sales_value_ly else 0 end as sales_value_ly
,0,0,0,0
,null
,0 pack_flag
,0 brand_flag
,'TA_AZ'
FROM (
SELECT
YYYYMM
,corp_cod
,sum(sales_value) sales_value
,sum(sales_value_ly) sales_value_ly
from tmp.tmp_dm_zk_retail_sales_tmp2 A
where nvl(corp_cod,'') ='A5Z'
group by YYYYMM,corp_cod
) mkt
LEFT JOIN (SELECT yyyymm,sales_amount,sales_amount_ly FROM dws.dws_zk_retail_top_corp WHERE corp_desc='阿斯利康') TOTAL
ON mkt.YYYYMM = Total.YYYYMM
)
,Result as (
------------------------------- 所有pack数据 -------------------------------
SELECT
YYYYMM
,iqvia_pack_code
,zk_product_id
,prod_des_c
,province_city
,corp_cod
,sales_value
,sales_value_ly
,sales_unit
,sales_unit_ly
,counting_unit
,counting_unit_ly
,source
,pack_flag
,brand_flag
,FLAG
from all_ta_data
----------------------------------OTHERS_TA 倒减数据-----------------------------------
union all
SELECT
mkt.YYYYMM
,'OTHERS_TA' as iqvia_pack_code
,'OTHERS_TA' as zk_product_id
,null as prod_des_c
,'ROC' as province_city
,'OTHERS_TA' as corp_cod
,Total.sales_amount - mkt.sales_value as sales_value
,Total.sales_amount_ly - mkt.sales_value_ly as sales_value_ly
,0,0,0,0
,null
,0 pack_flag
,0 brand_flag
,'OTHERS_TA'
FROM (
SELECT
YYYYMM
,sum(sales_value) sales_value
,sum(sales_value_ly) sales_value_ly
from all_ta_data A
group by YYYYMM
) mkt
LEFT JOIN (SELECT yyyymm,sales_amount,sales_amount_ly FROM dws.dws_zk_retail_top_corp WHERE rank1='Total') TOTAL
ON mkt.YYYYMM = Total.YYYYMM
)
----------------------------------------数据写入DM------------------------------------------------
select
pack.YYYYMM
,pack.iqvia_pack_code
,NVL(CASE WHEN PACK.province_city ='全国' then 'ROC' ELSE T2.geo_key END ,'ROC') AUDIT_COD
,CASE WHEN PACK.province_city ='全国' then 'ROC' ELSE PACK.province_city END province_city
,corp_cod
,sum(pack.sales_unit) sales_unit
,sum(pack.sales_unit_ly) sales_unit_ly
,sum(pack.sales_value) sales_value
,sum(pack.sales_value_ly) sales_value_ly
,sum(pack.counting_unit) counting_unit
,sum(pack.counting_unit_ly) counting_unit_ly
,'Retail (Quarterly)' DATA_SOURCE
,source
,pack_flag
,brand_flag
,FLAG
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt
from result pack
left join dm.dm_zk_retail_geo t2
on pack.province_city = t2.province_city
group by pack.YYYYMM
,pack.iqvia_pack_code
,NVL(CASE WHEN PACK.province_city ='全国' then 'ROC' ELSE T2.geo_key END ,'ROC')
,CASE WHEN PACK.province_city ='全国' then 'ROC' ELSE PACK.province_city END
,source
,pack_flag
,brand_flag
,corp_cod
,FLAG
-- COMMAND ----------
---------------------------------------------将倒减的pack 补充到ppack info
insert overwrite table dws.dws_zk_retail_pack_property
select
*
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
from tmp.tmp_zk_retail_pack_property
union all
------事实表中倒减出来的pack 需要补充到配置表中
select
'' iqvia_lineno
,iqvia_pack_code PACK_CODE
,'' iqvia_prod_code
,'' iqvia_notes
,'' new_pack_flag
,'' Is_exists_chpa
,iqvia_pack_code product_id
,'' prescription_nature
,'' medicine_type
,'' zk_medicine_tier1
,'' zk_medicine_tier2
,'' zk_medicine_tier3
,'' zk_medicine_tier4
,'' common_name
,'' dosage_form
,'' user_type
,'' category_name
,'' product_name
,'' brand
,'' zk_manu_des
,'' zk_corp_des
,'' zk_pack_des
,'' counting_unit_a
,'' dosage_unit_a
,'' unit_a
,'' app1_cod
,'' app1_des
,'' app1_des_c
,'' app2_cod
,'' app2_des
,'' app2_des_c
,'' app3_cod
,'' app3_des
,'' app3_des_c
,'' atc1_cod
,'' atc1_des
,'' atc1_des_c
,'' atc2_cod
,'' atc2_des
,'' atc2_des_c
,'' atc3_cod
,'' atc3_des
,'' atc3_des_c
,'' atc4_cod
,'' atc4_des
,'' atc4_des_c
,'' bio_desc
,'' cmps_cod
,'' cmps_des
,'' cmps_des_c
,corp_cod corp_cod
,'' corp_des
,'' corp_des_c
,'' edl_desc
,'' eth_otc_desc
,'' gene_orig_desc
,'' gqce_desc
,'' manu_cod
,'' manu_des
,'' manu_des_c
,'' mnfl_cod
,'' mnfl_des
,'' nrdl_desc
,'' pack_des
,'' stgh_des
,'' pack_lch
,'' paed_desc
,'Others' prod_des
,'Others' prod_des_c
,'' tcm_desc
,'' vbp_desc
,'' unit
,'' counting_unit
,'' dosage_unit
,'' NRDL_ENTRY_DATE
,'Non AZ Retail Related Market' market
,'' bu
,1 extend_market_ratio
,CASE WHEN iqvia_pack_code LIKE '%AZ%' THEN 'Y' ELSE 'N' END is_az
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
from (select distinct iqvia_pack_code,corp_cod
from DM.dm_zk_retail_sales where iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_zk_retail_pack_property))
-- COMMAND ----------
-- dwd_gnd_tbl_corp_change
---------------------------------------对公司归属从新划分----------------------
insert overwrite table tmp.tmp_dm_zk_retail_pack_property
select distinct
a.iqvia_lineno
,a.iqvia_pack_code
,a.PROD_COD
,a.iqvia_notes
,a.new_pack_flag
,a.is_exists_chpa
,a.product_id
,a.prescription_nature
,a.medicine_type
,a.zk_medicine_tier1
,a.zk_medicine_tier2
,a.zk_medicine_tier3
,a.zk_medicine_tier4
,a.common_name
,a.dosage_form
,a.user_type
,a.category_name
,a.product_name
,a.brand_name
,a.zk_manu_des
,a.zk_corp_des
,a.zk_pack_des
,a.counting_unit_a
,a.dosage_unit_a
,a.unit_a
,a.app1_cod
,a.app1_des
,a.app1_des_c
,a.app2_cod
,a.app2_des
,a.app2_des_c
,a.app3_cod
,a.app3_des
,a.app3_des_c
,a.atc1_cod
,a.atc1_des
,a.atc1_des_c
,a.atc2_cod
,a.atc2_des
,a.atc2_des_c
,a.atc3_cod
,a.atc3_des
,a.atc3_des_c
,a.atc4_cod
,a.atc4_des
,a.atc4_des_c
,a.bio_desc
,a.cmps_cod
,a.cmps_des
,a.cmps_des_c
,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod
,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des
,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c
,a.edl_desc
,a.eth_otc_desc
,a.gene_orig_desc
,a.gqce_desc
,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod
,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des
,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c
,a.mnfl_cod
,a.mnfl_des
,a.nrdl_desc
,a.pack_des
,a.stgh_des
,a.pack_lch
,a.paed_desc
,a.prod_des
,a.prod_des_c
,a.tcm_desc
,a.vbp_desc
,a.unit
,a.counting_unit
,a.dosage_unit
,a.NRDL_ENTRY_DATE
-- ,CASE WHEN a.market= 'Antacid anti GI swelling agent+PPI Oral' THEN 'Retail_GI Market' ELSE a.MARKET END MARKET
,A.MARKET
,a.bu
,a.extend_market_ratio
,a.is_az
from dws.dws_zk_retail_pack_property a
left join (select right(concat('000000000',prod_cod ),9) prod_cod,corp_cod,corp_des, right(concat('000000',manu_cod ),6) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is null ) b
on right(concat('000000000',A.prod_cod ),9)= b.prod_cod
left join (select if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,corp_cod,corp_des, right(concat('000000',manu_cod ),6) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is not null ) c
on a.iqvia_pack_code = c.pack_cod
left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d
on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod
Left join (select distinct right(concat('000000',manu_cod ),6) manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e
On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod
-- COMMAND ----------
------------------------------获取pack market 的对应关系----------------------------
-- drop table if exists dm.dm_zk_retail_pack_property;
-- create table if not exists dm.dm_zk_retail_pack_property
-- using delta as
INSERT OVERWRITE table dm.dm_zk_retail_pack_property
SELECT MARKET_PACK_KEY
,iqvia_pack_code iqvia_pack_code
,MAX(pack_des) pack_des
,MAX(stgh_des) stgh_des
,MAX(pack_lch) pack_lch
,MAX(Family_Code) Family_Code
,MAX(Family_Name) Family_Name
,MAX(iqvia_prod_code) iqvia_prod_code
,MAX(prod_des) prod_des
,MAX(prod_des_c) prod_des_c
,MAX(cmps_cod) cmps_cod
,MAX(CMPS_DES) CMPS_DES
,MAX(cmps_des_c) cmps_des_c
,MAX(atc1_cod) atc1_cod
,MAX(atc2_cod) atc2_cod
,MAX(atc3_cod) atc3_cod
,MAX(atc4_cod) atc4_cod
,MAX(APP1_COD) APP1_COD
,MAX(APP2_COD) APP2_COD
,MAX(APP3_COD) APP3_COD
,MAX(BIO_DESC) BIO_DESC
,MAX(gene_orig_desc) gene_orig_desc
,MAX(ETH_OTC_DESC) ETH_OTC_DESC
,MAX(nrdl_desc) nrdl_desc
,MAX(NRDL_ENTRY_DATE) NRDL_ENTRY_DATE
,MAX(edl_desc) edl_desc
,MAX(TCM_DESC) TCM_DESC
,MAX(PAED_DESC) PAED_DESC
,MAX(GQCE_DESC) GQCE_DESC
,MAX(VBP_DESC) VBP_DESC
,MAX(MANU_COD) MANU_COD
,MAX(MANU_DES) MANU_DES
,MAX(MANU_DES_C) MANU_DES_C
,MAX(MNFL_COD) MNFL_COD
,MAX(MNFL_DES) MNFL_DES
,MAX(corp_cod) corp_cod
,MAX(corp_des) corp_des
,MAX(CORP_DES_C) CORP_DES_C
,MAX(BrandType) BrandType
,MAX(market) market
,MAX(KEY_COMPETITOR) KEY_COMPETITOR
,MAX(is_az) is_az
,MAX(AZ_MAIN) AZ_MAIN
,MAX(AZ_Related) AZ_Related
,MAX(atc1_des) atc1_des
,MAX(atc1_des_c) atc1_des_c
,MAX(atc2_des) atc2_des
,MAX(atc2_des_c) atc2_des_c
,MAX(atc3_des) atc3_des
,MAX(atc3_des_c) atc3_des_c
,MAX(atc4_des) atc4_des
,MAX(atc4_des_c) atc4_des_c
,MAX(app1_des) app1_des
,MAX(app1_des_c) app1_des_c
,MAX(app2_des) app2_des
,MAX(app2_des_c) app2_des_c
,MAX(app3_des) app3_des
,MAX(app3_des_c) app3_des_c
,MAX(class) class
,MAX(TA) TA
FROM (
select distinct
CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market'
WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market'
WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market'
ELSE a.market
END ||'_'||a.iqvia_pack_code MARKET_PACK_KEY
,a.iqvia_pack_code
,c.pack_des
,c.stgh_des
,c.pack_lch
,'' Family_Code
,'' Family_Name
,c.iqvia_prod_code
,case when c.iqvia_pack_code like '%O%' THEN 'Others' else c.prod_des end prod_des
,case when c.iqvia_pack_code like '%O%' THEN 'Others' else c.prod_des_c end prod_des_c
,c.cmps_cod
,c.CMPS_DES
,c.cmps_des_c
,c.atc1_cod
,c.atc2_cod
,c.atc3_cod
,c.atc4_cod
,c.APP1_COD
,c.APP2_COD
,c.APP3_COD
,c.BIO_DESC
,c.gene_orig_desc
,c.ETH_OTC_DESC
,c.nrdl_desc
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,c.edl_desc
,c.TCM_DESC
,c.PAED_DESC
,c.GQCE_DESC
,c.VBP_DESC
,a.MANU_COD
,a.MANU_DES
,a.MANU_DES_C
,c.MNFL_COD
,c.MNFL_DES
,CASE WHEN A.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' else a.CORP_COD END
corp_cod
,CASE WHEN A.iqvia_pack_code LIKE '%AZ%' THEN 'ASTRAZENECA' else case when a.CORP_DES like '% GROUP%' THEN replace(a.CORP_DES ,' GROUP','' ) ELSE a.CORP_DES END END
corp_des
,CASE WHEN A.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' else a.CORP_DES_C END
CORP_DES_C
,'' BrandType
,CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market'
WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market'
WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market'
ELSE a.market
END market
,t5.KEY_COMPETITOR
,IF(a.corp_des_c in('阿斯利康制药集团') ,'Y','N') is_az
,'' AZ_MAIN
,'' AZ_Related
,c.atc1_des
,c.atc1_des_c
,c.atc2_des
,c.atc2_des_c
,c.atc3_des
,c.atc3_des_c
,c.atc4_des
,c.atc4_des_c
,c.app1_des
,c.app1_des_c
,c.app2_des
,c.app2_des_c
,c.app3_des
,c.app3_des_c
-- ,nvl(cla.class,'Others') class
,nvl(t3.class,'Others') class
,case when a.market ='Antacid anti GI swelling agent+PPI Oral' then 'GI'
when a.MARKET ='RD Market' then 'RD'
ELSE
CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM'
WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV'
ELSE t2.ta END
END TA
from tmp.tmp_dm_zk_retail_pack_property a
left join dwd.dwd_gnd_ext_retail_pack_property c on a.product_id = c.product_id
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON a.iqvia_pack_code = MOLE.Pack_Code
left join dws.dws_ext_retail_td_ta t2 on a.market = t2.market
left join dwd.dwd_gnd_tblclass t3 on a.MARKET = case when t3.market is null then a.market else t3.market end
and nvl(a.iqvia_pack_code,'') = case when t3.pack_code is null then nvl(a.iqvia_pack_code,'') else if( t3.pack_code REGEXP '^[0-9]',right(concat('000000000000',t3.pack_code),12),t3.pack_code) end
and nvl(a.PROD_COD,'') = case when t3.product_code is null then nvl(a.PROD_COD ,'') else right(concat('000000000', t3.product_code),9 ) end
and nvl(a.cmps_cod,'') = case when t3.molecule_code is null then nvl(a.cmps_cod ,'') else right(concat('000000', t3.molecule_code ),6 ) end
and nvl(a.corp_cod,'') = case when t3.Corporation_code is null then nvl(a.corp_cod ,'') else t3.Corporation_code end
and nvl(a.manu_cod,'')=case when t3.Manufacturer_Code is null then nvl(a.manu_cod,'') else t3.Manufacturer_Code end
and nvl(c.atc1_cod,'') = case when t3.ATC1_Code is null then nvl(c.atc1_cod ,'') else t3.ATC1_Code end
and nvl(c.ATC2_COD,'') = case when t3.ATC2_Code is null then nvl(c.ATC2_COD ,'') else t3.ATC2_Code end
and nvl(c.ATC3_COD,'') = case when t3.ATC3_Code is null then nvl(c.ATC3_COD ,'') else t3.ATC3_Code end
and nvl(c.ATC4_COD,'') = case when t3.ATC4_Code is null then nvl(c.ATC4_COD ,'') else t3.ATC4_Code end
and nvl(c.app1_cod,'') = case when t3.NFC1_Code is null then nvl(c.app1_cod ,'') else t3.NFC1_Code end
and nvl(c.APP2_COD,'') = case when t3.NFC2_Code is null then nvl(c.APP2_COD ,'') else t3.NFC2_Code end
and nvl(c.APP3_COD,'') = case when t3.NFC3_Code is null then nvl(c.APP3_COD ,'') else t3.NFC3_Code end
and nvl(c.stgh_des,'') = case when t3.Strength is null then nvl(c.stgh_des ,'') else t3.Strength end
left join (select distinct MARKET,PACK_COD,KEY_COMPETITOR from dm.dm_ims_td_pack_property) t5
on a.market = t5.MARKET
and a.iqvia_pack_code = t5.PACK_COD
)
group by MARKET_PACK_KEY
,iqvia_pack_code
-- COMMAND ----------
------------获取pack market ta 对应关系表-------------
insert overwrite table dm.dm_zk_retail_market_property
select distinct
iqvia_pack_code,market,ta
from dm.dm_zk_retail_pack_property
-- COMMAND ----------
------------rc 拆分逻辑处理-----------
insert overwrite table dws.dws_ext_rc_ratio
select
a.sub_bu
,a.mkt
,a.region_code
,nvl(b.PROVINCE_CODE,c.PROVINCE_CODE ) PROVINCE_CODE
,nvl(b.AUDIT_COD,c.PROVINCE_CODE) city_code
,a.ratio
,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_insert_dt
,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_update_dt
from dwd.dwd_gnd_ext_rc_ratio a
left join dm.dm_ims_td_geo b
on a.city = b.CITY_C
left join (select province_code,province_name from dm.dm_td_geography group by province_name,province_code) c
on a.city = c.province_name
-- COMMAND ----------
----------------rc拆分逻辑处理到dm
insert overwrite table dm.dm_ext_rc_ratio
select
sub_bu
,mkt
,region_code
,PROVINCE_CODE
,city_code
,ratio
,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_insert_dt
,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_update_dt
from dws.dws_ext_rc_ratio
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## DTP维度表
-- COMMAND ----------
-- -----dtp 维度表处理------------------
-- --第一步:
-- --先处理 Extend_Market 和 NOT_IN_FLAG 都为空的数据,代表有明确定义得市场
insert overwrite table tmp.tmp_zk_retail_dtp_market
select distinct
t1.region_type
,t1.higher_level_region
,t2.market
,if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code) iqvia_pack_code --right(concat('0000000', t1.iqvia_pack_code ),7)
,right(concat('000000000', t1.iqvia_prod_code ),9) iqvia_prod_code --right(concat('00000', t1.iqvia_prod_code ),5)
,t1.iqvia_notes
,t1.new_pack_flag
,t1.is_exists_chpa
,t1.prescription_nature
,t1.common_name
,t1.dosage_form
,t1.category_name
,t1.product_name
,t1.brand_name
,t1.zk_corp_des
,t1.zk_pack_des
,t1.counting_unit_a
,t1.app1_cod
,t1.app1_des
,t1.app1_des_c
,t1.app2_cod
,t1.app2_des
,t1.app2_des_c
,t1.app3_cod
,t1.app3_des
,t1.app3_des_c
,t1.atc1_cod
,t1.atc1_des
,t1.atc1_des_c
,t1.atc2_cod
,t1.atc2_des
,t1.atc2_des_c
,t1.atc3_cod
,t1.atc3_des
,t1.atc3_des_c
,t1.atc4_cod
,t1.atc4_des
,t1.atc4_des_c
,t1.bio_desc
, right(concat('000000', t1.CMPS_COD ),6 ) cmps_cod
,t1.cmps_des
,t1.cmps_des_c
,t1.corp_cod
,t1.corp_des
,t1.corp_des_c
,t1.edl_desc
,t1.eth_otc_desc
,t1.gene_orig_desc
,t1.gqce_desc
,t1.manu_cod
,t1.manu_des
,t1.manu_des_c
,t1.mnfl_cod
,t1.mnfl_des
,t1.nrdl_desc
,t1.pack_des
,t1.stgh_des
,t1.pack_lch
,t1.paed_desc
,t1.prod_des
,t1.prod_des_c
,t1.tcm_desc
,t1.vbp_desc
,t1.unit
,t1.counting_unit
,t1.dosage_unit
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio
from dwd.dwd_gnd_ext_dtp_pack_property t1
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON t1.iqvia_pack_code = MOLE.Pack_Code
left join (select * from dwd.dwd_gnd_dtp_tblmarket WHERE Extend_Market IS NULL AND ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' )) t2
-- on t1.cmps_cod=right(concat('000000', Molecule_Code),6 )
on t1.ATC1_COD = case when t2.ATC1_Code is null then t1.ATC1_COD else t2.ATC1_Code end
and t1.ATC2_COD = case when t2.ATC2_Code is null then t1.ATC2_COD else t2.ATC2_Code end
and t1.ATC3_COD = case when t2.ATC3_Code is null then t1.ATC3_COD else t2.ATC3_Code end
and t1.ATC4_COD = case when t2.ATC4_Code is null then t1.ATC4_COD else t2.ATC4_Code end
and t1.APP1_COD = case when t2.NFC1_Code is null then t1.APP1_COD else t2.NFC1_Code end
and t1.APP2_COD = case when t2.NFC2_Code is null then t1.APP2_COD else t2.NFC2_Code end
and t1.APP3_COD = case when t2.NFC3_Code is null then t1.APP3_COD else t2.NFC3_Code end
and t1.CORP_COD = case when t2.corporation_code is null then t1.CORP_COD else t2.corporation_code end
and t1.MANU_COD = case when t2.Manufacturer_Code is null then t1.MANU_COD else t2.Manufacturer_Code end
and right(concat('000000000', t1.iqvia_prod_code ),9) = case when t2.Product_Code is null then right(concat('000000000', t1.iqvia_prod_code ),9) else right(concat('000000000', t2.Product_Code ),9) end
and if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code)
= case when t2.Pack_Code is null then if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code)
else if( t2.Pack_Code REGEXP '^[0-9]',right(concat('000000000000',t2.Pack_Code),12),t2.Pack_Code) end
and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end
and right(concat('000000', t1.CMPS_COD ),6 ) = case when t2.Molecule_Code is null then right(concat('000000', t1.CMPS_COD ),6 ) else right(concat('000000', Molecule_Code),6 ) end
where t2.market is not null
;
-- COMMAND ----------
insert overwrite table tmp.tmp_zk_retail_dtp_market_del
select distinct
t1.region_type
,t1.higher_level_region
,t2.market
,if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code) iqvia_pack_code
, right(concat('000000000', t1.iqvia_prod_code ),9) iqvia_prod_code
,t1.iqvia_notes
,t1.new_pack_flag
,t1.is_exists_chpa
,t1.prescription_nature
,t1.common_name
,t1.dosage_form
,t1.category_name
,t1.product_name
,t1.brand_name
,t1.zk_corp_des
,t1.zk_pack_des
,t1.counting_unit_a
,t1.app1_cod
,t1.app1_des
,t1.app1_des_c
,t1.app2_cod
,t1.app2_des
,t1.app2_des_c
,t1.app3_cod
,t1.app3_des
,t1.app3_des_c
,t1.atc1_cod
,t1.atc1_des
,t1.atc1_des_c
,t1.atc2_cod
,t1.atc2_des
,t1.atc2_des_c
,t1.atc3_cod
,t1.atc3_des
,t1.atc3_des_c
,t1.atc4_cod
,t1.atc4_des
,t1.atc4_des_c
,t1.bio_desc
, right(concat('000000', t1.CMPS_COD ),6 ) cmps_cod
,t1.cmps_des
,t1.cmps_des_c
,t1.corp_cod
,t1.corp_des
,t1.corp_des_c
,t1.edl_desc
,t1.eth_otc_desc
,t1.gene_orig_desc
,t1.gqce_desc
,t1.manu_cod
,t1.manu_des
,t1.manu_des_c
,t1.mnfl_cod
,t1.mnfl_des
,t1.nrdl_desc
,t1.pack_des
,t1.stgh_des
,t1.pack_lch
,t1.paed_desc
,t1.prod_des
,t1.prod_des_c
,t1.tcm_desc
,t1.vbp_desc
,t1.unit
,t1.counting_unit
,t1.dosage_unit
,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE
,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio
from dwd.dwd_gnd_ext_dtp_pack_property t1
LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON t1.iqvia_pack_code = MOLE.Pack_Code
left join (select * from dwd.dwd_gnd_dtp_tblmarket WHERE Extend_Market IS NULL AND NOT_IN_FLAG = '0' ) t2
-- on t1.cmps_cod=right(concat('000000', Molecule_Code),6 )
on t1.ATC1_COD = case when t2.ATC1_Code is null then t1.ATC1_COD else t2.ATC1_Code end
and t1.ATC2_COD = case when t2.ATC2_Code is null then t1.ATC2_COD else t2.ATC2_Code end
and t1.ATC3_COD = case when t2.ATC3_Code is null then t1.ATC3_COD else t2.ATC3_Code end
and t1.ATC4_COD = case when t2.ATC4_Code is null then t1.ATC4_COD else t2.ATC4_Code end
and t1.APP1_COD = case when t2.NFC1_Code is null then t1.APP1_COD else t2.NFC1_Code end
and t1.APP2_COD = case when t2.NFC2_Code is null then t1.APP2_COD else t2.NFC2_Code end
and t1.APP3_COD = case when t2.NFC3_Code is null then t1.APP3_COD else t2.NFC3_Code end
and t1.CORP_COD = case when t2.corporation_code is null then t1.CORP_COD else t2.corporation_code end
and t1.MANU_COD = case when t2.Manufacturer_Code is null then t1.MANU_COD else t2.Manufacturer_Code end
and right(concat('000000000', t1.iqvia_prod_code ),9) = case when t2.Product_Code is null then right(concat('000000000', t1.iqvia_prod_code ),9) else right(concat('000000000', t2.Product_Code ),9) end
and if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code)
= case when t2.Pack_Code is null then if( t1.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',t1.iqvia_pack_code),12),t1.iqvia_pack_code)
else if( t2.Pack_Code REGEXP '^[0-9]',right(concat('000000000000',t2.Pack_Code),12),t2.Pack_Code) end
and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end
and right(concat('000000', t1.CMPS_COD ),6 ) = case when t2.Molecule_Code is null then right(concat('000000', t1.CMPS_COD ),6 ) else right(concat('000000', Molecule_Code),6 ) end
where t2.market is not null
-- COMMAND ----------
-- --注意此段是反选的规则故执行的是从已经定义好的TempMKT中删除数据
-- --需要看TempMKT的字段结构没有值的字段在Value里面放个空值
MERGE INTO tmp.tmp_zk_retail_dtp_market AS t1
USING tmp.tmp_zk_retail_dtp_market_del AS t2
on t1.ATC1_COD = t2.ATC1_COD
and t1.ATC2_COD = t2.ATC2_COD
and t1.ATC3_COD = t2.ATC3_COD
and t1.ATC4_COD = t2.ATC4_COD
and t1.APP1_COD = t2.APP1_COD
and t1.APP2_COD = t2.APP2_COD
and t1.APP3_COD = t2.APP3_COD
and t1.CORP_COD = t2.CORP_COD
and t1.MANU_COD = t2.MANU_COD
and t1.iqvia_prod_code = t2.iqvia_prod_code
and t1.iqvia_pack_code = t2.iqvia_pack_code
and t1.STGH_DES = t2.STGH_DES
and t1.CMPS_COD = t2.CMPS_COD
and t1.market = t2.market
WHEN MATCHED THEN DELETE
;
-- COMMAND ----------
------------------------将产品对应的公司重新归属
insert overwrite table tmp.tmp_zk_retail_dtp_market_corp
select
A.region_type
,A.higher_level_region
,A.market
,A.iqvia_pack_code
,A.iqvia_prod_code
,A.iqvia_notes
,A.new_pack_flag
,A.is_exists_chpa
,A.prescription_nature
,A.common_name
,A.dosage_form
,A.category_name
,A.product_name
,A.brand_name
,A.zk_corp_des
,A.zk_pack_des
,A.counting_unit_a
,A.app1_cod
,A.app1_des
,A.app1_des_c
,A.app2_cod
,A.app2_des
,A.app2_des_c
,A.app3_cod
,A.app3_des
,A.app3_des_c
,A.atc1_cod
,A.atc1_des
,A.atc1_des_c
,A.atc2_cod
,A.atc2_des
,A.atc2_des_c
,A.atc3_cod
,A.atc3_des
,A.atc3_des_c
,A.atc4_cod
,A.atc4_des
,A.atc4_des_c
,A.bio_desc
,A.cmps_cod
,A.cmps_des
,A.cmps_des_c
,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod
,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des
,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c
,A.edl_desc
,A.eth_otc_desc
,A.gene_orig_desc
,A.gqce_desc
,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod
,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des
,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c
,A.mnfl_cod
,A.mnfl_des
,A.nrdl_desc
,A.pack_des
,A.stgh_des
,A.pack_lch
,A.paed_desc
,A.prod_des
,A.prod_des_c
,A.tcm_desc
,A.vbp_desc
,A.unit
,A.counting_unit
,A.dosage_unit
,A.NRDL_ENTRY_DATE
,A.bu
,A.Market_Ratio
from tmp.tmp_zk_retail_dtp_market a
left join (select DISTINCT right(concat('000000000',prod_cod ),9) prod_cod,corp_cod,corp_des, right(concat('000000',manu_cod ),6) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is null ) b
on right(concat('000000000',A.iqvia_prod_code ),9)= b.prod_cod
left join (select DISTINCT if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod ,corp_cod,corp_des, right(concat('000000',manu_cod ),6) manu_cod,manu_des from dwd.dwd_gnd_tbl_corp_change where pack_cod is not null ) c
on a.iqvia_pack_code = c.pack_cod
left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_dtp_pack_property) d
on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod
Left join (select distinct right(concat('000000',manu_cod ),6) manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_dtp_pack_property) e
On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## DTP 数据
-- COMMAND ----------
/*
修改日期20250515
修改人chenwu
修改内容:新增 Anti-HER2 mBC 直取逻辑
*/
create or replace temporary view dtp_rawdata_Anti
as
with all_data as (
select
left(dtp.year, 4) year,
concat(left(dtp.year, 4), 'Q', cal.quarter) yq,
cast(dtp.`time` as int) yyyymm,
pack.iqvia_pack_code,
pack.corp_cod,
geo.geo_key,
cast(dtp.counting_unit as double) count_unit,
cast(dtp.average_price as double) average_price,
cast(dtp.sales_amount as double) sales_value,
cast(dtp.sales_volume as double) sales_unit,
cast(dtp.counting_units_obversion as double) counting_units_obversion,
cast(dtp.sales_volume * (pack.counting_unit / pack.unit) as double) counting_unit
,target_points market --使用dtp pack中的靶向点 字段来判断是否是需要拆分的市场
,pack.product_name brand_name
from dwd.dwd_gnd_ext_retail_dtp_datasource dtp
left join (
select
DISTINCT brand_name,
iqvia_pack_code,
corp_cod,
zk_pack_des,
product_name,
counting_unit,
unit
from
tmp.tmp_zk_retail_dtp_market_corp
) pack on dtp.pack_des = pack.zk_pack_des
AND nvl(dtp.product_name, '') = nvl(pack.product_name, '')
and dtp.brand_name = pack.brand_name
left join dm.dm_zk_retail_geo geo on dtp.region = geo.province_name
left join ( select distinct yyyymm,quarter from dm.dm_td_calendar ) cal on cal.yyyymm = dtp.`time`
where dtp.target_points = 'Anti-HER2 mBC'
)
--全国的数据
,quanguo_data as (
select
*
from all_data
where geo_key = 'CHT'
)
--省份数据
,province_data as (
select
*
from all_data
where geo_key <> 'CHT'
)
,province_sum_data as (
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,max(A.count_unit) count_unit
,max(A.average_price) average_price
,sum(A.sales_value) as sales_value
,sum(A.sales_unit) as sales_unit
,sum(A.counting_units_obversion) as counting_units_obversion
,sum(A.counting_unit) as counting_unit
from province_data A
group by 1,2,3,4,5
)
-- select * from province_data
--倒减ROC部分 = 全国 - 省份
,roc_data as (
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,'ROC' geo_key
,A.count_unit
,if(B.average_price is not null, 2*A.average_price- B.average_price,A.average_price) as average_price
,A.sales_value - B.sales_value as sales_value
,A.sales_unit - B.sales_unit as sales_unit
,A.counting_units_obversion -B.counting_units_obversion AS counting_units_obversion
,A.counting_unit - B.counting_unit AS counting_unit
from quanguo_data A
left join province_sum_data B on A.yyyymm = B.yyyymm and A.iqvia_pack_code = B.iqvia_pack_code and A.corp_cod = B.corp_cod
)
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,A.geo_key
,A.count_unit
,A.average_price
,A.sales_value as sales_value
,A.sales_unit as sales_unit
,A.counting_units_obversion as counting_units_obversion
,A.counting_unit as counting_unit
,1 pack_flag
,1 brand_flag
from province_data A
union all
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,A.geo_key
,A.count_unit
,A.average_price
,A.sales_value as sales_value
,A.sales_unit as sales_unit
,A.counting_units_obversion as counting_units_obversion
,A.counting_unit as counting_unit
,1 pack_flag
,1 brand_flag
from roc_data A
-- COMMAND ----------
----------------------------------------------------------
/*
修改时间20250311
修改人chenwu
修改内容新增手动拆分DTP逻辑修改
*/
----------------------------------------------------------
create or replace table tmp.tmp_zk_retail_brandTotal_dtp
with dtp_egfr_tki_market(--brand中 EGFR TKI Market 的量
select
YYYYMM
,market
,province_city
,cast(sales_value * 1000000 as decimal(30,10)) AS sales_val
,cast(sales_volume * 1000000 as decimal(30,10)) AS sales_vol
,'EGFR TKI Market' marketmapping
,'--' cmps_des_c
,'--' prod_des_c
from dwd.dwd_gnd_ext_dtp_zk_brand
where type = '品类' --and TA = 'ONC'
and ranked_by = 'value'
and market = 'EGFR TKI'
)
,dtp_brand(--brand数据中 brand的量
select
YYYYMM
,market
,province_city
,cast(sales_value * 1000000 as decimal(30,10)) AS sales_val
,cast(sales_volume * 1000000 as decimal(30,10)) AS sales_vol
,'EGFR TKI Market' marketmapping
,case when zk_brand_category = '泰瑞沙' then '奥希替尼'
when zk_brand_category = '凯美纳' then '埃克替尼'
when zk_brand_category = '阿美乐' then '阿美替尼'
when zk_brand_category = '艾弗沙' then '伏美替尼'
else 'Others_cmps_EGFR TKI Market' end
as cmps_des_c
,zk_brand_category as prod_des_c
from dwd.dwd_gnd_ext_dtp_zk_brand
where type = '品牌'
and ranked_by = 'value'
and zk_brand_category in ('泰瑞沙','凯美纳','阿美乐','艾弗沙')
)
,other_dtp_cmps(--其他的
select
A.YYYYMM
,A.market
,A.province_city
,A.sales_val - B.sales_val as sales_val
,A.sales_vol - B.sales_vol as sales_vol
,'other_EGFR TKI Market' marketmapping
,concat('Others_cmps_',A.market ) as cmps_des_c
,'Others_brand' as prod_des_c
from dtp_egfr_tki_market A
left join (
select
YYYYMM
,province_city
,sum(sales_val) as sales_val
,sum(sales_vol) as sales_vol
from dtp_brand group by 1,2
) B
ON A.YYYYMM = B.YYYYMM and A.province_city=B.province_city
)
--合并所有
,dtp_all as (
select * from dtp_brand
union all
select * from other_dtp_cmps
)
--计算ROC部分
,dtp_roc(
select
A.YYYYMM
,A.market
,'Other Low Tiers' province_city
,A.marketmapping
,A.cmps_des_c
,A.prod_des_c
,A.sales_val-B.sales_val as sales_val
,A.sales_vol-B.sales_vol as sales_vol
from dtp_all A
left join (
select
YYYYMM
,market
,marketmapping
,cmps_des_c
,prod_des_c
,sum(sales_val) sales_val
,sum(sales_vol) sales_vol
from dtp_all
where province_city<>'全国'
group by YYYYMM, market, marketmapping, cmps_des_c, prod_des_c
) B on A.YYYYMM=B.YYYYMM
and A.market=A.market
and A.marketmapping=B.marketmapping
and A.cmps_des_c=B.cmps_des_c
and A.prod_des_c=B.prod_des_c
where A.province_city = '全国'
union all
--非全国部分
select
YYYYMM
,market
,province_city
,marketmapping
,cmps_des_c
,prod_des_c
,sales_val
,sales_vol
from dtp_all
where province_city <> '全国'
)
,default_rate as (select cast(1.0/count( distinct province_city ) as decimal(38,15)) as d_rate from dtp_roc )
,geo as (select distinct geo_Key ,province_name from dm.dm_zk_retail_geo)
select
YYYYMM
,market
,geo.geo_Key
-- ,province_city
,marketmapping
,cmps_des_c
,prod_des_c
,sales_val
,sales_vol
,nvl(cast(sales_val as decimal(38,15)) / sum(sales_val) over(PARTITION BY YYYYMM,market,marketmapping,cmps_des_c,prod_des_c),default_rate.d_rate ) valRate
,nvl(cast(sales_vol as decimal(38,15)) / sum(sales_vol) over(PARTITION BY YYYYMM,market,marketmapping,cmps_des_c,prod_des_c),default_rate.d_rate ) volRate
from dtp_roc
left join default_rate --取默认比率
left join geo on geo.province_name = dtp_roc.province_city
-- COMMAND ----------
---new dtp pack data
/*
修改人chenwu
修改时间20250415
修改内容:新增市场时,可能出现 一个pack对应多个市场的情况所以直接用 tmp.tmp_zk_retail_dtp_market_corp 取pack和market的对应关系会导致数据重复
故使用dtp pack中的[靶向点]字段来判断是否是需要拆分的市场。
*/
create or replace temporary view new_dtp_pack_data
as
with dtp_pack_old (--原有逻辑
select
left(dtp.year, 4) year,
concat(left(dtp.year, 4), 'Q', cal.quarter) yq,
cast(dtp.`time` as int) yyyymm,
pack.iqvia_pack_code,
pack.corp_cod,
geo.geo_key,
cast(dtp.counting_unit as double) count_unit,
cast(dtp.average_price as double) average_price,
cast(dtp.sales_amount as double) sales_value,
cast(dtp.sales_volume as double) sales_unit,
cast(dtp.counting_units_obversion as double) counting_units_obversion,
cast(dtp.sales_volume * (pack.counting_unit / pack.unit) as double) counting_unit
,target_points market --使用dtp pack中的靶向点 字段来判断是否是需要拆分的市场
,pack.product_name brand_name
from
dwd.dwd_gnd_ext_retail_dtp_datasource dtp
left join (
select
DISTINCT brand_name,
iqvia_pack_code,
corp_cod,
zk_pack_des,
product_name,
counting_unit,
unit
from
tmp.tmp_zk_retail_dtp_market_corp
) pack on dtp.pack_des = pack.zk_pack_des
AND nvl(dtp.product_name, '') = nvl(pack.product_name, '')
and dtp.brand_name = pack.brand_name
left join dm.dm_zk_retail_geo geo on dtp.region = geo.province_name
left join ( select distinct yyyymm,quarter from dm.dm_td_calendar ) cal on cal.yyyymm = dtp.`time`
where dtp.target_points <> 'Anti-HER2 mBC'
)
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then a.geo_key
when B.YYYYMM IS NULL THEN C.geo_key ELSE B.geo_key end as geo_key
,A.count_unit
,A.average_price
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then 1
when B.YYYYMM IS NULL THEN C.valRate ELSE B.valRate end * A.sales_value as sales_value
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then 1
when B.YYYYMM IS NULL THEN C.volRate ELSE B.volRate end * A.sales_unit as sales_unit
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then 1
when B.YYYYMM IS NULL THEN C.volRate ELSE B.volRate end * A.counting_units_obversion as counting_units_obversion
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then 1
when B.YYYYMM IS NULL THEN C.volRate ELSE B.volRate end * A.counting_unit as counting_unit
-- ,a.market
,1 pack_flag
,Case when B.YYYYMM IS NULL and C.YYYYMM IS NULL then 1
when B.YYYYMM IS NULL THEN 2 else 1 end as brand_flag --如果 能够匹配上 brand的比例则 1,否则2
from dtp_pack_old A
left join tmp.tmp_zk_retail_brandTotal_dtp B
on A.brand_name = B.prod_des_c and A.yyyymm = B.yyyymm
left join tmp.tmp_zk_retail_brandTotal_dtp C
on B.YYYYMM IS NULL AND C.prod_des_c = 'Others_brand' and A.yyyymm = C.yyyymm
where a.market = 'EGFR TKI'
--not EGFR TKI Market
union all
select
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,A.geo_key
,A.count_unit
,A.average_price
,A.sales_value as sales_value
,A.sales_unit as sales_unit
,A.counting_units_obversion as counting_units_obversion
,A.counting_unit as counting_unit
-- ,a.market
,1 pack_flag
,2 brand_flag
from dtp_pack_old A
where a.market <> 'EGFR TKI'
--有省份数据的pack数据
UNION ALL
SELECT
A.year
,A.yq
,A.yyyymm
,A.iqvia_pack_code
,A.corp_cod
,A.geo_key
,A.count_unit
,A.average_price
,A.sales_value
,A.sales_unit
,A.counting_units_obversion
,A.counting_unit
,1 pack_flag
,1 brand_flag
FROM dtp_rawdata_Anti A
-- COMMAND ----------
insert overwrite table dws.dws_retail_dtp_sales
with pack_data as (
--- 获取 dtp 底表数据 并进行格式转换----
select * from new_dtp_pack_data
)
,AZ AS (
SELECT
B.YQ
,A.yyyymm
,A.CORP_COD
,'DTP_AZ_OTHERS' iqvia_pack_code
,A.sales_amount -AZ_SALE sales_value
FROM (select cast(top_corp.sales_quarter as int ) yyyymm
,top_corp.corp_name,top_corp.sales_amount *1000000.0 sales_amount ,pack.CORP_COD
from dwd.dwd_gnd_ext_retail_dtp_top_copd top_corp
left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total ) pack on replace(top_corp.corp_name,'-','')=pack.ZK_Corp_C
where pack.CORP_COD='A5Z') A
left join (SELECT YQ,yyyymm , CORP_COD ,SUM(sales_value) AZ_SALE FROM pack_data WHERE corp_cod ='A5Z' group by corp_cod,yyyymm,YQ) B ON A.CORP_COD=B.CORP_COD AND A.yyyymm=B.yyyymm
)
,total_dtp as (
--获取total 数据--
SELECT
dtp_name
,sales_quarter
,sales_amount*1000000.0 as sales_amount
FROM dwd.dwd_gnd_ext_retail_dtp_overall_market
)
select
year
,yq
,yyyymm
,iqvia_pack_code
,geo_key
,count_unit
,average_price
,sales_value
,sales_unit
,counting_units_obversion
,counting_unit
,pack_flag
,brand_flag
from pack_data
union all
select
year
,yq
,yyyymm
,'DTP_OTHERS' iqvia_pack_code
,'CHT' geo_key --赋给全国
,0 counting_unit
,0 average_price
,total_dtp.sales_amount - pack_data.sales_value sales_value
,0 sales_volume
,0 counting_units_obversion
,0
,0
,0
from (
--修改人chenwu修改时间20250415修改内容dtp_overall_market中没有geo信息故给全国去除geo_key的group by信息,并修改关联键
SELECT year, yq,yyyymm,SUM(sales_value) sales_value
FROM ( select year,yq,yyyymm,geo_key,sum(sales_value) sales_value from pack_data GROUP BY 1,2,3,4
UNION ALL
SELECT left(YYYYMM,4 ),YQ,YYYYMM,'CHT' ,sales_value FROM AZ )
GROUP BY yq,yyyymm ,year
) pack_data
left join total_dtp on pack_data.yyyymm=total_dtp.sales_quarter
UNION ALL
SELECT
left(yyyymm,4 ) ,YQ,yyyymm
,iqvia_pack_code
,'CHT' geo_key
,0 count_unit
,0 average_price
,sales_value
,0 sales_unit
,0 counting_units_obversion
,0 counting_unit
,0 pack_flag
,0 brand_flag
FROM AZ
-- COMMAND ----------
-- dtp 数据获取本同期数据--
insert overwrite table dm.dm_zk_retail_dtp_sales
select
year
,yq
,yyyymm
,iqvia_pack_code
,CASE WHEN geo_key ='CHT' then 'ROC' else geo_key end as AUDIT_COD
--- 全国写死为 ROC
-- ,'ROC' AUDIT_COD
,sum(sales_value) sales_value
,sum(sales_unit) sales_unit
,sum(counting_unit) counting_unit
,sum(sales_value_ly) sales_value_ly
,sum(sales_unit_ly) sales_unit_ly
,sum(counting_unit_ly) counting_unit_ly
,pack_flag
,brand_flag
from (
select
year
,yq
,yyyymm
,iqvia_pack_code
,geo_key
,sales_value
,sales_unit
,counting_unit counting_unit
,0 sales_value_ly
,0 sales_unit_ly
,0 counting_unit_ly
,brand_flag
,pack_flag
from dws.dws_retail_dtp_sales
union all
select
cast(year+1 as int ) year
,concat(cast(left(yq,4)+1 as int ),right(yq,2)) yq
,cast(yyyymm+100 as int ) yyyymm
,iqvia_pack_code
,geo_key
,0 sales_value
,0 sales_unit
,0 counting_unit
,sales_value sales_value_ly
,sales_unit sales_unit_ly
,counting_unit counting_unit_ly
,brand_flag
,pack_flag
from dws.dws_retail_dtp_sales
where yyyymm +100 <= (select max(yyyymm) from dws.dws_retail_dtp_sales)
)
group by 1,2,3,4,5,12,13
-- COMMAND ----------
-- dtp 部分生成dws
insert overwrite table dws.dws_zk_retail_dtp_market
select distinct t1.*
from tmp.tmp_zk_retail_dtp_market_corp t1
union
select
'' region_type
,'' higher_level_region
,'DTP_OTHER Market' market
,iqvia_pack_code
,'' iqvia_prod_code
,'' iqvia_notes
,'' new_pack_flag
,'' is_exists_chpa
,'' prescription_nature
,'' common_name
,'' dosage_form
,'' category_name
,'' product_name
,'' brand_name
,'' zk_corp_des
,'' zk_pack_des
,'' counting_unit_a
,'' app1_cod
,'' app1_des
,'' app1_des_c
,'' app2_cod
,'' app2_des
,'' app2_des_c
,'' app3_cod
,'' app3_des
,'' app3_des_c
,'' atc1_cod
,'' atc1_des
,'' atc1_des_c
,'' atc2_cod
,'' atc2_des
,'' atc2_des_c
,'' atc3_cod
,'' atc3_des
,'' atc3_des_c
,'' atc4_cod
,'' atc4_des
,'' atc4_des_c
,'' bio_desc
,'' cmps_cod
,'' cmps_des
,'' cmps_des_c
,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' ELSE '' END corp_cod
,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN 'ASTRAZENECA' ELSE '' END corp_des
,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' ELSE '' END corp_des_c
,'' edl_desc
,'' eth_otc_desc
,'' gene_orig_desc
,'' gqce_desc
,'' manu_cod
,'' manu_des
,'' manu_des_c
,'' mnfl_cod
,'' mnfl_des
,'' nrdl_desc
,'' pack_des
,'' stgh_des
,'' pack_lch
,'' paed_desc
,'' prod_des
,'' prod_des_c
,'' tcm_desc
,'' vbp_desc
,'' unit
,'' counting_unit
,'' dosage_unit
,null NRDL_ENTRY_DATE
,null
,'1' Market_Ratio
from dws.dws_retail_dtp_sales t1
where iqvia_pack_code LIKE '%OTHERS'
-- COMMAND ----------
-- dtp 部分生成 dm
------------获取对应class 及其他维度-------
insert overwrite table dm.dm_zk_retail_dtp_pack_property
select distinct
A.market ||'_'|| A.iqvia_pack_code MARKET_PACK_KEY
,A.iqvia_pack_code
,A.pack_des
,A.stgh_des
,A.pack_lch
,'' Family_cod
,'' Family_Name
,A.iqvia_prod_code PROD_COD
,A.prod_des
,A.prod_des_c
,A.cmps_cod
,A.cmps_des
,A.cmps_des_c
,A.atc1_cod
,A.atc2_cod
,A.atc3_cod
,A.atc4_cod
,A.app1_cod
,A.app2_cod
,A.app3_cod
,A.BIO_DESC
,A.gene_orig_desc
,A.eth_otc_desc
,A.nrdl_desc
,A.NRDL_ENTRY_DATE
,A.edl_desc
,A.TCM_DESC
,A.PAED_DESC
,A.GQCE_DESC
,A.VBP_DESC
,A.MANU_COD
,A.MANU_DES
,A.MANU_DES_C
,A.MNFL_COD
,A.MNFL_DES
,A.CORP_COD
,CASE WHEN A.corp_des LIKE '% GROUP%' THEN replace(A.corp_des,' GROUP','' ) ELSE A.corp_des END corp_des
,CORP_DES_C
,'' BrandType
,A.MARKET
,t5.KEY_COMPETITOR
,CASE WHEN CORP_COD ='A5Z' THEN 'Y' ELSE 'N' END IS_AZ
,'' AZ_MAIN
,case when dmt.TA is null then 'Others MKT' else 'AZ Related MKT' end as AZ_Related
,atc1_des
,atc1_des_c
,atc2_des
,atc2_des_c
,atc3_des
,atc3_des_c
,atc4_des
,atc4_des_c
,app1_des
,app1_des_c
,app2_des
,app2_des_c
,app3_des
,app3_des_c
,ifnull(t3.class,'Others') as Class
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt
from dws.dws_zk_retail_dtp_market A
left join dwd.dwd_gnd_ims_tblmarket_ta_map dmt on dmt.Market = A.Market
left join dwd.dwd_gnd_tblclass t3
on A.market = ifnull(t3.market , A.market )
and A.iqvia_pack_code = ifnull(if( t3.pack_code REGEXP '^[0-9]',right(concat('000000000000',t3.pack_code),12),t3.pack_code), A.iqvia_pack_code)
and A.iqvia_prod_code = ifnull(right(concat('000000000', t3.product_code),9 ) , A.iqvia_prod_code)
and A.cmps_cod = ifnull(right(concat('000000',t3.molecule_code ), 6) , A.cmps_cod)
and A.corp_cod = ifnull(t3.Corporation_code , A.corp_cod)
and A.manu_cod = ifnull(t3.Manufacturer_Code , A.manu_cod)
and A.ATC1_COD = ifnull(t3.ATC1_Code , A.ATC1_COD)
and A.ATC2_COD = ifnull(t3.ATC2_Code , A.ATC2_COD)
and A.ATC3_COD = ifnull(t3.ATC3_Code , A.ATC3_COD)
and A.ATC4_COD = ifnull(t3.ATC4_Code , A.ATC4_COD)
and A.APP1_COD = ifnull(t3.NFC1_Code , A.APP1_COD)
and A.APP2_COD = ifnull(t3.NFC2_Code , A.APP2_COD)
and A.APP3_COD = ifnull(t3.NFC3_Code , A.APP3_COD)
and A.STGH_DES = ifnull(t3.Strength , A.STGH_DES)
left join (select distinct MARKET,PACK_COD,KEY_COMPETITOR from dm.dm_ims_td_pack_property) t5
on A.market = t5.MARKET
and A.iqvia_pack_code = t5.PACK_COD
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## 其他
-- COMMAND ----------
------------------------将品牌数据进行处理,获取同期值(有挺多冗余,但懒得改了)--------------------------------------
insert overwrite table tmp.tmp_zk_retail_nataional_brand_union
select distinct
bq.brand_cat_type
,bq.TA
,bq.market market
,bq.zk_brand_category zk_brand
-- ,IQVIA_PROD_CODE
,coalesce(b.iqvia_pack_code,c.iqvia_pack_code,d.iqvia_pack_code ) iqvia_pack_code
,coalesce(b.corp_cod,c.corp_cod,d.corp_cod ) corp_cod
,t2.geo_key
,bq.province_city
,bq.YYYYMM
,bq.year
,bq.quarter
,bq.zk_common_name
,bq.zk_manu_des
,bq.rc_name_en
,bq.ytd
,bq.yq
,BQ.sales_val
,bq.sales_vol
,bq.price
,bq.num_dist_rate
,bq.weig_dist_rate
,bq.val_share
,bq.vol_share
,tq.sales_val sales_val_ly
,tq.sales_vol sales_vol_ly
,tq.price price_ly
,tq.num_dist_rate num_dist_rate_ly
,tq.weig_dist_rate weig_dist_rate_ly
,tq.val_share val_share_ly
,tq.vol_share vol_share_ly
,bq.key_brand_ytd
,bq.key_brand_rank_ytd
,bq.top_brand_ytd
,bq.top_brand_ms_ytd
,bq.top_brand_inc_ms_ytd
,bq.top_brand_gr_ytd
,bq.key_brand_qtd
,bq.key_brand_rank_qtd
,bq.top_brand_qtd
,bq.top_brand_ms_qtd
,bq.top_brand_inc_ms_qtd
,bq.top_brand_gr_qtd
,bq.ranked_by
,kpi.key_brand_ytd_ly
,kpi.key_brand_rank_ytd_ly
,kpi.top_brand_ytd_ly
,kpi.top_brand_ms_ytd_ly
,kpi.top_brand_inc_ms_ytd_ly
,kpi.top_brand_gr_ytd_ly
,kpi.key_brand_qtd_ly
,kpi.key_brand_rank_qtd_ly
,kpi.top_brand_qtd_ly
,kpi.top_brand_ms_qtd_ly
,kpi.top_brand_inc_ms_qtd_ly
,kpi.top_brand_gr_qtd_ly
from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all bq
left join dm.dm_zk_retail_geo t2 on bq.province_city = t2.province_city
left join (select distinct ZK_Prod_C,PROD_DES_C from dwd.dwd_inc_gnd_retail_b2c_label_total) t3 on zk_brand_category = t3.ZK_Prod_C
left join dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all tq
on bq.market =tq.market and bq.zk_brand_category =tq.zk_brand_category
and bq.YYYYMM = cast(tq.YYYYMM + 100 as int ) and bq.zk_common_name = tq.zk_common_name
and bq.zk_manu_des = tq.zk_manu_des and bq.province_city =tq.province_city
and bq.ranked_by = tq.ranked_by
and bq.brand_cat_type = tq.brand_cat_type
and tq.brand_cat_type ='品牌'
left join (
select distinct
left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) ytd
,market
,province_city
,key_brand_ytd key_brand_ytd_ly
,key_brand_rank_ytd key_brand_rank_ytd_ly
,top_brand_ytd top_brand_ytd_ly
,top_brand_ms_ytd top_brand_ms_ytd_ly
,top_brand_inc_ms_ytd top_brand_inc_ms_ytd_ly
,top_brand_gr_ytd top_brand_gr_ytd_ly
,key_brand_qtd key_brand_qtd_ly
,key_brand_rank_qtd key_brand_rank_qtd_ly
,top_brand_qtd top_brand_qtd_ly
,top_brand_ms_qtd top_brand_ms_qtd_ly
,top_brand_inc_ms_qtd top_brand_inc_ms_qtd_ly
,top_brand_gr_qtd top_brand_gr_qtd_ly
,ranked_by
from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all
where brand_cat_type='品类' and left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) <= (select max(ytd) from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all where brand_cat_type='品类')
) kpi on bq.market = kpi.market and bq.ytd=kpi.ytd and bq.province_city =kpi.province_city
and bq.ranked_by = tq.ranked_by
left join (select max(iqvia_pack_code) iqvia_pack_code,prod_des_c,corp_cod from dwd.dwd_gnd_ext_retail_pack_property
where iqvia_pack_code in (select DISTINCT iqvia_pack_code from dm.dm_zk_retail_sales)
group by prod_des_c,corp_cod) b on t3.PROD_DES_C=b.prod_des_c
left join (select max(iqvia_pack_code) iqvia_pack_code,prod_des_c,corp_cod from dwd.dwd_gnd_ext_retail_pack_property
where iqvia_pack_code in (select DISTINCT iqvia_pack_code from dm.dm_zk_retail_sales)
group by prod_des_c,corp_cod) c on bq.zk_brand_category=c.prod_des_c
left join (select max(iqvia_pack_code) iqvia_pack_code,product_name,corp_cod from dwd.dwd_gnd_ext_retail_pack_property
where iqvia_pack_code in (select DISTINCT iqvia_pack_code from dm.dm_zk_retail_sales)
group by product_name,corp_cod) d on bq.zk_brand_category=d.product_name
where bq.brand_cat_type ='品牌' and bq.zk_brand_category not in ('多达一','天依宁','氨氯地平阿托伐他汀钙片' ,'OTHERS')
-- COMMAND ----------
------------------------将RX市场数据合并并处理数据格式获取code --------------------------------------
---------关联 corp code
---------是否total 数据打标
---------格式处理
---------dm 使用 niad 数据
---------全国数据 地理编码 为 roc
insert overwrite table tmp.tmp_zk_retail_rx_ta_and_top_corp
select
distinct
case WHEN right(corporation,3) ='TTL' THEN 'ta_total' else 'ta_corp' end data_type
,case when replace(a.rx_type,' TTL','') ='NIAD' THEN 'DM'
when replace(a.rx_type,' TTL','') ='GI-Rx+OTC' then 'GI'
ELSE replace(a.rx_type,' TTL','') END ta
,nvl(b.CORP_COD ,CORP_COD) CORP_COD
,CASE WHEN right(corporation,3) ='TTL' THEN 'Y' else 'N' end TOTAL_FLAG
,a.quarter_flag YTD
,'ROC' GEO_KEY
,replace(a.top1_brand_val,'-','') top1_brand_val
,coalesce(cast(a.top1_brand_gr as double ),0 ) top1_brand_gr
,replace(a.top2_brand_val,'-','') top2_brand_val
,coalesce(cast(a.top2_brand_gr as double ),0 ) top2_brand_gr
,replace(a.top1_incremental_brand,'-','') top1_incremental_brand
,coalesce(cast(a.top1_incremental_gr as double ),0 ) top1_incremental_gr
,replace(a.top2_incremental_brand,'-','') top2_incremental_brand
,coalesce(cast(a.top2_incremental_gr as double ),0 ) top2_incremental_gr
from dwd.dwd_gnd_ext_retail_rx_ta_top_corp a
left join (select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C ) b
on a.corporation = b.ZK_Corp_C
WHERE rx_type <>'DM'
UNION ALL
select
distinct
case WHEN right(corporation,3) ='TTL' THEN 'ta_total' else 'ta_corp' end data_type
,replace(a.rx_type,' TTL','') ta
,nvl(b.CORP_COD ,CORP_COD) CORP_COD
,CASE WHEN right(corporation,3) ='TTL' THEN 'Y' else 'N' end TOTAL_FLAG
,a.quarter_flag YTD
,'ROC' GEO_KEY
,replace(a.top1_brand_val,'-','') top1_brand_val
,coalesce(cast(a.top1_brand_gr as double ) ,0 ) top1_brand_gr
,replace(a.top2_brand_val,'-','') top2_brand_val
,coalesce(cast(a.top2_brand_gr as double ) ,0 ) top2_brand_gr
,replace(a.top1_incremental_brand,'-','') top1_incremental_brand
,coalesce(cast(a.top1_incremental_gr as double ),0 ) top1_incremental_gr
,replace(a.top2_incremental_brand,'-','') top2_incremental_brand
,coalesce(cast(a.top2_incremental_gr as double ) ,0 ) top2_incremental_gr
from dwd.dwd_gnd_ext_retail_rx_ta_top_corp a
left join (select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C ) b
on a.corporation = b.ZK_Corp_C
WHERE rx_type ='NIAD'
union all
select distinct
'top_corp' data_type
,NULL ta
,nvl(b.CORP_COD,a.corporation) CORP_COD
,'Y' TOTAL_FLAG
,a.quarter_flag
,'ROC' GEO_KEY
,replace(a.top1_brand_val,'-','') top1_brand_val
,coalesce(cast(a.top1_brand_gr as double ),0 ) top1_brand_gr
,replace(a.top2_brand_val,'-','') top2_brand_val
,coalesce(cast(a.top2_brand_gr as double ),0 ) top2_brand_gr
,replace(a.top1_incremental_brand,'-','') top1_incremental_brand
,coalesce(cast(a.top1_incremental_gr as double ) ,0 ) top1_incremental_gr
,replace(a.top2_incremental_brand,'-','') top2_incremental_brand
,coalesce(cast(a.top2_incremental_gr as double ) ,0 ) top2_incremental_gr
from dwd.dwd_gnd_ext_retail_rx_top_corp a
left join (select ZK_Corp,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp ) b
on a.corporation = b.ZK_Corp
-- COMMAND ----------
---------------------------------------将pack表的price 数据进行处理----------------------------------------
---------关联 corp code
---------获取geo_key 后续的audit key
---------获取ta 值
---------获取pack 文件中计算price 的所有指标 及加权铺货率、数字铺货率
insert overwrite table tmp.tmp_zk_retail_price
with a as (
select
df.brand_flag,df.zk_product_id,YYYYMM,pack.iqvia_pack_code,corp.corp_cod,zk_region
,sum(sales_value) sales_value
,sum(sales_unit) sales_unit
,sum(weighted_spread_rate) weighted_spread_rate
,sum(digital_spread_rate) digital_spread_rate
,sum(sales_value_ly) sales_value_ly
,sum(sales_unit_ly) sales_unit_ly
,sum(weighted_spread_rate_ly) weighted_spread_rate_ly
,sum(digital_spread_rate_ly) digital_spread_rate_ly
from (
select YYYYMM,zk_product_id,zk_region
,sales_value,sales_unit,weighted_spread_rate,digital_spread_rate
,0 sales_value_ly
,0 sales_unit_ly
,0 weighted_spread_rate_ly
,0 digital_spread_rate_ly
,brand_flag
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
union all
select cast( YYYYMM + 100 as int ),zk_product_id,zk_region
,0 sales_value
,0 sales_unit
,0 weighted_spread_rate
,0 digital_spread_rate
,sales_value sales_value_ly
,sales_unit sales_unit_ly
,weighted_spread_rate weighted_spread_rate_ly
,digital_spread_rate digital_spread_rate_ly
,brand_flag
from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all
where YYYYMM + 100 <= (select max(yyyymm) FROM dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all)
) df
left join (select product_id,iqvia_pack_code from dwd.dwd_gnd_ext_retail_pack_property GROUP BY product_id,iqvia_pack_code) pack on pack.product_id = df.zk_product_id
left join tmp.tmp_zk_retail_pack_property_corp corp on pack.iqvia_pack_code = corp.iqvia_pack_code
group by YYYYMM,pack.iqvia_pack_code,corp.corp_cod,zk_region,df.brand_flag,df.zk_product_id
)
select distinct YYYYMM,zk_product_id,d.ta,c.geo_key,a.iqvia_pack_code,b.iqvia_prod_code,b.prod_des_c,corp_cod,zk_region
,sales_value,sales_value_ly,sales_unit,sales_unit_ly,weighted_spread_rate,weighted_spread_rate_ly,digital_spread_rate,digital_spread_rate_ly
from a
left join (select distinct iqvia_pack_code ,prod_des_c,prod_des,iqvia_prod_code from dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
left join (select distinct geo_key,province_city from dm.dm_zk_retail_geo) c on a.zk_region = c.province_city
left join (select distinct iqvia_pack_code,ta from dm.dm_zk_retail_market_property ) d on a.iqvia_pack_code=d.iqvia_pack_code
where a.iqvia_pack_code in (select distinct iqvia_pack_code from dm.dm_zk_retail_sales)
-- COMMAND ----------
-- MAGIC %md
-- MAGIC ## 直取
-- COMMAND ----------
/*
修改时间20250311
修改人chenwu
修改内容:
sales_quarter 由原来的 yyyyQn 转换成 yyyymm
*/
---------------------------------------将直取部分数据处理成KPI形式-----------------------------------------
insert overwrite table dws.dws_zk_retail_sales_kpi
with top_corp_total as (
----------------------处理top_corp 大数--------------------
---------关联 corp code 特殊dwd_inc_gnd_retail_b2c_label_total 这个表 az 公司有两个code 需要取A5Z 那个
---------是否total 数据打标
---------格式处理
---------dm 使用 niad 数据
---------全国数据 地理编码 为 roc
select
a.corp_desc,
'top_corp' data_type
,b.CORP_COD
,'Y' TOTAL_FLAG
,a.sales_quarter
,cast(a.sales_quarter as int) yyyymm
,'ROC' geo_key
,a.sales_amount*1000000 sales_amount
,c.sales_amount*1000000 sales_amount_ly
,a.rank1
,null ta
FROM dwd.dwd_gnd_ext_retail_nataional_top_corp a
left join (select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C ) b
on a.corp_desc= b.ZK_Corp_C
left join dwd.dwd_gnd_ext_retail_nataional_top_corp c
on a.corp_desc= c.corp_desc and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) and
cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100
where a.rank1 is not null
unioN all
select
a.corp_desc,
'top_ta_corp' data_type
,B.CORP_COD --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code
,case when A.corp_name is null then 'Y' ELSE 'N' END TOTAL_FLAG
,a.sales_quarter
,cast(a.sales_quarter as int) yyyymm
,'ROC' geo_key
,a.sales_amount*1000000 sales_amount
,c.sales_amount*1000000 sales_amount_ly
,a.rank1
,CASE WHEN trim(a.source_name) ='GI-Rx+OTC' THEN 'GI' ELSE trim(a.source_name) END ta
FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a
left join (select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C ) b
on a.corp_desc= b.ZK_Corp_C
left join dwd.dwd_gnd_ext_retail_nataional_ta_top_corp c
on a.corp_desc= c.corp_desc and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) and
cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100
and a.source_name =c.source_name
WHERE trim(a.source_name) <>'DM'
UNION ALL
select
CASE WHEN a.corp_desc='NIAD' THEN 'DM' ELSE a.corp_desc END corp_desc,
'top_ta_corp' data_type
,B.CORP_COD --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code
,case when A.corp_name is null then 'Y' ELSE 'N' END TOTAL_FLAG
,a.sales_quarter
,cast(a.sales_quarter as int) yyyymm
,'ROC' geo_key
,a.sales_amount*1000000 sales_amount
,c.sales_amount*1000000 sales_amount_ly
,a.rank1
,'DM' ta
FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a
left join (select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C ) b
on a.corp_desc= b.ZK_Corp_C
left join dwd.dwd_gnd_ext_retail_nataional_ta_top_corp c
on a.corp_desc= c.corp_desc and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) and
cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100
and a.source_name =c.source_name
WHERE trim(a.source_name) ='NIAD'
)
------- tmp_zk_retail_nataional_brand_union品牌数据报表 的数据ranked by这个字段 枚举值为 volume value ,这会导致部分指标重复,取数时任意其一就行,具体如代码取数情况
SELECT distinct
val.iqvia_pack_code pack_code
,val.corp_cod corp_cod
,val.YYYYMM
,null ytd
,val.geo_key
,'share' KPI_name
,val.val_share kpi_val
,val.val_share_ly kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,val.vol_share kpi_vol
,val.vol_share_ly kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_nataional_brand_union val
where val.ranked_by ='volume'
union all
SELECT distinct
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'key_brand_ytd'
,NULL
,NULL
,val.key_brand_ytd
,val.key_brand_ytd_ly
,null
,null
,vol.key_brand_ytd
,val.key_brand_ytd_ly
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
UNION all
SELECT distinct
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'key_brand_rank_ytd'
,val.key_brand_rank_ytd
,val.key_brand_rank_ytd_ly
,NULL
,NULL
,vol.key_brand_rank_ytd
,vol.key_brand_rank_ytd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'top_brand_ytd'
,NULL
,NULL
,val.top_brand_ytd
,val.top_brand_ytd_ly
,null
,null
,vol.top_brand_ytd
,val.top_brand_ytd_ly
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
-- GROUP BY val.market,val.ytd,val.geo_key,val.top_brand_ytd,val.top_brand_ytd_ly,vol.top_brand_ytd,vol.top_brand_ytd_ly,val.ta
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'top_brand_ms_ytd'
,val.top_brand_ms_ytd
,val.top_brand_ms_ytd_ly
,NULL
,NULL
,vol.top_brand_ms_ytd
,vol.top_brand_ms_ytd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'top_brand_inc_ms_ytd'
,val.top_brand_inc_ms_ytd
,val.top_brand_inc_ms_ytd_ly
,NULL
,NULL
,vol.top_brand_inc_ms_ytd
,vol.top_brand_inc_ms_ytd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,null
,val.ytd
,val.geo_key
,'top_brand_gr_ytd'
,val.top_brand_gr_ytd
,val.top_brand_gr_ytd_ly
,NULL
,NULL
,vol.top_brand_gr_ytd
,vol.top_brand_gr_ytd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.ytd = vol.ytd
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value' and val.ytd is not null
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'key_brand_qtd'
,NULL
,NULL
,val.key_brand_qtd
,val.key_brand_qtd_ly
,null
,null
,vol.key_brand_qtd
,val.key_brand_qtd_ly
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'key_brand_rank_qtd'
,val.key_brand_rank_qtd
,val.key_brand_rank_qtd_ly
,NULL
,NULL
,vol.key_brand_rank_qtd
,vol.key_brand_rank_qtd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'top_brand_qtd'
,NULL
,NULL
,val.top_brand_qtd
,val.top_brand_qtd_ly
,null
,null
,vol.top_brand_qtd
,val.top_brand_qtd_ly
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'top_brand_ms_qtd'
,val.top_brand_ms_qtd
,val.top_brand_ms_qtd_ly
,NULL
,NULL
,vol.top_brand_ms_qtd
,vol.top_brand_ms_qtd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'top_brand_inc_ms_qtd'
,val.top_brand_inc_ms_qtd
,val.top_brand_inc_ms_qtd_ly
,NULL
,NULL
,vol.top_brand_inc_ms_qtd
,vol.top_brand_inc_ms_qtd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
union all
SELECT distinct
-- MAX(val.iqvia_pack_code) pack_code
-- ,MAX(val.corp_cod ) corp_cod
'' pack_code
,'' corp_cod
,val.YYYYMM
,null
,val.geo_key
,'top_brand_gr_qtd'
,val.top_brand_gr_qtd
,val.top_brand_gr_qtd_ly
,NULL
,NULL
,vol.top_brand_gr_qtd
,vol.top_brand_gr_qtd_ly
,NULL
,NULL
,'N' TOTAL_FLAG
,val.ta
from tmp.tmp_zk_retail_nataional_brand_union val
left join tmp.tmp_zk_retail_nataional_brand_union vol
on val.market = vol.market
and val.YYYYMM = vol.YYYYMM
and val.geo_key = vol.geo_key
and vol.ranked_by ='volume'
where val.ranked_by ='value'
-----------------------------------处理 top 数据
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top1_brand_val' kpi_name
,null kpi_val
,NULL kpi_val_ly
,top1_brand_val str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top1_brand_gr' kpi_name
,top1_brand_gr kpi_val
,NULL kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top2_brand_val' kpi_name
,null kpi_val
,NULL kpi_val_ly
,top2_brand_val str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top2_brand_gr' kpi_name
,top2_brand_gr kpi_val
,NULL kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top1_incremental_brand' kpi_name
,null kpi_val
,NULL kpi_val_ly
,top1_incremental_brand str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top1_incremental_gr' kpi_name
,top1_incremental_gr kpi_val
,NULL kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top2_incremental_brand' kpi_name
,null kpi_val
,NULL kpi_val_ly
,top2_incremental_brand str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
union all
SELECT distinct
'' pack_code
,corp_cod
,NULL YYYYMM
,ytd
,geo_key
,'top2_incremental_gr' kpi_name
,top2_incremental_gr kpi_val
,NULL kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from tmp.tmp_zk_retail_rx_ta_and_top_corp
---------------处理增量数据
union all
select distinct
'' pack_code
,bq.type_name corp_cod
,cast(bq.sales_quarter as int) yyyymm
,null ytd
,'ROC' geo_key
,'corp_type_sales_amount' kpi_name
,bq.sales_amount * 1000000 kpi_val
,tq.sales_amount * 1000000 kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'Y' TOTAL_FLAG
,null ta
from dwd.dwd_gnd_ext_retail_rx_market bq
left join dwd.dwd_gnd_ext_retail_rx_market tq on bq.type_name=tq.type_name
and cast(bq.sales_quarter as int)= cast(tq.sales_quarter+100 as int)
union all
---- 处理top corp 及 rank 数据
select DISTINCT
'' pack_code
,corp_cod
,yyyymm
,null ytd
,geo_key
,'top_corp_sales_amount' kpi_name
,sales_amount kpi_val
,sales_amount_ly kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from top_corp_total
union all
select distinct
'' pack_code
,corp_cod
,yyyymm
,null ytd
,geo_key
,'top_corp_rank' kpi_name
,rank1 kpi_val
,null kpi_val_ly
,NULL str_kpi_val
,NULL str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
,ta
from top_corp_total
where lower(rank1) <>'total'
-- COMMAND ----------
---将dtp 数据转换成 kpi 格式---
----品牌数据 初始
---- 关联公司code
-----处理pack code
-----处理格式
-----total flag 打标
----------------------------------------------------dtp 所有数据的ta 均为 ONCO-----------------------------------------------------------------------------
insert overwrite table dws.dws_zk_retail_dtp_sales_kpi
with tmp as (
-------------获取dtp top brand 的 本同期数据--------------------------
select
cast(top_corp.sales_quarter as int ) yyyymm
,top_corp.sales_quarter
,replace(top_corp.rank1,'-','') rank1
,replace(top_corp.corp_name,'-','') crp_name
,top_corp.brand_name
,case when top_corp.brand_name ='Others' then 'Others' else zk.IQVIA_PROD_CODE end iqvia_prod_code
,case when top_corp.brand_name ='Others' then 'Others' else brand.iqvia_pack_code end iqvia_pack_code
,zk.CORP_COD
-- ,top_corp.source_name
,top_corp.sales_amount*1000000 sales_amount
,tq.sales_amount*1000000 sales_amount_ly
,'Y' TOTAL_FLAG
from dwd.dwd_gnd_ext_retail_dtp_top_brand top_corp
left join dwd.dwd_gnd_ext_retail_dtp_top_brand tq
on cast(top_corp.sales_quarter as int ) = cast(tq.sales_quarter+100 as int ) and nvl(top_corp.corp_name,'') = nvl(tq.corp_name,'' )
and tq.rank1 =top_corp.rank1 and nvl(top_corp.brand_name,'' ) =nvl(tq.brand_name,'' )
left join (select distinct ZK_Prod_C,IQVIA_PROD_CODE,ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total ) zk
on top_corp.brand_name = zk.ZK_Prod_C AND replace(top_corp.corp_name,'-','')=zk.ZK_Corp_C
left join (select PROD_COD IQVIA_PROD_CODE,max(PACK_COD) iqvia_pack_code,CORP_COD from dm.dm_ims_td_pack_property group by PROD_COD,CORP_COD) brand on zk.IQVIA_PROD_CODE = brand.iqvia_prod_code AND replace(zk.CORP_COD,'-','')=brand.corp_cod
UNION all
-------获取 dtp top corp 得 本同期数据------------
select
cast(top_corp.sales_quarter as int ) yyyymm
,top_corp.sales_quarter
,replace(top_corp.rank1,'-','') rank1
,replace(top_corp.corp_name,'-','') corp_name
,'' brand_name
,''iqvia_prod_code
,'' iqvia_pack_code
,case when replace(top_corp.corp_name,'-','') ='Others' then '' else pack.corp_cod end corp_cod
-- ,top_corp.source_name
,top_corp.sales_amount*1000000 sales_amount
,tq.sales_amount*1000000 sales_amount_ly
-- ,case when replace(top_corp.rank1,'-','') ='' then 'Y' ELSE 'N' END TOTAL_FLAG
,'Y' TOTAL_FLAG
from dwd.dwd_gnd_ext_retail_dtp_top_copd top_corp
left join dwd.dwd_gnd_ext_retail_dtp_top_copd tq
on cast(top_corp.sales_quarter as int ) = cast(tq.sales_quarter+100 as int ) and nvl(top_corp.corp_name,'') = nvl(tq.corp_name,'' )
and tq.rank1 =top_corp.rank1
-- left join (select zk_corp_des,max(corp_cod) corp_cod from dwd.dwd_inc_gnd_retail_b2c_label_total group by zk_corp_des) pack
left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total ) pack
on replace(top_corp.corp_name,'-','')=pack.ZK_Corp_C
)
select distinct
iqvia_prod_code pack_code
,corp_cod
,'ONCO' ta
,yyyymm
,null ytd
,'ROC' geo_key
,'top_corp_rank' kpi_name
,cast(rank1 as double) kpi_val
,null kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
, TOTAL_FLAG
-- ,null ta
from tmp where rank1 !=''
union all
select distinct
iqvia_prod_code pack_code
,corp_cod
,'ONCO' ta
,yyyymm
,null ytd
,'ROC' geo_key
,'top_corp_sales_amount' kpi_name
,sales_amount kpi_val
,sales_amount_ly kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,TOTAL_FLAG
-- ,null ta
from tmp
-- COMMAND ----------
----------------------------------7月30日新增-------------------------------
-------------------------retail 自有部分数据处理成kpi 形式--------------------
insert overwrite table dws.dws_zk_retail_sales_own_kpi
--------在 retail 拆分好的结果表里获取pack 粒度的 price 分子
select
a.iqvia_pack_code pack_code
,a.corp_cod
,YYYYMM
,null ytd
,a.AUDIT_COD geo_key
,'pack_price_fz' KPI_name
,sum(sales_value) kpi_val
,sum(sales_value_ly) kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END ta
,a.brand_flag
,a.pack_flag
from dm.dm_zk_retail_sales a
GROUP BY a.iqvia_pack_code ,a.corp_cod,YYYYMM ,a.AUDIT_COD
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END
,a.brand_flag
,a.pack_flag
having ta is not null and sum(sales_value)>0
union all
--------在 retail 拆分好的结果表里获取pack 粒度的 price 分母
select
a.iqvia_pack_code pack_code
,a.corp_cod
,YYYYMM
,null ytd
,a.AUDIT_COD geo_key
,'pack_price_fm' KPI_name
,sum(a.sales_unit) kpi_val
,sum(a.sales_unit_ly) kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END ta
,a.brand_flag
,a.pack_flag
from dm.dm_zk_retail_sales a
GROUP BY a.iqvia_pack_code ,a.corp_cod,YYYYMM ,a.AUDIT_COD
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END
,a.brand_flag
,a.pack_flag
having ta is not null and sum(sales_unit)>0
union all
--------在 retail 拆分好的结果表里获取pack 粒度的 by counting unit 的 price 分母
select
a.iqvia_pack_code pack_code
,a.corp_cod
,YYYYMM
,null ytd
,a.AUDIT_COD geo_key
,'pack_price_by_counting_unit_fm' KPI_name
,sum(a.counting_unit) kpi_val
,sum(a.counting_unit_ly) kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END ta
,a.brand_flag
,a.pack_flag
from dm.dm_zk_retail_sales a
GROUP BY a.iqvia_pack_code ,a.corp_cod,YYYYMM ,a.AUDIT_COD
,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE'
WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI'
WHEN A.source[0] = 'NIAD' THEN 'DM'
WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV'
WHEN A.source[0] ='RD Market' THEN 'RD'
END
,a.brand_flag
,a.pack_flag
having ta is not null and sum(counting_unit)>0
union all
--------在 retail pack 粒度的文件中获取加权铺货率
select distinct
iqvia_pack_code pack_code
,corp_cod
,YYYYMM
,null ytd
,geo_key
,'weighted_spread_rate' KPI_name
,weighted_spread_rate kpi_val
,weighted_spread_rate_ly kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_price a
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on a.prod_des_c=prod.prod_des_c
union all
--------在 retail pack 粒度的文件中获取数字铺货率
select distinct
iqvia_pack_code
,corp_cod
,YYYYMM
,null ytd
,geo_key
,'digital_spread_rate' KPI_name
,digital_spread_rate kpi_val
,digital_spread_rate_ly kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_price a
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on a.prod_des_c=prod.prod_des_c
union all
--------在 retail pack 粒度的文件中获取计算pack 粒度的price
select distinct
iqvia_pack_code
,corp_cod
,YYYYMM
,null ytd
,geo_key
,'pack_price' KPI_name
,round(sum(sales_value)/sum(sales_unit),3) kpi_val
,round(sum(sales_value_ly)/sum(sales_unit_ly),3) kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_price a
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on a.prod_des_c=prod.prod_des_c
group by corp_cod,YYYYMM,geo_key,ta,iqvia_pack_code
,case when prod.prod_des_c is null THEN 2 else 1 END
,case when geo_key ='CHT' THEN 2 else 1 END
union all
--------在 retail pack 粒度的文件中获取计算pack 粒度的price by counting unit
select distinct
a.iqvia_pack_code
,a.corp_cod
,YYYYMM
,null ytd
,geo_key
,'pack_price_by_counting_unit' KPI_name
,round(sum(sales_value)/sum(sales_unit*(b.counting_unit/coalesce(b.unit,1 ))),3) kpi_val
,round(sum(sales_value_ly)/sum(sales_unit_ly*(b.counting_unit/coalesce(b.unit,1 ))),3) kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_price a
left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id =b.product_id
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on a.prod_des_c=prod.prod_des_c
group by a.corp_cod,YYYYMM,geo_key,ta,a.iqvia_pack_code
,case when prod.prod_des_c is null THEN 2 else 1 END
,case when geo_key ='CHT' THEN 2 else 1 END
union all
--------在 retail brand 品牌文件中获取数字铺货率 并对re 特殊处理re相关品牌优先取inhaled market 对应 pack
SELECT distinct
nvl(B.iqvia_pack_code,val.iqvia_pack_code ) pack_code
,val.corp_cod corp_cod
,val.YYYYMM YYYYMM
,null ytd
,val.geo_key geo_key
,'num_dist_rate' KPI_name
,val.num_dist_rate kpi_val
,val.num_dist_rate_ly kpi_val_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_nataional_brand_union val
left join (select distinct iqvia_pack_code ,prod_des_c from dm.dm_zk_retail_pack_property ) c on val.iqvia_pack_code=c.iqvia_pack_code
left join (select prod_des_c,max(iqvia_pack_code) iqvia_pack_code from dm.dm_zk_retail_pack_property
-- where market='Inhaled Extended Market by Brand' group by 1) b on c.prod_des_c =b.prod_des_c
where market='Inhaled Extended Market' group by 1) b on c.prod_des_c =b.prod_des_c
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on c.prod_des_c=prod.prod_des_c
where val.ranked_by ='volume'
union all
--------在 retail brand 品牌文件中获取加权铺货率 并对re 特殊处理re相关品牌优先取inhaled market 对应 pack
SELECT distinct
nvl(B.iqvia_pack_code,val.iqvia_pack_code ) pack_code
,val.corp_cod corp_cod
,val.YYYYMM YYYYMM
,null ytd
,val.geo_key geo_key
,'weig_dist_rate'
,val.weig_dist_rate
,val.weig_dist_rate_ly
,null str_kpi_val
,null str_kpi_val_ly
,null kpi_vol
,null kpi_vol_ly
,null str_kpi_vol
,null str_kpi_vol_ly
,'N' TOTAL_FLAG
,ta ta
,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag
,case when geo_key ='CHT' THEN 2 else 1 END pack_flag
from tmp.tmp_zk_retail_nataional_brand_union val
left join (select distinct iqvia_pack_code ,prod_des_c from dm.dm_zk_retail_pack_property ) c on val.iqvia_pack_code=c.iqvia_pack_code
-- left join (select prod_des_c,max(iqvia_pack_code) iqvia_pack_code from dm.dm_zk_retail_pack_property where market='Inhaled Extended Market by Brand' group by 1) b on c.prod_des_c =b.prod_des_c
left join (select prod_des_c,max(iqvia_pack_code) iqvia_pack_code from dm.dm_zk_retail_pack_property where market='Inhaled Extended Market' group by 1) b
on c.prod_des_c =b.prod_des_c
left join (SELECT DISTINCT b.prod_des_c FROM TMP.tmp_zk_retail_nataional_brand_union A
LEFT JOIN (SELECT DISTINCT iqvia_pack_code,prod_des_c
FROM dm.dm_zk_retail_pack_property) b on a.iqvia_pack_code=b.iqvia_pack_code
) prod on c.prod_des_c=prod.prod_des_c
where val.ranked_by ='volume'
-- COMMAND ----------
---------------将所有渠道kpi 数据汇总到dm --------------
-----KPI 表汇总
-----ytd 为是否ytd flag
-----geo 将cht(全国) 改成 ROC
-----DTP FLAG O 非dtp 1 dtp 数据
insert overwrite table dm.dm_zk_retail_sales_kpi
(pack_code
,corp_cod
,ta
,YYYYMM
,ytd
,geo_key
,KPI_name
,kpi_val
,kpi_val_ly
,str_kpi_val
,str_kpi_val_ly
,kpi_vol
,kpi_vol_ly
,str_kpi_vol
,str_kpi_vol_ly
,TOTAL_FLAG
,data_source
,dtp_flag
,brand_flag
,pack_flag
)
--------retail 渠道 kpi
select
nvl(pack_code,'') pack_code
,nvl(corp_cod,'') corp_cod
,nvl(ta,'') ta
,nvl(YYYYMM,cast( if(length(ytd)=7 AND substr(ytd,6,1)<>'Q',concat('20',substr(ytd,4,2))*100 + right(ytd,2) ,concat('20',substr(ytd,4,2))*100 + right(ytd,1) * 3 ) as int )) YYYYMM
,if(ytd IS NOT NULL ,'Y' ,'N') YTD
,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END geo_key
,nvl(kpi_name,'') as kpi_name
,nvl(cast(kpi_val as double),0) kpi_val
,nvl(cast(kpi_val_ly as double),0) kpi_val_ly
,nvl(str_kpi_val,'')
,nvl(str_kpi_val_ly,'')
,nvl(cast(kpi_vol as double),0) kpi_vol
,nvl(cast(kpi_vol_ly as double),0) kpi_vol_ly
,nvl(str_kpi_vol,'')
,nvl(str_kpi_vol_ly,'')
,nvl(TOTAL_FLAG,'')
,'Retail(Quarterly)' data_source
,'0' dtp_flag
,0
, 0
from dws.dws_zk_retail_sales_kpi
WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC')
---------------dtp 的kpi
union all
select
nvl(pack_code,'') pack_code
,nvl(corp_cod,'') corp_cod
,nvl(ta,'') ta
,nvl(YYYYMM,cast( if(length(ytd)=7,concat('20',substr(ytd,4,2))*100 + right(ytd,1) * 3 ,substr(ytd,4,4) * 100 + right(ytd,1) * 3 ) as int )) YYYYMM
,if(ytd IS NOT NULL ,'Y' ,'N') YTD
,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END
,nvl(kpi_name,'')
,nvl(kpi_val,0)
,nvl(kpi_val_ly,0)
,nvl(str_kpi_val,'')
,nvl(str_kpi_val_ly,'')
,nvl(kpi_vol,0)
,nvl(kpi_vol_ly,0)
,nvl(str_kpi_vol,'')
,nvl(str_kpi_vol_ly,'')
,nvl(TOTAL_FLAG,'')
,'Retail(Quarterly)' data_source
,'1' dtp_flag
,0
,0
from dws.dws_zk_retail_dtp_sales_kpi
WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC')
--拼接retail 自有部分kpi
union all
select
nvl(pack_code,'') pack_code
,nvl(corp_cod,'') corp_cod
,nvl(ta,'') ta
,nvl(YYYYMM,cast( if(length(ytd)=7,concat('20',substr(ytd,4,2))*100 + right(ytd,1) * 3 ,substr(ytd,4,4) * 100 + right(ytd,1) * 3 ) as int )) YYYYMM
,if(ytd IS NOT NULL ,'Y' ,'N') YTD
,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END geo_key
,nvl(kpi_name,'')
,nvl(cast(kpi_val as double),0) kpi_val
,nvl(cast(kpi_val_ly as double),0) kpi_val_ly
,nvl(str_kpi_val,'')
,nvl(str_kpi_val_ly,'')
,nvl(cast(kpi_vol as double),0) kpi_vol
,nvl(cast(kpi_vol_ly as double),0) kpi_vol_ly
,nvl(str_kpi_vol,'')
,nvl(str_kpi_vol_ly,'')
,nvl(TOTAL_FLAG,'')
,'Retail(Quarterly)' data_source
,'0' dtp_flag
,nvl(brand_flag,0)
,nvl(pack_flag,0)
from dws.dws_zk_retail_sales_own_kpi
WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC')
-- COMMAND ----------
/*
修改人chenwu
修改时间20250319
修改内容如果tblbrandratio 里面的没有对应的 ratio 则用market_ratio兜底而不是直接1
*/
------------------------生产retail 的ratio 表该表系数用于计算pdot--------
insert overwrite table dm.dm_zk_retail_market_ratio
select distinct
a.market || a.iqvia_pack_code as market_pack_key
,a.iqvia_pack_code as pack_cod
,a.prod_des as prod_des
,a.cmps_des as cmps_des
,a.corp_cod as corp_cod
,a.market as market
,a.extend_market_ratio as value_market_ratio
,a.extend_market_ratio as unit_market_ratio
,coalesce(case when t4.ratio is null then t5.ratio*coalesce(a.extend_market_ratio ,1 )
else t4.ratio*coalesce(a.extend_market_ratio ,1 )
end ,a.extend_market_ratio ) countingunit_market_ratio --20250319如果tblbrandratio 里面的没有对应的 ratio 则用market_ratio兜底而不是直接1
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt
from tmp.tmp_dm_zk_retail_pack_property a
left join (--COUNTINGUNIT
select distinct
market,
cmps_cod,
cmps_des,
pack_cod,
pack_des,
level,
type,
cast(ratio as float) as ratio,
cast(starttime as int) starttime,
cast (endtime as int) endtime
from dwd.dwd_gnd_ims_tblbrandratio
where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK'
)t4 on a.market=t4.market
and if( a.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',a.iqvia_pack_code),12),a.iqvia_pack_code)
= if( t4.PACK_COD REGEXP '^[0-9]',right(concat('000000000000',t4.PACK_COD),12),t4.PACK_COD)
--right(concat('0000000',a.iqvia_pack_code ), 7) = right(concat('0000000',t4.PACK_COD ),7 )
left join (--COUNTINGUNIT
select distinct
market,
cmps_cod,
cmps_des,
pack_cod,
pack_des,
level,
type,
cast(ratio as float) as ratio,
cast(starttime as int) starttime,
cast (endtime as int) endtime
from dwd.dwd_gnd_ims_tblbrandratio
where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE'
) t5 on a.market=t5.market
and right(concat('000000',a.CMPS_COD ),6 )= right(concat('000000',t5.CMPS_COD ),6 )
union all
select distinct
a.market || a.iqvia_pack_code as market_pack_key
,a.iqvia_pack_code as pack_cod
,a.prod_des as prod_des
,a.cmps_des as cmps_des
,a.corp_cod as corp_cod
,a.market as market
,a.Market_Ratio as value_market_ratio
,a.Market_Ratio as unit_market_ratio
,coalesce(case when t4.ratio is null then t5.ratio*coalesce(a.Market_Ratio ,1 )
else t4.ratio*coalesce(a.Market_Ratio ,1 )
end ,a.Market_Ratio ) countingunit_market_ratio --20250319如果tblbrandratio 里面的没有对应的 ratio 则用market_ratio兜底而不是直接1
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt
,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt
from dws.dws_zk_retail_dtp_market a
left join (--COUNTINGUNIT
select distinct
market,
cmps_cod,
cmps_des,
pack_cod,
pack_des,
level,
type,
cast(ratio as float) as ratio,
cast(starttime as int) starttime,
cast (endtime as int) endtime
from dwd.dwd_gnd_ims_tblbrandratio
where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK'
)t4 on a.market=t4.market
-- and right(concat('0000000',a.iqvia_pack_code ), 7) = right(concat('0000000',t4.PACK_COD ),7 )
and if( a.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',a.iqvia_pack_code),12),a.iqvia_pack_code)
= if( t4.PACK_COD REGEXP '^[0-9]',right(concat('000000000000',t4.PACK_COD),12),t4.PACK_COD)
left join (--COUNTINGUNIT
select distinct
market,
cmps_cod,
cmps_des,
pack_cod,
pack_des,
level,
type,
cast(ratio as float) as ratio,
cast(starttime as int) starttime,
cast (endtime as int) endtime
from dwd.dwd_gnd_ims_tblbrandratio
where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE'
) t5 on a.market=t5.market
and right(concat('000000',a.CMPS_COD ),6 ) = right(concat('000000',t5.CMPS_COD ),6 )