-- Databricks notebook source -- MAGIC %md -- MAGIC ### 维度信息计算 -- COMMAND ---------- ------------------------------------------------------------------------------------- --修改时间:20240819 --修改人:FanXujia --修改内容: --模板整合,将原本的十几个手工表改成3个表。 --其中, --新文件《全国-集团排名》筛选:TA=Retail Total,Rx/OTC= Rx,Top/Top Incre. = Top Sales,对应了旧文件:《全国-Rx-TOP集团》 --新文件《全国-集团排名》筛选:TA <> Retail Total,Top/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 Total,Rx/OTC= Rx,Top/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 Total,Top/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 )