From 3e14e78af3b9ae914e8ea866e316ee6f7c34de98 Mon Sep 17 00:00:00 2001 From: chenwu Date: Mon, 27 Apr 2026 11:04:09 +0800 Subject: [PATCH] update20260427 --- 01 dm_tf_external_sales.sql | 64 + 02 dm_td_external_keycompatitor.sql | 42 + 03 dm_td_external_brand_market.sql | 70 + 04 dm_td_external_calendar.sql | 382 + 05 dm_td_external_exchangerate.sql | 26 + 07 dm_td_external_packinfo.sql | 2833 ++++++++ 08 dm_td_external_corp.sql | 83 + 09 dm_td_external_geo_type.sql | 1968 ++++++ 11 DM_TD_EXTERNAL_MARKET_NEW.sql | 393 ++ 12 dm_td_external_org.sql | 358 + 13 external auth.sql | 1230 ++++ 14 dm_tf_external_retail_special_bkp.sql | 22 + AIA/01 dm_aia_pack_property.sql | 355 + AIA/02 dm_ext_aia_sales.sql | 710 ++ AIA/02 dm_ext_aia_sales_bakup_20230327.sql | 195 + AIA/03 dm_aia_flag.sql | 84 + AIA/04 dm_aia_provided_flag.sql | 112 + AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql | 146 + AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql | 334 + AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql | 30 + AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql | 163 + AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql | 71 + AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql | 11 + AIA/11 dm_aia_targethp_flag.sql | 366 + AIA/z_03 dm_aia_flag_备份用.sql | 643 ++ CHC/01 dm_chc_pack_property.sql | 231 + CHC/02 DM_TF_EXT_CHC_SALES.sql | 418 ++ CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql | 147 + CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql | 327 + CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql | 30 + CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql | 163 + CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql | 71 + CHPA/01 dwd_ims_atc_hierarchy.sql | 42 + CHPA/01 dwd_ims_nfc_hierarchy.sql | 26 + CHPA/01 dwd_ims_td_manufacturer_corp.sql | 24 + CHPA/01 dwd_ims_td_pack_property.sql | 89 + CHPA/01 dwd_update.sql | 32 + CHPA/01_FB_BLOB_TO_DWD.sql | 210 + CHPA/02 DWS_IMS_TD_GEO.sql | 19 + CHPA/02 dws_ims_td_atc_cn.sql | 33 + CHPA/02 dws_ims_td_corp_cn.sql | 19 + CHPA/02 dws_ims_td_date.sql | 28 + CHPA/02 dws_ims_td_manu_cn.sql | 18 + CHPA/02 dws_ims_td_market.sql | 238 + CHPA/02 dws_ims_td_market_ta.sql | 7 + CHPA/02 dws_ims_td_nfc_cn.sql | 22 + CHPA/02 dws_ims_td_prod_cn.sql | 7 + CHPA/02 tmp_ims_td_prod_tmp.sql | 32 + CHPA/02 tmp_ims_tf_fact_sales.sql | 317 + CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql | 160 + .../03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql | 71 + CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql | 30 + CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql | 327 + CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql | 147 + CHPA/03 DM_TF_EXT_CHPA_SALES.sql | 166 + CHPA/03 dm_ims_td_calendar.sql | 58 + CHPA/03 dm_ims_td_geo.sql | 67 + CHPA/03 dm_ims_td_market_property.sql | 35 + CHPA/03 dm_ims_td_org.sql | 615 ++ CHPA/03 dm_ims_td_org_hvh.sql | 463 ++ CHPA/03 dm_ims_td_pack_property.sql | 1679 +++++ CHPA/03 dm_ims_tf_sales.sql | 759 ++ CHPA/03 dm_td_chpa_market_definition.sql | 14 + CHPA/03 dm_td_ims_city_mapping.sql | 30 + EC/03 ec_load_data.sql | 1544 ++++ EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql | 146 + EC/05 DM_TF_EXT_EC_SALES.sql | 173 + EC/06 DM_TD_EXT_EC_PACK2MARKET.sql | 208 + EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql | 30 + EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql | 163 + EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql | 62 + EC/1 (ec)blob_to_dwd.sql | 103 + ...inc_gnd_ext_ec_nationnal_pack_union_all.py | 74 + Merged_Data/Merged_Data_Config_table_bkp.sql | 228 + .../Merged_Data_Config_table_bymonth.sql | 213 + ...eranl_sales_merged_data_dtp_others_bkp.sql | 124 + ...les_merged_data_dtp_others_bymonth_bkp.sql | 289 + ORG/DM_TD_EXT_AIA_ORG.sql | 1154 +++ ORG/DM_TD_EXT_CHC_ORG.sql | 235 + ORG/DM_TD_EXT_CHPA_ORG.sql | 233 + ORG/DM_TD_EXT_COUNTY_ORG.sql | 220 + ORG/DM_TD_EXT_EC_ORG.sql | 219 + ORG/DM_TD_EXT_RETAIL_ORG.sql | 438 ++ ORG/DM_TD_EXT_THC_ORG.sql | 340 + ORG/DM_TD_EXT_XIEHE_ORG.sql | 279 + OTHERS/01 dm_td_report_url.sql | 11 + OTHERS/02 dws_ext_email_warning.sql | 110 + OTHERS/external_triggered_email.py | 42 + Retail/01 load_tmp_data.py | 617 ++ Retail/02 split_brand_data.py | 672 ++ Retail/03 split_pack_data.py | 1200 ++++ Retail/04 map_to_dws_table.py | 209 + Retail/05 load_dtp_temp_data.py | 158 + Retail/06 split_dtp_brand_data.py | 421 ++ Retail/07 split_dtp_pack_data.py | 1107 +++ Retail/08 map_to_dtp_dws_table.py | 510 ++ Retail/09 dwd_inc_gnd_ext_retail_nataional.py | 177 + Retail/10 map_to_retail_dm_table.py | 4917 +++++++++++++ Retail/11 map_to_overview_dm_table.py | 1000 +++ .../12 dws_tf_external_retail_dtp_special.sql | 81 + Retail/13 DM_TF_EXT_RETAIL_SALES.sql | 184 + Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql | 170 + Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql | 146 + .../16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql | 146 + Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql | 248 + Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql | 248 + Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql | 30 + Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql | 30 + .../19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql | 160 + ...19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql | 163 + .../20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql | 88 + ...0 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql | 88 + ...1 dwd_inc_gnd_ext_retail_nataional_作废.py | 367 + Retail/z2 retail_load_data_作废.sql | 6276 +++++++++++++++++ Retail/z3 retail_overview_data_作废.sql | 1201 ++++ THC/01 dm_thc_pack_property.sql | 231 + THC/02 dm_ext_thc_sales.sql | 354 + THC/02 dm_ext_thc_sales_bakup_20260327.sql | 178 + THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql | 109 + THC/04 dm_tf_external_sales_thc.sql | 115 + THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql | 146 + THC/06 DM_TD_EXT_THC_PACK2MARKET.sql | 326 + THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql | 30 + THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql | 163 + THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql | 71 + ...DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql | 541 ++ UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql | 1837 +++++ UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql | 524 ++ .../DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql | 1012 +++ UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql | 349 + UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql | 458 ++ .../DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql | 112 + XIEHE/01 xiehe_blob_to_dwd.py | 194 + XIEHE/02 dm_xiehe_pack_property.sql | 232 + XIEHE/03 dm_ext_xiehe_geo.sql | 76 + XIEHE/04 dm_ext_xiehe_sales.sql | 219 + XIEHE/05 dm_td_xiehe_core_dept.sql | 8 + XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql | 170 + XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql | 146 + XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql | 326 + XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql | 30 + .../10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql | 163 + ...11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql | 71 + XIEHE/bkp_01 xiehe_blob2dwd.py | 478 ++ XIEHE/bkp_02 dm_ext_xiehe_sales.sql | 115 + XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql | 776 ++ county/01 tmp_ims_county_fact_sales_sum.sql | 60 + county/02 tmp_imscounty_Result.sql | 64 + county/03 dm_ims_td_county_geo.sql | 24 + county/04 dws_ext_county_tf_sales.sql | 36 + county/05 dm_ext_county_td_pack_property.sql | 236 + county/06 dm_td_county_pack_region.sql | 106 + county/07 dm_ext_county_tf_sales_region.sql | 37 + county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql | 146 + county/09 DM_TF_EXT_COUNTY_SALES.sql | 128 + county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql | 208 + county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql | 30 + ...12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql | 163 + ...3 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql | 62 + for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql | 237 + for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql | 293 + .../03 dm_td_aia_original_col.sql | 23 + .../04 dm_td_aia_nosales_inst.sql | 161 + .../05 dm_td_aia_is_eagle_flag.sql | 61 + for_AIA_Dashboard/06 dm_td_aia_rank.sql | 133 + .../07 dm_ext_aia_data_remove_flag.sql | 111 + .../07 dm_td_aia_remove_special_ins_bkp.py | 56 + .../08 dm_ext_aia_data_quality_flag.sql | 218 + z 01 dm_tf_external_sales.sql | 1187 ++++ ...m_td_external_market_pack_mapping_作废.sql | 1439 ++++ z 11 dm_td_external_market_作废.sql | 186 + 上线脚本.sql | 2461 +++++++ 数据验证.sql | 39 + 173 files changed, 62579 insertions(+) create mode 100644 01 dm_tf_external_sales.sql create mode 100644 02 dm_td_external_keycompatitor.sql create mode 100644 03 dm_td_external_brand_market.sql create mode 100644 04 dm_td_external_calendar.sql create mode 100644 05 dm_td_external_exchangerate.sql create mode 100644 07 dm_td_external_packinfo.sql create mode 100644 08 dm_td_external_corp.sql create mode 100644 09 dm_td_external_geo_type.sql create mode 100644 11 DM_TD_EXTERNAL_MARKET_NEW.sql create mode 100644 12 dm_td_external_org.sql create mode 100644 13 external auth.sql create mode 100644 14 dm_tf_external_retail_special_bkp.sql create mode 100644 AIA/01 dm_aia_pack_property.sql create mode 100644 AIA/02 dm_ext_aia_sales.sql create mode 100644 AIA/02 dm_ext_aia_sales_bakup_20230327.sql create mode 100644 AIA/03 dm_aia_flag.sql create mode 100644 AIA/04 dm_aia_provided_flag.sql create mode 100644 AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql create mode 100644 AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql create mode 100644 AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql create mode 100644 AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql create mode 100644 AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql create mode 100644 AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql create mode 100644 AIA/11 dm_aia_targethp_flag.sql create mode 100644 AIA/z_03 dm_aia_flag_备份用.sql create mode 100644 CHC/01 dm_chc_pack_property.sql create mode 100644 CHC/02 DM_TF_EXT_CHC_SALES.sql create mode 100644 CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql create mode 100644 CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql create mode 100644 CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql create mode 100644 CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql create mode 100644 CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql create mode 100644 CHPA/01 dwd_ims_atc_hierarchy.sql create mode 100644 CHPA/01 dwd_ims_nfc_hierarchy.sql create mode 100644 CHPA/01 dwd_ims_td_manufacturer_corp.sql create mode 100644 CHPA/01 dwd_ims_td_pack_property.sql create mode 100644 CHPA/01 dwd_update.sql create mode 100644 CHPA/01_FB_BLOB_TO_DWD.sql create mode 100644 CHPA/02 DWS_IMS_TD_GEO.sql create mode 100644 CHPA/02 dws_ims_td_atc_cn.sql create mode 100644 CHPA/02 dws_ims_td_corp_cn.sql create mode 100644 CHPA/02 dws_ims_td_date.sql create mode 100644 CHPA/02 dws_ims_td_manu_cn.sql create mode 100644 CHPA/02 dws_ims_td_market.sql create mode 100644 CHPA/02 dws_ims_td_market_ta.sql create mode 100644 CHPA/02 dws_ims_td_nfc_cn.sql create mode 100644 CHPA/02 dws_ims_td_prod_cn.sql create mode 100644 CHPA/02 tmp_ims_td_prod_tmp.sql create mode 100644 CHPA/02 tmp_ims_tf_fact_sales.sql create mode 100644 CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql create mode 100644 CHPA/03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql create mode 100644 CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql create mode 100644 CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql create mode 100644 CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql create mode 100644 CHPA/03 DM_TF_EXT_CHPA_SALES.sql create mode 100644 CHPA/03 dm_ims_td_calendar.sql create mode 100644 CHPA/03 dm_ims_td_geo.sql create mode 100644 CHPA/03 dm_ims_td_market_property.sql create mode 100644 CHPA/03 dm_ims_td_org.sql create mode 100644 CHPA/03 dm_ims_td_org_hvh.sql create mode 100644 CHPA/03 dm_ims_td_pack_property.sql create mode 100644 CHPA/03 dm_ims_tf_sales.sql create mode 100644 CHPA/03 dm_td_chpa_market_definition.sql create mode 100644 CHPA/03 dm_td_ims_city_mapping.sql create mode 100644 EC/03 ec_load_data.sql create mode 100644 EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql create mode 100644 EC/05 DM_TF_EXT_EC_SALES.sql create mode 100644 EC/06 DM_TD_EXT_EC_PACK2MARKET.sql create mode 100644 EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql create mode 100644 EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql create mode 100644 EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql create mode 100644 EC/1 (ec)blob_to_dwd.sql create mode 100644 EC/2 dwd_inc_gnd_ext_ec_nationnal_pack_union_all.py create mode 100644 Merged_Data/Merged_Data_Config_table_bkp.sql create mode 100644 Merged_Data/Merged_Data_Config_table_bymonth.sql create mode 100644 Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bkp.sql create mode 100644 Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bymonth_bkp.sql create mode 100644 ORG/DM_TD_EXT_AIA_ORG.sql create mode 100644 ORG/DM_TD_EXT_CHC_ORG.sql create mode 100644 ORG/DM_TD_EXT_CHPA_ORG.sql create mode 100644 ORG/DM_TD_EXT_COUNTY_ORG.sql create mode 100644 ORG/DM_TD_EXT_EC_ORG.sql create mode 100644 ORG/DM_TD_EXT_RETAIL_ORG.sql create mode 100644 ORG/DM_TD_EXT_THC_ORG.sql create mode 100644 ORG/DM_TD_EXT_XIEHE_ORG.sql create mode 100644 OTHERS/01 dm_td_report_url.sql create mode 100644 OTHERS/02 dws_ext_email_warning.sql create mode 100644 OTHERS/external_triggered_email.py create mode 100644 Retail/01 load_tmp_data.py create mode 100644 Retail/02 split_brand_data.py create mode 100644 Retail/03 split_pack_data.py create mode 100644 Retail/04 map_to_dws_table.py create mode 100644 Retail/05 load_dtp_temp_data.py create mode 100644 Retail/06 split_dtp_brand_data.py create mode 100644 Retail/07 split_dtp_pack_data.py create mode 100644 Retail/08 map_to_dtp_dws_table.py create mode 100644 Retail/09 dwd_inc_gnd_ext_retail_nataional.py create mode 100644 Retail/10 map_to_retail_dm_table.py create mode 100644 Retail/11 map_to_overview_dm_table.py create mode 100644 Retail/12 dws_tf_external_retail_dtp_special.sql create mode 100644 Retail/13 DM_TF_EXT_RETAIL_SALES.sql create mode 100644 Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql create mode 100644 Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql create mode 100644 Retail/16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql create mode 100644 Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql create mode 100644 Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql create mode 100644 Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql create mode 100644 Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql create mode 100644 Retail/19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql create mode 100644 Retail/19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql create mode 100644 Retail/20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql create mode 100644 Retail/20 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql create mode 100644 Retail/z1 dwd_inc_gnd_ext_retail_nataional_作废.py create mode 100644 Retail/z2 retail_load_data_作废.sql create mode 100644 Retail/z3 retail_overview_data_作废.sql create mode 100644 THC/01 dm_thc_pack_property.sql create mode 100644 THC/02 dm_ext_thc_sales.sql create mode 100644 THC/02 dm_ext_thc_sales_bakup_20260327.sql create mode 100644 THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql create mode 100644 THC/04 dm_tf_external_sales_thc.sql create mode 100644 THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql create mode 100644 THC/06 DM_TD_EXT_THC_PACK2MARKET.sql create mode 100644 THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql create mode 100644 THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql create mode 100644 THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql create mode 100644 UNIONALL/DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql create mode 100644 UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql create mode 100644 UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql create mode 100644 UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql create mode 100644 UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql create mode 100644 UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql create mode 100644 UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql create mode 100644 XIEHE/01 xiehe_blob_to_dwd.py create mode 100644 XIEHE/02 dm_xiehe_pack_property.sql create mode 100644 XIEHE/03 dm_ext_xiehe_geo.sql create mode 100644 XIEHE/04 dm_ext_xiehe_sales.sql create mode 100644 XIEHE/05 dm_td_xiehe_core_dept.sql create mode 100644 XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql create mode 100644 XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql create mode 100644 XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql create mode 100644 XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql create mode 100644 XIEHE/10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql create mode 100644 XIEHE/11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql create mode 100644 XIEHE/bkp_01 xiehe_blob2dwd.py create mode 100644 XIEHE/bkp_02 dm_ext_xiehe_sales.sql create mode 100644 XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql create mode 100644 county/01 tmp_ims_county_fact_sales_sum.sql create mode 100644 county/02 tmp_imscounty_Result.sql create mode 100644 county/03 dm_ims_td_county_geo.sql create mode 100644 county/04 dws_ext_county_tf_sales.sql create mode 100644 county/05 dm_ext_county_td_pack_property.sql create mode 100644 county/06 dm_td_county_pack_region.sql create mode 100644 county/07 dm_ext_county_tf_sales_region.sql create mode 100644 county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql create mode 100644 county/09 DM_TF_EXT_COUNTY_SALES.sql create mode 100644 county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql create mode 100644 county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql create mode 100644 county/12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql create mode 100644 county/13 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql create mode 100644 for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql create mode 100644 for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql create mode 100644 for_AIA_Dashboard/03 dm_td_aia_original_col.sql create mode 100644 for_AIA_Dashboard/04 dm_td_aia_nosales_inst.sql create mode 100644 for_AIA_Dashboard/05 dm_td_aia_is_eagle_flag.sql create mode 100644 for_AIA_Dashboard/06 dm_td_aia_rank.sql create mode 100644 for_AIA_Dashboard/07 dm_ext_aia_data_remove_flag.sql create mode 100644 for_AIA_Dashboard/07 dm_td_aia_remove_special_ins_bkp.py create mode 100644 for_AIA_Dashboard/08 dm_ext_aia_data_quality_flag.sql create mode 100644 z 01 dm_tf_external_sales.sql create mode 100644 z 10 dm_td_external_market_pack_mapping_作废.sql create mode 100644 z 11 dm_td_external_market_作废.sql create mode 100644 上线脚本.sql create mode 100644 数据验证.sql diff --git a/01 dm_tf_external_sales.sql b/01 dm_tf_external_sales.sql new file mode 100644 index 0000000..bff2cd2 --- /dev/null +++ b/01 dm_tf_external_sales.sql @@ -0,0 +1,64 @@ +-- Databricks notebook source +insert overwrite table dm.dm_tf_external_sales +(YYYYMM, +PACK_COD, +CORP_COD, +AUDIT_COD, +PLATFORM_TYPE, +STORE_NAME, +STORE_TYPE, +REGION_TYPE, +PACK_FLAG, +PROD_FLAG, +DTP_FLAG, +SALES_UNIT_CAL, +SALES_UNIT_CAL_LY, +SALES_VALUE_CAL, +SALES_VALUE_CAL_LY, +CONUTING_UNIT, +CONUTING_UNIT_LY, +DATA_SOURCE, +inst_code, +cmps_flag, +dept_name, +prescription, +prescription_ly, +new_code, +area, +h_level, +reimburse, +reimburse_type, +prescription_source +) +select +YYYYMM, +PACK_CODE AS PACK_COD, +CORP_CODE AS CORP_COD, +AUDIT_CODE AS AUDIT_COD, +PLATFORM_TYPE, +STORE_NAME, +STORE_TYPE, +REGION_TYPE, +PACK_FLAG, +PROD_FLAG, +DTP_FLAG, +SALES_UNIT_CAL, +SALES_UNIT_CAL_LY, +SALES_VALUE_CAL, +SALES_VALUE_CAL_LY, +CONUTING_UNIT, +CONUTING_UNIT_LY, +DATA_SOURCE, +inst_code, +cmps_flag, +dept_name, +prescription, +prescription_ly, +new_code, +area, +h_level, +reimburse, +reimburse_type, +prescription_source +from + dm.DM_TF_EXT_UNIONALL_SALES \ No newline at end of file diff --git a/02 dm_td_external_keycompatitor.sql b/02 dm_td_external_keycompatitor.sql new file mode 100644 index 0000000..87adaa7 --- /dev/null +++ b/02 dm_td_external_keycompatitor.sql @@ -0,0 +1,42 @@ +-- Databricks notebook source +insert overwrite dm.dm_td_external_keycompatitor ( + RNK, + BRAND_NAME, + BRAND_CODE, + IMSBRAND, + CompatitorCN, + CLASS, + CompatitorEN, + CORP, + Market, + VBP, + ValueType, + MARKETDESC, + Strategicbrand, + TA, + DEFAULTFLAG, + CompatitorMarket, + CompatitorType, + DATA_SOURCE +) + select + RNK, + BRAND_NAME, + BRAND_CODE, + IMSBRAND, + competitorcn, + CLASS, + competitoren, + CORP, + Market, + VBP, + ValueType, + MARKETDESC, + Strategicbrand, + TA, + int(DEFAULTFLAG), + competitormarket, + competitortype, + DATA_SOURCE + from + dwd.dwd_gnd_ims_compete_product_config \ No newline at end of file diff --git a/03 dm_td_external_brand_market.sql b/03 dm_td_external_brand_market.sql new file mode 100644 index 0000000..ac6f7be --- /dev/null +++ b/03 dm_td_external_brand_market.sql @@ -0,0 +1,70 @@ +-- Databricks notebook source +-- drop table if exists dm.DM_TD_EXTERNAL_BRAND_MARKET; +-- create table if not exists dm.DM_TD_EXTERNAL_BRAND_MARKET +-- using parquet as +INSERT OVERWRITE dm.DM_TD_EXTERNAL_BRAND_MARKET ( + TA_NAME, + RNK, + BRAND_CODE, + BRAND_NAME, + KEYCOMPATITORCN, + KEYCOMPATITOREN, + CLASS, + IMSBRAND, + CORP, + MARKET, + MARKETDESC, + DEFAULTFLAG, + VBP, + VBPFLAG, + VALUETYPE, + Strategicbrand, + CompatitorMarket, + CompatitorType, + TA_RN, + DATA_SOURCE +) + SELECT + A.TA TA_NAME, + CASE + WHEN A.RNK = 'null' then 99 + ELSE A.RNK + END, + A.BRAND_CODE, + A.BRAND_NAME, + REPLACE(NVL(A.CompatitorCN, ''), 'null', '') KEYCOMPATITORCN, + REPLACE(NVL(A.CompatitorEN, ''), 'null', '') KEYCOMPATITOREN, + REPLACE(NVL(A.CLASS, ''), 'null', '') CLASS, + upper(A.IMSBRAND) IMSBRAND, + REPLACE(NVL(A.CORP, ''), 'null', '') CORP, + REPLACE(NVL(A.MARKET, ''), 'null', '') MARKET, + A.MARKETDESC, + A.DEFAULTFLAG, + CASE + WHEN REPLACE(NVL(A.VBP, ''), 'null', '') = '' THEN 'NonVBP' + ELSE REPLACE(NVL(A.VBP, ''), 'null', '') + END VBP, + CASE + WHEN REPLACE(NVL(A.VBP, ''), 'null', '') <> '' THEN 'VBP' + ELSE 'NonVBP' + END VBPFLAG, + A.VALUETYPE, + A.Strategicbrand, + REPLACE(NVL(A.CompatitorMarket, ''), 'null', '') CompatitorMarket, + REPLACE(NVL(A.CompatitorType, ''), 'null', '') CompatitorType, + CASE + WHEN A.TA = 'CV' THEN 2 + WHEN A.TA = 'DM' THEN 1 + WHEN A.TA = 'RD' THEN 3 + WHEN A.TA = 'RE' THEN 4 + WHEN A.TA = 'NEB' THEN 5 + WHEN A.TA = 'GI' THEN 6 + WHEN A.TA = 'ONC' THEN 7 + WHEN A.TA = 'RARE' THEN 8 + END TA_RN, + CASE + when A.DATA_SOURCE = 'IQVIA-County(Quarterly)' THEN 'IQVIA-COUNTY(Quarterly)' + ELSE A.DATA_SOURCE + END DATA_SOURCE + FROM + dm.DM_TD_EXTERNAL_KEYCOMPATITOR A \ No newline at end of file diff --git a/04 dm_td_external_calendar.sql b/04 dm_td_external_calendar.sql new file mode 100644 index 0000000..b5097b7 --- /dev/null +++ b/04 dm_td_external_calendar.sql @@ -0,0 +1,382 @@ +-- Databricks notebook source +--------------------------------------------------------------------------- +--修改时间:20241126 +--修改人:Fanxujia +--修改内容: +--THC渠道分为14省的数据源以及全国的数据源两种,分在了2个事实表里,下面在维表在引用事实表时,需要将两个事实表union在一起 +---------------------------------------------------------------------------- +create or replace temporary view external_sales_union as +select YYYYMM,SALES_VALUE_CAL,DATA_SOURCE from dm.dm_tf_ext_unionall_sales +union all +select YYYYMM,SALES_VALUE_CAL,DATA_SOURCE from dm.dm_tf_external_sales_thc + + +-- COMMAND ---------- + +--------------------------------------------------------------------------- +--修改时间:20260309 +--修改人:chenwu +--修改内容: +--niad 的数据会比其他数据先入数据库,会产生月份差。 +---------------------------------------------------------------------------- +create or replace temporary view retail_niad_sales as +select + GREATEST(niad_month, OTHERS_MONTH) as YYYYMM, + NIAD_MONTH +from + ( + select + max(niad_month) as niad_month, + max(OTHERS_MONTH) as OTHERS_MONTH + from + ( + select + niad_month, + OTHERS_MONTH + from + tmp.tmp_dm_td_ext_retail_niad_month + union all + select + niad_month, + OTHERS_MONTH + from + tmp.tmp_dm_td_ext_ec_niad_month + ) + ) + +-- COMMAND ---------- + +create or replace temporary view merged_date_calender as +WITH ALL_DATA_YYYY ( + select + max(yyyymm) YYYYMM, + 'AIA' DATATYPE + from + dm.dm_tf_ext_unionall_sales + where + DATA_SOURCE = 'AIA(Monthly)' + union all + select + max(yyyymm) YYYYMM, + 'DTP' DATATYPE + from + dm.dm_tf_ext_unionall_sales + where + DATA_SOURCE = 'DTP(Quarterly)' + union all + select + max(yyyymm) YYYYMM, + 'CHPA' DATATYPE + from + dm.dm_tf_ext_unionall_sales + where + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +) +SELECT + min(YYYYMM) AS MERGED_DATA_MONTH, + GREATEST( + '202401', + CAST((CAST(LEFT(min(yyyymm), 4) AS INT) - 3) * 100 + 1 AS VARCHAR(6)) --三年区间 + ) AS MERGED_DATA_MONTH_START +from + ALL_DATA_YYYY + +-- COMMAND ---------- + +insert overwrite dm.dm_td_external_calendar ( + date, + yyyymmdd, + yyyymm, + year, + quarter, + month, + month_cn, + day, + is_holiday, + work_days, + mtd_work_days, + left_work_days, + year_quater, + half_year, + dd, + YYYYMM_EXTERNAL, + MONTH_EXTERNAL, + YEAR_EXTERNAL, + YYYYMM_EXTERNAL_AIA, + YYYYMM_EXTERNAL_NIAD, + YYYYMM_MERGED_DATA +) + --公用的日历表最小日期不到2018年,因此需要自己构造一个日历表,日期从2018年起。 + --31天 + with day_31 as (select + explode( + array( + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ) + ) as day + ), + --30天 + day_30 as (select + day + from + day_31 + where + day <= 30 + ), + --29天(闰年的2月份) + day_29 as (select + day + from + day_31 + where + day <= 29 + ), + --28天(非闰年的2月份) + day_28 as (select + day + from + day_31 + where + day <= 28 + ), + --最后一天是31号的月份 + month_31 as (select + explode(array(1, 3, 5, 7, 8, 10, 12)) as month + ), + --最后一天是30号的月份 + month_30 as (select + explode(array(4, 6, 9, 11)) as month + ), + --2月份单拎出来 + month_2 as (select + 2 as month + ), + --非闰年的月、日 + mmdd_365 as (select + month, + day + from + month_31 cross join day_31 + union all + select + month, + day + from + month_30 cross join day_30 + union all + select + month, + day + from + month_2 cross join day_28 + ), + --闰年的月、日 + mmdd_366 as (select + month, + day + from + month_31 cross join day_31 + union all + select + month, + day + from + month_30 cross join day_30 + union all + select + month, + day + from + month_2 cross join day_29 + ), + --注意事项: + --目前年份设计只到2040年,如果2041年依旧使用此套代码,这里需要做修改 + --非闰年的年份 + year_365 as (select + explode( + array( + 2018, + 2019, + 2021, + 2022, + 2023, + 2025, + 2026, + 2027, + 2029, + 2030, + 2031, + 2033, + 2034, + 2035, + 2037, + 2038, + 2039 + ) + ) as year + ), + --闰年的年份 + year_366 as (select + explode(array(2020, 2024, 2028, 2032, 2036, 2040)) as year + ), + --从2018年1月1日至2040年12月31日的数据 + --最终插入dm表时还会在此基础上框定时间范围 + yyyymmdd as (select + year, + month, + day + from + year_365 cross join mmdd_365 + union all + select + year, + month, + day + from + year_366 cross join mmdd_366 + ), + --补充其他需要的字段 + tmp_calendar as (select + make_date(year, month, day) as `date`, + year * 10000 + month * 100 + day as yyyymmdd, + year * 100 + month as yyyymm, + concat(month, '月') as month_cn, + year, + month, + day, + case + when month <= 3 then 1 + when month <= 6 then 2 + when month <= 9 then 3 + else 4 + end as quarter, + case + when month <= 3 then concat(year, 'Q1') + when month <= 6 then concat(year, 'Q2') + when month <= 9 then concat(year, 'Q3') + else concat(year, 'Q4') + end as year_quater, + case + when month <= 6 then concat(year, 'H1') + else concat(year, 'H2') + end as half_year, + --下面4个字段实际在PBI上没有用到,因此直接设为0 + 0 as work_days, + 0 as mtd_work_days, + 0 as is_holiday, + 0 as left_work_days + from + yyyymmdd + ) + select + `date`, + yyyymmdd, + A.yyyymm, + `year`, + quarter, + `month`, + month_cn, + `day`, + is_holiday, + work_days, + mtd_work_days, + left_work_days, + year_quater, + half_year, + substring(yyyymmdd, 7, 2) dd, + CASE + WHEN A.yyyymm = B.YYYYMM THEN 'R' + ELSE A.yyyymm + END YYYYMM_EXTERNAL, + CASE + WHEN A.yyyymm = B.YYYYMM THEN 'R' + ELSE `month` + END MONTH_EXTERNAL, + CASE + WHEN A.`year` = LEFT(B.YYYYMM, 4) THEN 'R' + ELSE A.`year` + END YEAR_EXTERNAL, + -- from DM.DM_TD_CALENDAR A + ---------------------------------------------------- + --修改时间:20241211 + --修改人:Fanxujia + --修改内容: + --给AIA报告增加单独的R月标记 + ---------------------------------------------------- + case + when A.yyyymm = C.YYYYMM THEN 'R' + WHEN A.yyyymm >= C.min_yyyymm AND A.yyyymm <=C.yyyymm + THEN A.YYYYMM + ELSE NULL + end as YYYYMM_EXTERNAL_AIA, + case + when A.yyyymm = D.NIAD_MONTH THEN 'R' + else A.yyyymm + end as YYYYMM_EXTERNAL_NIAD, + case + when A.yyyymm = E.MERGED_DATA_MONTH THEN 'R' + when A.yyyymm >= E.MERGED_DATA_MONTH_START AND A.YYYYMM<= E.MERGED_DATA_MONTH THEN A.yyyymm + else null + end as YYYYMM_MERGED_DATA + from + tmp_calendar A + join ( + select + MAX(YYYYMM) YYYYMM + from + external_sales_union + where + SALES_VALUE_CAL <> 0 + ) B + on 1 = 1 + --获得AIA数据的最新月 + cross join ( + select + max(YYYYMM) as YYYYMM,min(yyyymm) AS min_yyyymm + from + dm.dm_tf_ext_unionall_sales + where + DATA_SOURCE = 'AIA(Monthly)' + and SALES_VALUE_CAL <> 0 + ) C + left join retail_niad_sales AS D + left join merged_date_calender as E + WHERE + A.yyyymm >= ( + SELECT + MIN(YYYYMM) + FROM + external_sales_union + ) + AND A.yyyymm <= (LEFT(D.YYYYMM, 4) * 100 + 12) + AND A.day = 1 \ No newline at end of file diff --git a/05 dm_td_external_exchangerate.sql b/05 dm_td_external_exchangerate.sql new file mode 100644 index 0000000..63fa43e --- /dev/null +++ b/05 dm_td_external_exchangerate.sql @@ -0,0 +1,26 @@ +-- Databricks notebook source +/* +修改日期:20250311 +修改人:chenwu +修改内容:取sales表中最大日期的年 +*/ +insert OVERWRITE dm.dm_td_external_exchangerate ( + from_currency_id, to_currency_id, az_year, exchange_rate, etl_update_dt, etl_insert_dt +) + select + from_currency_id, + to_currency_id, + az_year, + exchange_rate, + etl_update_dt, + etl_insert_dt + from + dm.DM_TD_EXCHANGE_RATE + where + AZ_YEAR in ( + select + left(max(YYYYMM), 4) + from + dm.dm_tf_ext_unionall_sales --取sales表中最大日期的年 + ) + AND FROM_CURRENCY_ID = 'USD' \ No newline at end of file diff --git a/07 dm_td_external_packinfo.sql b/07 dm_td_external_packinfo.sql new file mode 100644 index 0000000..b56abf4 --- /dev/null +++ b/07 dm_td_external_packinfo.sql @@ -0,0 +1,2833 @@ +-- Databricks notebook source +--------------------------------------------------------------------------- +--修改时间:20241126 +--修改人:Fanxujia +--修改内容: +--THC渠道分为14省的数据源以及全国的数据源两种,分在了2个事实表里,下面在维表在引用事实表时,需要将两个事实表union在一起 +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +--修改时间:20241129 +--修改人:Fanxujia +--修改内容: +--补充Retail直取中DTP的手工文件里的pack_cod +---------------------------------------------------------------------------- +create or replace temporary view external_sales_union as +select distinct +PACK_COD, +DATA_SOURCE, +PACK_FLAG, +CORP_COD, +SALES_VALUE_CAL, +dept_name, +new_code, +area, +YYYYMM +from dm.dm_tf_external_sales +union all +select distinct +PACK_COD, +DATA_SOURCE, +PACK_FLAG, +CORP_COD, +SALES_VALUE_CAL, +dept_name, +new_code, +area, +YYYYMM +from dm.dm_tf_external_sales_thc +union all +select distinct +pack_code, +'Retail(Quarterly)' as DATA_SOURCE, +null as PACK_FLAG, +CORP_COD, +0 as SALES_VALUE_CAL, +'' as dept_name, +'' as new_code, +'' as area, +'' as YYYYMM +from dm.dm_zk_retail_sales_kpi +where NVL(pack_code,'Others') <> 'Others' +and pack_code <> '' +----避免单独NIAD部分pack不存在于dm.dm_tf_external_sales中 +union all +select distinct +pack_cod, +DATA_SOURCE, +null as PACK_FLAG, +null CORP_COD, +0 as SALES_VALUE_CAL, +'' as dept_name, +'' as new_code, +'' as area, +'' as YYYYMM +from dm.dm_tf_external_sales_niad +where NVL(pack_cod,'Others') <> 'Others' +and pack_cod <> '' + +-- COMMAND ---------- + +----------------------------------------------------------为了避免数据量过大只获取了有销量的产品数据--------------------------------- +---------------------------pack code是唯一,不允许重复或为空----------------------------------------------------- +insert overwrite dm.dm_td_external_packinfo_temp ( + PACK_COD, + PACK_DES, + STGH_DES, + PACK_LCH, + PROD_COD, + PROD_DES, + PROD_DES_C, + CMPS_COD, + CMPS_DES, + CMPS_DES_C, + ATC1_COD, + ATC2_COD, + ATC3_COD, + ATC4_COD, + APP1_COD, + APP2_COD, + APP3_COD, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC, + MANU_COD, + MANU_DES, + MANU_DES_C, + MNFL_COD, + MNFL_DES, + CORP_COD, + CORP_DES, + CORP_DES_C, + BRANDTYPE, + IS_AZ, + AZ_MAIN, + 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, + GEN_RN +) + SELECT + A.PACK_COD, + MAX(B.PACK_DES) PACK_DES, + MAX(B.STGH_DES) STGH_DES, + MAX(B.PACK_LCH) PACK_LCH, + MAX(B.PROD_COD) PROD_COD, + MAX(B.PROD_DES) PROD_DES, + MAX(B.PROD_DES_C) PROD_DES_C, + MAX(B.CMPS_COD) CMPS_COD, + MAX(B.CMPS_DES) CMPS_DES, + MAX(B.CMPS_DES_C) CMPS_DES_C, + MAX(B.ATC1_COD) ATC1_COD, + MAX(B.ATC2_COD) ATC2_COD, + MAX(B.ATC3_COD) ATC3_COD, + MAX(B.ATC4_COD) ATC4_COD, + MAX(B.APP1_COD) APP1_COD, + MAX(B.APP2_COD) APP2_COD, + MAX(B.APP3_COD) APP3_COD, + MAX(B.BIO_DESC) BIO_DESC, + MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC, + MAX(B.ETH_OTC_DESC) ETH_OTC_DESC, + MAX(B.NRDL_DESC) NRDL_DESC, + MAX(B.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE, + MAX(B.EDL_DESC) EDL_DESC, + MAX(B.TCM_DESC) TCM_DESC, + MAX(B.PAED_DESC) PAED_DESC, + MAX(B.GQCE_DESC) GQCE_DESC, + CASE + WHEN MAX(B.VBP_DESC_V) = 'VBP-IN' THEN 'VBP-IN' + WHEN MAX(B.VBP_DESC_V) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(B.VBP_DESC_V) IS NOT NULL THEN 'Non VBP' + ELSE NULL + END VBP_DESC, + MAX(B.MANU_COD) MANU_COD, + MAX(B.MANU_DES) MANU_DES, + MAX(B.MANU_DES_C) MANU_DES_C, + MAX(B.MNFL_COD) MNFL_COD, + MAX(B.MNFL_DES) MNFL_DES, + MAX(B.CORP_COD) CORP_COD, + MAX(B.CORP_DES) CORP_DES, + MAX(B.CORP_DES_C) CORP_DES_C, + MAX(B.BRANDTYPE) BRANDTYPE, + MAX(B.IS_AZ) IS_AZ, + MAX(B.AZ_MAIN) AZ_MAIN, + MAX(B.ATC1_DES) ATC1_DES, + MAX(B.ATC1_DES_C) ATC1_DES_C, + MAX(B.ATC2_DES) ATC2_DES, + MAX(B.ATC2_DES_C) ATC2_DES_C, + MAX(B.ATC3_DES) ATC3_DES, + MAX(B.ATC3_DES_C) ATC3_DES_C, + MAX(B.ATC4_DES) ATC4_DES, + MAX(B.ATC4_DES_C) ATC4_DES_C, + MAX(B.APP1_DES) APP1_DES, + MAX(B.APP1_DES_C) APP1_DES_C, + MAX(B.APP2_DES) APP2_DES, + MAX(B.APP2_DES_C) APP2_DES_C, + MAX(B.APP3_DES) APP3_DES, + MAX(B.APP3_DES_C) APP3_DES_C, + CASE + WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 + END GEN_RN + FROM + ( + SELECT DISTINCT + PACK_COD + FROM + external_sales_union-- WHERE YYYYMM >= (SELECT CAST((LEFT(MAX(YYYYMM),4)-3)*100+1 AS INT) FROM DM.DM_TF_EXTERNAL_SALES)) A + + ) A + LEFT JOIN DM.DM_IMS_TD_PACK_PROPERTY B + ON B.PACK_COD = A.PACK_COD + WHERE + NVL(A.PACK_COD, '') <> '' + GROUP BY + A.PACK_COD + +-- COMMAND ---------- + +-------------------------------------------------------------补充COUNTY部分缺失的pack 维度-------------------------------------------------------------------------------------------- +--01 根据主表数据(带多个source)关联chpa的pack_porperty表,取出相关维度 +--02 按照步骤1,chpa中没有的packcode,他的维度字段会被置为空,所以要关联我们自己处理好的维度表,来补充相关维度 +insert overwrite table tmp.tmp_county_dm_td_external_packinfo +with temp as ( -- 临时表补充维度 + SELECT + b.PACK_COD,MAX(B.PACK_DES) PACK_DES,MAX(B.STGH_DES) STGH_DES,MAX(B.PACK_LCH) PACK_LCH,MAX(B.PROD_COD) PROD_COD,MAX(B.PROD_DES) PROD_DES,MAX(B.PROD_DES_C) PROD_DES_C,MAX(B.CMPS_COD) CMPS_COD, +MAX(B.CMPS_DES) CMPS_DES,MAX(B.CMPS_DES) CMPS_DES_C,MAX(B.ATC1_COD) ATC1_COD,MAX(B.ATC2_COD) ATC2_COD,MAX(B.ATC3_COD) ATC3_COD,MAX(B.ATC4_COD) ATC4_COD,MAX(B.APP1_COD) APP1_COD,MAX(B.APP2_COD) APP2_COD, +MAX(B.APP3_COD) APP3_COD,MAX(B.BIO_DESC) BIO_DESC,MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC,MAX(B.ETH_OTC_DESC) ETH_OTC_DESC,MAX(B.NRDL_DESC) NRDL_DESC,MAX(B.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE,MAX(B.EDL_DESC) EDL_DESC, +MAX(B.TCM_DESC) TCM_DESC,MAX(B.PAED_DESC) PAED_DESC,MAX(B.GQCE_DESC) GQCE_DESC, +CASE WHEN MAX(B.VBP_DESC) = 'VBP-IN' THEN 'VBP-IN' WHEN MAX(B.VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' WHEN MAX(B.VBP_DESC) IS NOT NULL THEN 'Non VBP' ELSE NULL END VBP_DESC,MAX(B.MANU_COD) MANU_COD,MAX(B.MANU_DES) MANU_DES,MAX(B.MANU_DES) MANU_DES_C,MAX(B.MNFL_COD) MNFL_COD, +MAX(B.MNFL_DES) MNFL_DES,MAX(B.CORP_COD) CORP_COD,MAX(B.CORP_DES) CORP_DES,MAX(B.CORP_DES_C) CORP_DES_C,MAX(B.BRANDTYPE) BRANDTYPE,MAX(B.IS_AZ) IS_AZ,MAX(B.AZ_MAIN) AZ_MAIN,MAX(B.ATC1_DES) ATC1_DES, +MAX(B.ATC1_DES_C) ATC1_DES_C,MAX(B.ATC2_DES) ATC2_DES,MAX(B.ATC2_DES_C) ATC2_DES_C,MAX(B.ATC3_DES) ATC3_DES,MAX(B.ATC3_DES_C) ATC3_DES_C,MAX(B.ATC4_DES) ATC4_DES,MAX(B.ATC4_DES_C) ATC4_DES_C,MAX(B.APP1_DES) APP1_DES, +MAX(B.APP1_DES_C) APP1_DES_C,MAX(B.APP2_DES) APP2_DES,MAX(B.APP2_DES_C) APP2_DES_C,MAX(B.APP3_DES) APP3_DES,MAX(B.APP3_DES_C) APP3_DES_C, +CASE WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 ELSE 5 END GEN_RN +FROM dm.dm_ext_county_td_pack_property b + GROUP BY b.PACK_COD +) +select + A.PACK_COD + ,case when A.PACK_DES ='' or A.PACK_DES is null then B.PACK_DES else A.PACK_DES end AS PACK_DES + ,case when A.STGH_DES ='' or A.STGH_DES is null then B.STGH_DES else A.STGH_DES end AS STGH_DES + ,case when A.PACK_LCH ='' or A.PACK_LCH is null then B.PACK_LCH else A.PACK_LCH end AS PACK_LCH + ,case when A.PROD_COD ='' or A.PROD_COD is null then B.PROD_COD else A.PROD_COD end AS PROD_COD + ,case when A.PROD_DES ='' or A.PROD_DES is null then B.PROD_DES else A.PROD_DES end AS PROD_DES + ,case when A.PROD_DES_C ='' or A.PROD_DES_C is null then B.PROD_DES_C else A.PROD_DES_C end AS PROD_DES_C + ,case when A.CMPS_COD ='' or A.CMPS_COD is null then B.CMPS_COD else A.CMPS_COD end AS CMPS_COD + ,case when A.CMPS_DES ='' or A.CMPS_DES is null then B.CMPS_DES else A.CMPS_DES end AS CMPS_DES + ,case when A.CMPS_DES_C ='' or A.CMPS_DES_C is null then B.CMPS_DES_C else A.CMPS_DES_C end AS CMPS_DES_C + ,case when A.ATC1_COD ='' or A.ATC1_COD is null then B.ATC1_COD else A.ATC1_COD end AS ATC1_COD + ,case when A.ATC2_COD ='' or A.ATC2_COD is null then B.ATC2_COD else A.ATC2_COD end AS ATC2_COD + ,case when A.ATC3_COD ='' or A.ATC3_COD is null then B.ATC3_COD else A.ATC3_COD end AS ATC3_COD + ,case when A.ATC4_COD ='' or A.ATC4_COD is null then B.ATC4_COD else A.ATC4_COD end AS ATC4_COD + ,case when A.APP1_COD ='' or A.APP1_COD is null then B.APP1_COD else A.APP1_COD end AS APP1_COD + ,case when A.APP2_COD ='' or A.APP2_COD is null then B.APP2_COD else A.APP2_COD end AS APP2_COD + ,case when A.APP3_COD ='' or A.APP3_COD is null then B.APP3_COD else A.APP3_COD end AS APP3_COD + ,case when A.BIO_DESC ='' or A.BIO_DESC is null then B.BIO_DESC else A.BIO_DESC end AS BIO_DESC + ,case when A.GENE_ORIG_DESC ='' or A.GENE_ORIG_DESC is null then B.GENE_ORIG_DESC else A.GENE_ORIG_DESC end AS GENE_ORIG_DESC + ,case when A.ETH_OTC_DESC ='' or A.ETH_OTC_DESC is null then B.ETH_OTC_DESC else A.ETH_OTC_DESC end AS ETH_OTC_DESC + ,case when A.NRDL_DESC ='' or A.NRDL_DESC is null then B.NRDL_DESC else A.NRDL_DESC end AS NRDL_DESC + ,case when A.NRDL_ENTRY_DATE='' or A.NRDL_ENTRY_DATE is null then B.NRDL_ENTRY_DATE else A.NRDL_ENTRY_DATE end AS NRDL_ENTRY_DATE + ,case when A.EDL_DESC ='' or A.EDL_DESC is null then B.EDL_DESC else A.EDL_DESC end AS EDL_DESC + ,case when A.TCM_DESC ='' or A.TCM_DESC is null then B.TCM_DESC else A.TCM_DESC end AS TCM_DESC + ,case when A.PAED_DESC ='' or A.PAED_DESC is null then B.PAED_DESC else A.PAED_DESC end AS PAED_DESC + ,case when A.GQCE_DESC ='' or A.GQCE_DESC is null then B.GQCE_DESC else A.GQCE_DESC end AS GQCE_DESC + ,case when A.VBP_DESC ='' or A.VBP_DESC is null then B.VBP_DESC else A.VBP_DESC end AS VBP_DESC + ,case when A.MANU_COD ='' or A.MANU_COD is null then B.MANU_COD else A.MANU_COD end AS MANU_COD + ,case when A.MANU_DES ='' or A.MANU_DES is null then B.MANU_DES else A.MANU_DES end AS MANU_DES + ,case when A.MANU_DES_C ='' or A.MANU_DES_C is null then B.MANU_DES_C else A.MANU_DES_C end AS MANU_DES_C + ,case when A.MNFL_COD ='' or A.MNFL_COD is null then B.MNFL_COD else A.MNFL_COD end AS MNFL_COD + ,case when A.MNFL_DES ='' or A.MNFL_DES is null then B.MNFL_DES else A.MNFL_DES end AS MNFL_DES + ,case when A.CORP_COD ='' or A.CORP_COD is null then B.CORP_COD else A.CORP_COD end AS CORP_COD -- THC存在CORP_COD 归属不一致问题 + ,REPLACE( case when A.CORP_DES ='' or A.CORP_DES is null then B.CORP_DES else A.CORP_DES end ,' GROUP', '' ) as CORP_DES -- 消除group + ,case when A.CORP_DES_C ='' or A.CORP_DES_C is null then B.CORP_DES_C else A.CORP_DES_C end AS CORP_DES_C + ,case when A.BRANDTYPE ='' or A.BRANDTYPE is null then B.BRANDTYPE else A.BRANDTYPE end AS BRANDTYPE + ,case when A.IS_AZ ='' or A.IS_AZ is null then B.IS_AZ else A.IS_AZ end AS IS_AZ + ,case when A.AZ_MAIN ='' or A.AZ_MAIN is null then B.AZ_MAIN else A.AZ_MAIN end AS AZ_MAIN + ,case when A.ATC1_DES ='' or A.ATC1_DES is null then B.ATC1_DES else A.ATC1_DES end AS ATC1_DES + ,case when A.ATC1_DES_C ='' or A.ATC1_DES_C is null then B.ATC1_DES_C else A.ATC1_DES_C end AS ATC1_DES_C + ,case when A.ATC2_DES ='' or A.ATC2_DES is null then B.ATC2_DES else A.ATC2_DES end AS ATC2_DES + ,case when A.ATC2_DES_C ='' or A.ATC2_DES_C is null then B.ATC2_DES_C else A.ATC2_DES_C end AS ATC2_DES_C + ,case when A.ATC3_DES ='' or A.ATC3_DES is null then B.ATC3_DES else A.ATC3_DES end AS ATC3_DES + ,case when A.ATC3_DES_C ='' or A.ATC3_DES_C is null then B.ATC3_DES_C else A.ATC3_DES_C end AS ATC3_DES_C + ,case when A.ATC4_DES ='' or A.ATC4_DES is null then B.ATC4_DES else A.ATC4_DES end AS ATC4_DES + ,case when A.ATC4_DES_C ='' or A.ATC4_DES_C is null then B.ATC4_DES_C else A.ATC4_DES_C end AS ATC4_DES_C + ,case when A.APP1_DES ='' or A.APP1_DES is null then B.APP1_DES else A.APP1_DES end AS APP1_DES + ,case when A.APP1_DES_C ='' or A.APP1_DES_C is null then B.APP1_DES_C else A.APP1_DES_C end AS APP1_DES_C + ,case when A.APP2_DES ='' or A.APP2_DES is null then B.APP2_DES else A.APP2_DES end AS APP2_DES + ,case when A.APP2_DES_C ='' or A.APP2_DES_C is null then B.APP2_DES_C else A.APP2_DES_C end AS APP2_DES_C + ,case when A.APP3_DES ='' or A.APP3_DES is null then B.APP3_DES else A.APP3_DES end AS APP3_DES + ,case when A.APP3_DES_C ='' or A.APP3_DES_C is null then B.APP3_DES_C else A.APP3_DES_C end AS APP3_DES_C + ,case when A.GEN_RN ='' or A.GEN_RN is null then B.GEN_RN else A.GEN_RN end AS GEN_RN +FROM dm.dm_td_external_packinfo_temp a +LEFT JOIN temp B +ON B.PACK_COD = A.PACK_COD ; + +insert overwrite dm.dm_td_external_packinfo_temp( + PACK_COD ,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,PROD_DES,PROD_DES_C,CMPS_COD,CMPS_DES,CMPS_DES_C,ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD, + APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC,ETH_OTC_DESC,NRDL_DESC,NRDL_ENTRY_DATE,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC, + VBP_DESC,MANU_COD,MANU_DES,MANU_DES_C,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,CORP_DES_C,BRANDTYPE,IS_AZ,AZ_MAIN,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,GEN_RN +) +select * from tmp.tmp_county_dm_td_external_packinfo + +-- COMMAND ---------- + +-------------------------------------------------------------补充THC部分缺失的pack 维度-------------------------------------------------------------------------------------------- +--01 根据主表数据(带多个source)关联chpa的pack_porperty表,取出相关维度 +--02 按照步骤1,chpa中没有的packcode,他的维度字段会被置为空,所以要关联我们自己处理好的维度表,来补充相关维度 +insert overwrite table tmp.tmp_thc_dm_td_external_packinfo +with temp as ( -- 临时表补充维度 + SELECT + iqvia_pack_code PACK_COD, + MAX(B.PACK_DES) PACK_DES, + MAX(B.STGH_DES) STGH_DES, + MAX(B.PACK_LCH) PACK_LCH, + MAX(B.iqvia_prod_code) PROD_COD, + MAX(B.PROD_DES) PROD_DES, + MAX(B.PROD_DES_C) PROD_DES_C, + MAX(B.CMPS_COD) CMPS_COD, + MAX(B.CMPS_DES) CMPS_DES, + MAX(B.CMPS_DES_C) CMPS_DES_C, + MAX(B.ATC1_COD) ATC1_COD, + MAX(B.ATC2_COD) ATC2_COD, + MAX(B.ATC3_COD) ATC3_COD, + MAX(B.ATC4_COD) ATC4_COD, + MAX(B.APP1_COD) APP1_COD, + MAX(B.APP2_COD) APP2_COD, + MAX(B.APP3_COD) APP3_COD, + MAX(B.BIO_DESC) BIO_DESC, + MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC, + MAX(B.ETH_OTC_DESC) ETH_OTC_DESC, + MAX(B.NRDL_DESC) NRDL_DESC, + null as NRDL_ENTRY_DATE, + MAX(B.EDL_DESC) EDL_DESC, + MAX(B.TCM_DESC) TCM_DESC, + MAX(B.PAED_DESC) PAED_DESC, + MAX(B.GQCE_DESC) GQCE_DESC, + NULL AS VBP_DESC, + MAX(B.MANU_COD) MANU_COD, + MAX(B.MANU_DES) MANU_DES, + MAX(B.MANU_DES_C) MANU_DES_C, + MAX(B.MNFL_COD) MNFL_COD, + MAX(B.MNFL_DES) MNFL_DES, + max(B.CORP_COD) as CORP_COD, + max(B.CORP_DES) as CORP_DES, + --coalesce(MAX(C.CORP_COD) ,MAX(B.CORP_COD) ) CORP_COD, -- THC存在CORP_COD 归属不一致问题 + --REPLACE( coalesce( MAX(C.CORP_DES) ,MAX(B.CORP_DES) ) , ' GROUP', '' ) as CORP_DES, + MAX(B.CORP_DES_C) CORP_DES_C, + null as BRANDTYPE, + null as IS_AZ, + null as AZ_MAIN, + MAX(B.ATC1_DES) ATC1_DES, + MAX(B.ATC1_DES_C) ATC1_DES_C, + MAX(B.ATC2_DES) ATC2_DES, + MAX(B.ATC2_DES_C) ATC2_DES_C, + MAX(B.ATC3_DES) ATC3_DES, + MAX(B.ATC3_DES_C) ATC3_DES_C, + MAX(B.ATC4_DES) ATC4_DES, + MAX(B.ATC4_DES_C) ATC4_DES_C, + MAX(B.APP1_DES) APP1_DES, + MAX(B.APP1_DES_C) APP1_DES_C, + MAX(B.APP2_DES) APP2_DES, + MAX(B.APP2_DES_C) APP2_DES_C, + MAX(B.APP3_DES) APP3_DES, + MAX(B.APP3_DES_C) APP3_DES_C, + CASE WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 +END GEN_RN +FROM dwd.dwd_gnd_ext_thc_pack_property B + GROUP BY B.iqvia_pack_code +) +select + A.PACK_COD + ,case when A.PACK_DES ='' or A.PACK_DES is null then B.PACK_DES else A.PACK_DES end AS PACK_DES + ,case when A.STGH_DES ='' or A.STGH_DES is null then B.STGH_DES else A.STGH_DES end AS STGH_DES + ,case when A.PACK_LCH ='' or A.PACK_LCH is null then B.PACK_LCH else A.PACK_LCH end AS PACK_LCH + ,case when A.PROD_COD ='' or A.PROD_COD is null then B.PROD_COD else A.PROD_COD end AS PROD_COD + ,case when A.PROD_DES ='' or A.PROD_DES is null then B.PROD_DES else A.PROD_DES end AS PROD_DES + ,case when A.PROD_DES_C ='' or A.PROD_DES_C is null then B.PROD_DES_C else A.PROD_DES_C end AS PROD_DES_C + ,case when A.CMPS_COD ='' or A.CMPS_COD is null then B.CMPS_COD else A.CMPS_COD end AS CMPS_COD + ,case when A.CMPS_DES ='' or A.CMPS_DES is null then B.CMPS_DES else A.CMPS_DES end AS CMPS_DES + ,case when A.CMPS_DES_C ='' or A.CMPS_DES_C is null then B.CMPS_DES_C else A.CMPS_DES_C end AS CMPS_DES_C + ,case when A.ATC1_COD ='' or A.ATC1_COD is null then B.ATC1_COD else A.ATC1_COD end AS ATC1_COD + ,case when A.ATC2_COD ='' or A.ATC2_COD is null then B.ATC2_COD else A.ATC2_COD end AS ATC2_COD + ,case when A.ATC3_COD ='' or A.ATC3_COD is null then B.ATC3_COD else A.ATC3_COD end AS ATC3_COD + ,case when A.ATC4_COD ='' or A.ATC4_COD is null then B.ATC4_COD else A.ATC4_COD end AS ATC4_COD + ,case when A.APP1_COD ='' or A.APP1_COD is null then B.APP1_COD else A.APP1_COD end AS APP1_COD + ,case when A.APP2_COD ='' or A.APP2_COD is null then B.APP2_COD else A.APP2_COD end AS APP2_COD + ,case when A.APP3_COD ='' or A.APP3_COD is null then B.APP3_COD else A.APP3_COD end AS APP3_COD + ,case when A.BIO_DESC ='' or A.BIO_DESC is null then B.BIO_DESC else A.BIO_DESC end AS BIO_DESC + ,case when A.GENE_ORIG_DESC ='' or A.GENE_ORIG_DESC is null then B.GENE_ORIG_DESC else A.GENE_ORIG_DESC end AS GENE_ORIG_DESC + ,case when A.ETH_OTC_DESC ='' or A.ETH_OTC_DESC is null then B.ETH_OTC_DESC else A.ETH_OTC_DESC end AS ETH_OTC_DESC + ,case when A.NRDL_DESC ='' or A.NRDL_DESC is null then B.NRDL_DESC else A.NRDL_DESC end AS NRDL_DESC + ,case when A.NRDL_ENTRY_DATE='' or A.NRDL_ENTRY_DATE is null then B.NRDL_ENTRY_DATE else A.NRDL_ENTRY_DATE end AS NRDL_ENTRY_DATE + ,case when A.EDL_DESC ='' or A.EDL_DESC is null then B.EDL_DESC else A.EDL_DESC end AS EDL_DESC + ,case when A.TCM_DESC ='' or A.TCM_DESC is null then B.TCM_DESC else A.TCM_DESC end AS TCM_DESC + ,case when A.PAED_DESC ='' or A.PAED_DESC is null then B.PAED_DESC else A.PAED_DESC end AS PAED_DESC + ,case when A.GQCE_DESC ='' or A.GQCE_DESC is null then B.GQCE_DESC else A.GQCE_DESC end AS GQCE_DESC + ,case when A.VBP_DESC ='' or A.VBP_DESC is null then B.VBP_DESC else A.VBP_DESC end AS VBP_DESC + ,case when A.MANU_COD ='' or A.MANU_COD is null then B.MANU_COD else A.MANU_COD end AS MANU_COD + ,case when A.MANU_DES ='' or A.MANU_DES is null then B.MANU_DES else A.MANU_DES end AS MANU_DES + ,case when A.MANU_DES_C ='' or A.MANU_DES_C is null then B.MANU_DES_C else A.MANU_DES_C end AS MANU_DES_C + ,case when A.MNFL_COD ='' or A.MNFL_COD is null then B.MNFL_COD else A.MNFL_COD end AS MNFL_COD + ,case when A.MNFL_DES ='' or A.MNFL_DES is null then B.MNFL_DES else A.MNFL_DES end AS MNFL_DES + ,case when A.CORP_COD ='' or A.CORP_COD is null then B.CORP_COD else A.CORP_COD end AS CORP_COD -- THC存在CORP_COD 归属不一致问题 + ,REPLACE( case when A.CORP_DES ='' or A.CORP_DES is null then B.CORP_DES else A.CORP_DES end ,' GROUP', '' ) as CORP_DES -- 消除group + ,case when A.CORP_DES_C ='' or A.CORP_DES_C is null then B.CORP_DES_C else A.CORP_DES_C end AS CORP_DES_C + ,case when A.BRANDTYPE ='' or A.BRANDTYPE is null then B.BRANDTYPE else A.BRANDTYPE end AS BRANDTYPE + ,case when A.IS_AZ ='' or A.IS_AZ is null then B.IS_AZ else A.IS_AZ end AS IS_AZ + ,case when A.AZ_MAIN ='' or A.AZ_MAIN is null then B.AZ_MAIN else A.AZ_MAIN end AS AZ_MAIN + ,case when A.ATC1_DES ='' or A.ATC1_DES is null then B.ATC1_DES else A.ATC1_DES end AS ATC1_DES + ,case when A.ATC1_DES_C ='' or A.ATC1_DES_C is null then B.ATC1_DES_C else A.ATC1_DES_C end AS ATC1_DES_C + ,case when A.ATC2_DES ='' or A.ATC2_DES is null then B.ATC2_DES else A.ATC2_DES end AS ATC2_DES + ,case when A.ATC2_DES_C ='' or A.ATC2_DES_C is null then B.ATC2_DES_C else A.ATC2_DES_C end AS ATC2_DES_C + ,case when A.ATC3_DES ='' or A.ATC3_DES is null then B.ATC3_DES else A.ATC3_DES end AS ATC3_DES + ,case when A.ATC3_DES_C ='' or A.ATC3_DES_C is null then B.ATC3_DES_C else A.ATC3_DES_C end AS ATC3_DES_C + ,case when A.ATC4_DES ='' or A.ATC4_DES is null then B.ATC4_DES else A.ATC4_DES end AS ATC4_DES + ,case when A.ATC4_DES_C ='' or A.ATC4_DES_C is null then B.ATC4_DES_C else A.ATC4_DES_C end AS ATC4_DES_C + ,case when A.APP1_DES ='' or A.APP1_DES is null then B.APP1_DES else A.APP1_DES end AS APP1_DES + ,case when A.APP1_DES_C ='' or A.APP1_DES_C is null then B.APP1_DES_C else A.APP1_DES_C end AS APP1_DES_C + ,case when A.APP2_DES ='' or A.APP2_DES is null then B.APP2_DES else A.APP2_DES end AS APP2_DES + ,case when A.APP2_DES_C ='' or A.APP2_DES_C is null then B.APP2_DES_C else A.APP2_DES_C end AS APP2_DES_C + ,case when A.APP3_DES ='' or A.APP3_DES is null then B.APP3_DES else A.APP3_DES end AS APP3_DES + ,case when A.APP3_DES_C ='' or A.APP3_DES_C is null then B.APP3_DES_C else A.APP3_DES_C end AS APP3_DES_C + ,case when A.GEN_RN ='' or A.GEN_RN is null then B.GEN_RN else A.GEN_RN end AS GEN_RN +FROM dm.dm_td_external_packinfo_temp a +LEFT JOIN temp B +ON B.PACK_COD = A.PACK_COD ; + +insert overwrite dm.dm_td_external_packinfo_temp( + PACK_COD ,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,PROD_DES,PROD_DES_C,CMPS_COD,CMPS_DES,CMPS_DES_C,ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD, + APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC,ETH_OTC_DESC,NRDL_DESC,NRDL_ENTRY_DATE,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC, + VBP_DESC,MANU_COD,MANU_DES,MANU_DES_C,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,CORP_DES_C,BRANDTYPE,IS_AZ,AZ_MAIN,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,GEN_RN +) +select * from tmp.tmp_thc_dm_td_external_packinfo + +-- COMMAND ---------- + +-------------------------------------------------------------补充CHC部分缺失的维度数据-------------------------------------------------------------------------------------------- +insert overwrite table tmp.tmp_chc_dm_td_external_packinfo +with temp as ( -- dm.dm_td_external_packinfo_temp 该表数据 + --01首先是根据主表数据(带多个source)关联chpa的pack_porperty表,取出相关维度 + --02chpa中,没有的code,他的维度字段会被置为空,所以要关联我们自己处理好的维度表,来补充相关维度 + SELECT + iqvia_pack_code PACK_COD, + MAX(B.PACK_DES) PACK_DES, + MAX(B.STGH_DES) STGH_DES, + MAX(B.PACK_LCH) PACK_LCH, + MAX(B.iqvia_prod_code) PROD_COD, + MAX(B.PROD_DES) PROD_DES, + MAX(B.PROD_DES_C) PROD_DES_C, + MAX(B.CMPS_COD) CMPS_COD, + MAX(B.CMPS_DES) CMPS_DES, + MAX(B.CMPS_DES_C) CMPS_DES_C, + MAX(B.ATC1_COD) ATC1_COD, + MAX(B.ATC2_COD) ATC2_COD, + MAX(B.ATC3_COD) ATC3_COD, + MAX(B.ATC4_COD) ATC4_COD, + MAX(B.APP1_COD) APP1_COD, + MAX(B.APP2_COD) APP2_COD, + MAX(B.APP3_COD) APP3_COD, + MAX(B.BIO_DESC) BIO_DESC, + MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC, + MAX(B.ETH_OTC_DESC) ETH_OTC_DESC, + MAX(B.NRDL_DESC) NRDL_DESC, + null as NRDL_ENTRY_DATE, + MAX(B.EDL_DESC) EDL_DESC, + MAX(B.TCM_DESC) TCM_DESC, + MAX(B.PAED_DESC) PAED_DESC, + MAX(B.GQCE_DESC) GQCE_DESC, + NULL AS VBP_DESC, + MAX(B.MANU_COD) MANU_COD, + MAX(B.MANU_DES) MANU_DES, + MAX(B.MANU_DES_C) MANU_DES_C, + MAX(B.MNFL_COD) MNFL_COD, + MAX(B.MNFL_DES) MNFL_DES, + max(B.CORP_COD) as CORP_COD, + max(B.CORP_DES) as CORP_DES, + -- coalesce(MAX(C.CORP_COD) ,MAX(B.CORP_COD) ) CORP_COD, -- THC存在CORP_COD 归属不一致问题 + -- REPLACE( coalesce( MAX(C.CORP_DES) ,MAX(B.CORP_DES) ) , ' GROUP', '' ) as CORP_DES, + MAX(B.CORP_DES_C) CORP_DES_C, + null as BRANDTYPE, + null as IS_AZ, + null as AZ_MAIN, + MAX(B.ATC1_DES) ATC1_DES, + MAX(B.ATC1_DES_C) ATC1_DES_C, + MAX(B.ATC2_DES) ATC2_DES, + MAX(B.ATC2_DES_C) ATC2_DES_C, + MAX(B.ATC3_DES) ATC3_DES, + MAX(B.ATC3_DES_C) ATC3_DES_C, + MAX(B.ATC4_DES) ATC4_DES, + MAX(B.ATC4_DES_C) ATC4_DES_C, + MAX(B.APP1_DES) APP1_DES, + MAX(B.APP1_DES_C) APP1_DES_C, + MAX(B.APP2_DES) APP2_DES, + MAX(B.APP2_DES_C) APP2_DES_C, + MAX(B.APP3_DES) APP3_DES, + MAX(B.APP3_DES_C) APP3_DES_C, + CASE WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 +END GEN_RN +FROM dwd.dwd_gnd_ext_chc_pack_property B +GROUP BY B.iqvia_pack_code +) +select + A.PACK_COD + ,case when A.PACK_DES ='' or A.PACK_DES is null then B.PACK_DES else A.PACK_DES end AS PACK_DES + ,case when A.STGH_DES ='' or A.STGH_DES is null then B.STGH_DES else A.STGH_DES end AS STGH_DES + ,case when A.PACK_LCH ='' or A.PACK_LCH is null then B.PACK_LCH else A.PACK_LCH end AS PACK_LCH + ,case when A.PROD_COD ='' or A.PROD_COD is null then B.PROD_COD else A.PROD_COD end AS PROD_COD + ,case when A.PROD_DES ='' or A.PROD_DES is null then B.PROD_DES else A.PROD_DES end AS PROD_DES + ,case when A.PROD_DES_C ='' or A.PROD_DES_C is null then B.PROD_DES_C else A.PROD_DES_C end AS PROD_DES_C + ,case when A.CMPS_COD ='' or A.CMPS_COD is null then B.CMPS_COD else A.CMPS_COD end AS CMPS_COD + ,case when A.CMPS_DES ='' or A.CMPS_DES is null then B.CMPS_DES else A.CMPS_DES end AS CMPS_DES + ,case when A.CMPS_DES_C ='' or A.CMPS_DES_C is null then B.CMPS_DES_C else A.CMPS_DES_C end AS CMPS_DES_C + ,case when A.ATC1_COD ='' or A.ATC1_COD is null then B.ATC1_COD else A.ATC1_COD end AS ATC1_COD + ,case when A.ATC2_COD ='' or A.ATC2_COD is null then B.ATC2_COD else A.ATC2_COD end AS ATC2_COD + ,case when A.ATC3_COD ='' or A.ATC3_COD is null then B.ATC3_COD else A.ATC3_COD end AS ATC3_COD + ,case when A.ATC4_COD ='' or A.ATC4_COD is null then B.ATC4_COD else A.ATC4_COD end AS ATC4_COD + ,case when A.APP1_COD ='' or A.APP1_COD is null then B.APP1_COD else A.APP1_COD end AS APP1_COD + ,case when A.APP2_COD ='' or A.APP2_COD is null then B.APP2_COD else A.APP2_COD end AS APP2_COD + ,case when A.APP3_COD ='' or A.APP3_COD is null then B.APP3_COD else A.APP3_COD end AS APP3_COD + ,case when A.BIO_DESC ='' or A.BIO_DESC is null then B.BIO_DESC else A.BIO_DESC end AS BIO_DESC + ,case when A.GENE_ORIG_DESC ='' or A.GENE_ORIG_DESC is null then B.GENE_ORIG_DESC else A.GENE_ORIG_DESC end AS GENE_ORIG_DESC + ,case when A.ETH_OTC_DESC ='' or A.ETH_OTC_DESC is null then B.ETH_OTC_DESC else A.ETH_OTC_DESC end AS ETH_OTC_DESC + ,case when A.NRDL_DESC ='' or A.NRDL_DESC is null then B.NRDL_DESC else A.NRDL_DESC end AS NRDL_DESC + ,case when A.NRDL_ENTRY_DATE='' or A.NRDL_ENTRY_DATE is null then B.NRDL_ENTRY_DATE else A.NRDL_ENTRY_DATE end AS NRDL_ENTRY_DATE + ,case when A.EDL_DESC ='' or A.EDL_DESC is null then B.EDL_DESC else A.EDL_DESC end AS EDL_DESC + ,case when A.TCM_DESC ='' or A.TCM_DESC is null then B.TCM_DESC else A.TCM_DESC end AS TCM_DESC + ,case when A.PAED_DESC ='' or A.PAED_DESC is null then B.PAED_DESC else A.PAED_DESC end AS PAED_DESC + ,case when A.GQCE_DESC ='' or A.GQCE_DESC is null then B.GQCE_DESC else A.GQCE_DESC end AS GQCE_DESC + ,case when A.VBP_DESC ='' or A.VBP_DESC is null then B.VBP_DESC else A.VBP_DESC end AS VBP_DESC + ,case when A.MANU_COD ='' or A.MANU_COD is null then B.MANU_COD else A.MANU_COD end AS MANU_COD + ,case when A.MANU_DES ='' or A.MANU_DES is null then B.MANU_DES else A.MANU_DES end AS MANU_DES + ,case when A.MANU_DES_C ='' or A.MANU_DES_C is null then B.MANU_DES_C else A.MANU_DES_C end AS MANU_DES_C + ,case when A.MNFL_COD ='' or A.MNFL_COD is null then B.MNFL_COD else A.MNFL_COD end AS MNFL_COD + ,case when A.MNFL_DES ='' or A.MNFL_DES is null then B.MNFL_DES else A.MNFL_DES end AS MNFL_DES + ,case when A.CORP_COD ='' or A.CORP_COD is null then B.CORP_COD else A.CORP_COD end AS CORP_COD -- THC存在CORP_COD 归属不一致问题 + ,REPLACE( case when A.CORP_DES ='' or A.CORP_DES is null then B.CORP_DES else A.CORP_DES end ,' GROUP', '' ) as CORP_DES -- 消除group + ,case when A.CORP_DES_C ='' or A.CORP_DES_C is null then B.CORP_DES_C else A.CORP_DES_C end AS CORP_DES_C + ,case when A.BRANDTYPE ='' or A.BRANDTYPE is null then B.BRANDTYPE else A.BRANDTYPE end AS BRANDTYPE + ,case when A.IS_AZ ='' or A.IS_AZ is null then B.IS_AZ else A.IS_AZ end AS IS_AZ + ,case when A.AZ_MAIN ='' or A.AZ_MAIN is null then B.AZ_MAIN else A.AZ_MAIN end AS AZ_MAIN + ,case when A.ATC1_DES ='' or A.ATC1_DES is null then B.ATC1_DES else A.ATC1_DES end AS ATC1_DES + ,case when A.ATC1_DES_C ='' or A.ATC1_DES_C is null then B.ATC1_DES_C else A.ATC1_DES_C end AS ATC1_DES_C + ,case when A.ATC2_DES ='' or A.ATC2_DES is null then B.ATC2_DES else A.ATC2_DES end AS ATC2_DES + ,case when A.ATC2_DES_C ='' or A.ATC2_DES_C is null then B.ATC2_DES_C else A.ATC2_DES_C end AS ATC2_DES_C + ,case when A.ATC3_DES ='' or A.ATC3_DES is null then B.ATC3_DES else A.ATC3_DES end AS ATC3_DES + ,case when A.ATC3_DES_C ='' or A.ATC3_DES_C is null then B.ATC3_DES_C else A.ATC3_DES_C end AS ATC3_DES_C + ,case when A.ATC4_DES ='' or A.ATC4_DES is null then B.ATC4_DES else A.ATC4_DES end AS ATC4_DES + ,case when A.ATC4_DES_C ='' or A.ATC4_DES_C is null then B.ATC4_DES_C else A.ATC4_DES_C end AS ATC4_DES_C + ,case when A.APP1_DES ='' or A.APP1_DES is null then B.APP1_DES else A.APP1_DES end AS APP1_DES + ,case when A.APP1_DES_C ='' or A.APP1_DES_C is null then B.APP1_DES_C else A.APP1_DES_C end AS APP1_DES_C + ,case when A.APP2_DES ='' or A.APP2_DES is null then B.APP2_DES else A.APP2_DES end AS APP2_DES + ,case when A.APP2_DES_C ='' or A.APP2_DES_C is null then B.APP2_DES_C else A.APP2_DES_C end AS APP2_DES_C + ,case when A.APP3_DES ='' or A.APP3_DES is null then B.APP3_DES else A.APP3_DES end AS APP3_DES + ,case when A.APP3_DES_C ='' or A.APP3_DES_C is null then B.APP3_DES_C else A.APP3_DES_C end AS APP3_DES_C + ,case when A.GEN_RN ='' or A.GEN_RN is null then B.GEN_RN else A.GEN_RN end AS GEN_RN +FROM dm.dm_td_external_packinfo_temp a +LEFT JOIN temp B +ON B.PACK_COD = A.PACK_COD ; + +insert overwrite dm.dm_td_external_packinfo_temp( + PACK_COD ,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,PROD_DES,PROD_DES_C,CMPS_COD,CMPS_DES,CMPS_DES_C,ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD, + APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC,ETH_OTC_DESC,NRDL_DESC,NRDL_ENTRY_DATE,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC, + VBP_DESC,MANU_COD,MANU_DES,MANU_DES_C,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,CORP_DES_C,BRANDTYPE,IS_AZ,AZ_MAIN,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,GEN_RN +) +select * from tmp.tmp_chc_dm_td_external_packinfo + + + +-- COMMAND ---------- + +-----------------------------------------------retail 补齐 retail 缺失部分pack 维度------------------------------------------------ +-------------将补全数据存入临时表,再写入目标表格---------------- +insert overwrite table tmp.tmp_retail_dm_td_external_packinfo +WITH dm_retail_pack AS ( + SELECT +iqvia_pack_code PACK_COD,MAX(B.PACK_DES) PACK_DES,MAX(B.STGH_DES) STGH_DES,MAX(B.PACK_LCH) PACK_LCH,MAX(B.iqvia_prod_code) PROD_COD,MAX(B.PROD_DES) PROD_DES,MAX(B.PROD_DES_C) PROD_DES_C,MAX(B.CMPS_COD) CMPS_COD, +MAX(B.CMPS_DES) CMPS_DES,MAX(B.CMPS_DES_C) CMPS_DES_C,MAX(B.ATC1_COD) ATC1_COD,MAX(B.ATC2_COD) ATC2_COD,MAX(B.ATC3_COD) ATC3_COD,MAX(B.ATC4_COD) ATC4_COD,MAX(B.APP1_COD) APP1_COD,MAX(B.APP2_COD) APP2_COD, +MAX(B.APP3_COD) APP3_COD,MAX(B.BIO_DESC) BIO_DESC,MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC,MAX(B.ETH_OTC_DESC) ETH_OTC_DESC,MAX(B.NRDL_DESC) NRDL_DESC,MAX(B.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE,MAX(B.EDL_DESC) EDL_DESC, +MAX(B.TCM_DESC) TCM_DESC,MAX(B.PAED_DESC) PAED_DESC,MAX(B.GQCE_DESC) GQCE_DESC, +case when MAX(B.VBP_DESC) = 'VBP-IN' then 'VBP-IN' when MAX(B.VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' WHEN MAX(B.VBP_DESC) IS NOT NULL THEN 'Non VBP' ELSE NULL end as VBP_DESC, +MAX(B.MANU_COD) MANU_COD,MAX(B.MANU_DES) MANU_DES,MAX(B.MANU_DES_C) MANU_DES_C,MAX(B.MNFL_COD) MNFL_COD, +MAX(B.MNFL_DES) MNFL_DES,MAX(B.CORP_COD) CORP_COD,MAX(B.CORP_DES) CORP_DES,MAX(B.CORP_DES_C) CORP_DES_C,MAX(B.BRANDTYPE) BRANDTYPE,MAX(B.IS_AZ) IS_AZ,MAX(B.AZ_MAIN) AZ_MAIN,MAX(B.ATC1_DES) ATC1_DES, +MAX(B.ATC1_DES_C) ATC1_DES_C,MAX(B.ATC2_DES) ATC2_DES,MAX(B.ATC2_DES_C) ATC2_DES_C,MAX(B.ATC3_DES) ATC3_DES,MAX(B.ATC3_DES_C) ATC3_DES_C,MAX(B.ATC4_DES) ATC4_DES,MAX(B.ATC4_DES_C) ATC4_DES_C,MAX(B.APP1_DES) APP1_DES, +MAX(B.APP1_DES_C) APP1_DES_C,MAX(B.APP2_DES) APP2_DES,MAX(B.APP2_DES_C) APP2_DES_C,MAX(B.APP3_DES) APP3_DES,MAX(B.APP3_DES_C) APP3_DES_C, +CASE WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 ELSE 5 END GEN_RN +FROM dm.dm_zk_retail_pack_property B +GROUP BY B.iqvia_pack_code +union + SELECT +B.iqvia_pack_code PACK_COD,MAX(B.PACK_DES) PACK_DES,MAX(B.STGH_DES) STGH_DES,MAX(B.PACK_LCH) PACK_LCH,MAX(B.PROD_COD) PROD_COD,MAX(B.PROD_DES) PROD_DES,MAX(B.PROD_DES_C) PROD_DES_C,MAX(B.CMPS_COD) CMPS_COD, +MAX(B.CMPS_DES) CMPS_DES,MAX(B.CMPS_DES_C) CMPS_DES_C,MAX(B.ATC1_COD) ATC1_COD,MAX(B.ATC2_COD) ATC2_COD,MAX(B.ATC3_COD) ATC3_COD,MAX(B.ATC4_COD) ATC4_COD,MAX(B.APP1_COD) APP1_COD,MAX(B.APP2_COD) APP2_COD, +MAX(B.APP3_COD) APP3_COD,MAX(B.BIO_DESC) BIO_DESC,MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC,MAX(B.ETH_OTC_DESC) ETH_OTC_DESC,MAX(B.NRDL_DESC) NRDL_DESC,MAX(B.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE,MAX(B.EDL_DESC) EDL_DESC, +MAX(B.TCM_DESC) TCM_DESC,MAX(B.PAED_DESC) PAED_DESC,MAX(B.GQCE_DESC) GQCE_DESC, +case when MAX(B.VBP_DESC) = 'VBP-IN' then 'VBP-IN' when MAX(B.VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' WHEN MAX(B.VBP_DESC) IS NOT NULL THEN 'Non VBP' ELSE NULL end as VBP_DESC, +MAX(B.MANU_COD) MANU_COD,MAX(B.MANU_DES) MANU_DES,MAX(B.MANU_DES_C) MANU_DES_C,MAX(B.MNFL_COD) MNFL_COD, +MAX(B.MNFL_DES) MNFL_DES,MAX(B.CORP_COD) CORP_COD,MAX(B.CORP_DES) CORP_DES,MAX(B.CORP_DES_C) CORP_DES_C,MAX(B.BRANDTYPE) BRANDTYPE,MAX(B.IS_AZ) IS_AZ,MAX(B.AZ_MAIN) AZ_MAIN,MAX(B.ATC1_DES) ATC1_DES, +MAX(B.ATC1_DES_C) ATC1_DES_C,MAX(B.ATC2_DES) ATC2_DES,MAX(B.ATC2_DES_C) ATC2_DES_C,MAX(B.ATC3_DES) ATC3_DES,MAX(B.ATC3_DES_C) ATC3_DES_C,MAX(B.ATC4_DES) ATC4_DES,MAX(B.ATC4_DES_C) ATC4_DES_C,MAX(B.APP1_DES) APP1_DES, +MAX(B.APP1_DES_C) APP1_DES_C,MAX(B.APP2_DES) APP2_DES,MAX(B.APP2_DES_C) APP2_DES_C,MAX(B.APP3_DES) APP3_DES,MAX(B.APP3_DES_C) APP3_DES_C, +CASE WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 ELSE 5 END GEN_RN +FROM dm.dm_zk_retail_dtp_pack_property B +GROUP BY B.iqvia_pack_code +) +SELECT + A.PACK_COD + ,case when A.PACK_DES ='' or A.PACK_DES is null then B.PACK_DES else A.PACK_DES end AS PACK_DES + ,case when A.STGH_DES ='' or A.STGH_DES is null then B.STGH_DES else A.STGH_DES end AS STGH_DES + ,case when A.PACK_LCH ='' or A.PACK_LCH is null then B.PACK_LCH else A.PACK_LCH end AS PACK_LCH + ,case when A.PROD_COD ='' or A.PROD_COD is null then B.PROD_COD else A.PROD_COD end AS PROD_COD + ,case when A.PROD_DES ='' or A.PROD_DES is null then B.PROD_DES else A.PROD_DES end AS PROD_DES + ,case when A.PROD_DES_C ='' or A.PROD_DES_C is null then B.PROD_DES_C else A.PROD_DES_C end AS PROD_DES_C + ,case when A.CMPS_COD ='' or A.CMPS_COD is null then B.CMPS_COD else A.CMPS_COD end AS CMPS_COD + ,case when A.CMPS_DES ='' or A.CMPS_DES is null then B.CMPS_DES else A.CMPS_DES end AS CMPS_DES + ,case when A.CMPS_DES_C ='' or A.CMPS_DES_C is null then B.CMPS_DES_C else A.CMPS_DES_C end AS CMPS_DES_C + ,case when A.ATC1_COD ='' or A.ATC1_COD is null then B.ATC1_COD else A.ATC1_COD end AS ATC1_COD + ,case when A.ATC2_COD ='' or A.ATC2_COD is null then B.ATC2_COD else A.ATC2_COD end AS ATC2_COD + ,case when A.ATC3_COD ='' or A.ATC3_COD is null then B.ATC3_COD else A.ATC3_COD end AS ATC3_COD + ,case when A.ATC4_COD ='' or A.ATC4_COD is null then B.ATC4_COD else A.ATC4_COD end AS ATC4_COD + ,case when A.APP1_COD ='' or A.APP1_COD is null then B.APP1_COD else A.APP1_COD end AS APP1_COD + ,case when A.APP2_COD ='' or A.APP2_COD is null then B.APP2_COD else A.APP2_COD end AS APP2_COD + ,case when A.APP3_COD ='' or A.APP3_COD is null then B.APP3_COD else A.APP3_COD end AS APP3_COD + ,case when A.BIO_DESC ='' or A.BIO_DESC is null then B.BIO_DESC else A.BIO_DESC end AS BIO_DESC + ,case when A.GENE_ORIG_DESC ='' or A.GENE_ORIG_DESC is null then B.GENE_ORIG_DESC else A.GENE_ORIG_DESC end AS GENE_ORIG_DESC + ,case when A.ETH_OTC_DESC ='' or A.ETH_OTC_DESC is null then B.ETH_OTC_DESC else A.ETH_OTC_DESC end AS ETH_OTC_DESC + ,case when A.NRDL_DESC ='' or A.NRDL_DESC is null then B.NRDL_DESC else A.NRDL_DESC end AS NRDL_DESC + ,case when A.NRDL_ENTRY_DATE='' or A.NRDL_ENTRY_DATE is null then B.NRDL_ENTRY_DATE else A.NRDL_ENTRY_DATE end AS NRDL_ENTRY_DATE + ,case when A.EDL_DESC ='' or A.EDL_DESC is null then B.EDL_DESC else A.EDL_DESC end AS EDL_DESC + ,case when A.TCM_DESC ='' or A.TCM_DESC is null then B.TCM_DESC else A.TCM_DESC end AS TCM_DESC + ,case when A.PAED_DESC ='' or A.PAED_DESC is null then B.PAED_DESC else A.PAED_DESC end AS PAED_DESC + ,case when A.GQCE_DESC ='' or A.GQCE_DESC is null then B.GQCE_DESC else A.GQCE_DESC end AS GQCE_DESC + ,case when A.VBP_DESC ='' or A.VBP_DESC is null then B.VBP_DESC else A.VBP_DESC end AS VBP_DESC + ,case when A.MANU_COD ='' or A.MANU_COD is null then B.MANU_COD else A.MANU_COD end AS MANU_COD + ,case when A.MANU_DES ='' or A.MANU_DES is null then B.MANU_DES else A.MANU_DES end AS MANU_DES + ,case when A.MANU_DES_C ='' or A.MANU_DES_C is null then B.MANU_DES_C else A.MANU_DES_C end AS MANU_DES_C + ,case when A.MNFL_COD ='' or A.MNFL_COD is null then B.MNFL_COD else A.MNFL_COD end AS MNFL_COD + ,case when A.MNFL_DES ='' or A.MNFL_DES is null then B.MNFL_DES else A.MNFL_DES end AS MNFL_DES + ,case when A.CORP_COD ='' or A.CORP_COD is null then B.CORP_COD else A.CORP_COD end AS CORP_COD + ,REPLACE( case when A.CORP_DES ='' or A.CORP_DES is null then B.CORP_DES else A.CORP_DES end ,' GROUP', '' ) as CORP_DES -- 消除group + ,case when A.CORP_DES_C ='' or A.CORP_DES_C is null then B.CORP_DES_C else A.CORP_DES_C end AS CORP_DES_C + ,case when A.BRANDTYPE ='' or A.BRANDTYPE is null then B.BRANDTYPE else A.BRANDTYPE end AS BRANDTYPE + ,case when A.IS_AZ ='' or A.IS_AZ is null then B.IS_AZ else A.IS_AZ end AS IS_AZ + ,case when A.AZ_MAIN ='' or A.AZ_MAIN is null then B.AZ_MAIN else A.AZ_MAIN end AS AZ_MAIN + ,case when A.ATC1_DES ='' or A.ATC1_DES is null then B.ATC1_DES else A.ATC1_DES end AS ATC1_DES + ,case when A.ATC1_DES_C ='' or A.ATC1_DES_C is null then B.ATC1_DES_C else A.ATC1_DES_C end AS ATC1_DES_C + ,case when A.ATC2_DES ='' or A.ATC2_DES is null then B.ATC2_DES else A.ATC2_DES end AS ATC2_DES + ,case when A.ATC2_DES_C ='' or A.ATC2_DES_C is null then B.ATC2_DES_C else A.ATC2_DES_C end AS ATC2_DES_C + ,case when A.ATC3_DES ='' or A.ATC3_DES is null then B.ATC3_DES else A.ATC3_DES end AS ATC3_DES + ,case when A.ATC3_DES_C ='' or A.ATC3_DES_C is null then B.ATC3_DES_C else A.ATC3_DES_C end AS ATC3_DES_C + ,case when A.ATC4_DES ='' or A.ATC4_DES is null then B.ATC4_DES else A.ATC4_DES end AS ATC4_DES + ,case when A.ATC4_DES_C ='' or A.ATC4_DES_C is null then B.ATC4_DES_C else A.ATC4_DES_C end AS ATC4_DES_C + ,case when A.APP1_DES ='' or A.APP1_DES is null then B.APP1_DES else A.APP1_DES end AS APP1_DES + ,case when A.APP1_DES_C ='' or A.APP1_DES_C is null then B.APP1_DES_C else A.APP1_DES_C end AS APP1_DES_C + ,case when A.APP2_DES ='' or A.APP2_DES is null then B.APP2_DES else A.APP2_DES end AS APP2_DES + ,case when A.APP2_DES_C ='' or A.APP2_DES_C is null then B.APP2_DES_C else A.APP2_DES_C end AS APP2_DES_C + ,case when A.APP3_DES ='' or A.APP3_DES is null then B.APP3_DES else A.APP3_DES end AS APP3_DES + ,case when A.APP3_DES_C ='' or A.APP3_DES_C is null then B.APP3_DES_C else A.APP3_DES_C end AS APP3_DES_C + ,case when A.GEN_RN ='' or A.GEN_RN is null then B.GEN_RN else A.GEN_RN end AS GEN_RN +FROM dm.dm_td_external_packinfo_temp a +LEFT JOIN dm_retail_pack B +ON B.PACK_COD = A.PACK_COD ; +insert overwrite dm.dm_td_external_packinfo_temp( + PACK_COD ,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,PROD_DES,PROD_DES_C,CMPS_COD,CMPS_DES,CMPS_DES_C,ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD, + APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC,ETH_OTC_DESC,NRDL_DESC,NRDL_ENTRY_DATE,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC, + VBP_DESC,MANU_COD,MANU_DES,MANU_DES_C,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,CORP_DES_C,BRANDTYPE,IS_AZ,AZ_MAIN,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,GEN_RN +) +select * from tmp.tmp_retail_dm_td_external_packinfo; + + + +-- COMMAND ---------- + + +---------------------------------------------------ec--------------------------------------------------- +insert overwrite table tmp.tmp_ec_dm_td_external_packinfo +WITH dm_ec_pack AS ( +SELECT + iqvia_pack_code PACK_COD, + MAX(B.PACK_DES) PACK_DES, + MAX(B.STGH_DES) STGH_DES, + MAX(B.PACK_LCH) PACK_LCH, + MAX(B.prod_cod) PROD_COD, + MAX(B.PROD_DES) PROD_DES, + MAX(B.PROD_DES_C) PROD_DES_C, + MAX(B.CMPS_COD) CMPS_COD, + MAX(B.CMPS_DES) CMPS_DES, + MAX(B.CMPS_DES_C) CMPS_DES_C, + MAX(B.ATC1_COD) ATC1_COD, + MAX(B.ATC2_COD) ATC2_COD, + MAX(B.ATC3_COD) ATC3_COD, + MAX(B.ATC4_COD) ATC4_COD, + MAX(B.APP1_COD) APP1_COD, + MAX(B.APP2_COD) APP2_COD, + MAX(B.APP3_COD) APP3_COD, + MAX(B.BIO_DESC) BIO_DESC, + MAX(B.GENE_ORIG_DESC) GENE_ORIG_DESC, + MAX(B.ETH_OTC_DESC) ETH_OTC_DESC, + MAX(B.NRDL_DESC) NRDL_DESC, + MAX(B.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE, + MAX(B.EDL_DESC) EDL_DESC, + MAX(B.TCM_DESC) TCM_DESC, + MAX(B.PAED_DESC) PAED_DESC, + MAX(B.GQCE_DESC) GQCE_DESC, + case when MAX(B.VBP_DESC) = 'VBP-IN' then 'VBP-IN' when MAX(B.VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' WHEN MAX(B.VBP_DESC) IS NOT NULL THEN 'Non VBP' ELSE NULL end as VBP_DESC, + MAX(B.MANU_COD) MANU_COD, + MAX(B.MANU_DES) MANU_DES, + MAX(B.MANU_DES_C) MANU_DES_C, + MAX(B.MNFL_COD) MNFL_COD, + MAX(B.MNFL_DES) MNFL_DES, + MAX(B.CORP_COD) CORP_COD, + MAX(B.CORP_DES) CORP_DES, + MAX(B.CORP_DES_C) CORP_DES_C, + MAX(B.BRANDTYPE) BRANDTYPE, + MAX(B.IS_AZ) IS_AZ, + MAX(B.AZ_MAIN) AZ_MAIN, + MAX(B.ATC1_DES) ATC1_DES, + MAX(B.ATC1_DES_C) ATC1_DES_C, + MAX(B.ATC2_DES) ATC2_DES, + MAX(B.ATC2_DES_C) ATC2_DES_C, + MAX(B.ATC3_DES) ATC3_DES, + MAX(B.ATC3_DES_C) ATC3_DES_C, + MAX(B.ATC4_DES) ATC4_DES, + MAX(B.ATC4_DES_C) ATC4_DES_C, + MAX(B.APP1_DES) APP1_DES, + MAX(B.APP1_DES_C) APP1_DES_C, + MAX(B.APP2_DES) APP2_DES, + MAX(B.APP2_DES_C) APP2_DES_C, + MAX(B.APP3_DES) APP3_DES, + MAX(B.APP3_DES_C) APP3_DES_C, + CASE + WHEN MAX(B.GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(B.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(B.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(B.GENE_ORIG_DESC) = 'TCM' THEN 4 ELSE 5 END GEN_RN +FROM dm.dm_zk_ec_pack_property B +GROUP BY B.iqvia_pack_code +) +SELECT + A.PACK_COD + ,NVL(A.PACK_DES,B.PACK_DES) AS PACK_DES + ,NVL(A.STGH_DES,B.STGH_DES) AS STGH_DES + ,NVL(A.PACK_LCH,B.PACK_LCH) AS PACK_LCH + ,NVL(A.PROD_COD,B.PROD_COD) AS PROD_COD + ,NVL(A.PROD_DES,B.PROD_DES ) AS PROD_DES + ,NVL(A.PROD_DES_C,B.PROD_DES_C ) AS PROD_DES_C + ,NVL(A.CMPS_COD,B.CMPS_COD) AS CMPS_COD + ,NVL(A.CMPS_DES,B.CMPS_DES) AS CMPS_DES + ,NVL(A.CMPS_DES_C,B.CMPS_DES_C) AS CMPS_DES_C + ,NVL(A.ATC1_COD,B.ATC1_COD) AS ATC1_COD + ,NVL(A.ATC2_COD,B.ATC2_COD) AS ATC2_COD + ,NVL(A.ATC3_COD,B.ATC3_COD) AS ATC3_COD + ,NVL(A.ATC4_COD,B.ATC4_COD) AS ATC4_COD + ,NVL(A.APP1_COD,B.APP1_COD) AS APP1_COD + ,NVL(A.APP2_COD,B.APP2_COD) AS APP2_COD + ,NVL(A.APP3_COD,B.APP3_COD) AS APP3_COD + ,NVL(A.BIO_DESC,B.BIO_DESC) AS BIO_DESC + ,NVL(A.GENE_ORIG_DESC,B.GENE_ORIG_DESC) AS GENE_ORIG_DESC + ,NVL(A.ETH_OTC_DESC,B.ETH_OTC_DESC) AS ETH_OTC_DESC + ,NVL(A.NRDL_DESC,B.NRDL_DESC) AS NRDL_DESC + ,NVL(A.NRDL_ENTRY_DATE,B.NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE + ,NVL(A.EDL_DESC,B.EDL_DESC) AS EDL_DESC + ,NVL(A.TCM_DESC,B.TCM_DESC) AS TCM_DESC + ,NVL(A.PAED_DESC,B.PAED_DESC) AS PAED_DESC + ,NVL(A.GQCE_DESC,B.GQCE_DESC) AS GQCE_DESC + ,NVL(A.VBP_DESC,B.VBP_DESC) AS VBP_DESC + ,NVL(A.MANU_COD,B.MANU_COD) AS MANU_COD + ,NVL(A.MANU_DES,B.MANU_DES) AS MANU_DES + ,NVL(A.MANU_DES_C,B.MANU_DES_C) AS MANU_DES_C + ,NVL(A.MNFL_COD,B.MNFL_COD) AS MNFL_COD + ,NVL(A.MNFL_DES,B.MNFL_DES) AS MNFL_DES + ,NVL(A.CORP_COD,B.CORP_COD) AS CORP_COD + ,NVL(A.CORP_DES,B.CORP_DES) AS CORP_DES + ,NVL(A.CORP_DES_C,B.CORP_DES_C) AS CORP_DES_C + ,NVL(A.BRANDTYPE,B.BRANDTYPE) AS BRANDTYPE + ,NVL(A.IS_AZ,B.IS_AZ) AS IS_AZ + ,NVL(A.AZ_MAIN,B.AZ_MAIN) AS AZ_MAIN + ,NVL(A.ATC1_DES,B.ATC1_DES) AS ATC1_DES + ,NVL(A.ATC1_DES_C,B.ATC1_DES_C) AS ATC1_DES_C + ,NVL(A.ATC2_DES,B.ATC2_DES) AS ATC2_DES + ,NVL(A.ATC2_DES_C,B.ATC2_DES_C) AS ATC2_DES_C + ,NVL(A.ATC3_DES,B.ATC3_DES) AS ATC3_DES + ,NVL(A.ATC3_DES_C,B.ATC3_DES_C) AS ATC3_DES_C + ,NVL(A.ATC4_DES,B.ATC4_DES) AS ATC4_DES + ,NVL(A.ATC4_DES_C,B.ATC4_DES_C) AS ATC4_DES_C + ,NVL(A.APP1_DES,B.APP1_DES) AS APP1_DES + ,NVL(A.APP1_DES_C,B.APP1_DES_C) AS APP1_DES_C + ,NVL(A.APP2_DES,B.APP2_DES) AS APP2_DES + ,NVL(A.APP2_DES_C,B.APP2_DES_C) AS APP2_DES_C + ,NVL(A.APP3_DES,B.APP3_DES) AS APP3_DES + ,NVL(A.APP3_DES_C,B.APP3_DES_C) AS APP3_DES_C + ,NVL(A.GEN_RN,B.GEN_RN) AS GEN_RN +FROM dm.dm_td_external_packinfo_temp a +LEFT JOIN dm_ec_pack B +ON B.PACK_COD = A.PACK_COD ; + +insert overwrite dm.dm_td_external_packinfo_temp( + PACK_COD ,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,PROD_DES,PROD_DES_C,CMPS_COD,CMPS_DES,CMPS_DES_C,ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD, + APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC,ETH_OTC_DESC,NRDL_DESC,NRDL_ENTRY_DATE,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC, + VBP_DESC,MANU_COD,MANU_DES,MANU_DES_C,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,CORP_DES_C,BRANDTYPE,IS_AZ,AZ_MAIN,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,GEN_RN +) +select * from tmp.tmp_ec_dm_td_external_packinfo; + + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # AIA渠道 + +-- COMMAND ---------- + + +--PACK_COD是唯一的,不允许重复 +create or replace temporary view aia_external_packinfo_1 as +select + case when PACK_COD like '%OTHERS%' or length(PACK_COD) >= 12 or (not PACK_COD REGEXP '^[0-9]') then PACK_COD + else right(concat('000000000000',PACK_COD),12) + end as PACK_COD, + max(PACK_DES) as PACK_DES, + max(STGH_DES) as STGH_DES, + max(PACK_LCH) as PACK_LCH, + max(PROD_COD) as PROD_COD, + max(PROD_DES) as PROD_DES, + max(PROD_DES_C) as PROD_DES_C, + max(CMPS_COD) as CMPS_COD, + max(CMPS_DES) as CMPS_DES, + max(CMPS_DES_C) as CMPS_DES_C, + max(ATC1_COD) as ATC1_COD, + max(ATC2_COD) as ATC2_COD, + max(ATC3_COD) as ATC3_COD, + max(ATC4_COD) as ATC4_COD, + max(APP1_COD) as APP1_COD, + max(APP2_COD) as APP2_COD, + max(APP3_COD) as APP3_COD, + max(BIO_DESC) as BIO_DESC, + max(GENE_ORIG_DESC) as GENE_ORIG_DESC, + max(ETH_OTC_DESC) as ETH_OTC_DESC, + max(NRDL_DESC) as NRDL_DESC, + max(NRDL_Entry_Date) as NRDL_ENTRY_DATE, + max(EDL_DESC) as EDL_DESC, + max(TCM_DESC) as TCM_DESC, + max(PAED_DESC) as PAED_DESC, + max(GQCE_DESC) as GQCE_DESC, + NULL as VBP_DESC, + max(MANU_COD) as MANU_COD, + max(MANU_DES) as MANU_DES, + max(MANU_DES_C) as MANU_DES_C, + max(MNFL_COD) as MNFL_COD, + max(MNFL_DES) as MNFL_DES, + max(CORP_COD) as CORP_COD, + max(CORP_DES) as CORP_DES, + max(CORP_DES_C) as CORP_DES_C, + max(BrandType) as BRANDTYPE, + max(IS_AZ) as IS_AZ, + max(AZ_MAIN) as AZ_MAIN, + max(ATC1_DES) as ATC1_DES, + max(ATC1_DES_C) as ATC1_DES_C, + max(ATC2_DES) as ATC2_DES, + max(ATC2_DES_C) as ATC2_DES_C, + max(ATC3_DES) as ATC3_DES, + max(ATC3_DES_C) as ATC3_DES_C, + max(ATC4_DES) as ATC4_DES, + max(ATC4_DES_C) as ATC4_DES_C, + max(APP1_DES) as APP1_DES, + max(APP1_DES_C) as APP1_DES_C, + max(APP2_DES) as APP2_DES, + max(APP2_DES_C) as APP2_DES_C, + max(APP3_DES) as APP3_DES, + max(APP3_DES_C) as APP3_DES_C, + CASE WHEN max(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN max(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN max(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN max(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 + END as GEN_RN +from dm.dm_aia_pack_property +group by PACK_COD + + +-- COMMAND ---------- + + +--补全维度 +insert overwrite table tmp.aia_external_packinfo_2 +select distinct + case when A.PACK_COD like '%OTHERS%' or length(A.PACK_COD) >= 12 or (not A.PACK_COD REGEXP '^[0-9]') then A.PACK_COD + else right(concat('000000000000',A.PACK_COD),12) + end as PACK_COD + ,NVL(A.PACK_DES,B.PACK_DES) AS PACK_DES + ,NVL(A.STGH_DES,B.STGH_DES) AS STGH_DES + ,NVL(A.PACK_LCH,B.PACK_LCH) AS PACK_LCH + ,NVL(A.PROD_COD,B.PROD_COD) AS PROD_COD + ,NVL(A.PROD_DES,B.PROD_DES) AS PROD_DES + ,NVL(A.PROD_DES_C,B.PROD_DES_C) AS PROD_DES_C + ,NVL(A.CMPS_COD,B.CMPS_COD) AS CMPS_COD + ,NVL(A.CMPS_DES,B.CMPS_DES) AS CMPS_DES + ,NVL(A.CMPS_DES_C,B.CMPS_DES_C) AS CMPS_DES_C + ,NVL(A.ATC1_COD,B.ATC1_COD) AS ATC1_COD + ,NVL(A.ATC2_COD,B.ATC2_COD) AS ATC2_COD + ,NVL(A.ATC3_COD,B.ATC3_COD) AS ATC3_COD + ,NVL(A.ATC4_COD,B.ATC4_COD) AS ATC4_COD + ,NVL(A.APP1_COD,B.APP1_COD) AS APP1_COD + ,NVL(A.APP2_COD,B.APP2_COD) AS APP2_COD + ,NVL(A.APP3_COD,B.APP3_COD) AS APP3_COD + ,NVL(A.BIO_DESC,B.BIO_DESC) AS BIO_DESC + ,NVL(A.GENE_ORIG_DESC,B.GENE_ORIG_DESC) AS GENE_ORIG_DESC + ,NVL(A.ETH_OTC_DESC,B.ETH_OTC_DESC) AS ETH_OTC_DESC + ,NVL(A.NRDL_DESC,B.NRDL_DESC) AS NRDL_DESC + ,NVL(A.NRDL_ENTRY_DATE,B.NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE + ,NVL(A.EDL_DESC,B.EDL_DESC) AS EDL_DESC + ,NVL(A.TCM_DESC,B.TCM_DESC) AS TCM_DESC + ,NVL(A.PAED_DESC,B.PAED_DESC) AS PAED_DESC + ,NVL(A.GQCE_DESC,B.GQCE_DESC) AS GQCE_DESC + ,NVL(A.VBP_DESC,B.VBP_DESC) AS VBP_DESC + ,NVL(A.MANU_COD,B.MANU_COD) AS MANU_COD + ,NVL(A.MANU_DES,B.MANU_DES) AS MANU_DES + ,NVL(A.MANU_DES_C,B.MANU_DES_C) AS MANU_DES_C + ,NVL(A.MNFL_COD,B.MNFL_COD) AS MNFL_COD + ,NVL(A.MNFL_DES,B.MNFL_DES) AS MNFL_DES + ,NVL(A.CORP_COD,B.CORP_COD) AS CORP_COD + ,REPLACE( NVL(A.CORP_DES,B.CORP_DES) ,' GROUP', '' ) as CORP_DES -- 消除group + ,NVL(A.CORP_DES_C,B.CORP_DES_C) AS CORP_DES_C + ,NVL(A.BRANDTYPE,B.BRANDTYPE) AS BRANDTYPE + ,NVL(A.IS_AZ,B.IS_AZ) AS IS_AZ + ,NVL(A.AZ_MAIN,B.AZ_MAIN) AS AZ_MAIN + ,NVL(A.ATC1_DES,B.ATC1_DES) AS ATC1_DES + ,NVL(A.ATC1_DES_C,B.ATC1_DES_C) AS ATC1_DES_C + ,NVL(A.ATC2_DES,B.ATC2_DES) AS ATC2_DES + ,NVL(A.ATC2_DES_C,B.ATC2_DES_C) AS ATC2_DES_C + ,NVL(A.ATC3_DES,B.ATC3_DES) AS ATC3_DES + ,NVL(A.ATC3_DES_C,B.ATC3_DES_C) AS ATC3_DES_C + ,NVL(A.ATC4_DES,B.ATC4_DES) AS ATC4_DES + ,NVL(A.ATC4_DES_C,B.ATC4_DES_C) AS ATC4_DES_C + ,NVL(A.APP1_DES,B.APP1_DES) AS APP1_DES + ,NVL(A.APP1_DES_C,B.APP1_DES_C) AS APP1_DES_C + ,NVL(A.APP2_DES,B.APP2_DES) AS APP2_DES + ,NVL(A.APP2_DES_C,B.APP2_DES_C) AS APP2_DES_C + ,NVL(A.APP3_DES,B.APP3_DES) AS APP3_DES + ,NVL(A.APP3_DES_C,B.APP3_DES_C) AS APP3_DES_C + ,NVL(A.GEN_RN,B.GEN_RN) AS GEN_RN +FROM dm.dm_td_external_packinfo_temp A +LEFT JOIN aia_external_packinfo_1 B +ON case when A.PACK_COD like '%OTHERS%' or length(A.PACK_COD) >= 12 or (not A.PACK_COD REGEXP '^[0-9]') then A.PACK_COD else right(concat('000000000000',A.PACK_COD),12) end + = B.PACK_COD + + +-- COMMAND ---------- + + +--更新dm.dm_td_external_packinfo_temp +insert overwrite dm.dm_td_external_packinfo_temp ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN +) +select +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN +from tmp.aia_external_packinfo_2 + + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # XIEHE渠道 + +-- COMMAND ---------- + + +--PACK_COD是唯一的,不允许重复 +create or replace temporary view xiehe_external_packinfo_1 as +select + A.PACK_COD, + max(A.PACK_DES) as PACK_DES, + max(A.STGH_DES) as STGH_DES, + max(A.PACK_LCH) as PACK_LCH, + max(A.PROD_COD) as PROD_COD, + max(A.PROD_DES) as PROD_DES, + max(A.PROD_DES_C) as PROD_DES_C, + max(A.CMPS_COD) as CMPS_COD, + max(A.CMPS_DES) as CMPS_DES, + max(A.CMPS_DES_C) as CMPS_DES_C, + max(A.ATC1_COD) as ATC1_COD, + max(A.ATC2_COD) as ATC2_COD, + max(A.ATC3_COD) as ATC3_COD, + max(A.ATC4_COD) as ATC4_COD, + max(A.APP1_COD) as APP1_COD, + max(A.APP2_COD) as APP2_COD, + max(A.APP3_COD) as APP3_COD, + max(A.BIO_DESC) as BIO_DESC, + max(A.GENE_ORIG_DESC) as GENE_ORIG_DESC, + max(A.ETH_OTC_DESC) as ETH_OTC_DESC, + max(A.NRDL_DESC) as NRDL_DESC, + max(A.NRDL_Entry_Date) as NRDL_ENTRY_DATE, + max(A.EDL_DESC) as EDL_DESC, + max(A.TCM_DESC) as TCM_DESC, + max(A.PAED_DESC) as PAED_DESC, + max(A.GQCE_DESC) as GQCE_DESC, + NULL as VBP_DESC, + max(A.MANU_COD) as MANU_COD, + max(A.MANU_DES) as MANU_DES, + max(A.MANU_DES_C) as MANU_DES_C, + max(A.MNFL_COD) as MNFL_COD, + max(A.MNFL_DES) as MNFL_DES, + max(A.CORP_COD) as CORP_COD, + max(A.CORP_DES) as CORP_DES, + max(A.CORP_DES_C) as CORP_DES_C, + max(A.BrandType) as BRANDTYPE, + max(A.IS_AZ) as IS_AZ, + max(A.AZ_MAIN) as AZ_MAIN, + max(A.ATC1_DES) as ATC1_DES, + max(A.ATC1_DES_C) as ATC1_DES_C, + max(A.ATC2_DES) as ATC2_DES, + max(A.ATC2_DES_C) as ATC2_DES_C, + max(A.ATC3_DES) as ATC3_DES, + max(A.ATC3_DES_C) as ATC3_DES_C, + max(A.ATC4_DES) as ATC4_DES, + max(A.ATC4_DES_C) as ATC4_DES_C, + max(A.APP1_DES) as APP1_DES, + max(A.APP1_DES_C) as APP1_DES_C, + max(A.APP2_DES) as APP2_DES, + max(A.APP2_DES_C) as APP2_DES_C, + max(A.APP3_DES) as APP3_DES, + max(A.APP3_DES_C) as APP3_DES_C, + CASE WHEN max(A.GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN max(A.GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN max(A.GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN max(A.GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 + END as GEN_RN +from dm.dm_xiehe_pack_property a +group by A.PACK_COD + + +-- COMMAND ---------- + + +--补全维度 +insert overwrite table tmp.xiehe_external_packinfo_2 +select distinct + A.PACK_COD + ,NVL(A.PACK_DES,B.PACK_DES) AS PACK_DES + ,NVL(A.STGH_DES,B.STGH_DES) AS STGH_DES + ,NVL(A.PACK_LCH,B.PACK_LCH) AS PACK_LCH + ,NVL(A.PROD_COD,B.PROD_COD) AS PROD_COD + ,NVL(A.PROD_DES,B.PROD_DES) AS PROD_DES + ,NVL(A.PROD_DES_C,B.PROD_DES_C) AS PROD_DES_C + ,NVL(A.CMPS_COD,B.CMPS_COD) AS CMPS_COD + ,NVL(A.CMPS_DES,B.CMPS_DES) AS CMPS_DES + ,NVL(A.CMPS_DES_C,B.CMPS_DES_C) AS CMPS_DES_C + ,NVL(A.ATC1_COD,B.ATC1_COD) AS ATC1_COD + ,NVL(A.ATC2_COD,B.ATC2_COD) AS ATC2_COD + ,NVL(A.ATC3_COD,B.ATC3_COD) AS ATC3_COD + ,NVL(A.ATC4_COD,B.ATC4_COD) AS ATC4_COD + ,NVL(A.APP1_COD,B.APP1_COD) AS APP1_COD + ,NVL(A.APP2_COD,B.APP2_COD) AS APP2_COD + ,NVL(A.APP3_COD,B.APP3_COD) AS APP3_COD + ,NVL(A.BIO_DESC,B.BIO_DESC) AS BIO_DESC + ,NVL(A.GENE_ORIG_DESC,B.GENE_ORIG_DESC) AS GENE_ORIG_DESC + ,NVL(A.ETH_OTC_DESC,B.ETH_OTC_DESC) AS ETH_OTC_DESC + ,NVL(A.NRDL_DESC,B.NRDL_DESC) AS NRDL_DESC + ,NVL(A.NRDL_ENTRY_DATE,B.NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE + ,NVL(A.EDL_DESC,B.EDL_DESC) AS EDL_DESC + ,NVL(A.TCM_DESC,B.TCM_DESC) AS TCM_DESC + ,NVL(A.PAED_DESC,B.PAED_DESC) AS PAED_DESC + ,NVL(A.GQCE_DESC,B.GQCE_DESC) AS GQCE_DESC + ,NVL(A.VBP_DESC,B.VBP_DESC) AS VBP_DESC + ,NVL(A.MANU_COD,B.MANU_COD) AS MANU_COD + ,NVL(A.MANU_DES,B.MANU_DES) AS MANU_DES + ,NVL(A.MANU_DES_C,B.MANU_DES_C) AS MANU_DES_C + ,NVL(A.MNFL_COD,B.MNFL_COD) AS MNFL_COD + ,NVL(A.MNFL_DES,B.MNFL_DES) AS MNFL_DES + ,NVL(A.CORP_COD,B.CORP_COD) AS CORP_COD + ,REPLACE( NVL(A.CORP_DES,B.CORP_DES) ,' GROUP', '' ) as CORP_DES -- 消除group + ,NVL(A.CORP_DES_C,B.CORP_DES_C) AS CORP_DES_C + ,NVL(A.BRANDTYPE,B.BRANDTYPE) AS BRANDTYPE + ,NVL(A.IS_AZ,B.IS_AZ) AS IS_AZ + ,NVL(A.AZ_MAIN,B.AZ_MAIN) AS AZ_MAIN + ,NVL(A.ATC1_DES,B.ATC1_DES) AS ATC1_DES + ,NVL(A.ATC1_DES_C,B.ATC1_DES_C) AS ATC1_DES_C + ,NVL(A.ATC2_DES,B.ATC2_DES) AS ATC2_DES + ,NVL(A.ATC2_DES_C,B.ATC2_DES_C) AS ATC2_DES_C + ,NVL(A.ATC3_DES,B.ATC3_DES) AS ATC3_DES + ,NVL(A.ATC3_DES_C,B.ATC3_DES_C) AS ATC3_DES_C + ,NVL(A.ATC4_DES,B.ATC4_DES) AS ATC4_DES + ,NVL(A.ATC4_DES_C,B.ATC4_DES_C) AS ATC4_DES_C + ,NVL(A.APP1_DES,B.APP1_DES) AS APP1_DES + ,NVL(A.APP1_DES_C,B.APP1_DES_C) AS APP1_DES_C + ,NVL(A.APP2_DES,B.APP2_DES) AS APP2_DES + ,NVL(A.APP2_DES_C,B.APP2_DES_C) AS APP2_DES_C + ,NVL(A.APP3_DES,B.APP3_DES) AS APP3_DES + ,NVL(A.APP3_DES_C,B.APP3_DES_C) AS APP3_DES_C + ,NVL(A.GEN_RN,B.GEN_RN) AS GEN_RN +FROM dm.dm_td_external_packinfo_temp A +LEFT JOIN xiehe_external_packinfo_1 B +ON A.PACK_COD = B.PACK_COD + + +-- COMMAND ---------- + +--更新dm.dm_td_external_packinfo_temp +insert overwrite dm.dm_td_external_packinfo_temp ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN +) +select +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN +from tmp.xiehe_external_packinfo_2 + + +-- COMMAND ---------- + +----------------------------------------------------------------------------------- +--修改时间:20240827 +--修改人:FanXujia +--修改内容: +--有一部分pack的商品名、公司名为空,这两不能为空,将他们设置成OTHERS +----------------------------------------------------------------------------------- +update dm.dm_td_external_packinfo_temp +set PROD_DES = 'OTHERS' +where PROD_DES is null; + +update dm.dm_td_external_packinfo_temp +set PROD_DES_C = 'OTHERS' +where PROD_DES_C is null; + +update dm.dm_td_external_packinfo_temp +set CORP_DES = 'OTHERS' +where CORP_DES is null or CORP_DES=''; + +update dm.dm_td_external_packinfo_temp +set CORP_DES_C = 'OTHERS' +where CORP_DES_C is null or CORP_DES_C=''; + + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # 增加data_source字段 + +-- COMMAND ---------- + +--增加DATA_SOURCE字段 +insert overwrite table dm.dm_td_external_packinfo_temp2 ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +DATA_SOURCE, +area, +h_level, +dept_name, +reimburse, +reimburse_type, +prescription_source, +atc, +new_code, +common_name, +product_name, +manu_des_xiehe, +pack_des_xiehe, +drug_delivery_route, +nfc, +LaunchTime, +-- ,Family_Code, +-- Family_Name +VBP_BATCH, +VBP_IMPLEMENTING_TIME +) +select +case when t1.PACK_COD is null or t1.PACK_COD = '' then concat('PACK_COD_',t2.DATA_SOURCE) + else t1.PACK_COD end as PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +case when CORP_COD is null or CORP_COD = '' then concat('CORP_COD_',t2.DATA_SOURCE) + else CORP_COD end as CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +t2.DATA_SOURCE, +'' as area, +null as h_level, +'' as dept_name, +null as reimburse, +null as reimburse_type, +null as prescription_source, +null as atc, +'' as new_code, +null as common_name, +null as product_name, +null as manu_des_xiehe, +null as pack_des_xiehe, +null as drug_delivery_route, +null as nfc, +null as LaunchTime, +-- ,null as Family_Code, +-- null as Family_Name +'' as VBP_BATCH, +'' as VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp t1 +inner join (select distinct pack_cod,DATA_SOURCE from external_sales_union where NVL(PACK_FLAG,'1') <> 0) t2 +on t1.PACK_COD = t2.pack_cod +union all +select +case when t1.PACK_COD is null or t1.PACK_COD = '' then concat('PACK_COD_',t2.DATA_SOURCE) + else t1.PACK_COD end as PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +null as VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +case when CORP_COD is null or CORP_COD = '' then concat('CORP_COD_',t2.DATA_SOURCE) + else CORP_COD end as CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +t2.DATA_SOURCE, +'' as area, +null as h_level, +'' as dept_name, +null as reimburse, +null as reimburse_type, +null as prescription_source, +null as atc, +'' as new_code, +null as common_name, +null as product_name, +null as manu_des_xiehe, +null as pack_des_xiehe, +null as drug_delivery_route, +null as nfc, +null as LaunchTime, +-- ,null as Family_Code, +-- null as Family_Name +'' as VBP_BATCH, +'' as VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp t1 +inner join (select distinct pack_cod,DATA_SOURCE from external_sales_union where PACK_FLAG = 0) t2 +on t1.PACK_COD = t2.pack_cod + +-- COMMAND ---------- + +----------------------------------------------------------------------------------------------------- +--修改时间:20240829 +--修改人:FanXujia +--修改内容: +--增加协和相关产品属性值 +------------------------------------------------------------------------------------------------------ +----------------------------------------------------------------------------------------------------- +--修改时间:20250621 +--修改人:chenwu +--修改内容: +--xiehe数据源变更格式故重写部分逻辑 +------------------------------------------------------------------------------------------------------ +with raw_data as ( +--一个pack_cod对应多个科室信息,也全部显示出来 +select distinct +NVL(new_code,'') new_code, +NVL(province,'') area, +max(h_level) h_level, +NVL(dept_name,'') dept_name, +max(reimburse) reimburse, +max(reimburse_type) reimburse_type, +max(prescription_source) prescription_source, +max(atc) atc, +max(common_name) common_name, +max(product_name) product_name, +max(manu_des) manu_des, +max(pack_des) pack_des, +max(drug_delivery_route) drug_delivery_route, +max(nfc) nfc, +max(iqvia_pack_code) iqvia_pack_code +from dm.dm_ext_xiehe_sales--dwd.dwd_gnd_ext_xiehe_raw_data_new +group by new_code,dept_name,area +) +,packinfo as ( +select +t1.PACK_COD, +t1.PACK_DES, +t1.STGH_DES, +t1.PACK_LCH, +t1.PROD_COD, +t1.PROD_DES, +t1.PROD_DES_C, +t1.CMPS_COD, +t1.CMPS_DES, +t1.CMPS_DES_C, +t1.ATC1_COD, +t1.ATC2_COD, +t1.ATC3_COD, +t1.ATC4_COD, +t1.APP1_COD, +t1.APP2_COD, +t1.APP3_COD, +t1.BIO_DESC, +t1.GENE_ORIG_DESC, +t1.ETH_OTC_DESC, +t1.NRDL_DESC, +t1.NRDL_ENTRY_DATE, +t1.EDL_DESC, +t1.TCM_DESC, +t1.PAED_DESC, +t1.GQCE_DESC, +t1.VBP_DESC, +t1.MANU_COD, +t1.MANU_DES, +t1.MANU_DES_C, +t1.MNFL_COD, +t1.MNFL_DES, +t1.CORP_COD, +t1.CORP_DES, +t1.CORP_DES_C, +t1.BRANDTYPE, +t1.IS_AZ, +t1.AZ_MAIN, +t1.ATC1_DES, +t1.ATC1_DES_C, +t1.ATC2_DES, +t1.ATC2_DES_C, +t1.ATC3_DES, +t1.ATC3_DES_C, +t1.ATC4_DES, +t1.ATC4_DES_C, +t1.APP1_DES, +t1.APP1_DES_C, +t1.APP2_DES, +t1.APP2_DES_C, +t1.APP3_DES, +t1.APP3_DES_C, +t1.GEN_RN, +t1.DATA_SOURCE, +t3.area, +t3.h_level, +t3.dept_name, +t3.reimburse, +t3.reimburse_type, +t3.prescription_source, +t3.atc, +t3.new_code, +t3.common_name, +t3.product_name, +t3.manu_des manu_des_xiehe, +t3.pack_des pack_des_xiehe, +t3.drug_delivery_route, +t3.nfc, +null as LaunchTime, +-- ,null as Family_Code, +-- null as Family_Name +'' as VBP_BATCH, +'' as VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp2 t1 +left join raw_data t3 +on upper(t1.pack_cod) = upper(t3.iqvia_pack_code) +where t1.DATA_SOURCE = 'XH Data(Quarterly)' +union all +select +* +from dm.dm_td_external_packinfo_temp2 +where DATA_SOURCE <> 'XH Data(Quarterly)' +) + + +insert overwrite table dm.dm_td_external_packinfo_temp2 ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +DATA_SOURCE, +area, +h_level, +dept_name, +reimburse, +reimburse_type, +prescription_source, +atc, +new_code, +common_name, +product_name, +manu_des_xiehe, +pack_des_xiehe, +drug_delivery_route, +nfc, +LaunchTime, +-- ,Family_Code, +-- Family_Name +VBP_BATCH, +VBP_IMPLEMENTING_TIME +) +select * +from packinfo; + +-- COMMAND ---------- + +----------------------------------------------------------------------------------------------------- +--修改时间:20240902 +--修改人:FanXujia +--修改内容: +--增加CHPA的维度信息 +------------------------------------------------------------------------------------------------------ +with PACK_launchtime as ( +select PACK.Pack_Code,max(PACK.launchtime) launchtime +from dwd.dwd_ims_td_pack PACK +group by PACK.Pack_Code +) +-- ,Family as ( +-- select PACK_COD,max(Family_Code) Family_Code,max(Family_Name) Family_Name +-- from DM.DM_IMS_TD_PACK_PROPERTY +-- where MARKET = 'IMS ALL Market' +-- group by PACK_COD +-- ) +,packinfo as ( +select +t1.PACK_COD, +t1.PACK_DES, +t1.STGH_DES, +t1.PACK_LCH, +t1.PROD_COD, +t1.PROD_DES, +t1.PROD_DES_C, +t1.CMPS_COD, +t1.CMPS_DES, +t1.CMPS_DES_C, +t1.ATC1_COD, +t1.ATC2_COD, +t1.ATC3_COD, +t1.ATC4_COD, +t1.APP1_COD, +t1.APP2_COD, +t1.APP3_COD, +t1.BIO_DESC, +t1.GENE_ORIG_DESC, +t1.ETH_OTC_DESC, +t1.NRDL_DESC, +t1.NRDL_ENTRY_DATE, +t1.EDL_DESC, +t1.TCM_DESC, +t1.PAED_DESC, +t1.GQCE_DESC, +t1.VBP_DESC, +t1.MANU_COD, +t1.MANU_DES, +t1.MANU_DES_C, +t1.MNFL_COD, +t1.MNFL_DES, +t1.CORP_COD, +t1.CORP_DES, +t1.CORP_DES_C, +t1.BRANDTYPE, +t1.IS_AZ, +t1.AZ_MAIN, +t1.ATC1_DES, +t1.ATC1_DES_C, +t1.ATC2_DES, +t1.ATC2_DES_C, +t1.ATC3_DES, +t1.ATC3_DES_C, +t1.ATC4_DES, +t1.ATC4_DES_C, +t1.APP1_DES, +t1.APP1_DES_C, +t1.APP2_DES, +t1.APP2_DES_C, +t1.APP3_DES, +t1.APP3_DES_C, +t1.GEN_RN, +t1.DATA_SOURCE, +t1.area, +t1.h_level, +NVL(t1.dept_name,'') dept_name, +t1.reimburse, +t1.reimburse_type, +t1.prescription_source, +t1.atc, +t1.new_code, +t1.common_name, +t1.product_name, +t1.manu_des_xiehe, +t1.pack_des_xiehe, +t1.drug_delivery_route, +t1.nfc, +t2.LaunchTime, +-- ,t3.Family_Code, +-- t3.Family_Name +t1.VBP_BATCH, +t1.VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp2 t1 +left join PACK_launchtime t2 +on t1.PACK_COD = t2.Pack_Code +-- left join Family t3 +-- on t1.PACK_COD = t3.PACK_COD +where t1.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +union all +select * +from dm.dm_td_external_packinfo_temp2 +where DATA_SOURCE <> 'IQVIA-CHPA(Monthly)' +) + + + +insert overwrite table dm.dm_td_external_packinfo_temp2 ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +DATA_SOURCE, +area, +h_level, +dept_name, +reimburse, +reimburse_type, +prescription_source, +atc, +new_code, +common_name, +product_name, +manu_des_xiehe, +pack_des_xiehe, +drug_delivery_route, +nfc, +LaunchTime, +-- ,Family_Code, +-- Family_Name +VBP_BATCH, +VBP_IMPLEMENTING_TIME +) +select * +from packinfo; + +-- COMMAND ---------- + +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分pack_cod在事实表有销量,但是在维度表没有这个pack_cod,导致销量缺失。 +--因此需要从事实表补全这部分pack_cod +with raw_data as ( +--一个pack_cod对应多个科室信息,也全部显示出来 +select distinct +NVL(new_code,'') new_code, +NVL(province,'') area, +max(h_level) h_level, +NVL(dept_name,'') dept_name, +max(reimburse) reimburse, +max(reimburse_type) reimburse_type, +max(prescription_source) prescription_source, +max(atc) atc, +max(common_name) common_name, +max(product_name) product_name, +max(manu_des) manu_des, +max(pack_des) pack_des, +max(drug_delivery_route) drug_delivery_route, +max(nfc) nfc, +max(iqvia_pack_code) iqvia_pack_code +from dm.dm_ext_xiehe_sales--dwd.dwd_gnd_ext_xiehe_raw_data_new +group by new_code,dept_name,area +) +,PACK_launchtime as ( +select PACK.Pack_Code,max(PACK.launchtime) launchtime +from dwd.dwd_ims_td_pack PACK +group by PACK.Pack_Code +) +-- ,Family as ( +-- select PACK_COD,max(Family_Code) Family_Code,max(Family_Name) Family_Name +-- from DM.DM_IMS_TD_PACK_PROPERTY +-- where MARKET = 'IMS ALL Market' +-- group by PACK_COD +-- ) +,tmp_packinfo as ( +select distinct + t1.PACK_COD,t1.CORP_COD,t1.DATA_SOURCE,nvl(t3.CORP_DES,'OTHERS') CORP_DES,nvl(t3.CORP_DES_C,'OTHERS') CORP_DES_C, +t5.area, +t5.h_level, +t5.dept_name, +t5.reimburse, +t5.reimburse_type, +t5.prescription_source, +t5.atc, +t5.new_code, +t5.common_name, +t5.product_name, +t5.manu_des manu_des_xiehe, +t5.pack_des pack_des_xiehe, +t5.drug_delivery_route, +t5.nfc +,null as launchtime +-- ,null as Family_Code +-- ,null as Family_Name +from external_sales_union t1 +left join dm.dm_td_external_packinfo_temp2 t2 +on t1.PACK_COD = t2.PACK_COD +and t1.DATA_SOURCE = t2.DATA_SOURCE +left join (select CORP_COD,max(CORP_DES) CORP_DES,max(CORP_DES_C) CORP_DES_C + from dm.dm_td_external_packinfo_temp2 group by CORP_COD) t3 +on t1.CORP_COD = t3.CORP_COD +-- left join pack_code_info t4 +-- on t1.PACK_COD = t4.IQVIA_PACK_CODE +left join raw_data t5 +on upper(t1.pack_cod) = upper(t5.iqvia_pack_code) +where t2.PACK_COD is null +and t1.DATA_SOURCE = 'XH Data(Quarterly)' +union all +select distinct + t1.PACK_COD,t1.CORP_COD,t1.DATA_SOURCE,nvl(t3.CORP_DES,'OTHERS') CORP_DES,nvl(t3.CORP_DES_C,'OTHERS') CORP_DES_C, +'' as area, +null as h_level, +'' as dept_name, +null as reimburse, +null as reimburse_type, +null as prescription_source, +null as atc, +'' as new_code, +null as common_name, +null as product_name, +null as manu_des_xiehe, +null as pack_des_xiehe, +null as drug_delivery_route, +null as nfc, +t4.launchtime +-- ,t5.Family_Code +-- ,t5.Family_Name +from external_sales_union t1 +left join dm.dm_td_external_packinfo_temp2 t2 +on t1.PACK_COD = t2.PACK_COD +and t1.DATA_SOURCE = t2.DATA_SOURCE +left join (select CORP_COD,max(CORP_DES) CORP_DES,max(CORP_DES_C) CORP_DES_C + from dm.dm_td_external_packinfo_temp2 group by CORP_COD) t3 +on t1.CORP_COD = t3.CORP_COD +left join PACK_launchtime t4 +on t1.PACK_COD = t4.Pack_Code +-- left join Family t5 +-- on t1.PACK_COD = t5.PACK_COD +where t2.PACK_COD is null +and t1.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +union all +select distinct + t1.PACK_COD,t1.CORP_COD,t1.DATA_SOURCE,nvl(t3.CORP_DES,'OTHERS') CORP_DES,nvl(t3.CORP_DES_C,'OTHERS') CORP_DES_C, +'' as area, +null as h_level, +'' as dept_name, +null as reimburse, +null as reimburse_type, +null as prescription_source, +null as atc, +'' as new_code, +null as common_name, +null as product_name, +null as manu_des_xiehe, +null as pack_des_xiehe, +null as drug_delivery_route, +null as nfc, +null as launchtime +-- ,null as Family_Code +-- ,null as Family_Name +from external_sales_union t1 +left join dm.dm_td_external_packinfo_temp2 t2 +on t1.PACK_COD = t2.PACK_COD +and t1.DATA_SOURCE = t2.DATA_SOURCE +left join (select CORP_COD,max(CORP_DES) CORP_DES,max(CORP_DES_C) CORP_DES_C + from dm.dm_td_external_packinfo_temp2 group by CORP_COD) t3 +on t1.CORP_COD = t3.CORP_COD +where t2.PACK_COD is null +and t1.DATA_SOURCE not in ('XH Data(Quarterly)','IQVIA-CHPA(Monthly)') +) + +insert into table dm.dm_td_external_packinfo_temp2 ( +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BRANDTYPE, +IS_AZ, +AZ_MAIN, +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, +GEN_RN, +DATA_SOURCE, +area, +h_level, +dept_name, +reimburse, +reimburse_type, +prescription_source, +atc, +new_code, +common_name, +product_name, +manu_des_xiehe, +pack_des_xiehe, +drug_delivery_route, +nfc, +LaunchTime, +-- ,Family_Code, +-- Family_Name +VBP_BATCH, +VBP_IMPLEMENTING_TIME +) +select distinct +PACK_COD, +null as PACK_DES, +null as STGH_DES, +null as PACK_LCH, +null as PROD_COD, +null as PROD_DES, +null as PROD_DES_C, +null as CMPS_COD, +null as CMPS_DES, +null as CMPS_DES_C, +null as ATC1_COD, +null as ATC2_COD, +null as ATC3_COD, +null as ATC4_COD, +null as APP1_COD, +null as APP2_COD, +null as APP3_COD, +null as BIO_DESC, +null as GENE_ORIG_DESC, +null as ETH_OTC_DESC, +null as NRDL_DESC, +null as NRDL_ENTRY_DATE, +null as EDL_DESC, +null as TCM_DESC, +null as PAED_DESC, +null as GQCE_DESC, +null as VBP_DESC, +null as MANU_COD, +null as MANU_DES, +null as MANU_DES_C, +null as MNFL_COD, +null as MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +null as BRANDTYPE, +null as IS_AZ, +null as AZ_MAIN, +null as ATC1_DES, +null as ATC1_DES_C, +null as ATC2_DES, +null as ATC2_DES_C, +null as ATC3_DES, +null as ATC3_DES_C, +null as ATC4_DES, +null as ATC4_DES_C, +null as APP1_DES, +null as APP1_DES_C, +null as APP2_DES, +null as APP2_DES_C, +null as APP3_DES, +null as APP3_DES_C, +null as GEN_RN, +DATA_SOURCE, +area, +h_level, +dept_name, +reimburse, +reimburse_type, +prescription_source, +atc, +new_code, +common_name, +product_name, +manu_des_xiehe, +pack_des_xiehe, +drug_delivery_route, +nfc, +LaunchTime, +-- ,null as Family_Code, +-- null as Family_Name +'' as VBP_BATCH, +'' as VBP_IMPLEMENTING_TIME +from tmp_packinfo + + +-- COMMAND ---------- + +------------------------------------------------------------------------------------------------ +--修改时间:20240923 +--修改人:FanXujia +--修改内容: +--增加VBP信息 +------------------------------------------------------------------------------------------------ +with tmp as ( +select t1.PACK_COD, +t1.PACK_DES, +t1.STGH_DES, +t1.PACK_LCH, +t1.PROD_COD, +t1.PROD_DES, +t1.PROD_DES_C, +t1.CMPS_COD, +t1.CMPS_DES, +t1.CMPS_DES_C, +t1.ATC1_COD, +t1.ATC2_COD, +t1.ATC3_COD, +t1.ATC4_COD, +t1.APP1_COD, +t1.APP2_COD, +t1.APP3_COD, +t1.BIO_DESC, +t1.GENE_ORIG_DESC, +t1.ETH_OTC_DESC, +t1.NRDL_DESC, +t1.NRDL_ENTRY_DATE, +t1.EDL_DESC, +t1.TCM_DESC, +t1.PAED_DESC, +t1.GQCE_DESC, +NVL(t1.VBP_DESC,'Non VBP') AS VBP_DESC, +t1.MANU_COD, +t1.MANU_DES, +t1.MANU_DES_C, +t1.MNFL_COD, +t1.MNFL_DES, +t1.CORP_COD, +t1.CORP_DES, +t1.CORP_DES_C, +t1.BRANDTYPE, +t1.IS_AZ, +t1.AZ_MAIN, +t1.ATC1_DES, +t1.ATC1_DES_C, +t1.ATC2_DES, +t1.ATC2_DES_C, +t1.ATC3_DES, +t1.ATC3_DES_C, +t1.ATC4_DES, +t1.ATC4_DES_C, +t1.APP1_DES, +t1.APP1_DES_C, +t1.APP2_DES, +t1.APP2_DES_C, +t1.APP3_DES, +t1.APP3_DES_C, +t1.GEN_RN, +t1.DATA_SOURCE, +t1.area, +t1.h_level, +t1.dept_name, +t1.reimburse, +t1.reimburse_type, +t1.prescription_source, +t1.atc, +t1.new_code, +t1.common_name, +t1.product_name, +t1.manu_des_xiehe, +t1.pack_des_xiehe, +t1.drug_delivery_route, +t1.nfc, +t1.LaunchTime, +NVL(t2.VBP_BATCH,'') VBP_BATCH, +NVL(t2.VBP_IMPLEMENTING_TIME,'') VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp2 t1 +left join dwd.dwd_gnd_ims_vbp_information t2 +on t1.PACK_COD = t2.PACK_CODE +) + +insert overwrite table dm.dm_td_external_packinfo_temp2 +select * from tmp + +-- COMMAND ---------- + +------------------------------------------------------------------------------------------------- +--修改时间:20240906 +--修改人:FanXujia +--修改内容: +--按主键去重 +------------------------------------------------------------------------------------------------- +with tmp as ( +select +PACK_COD, +max(PACK_DES) PACK_DES, +max(STGH_DES) STGH_DES, +max(PACK_LCH) PACK_LCH, +max(PROD_COD) PROD_COD, +max(PROD_DES) PROD_DES, +COALESCE(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(IS_AZ) IS_AZ, +max(AZ_MAIN) AZ_MAIN, +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(GEN_RN) GEN_RN, +DATA_SOURCE, +area, +max(h_level) h_level, +dept_name, +max(reimburse) reimburse, +max(reimburse_type) reimburse_type, +max(prescription_source) prescription_source, +max(atc) atc, +new_code, +max(common_name) common_name, +max(product_name) product_name, +max(manu_des_xiehe) manu_des_xiehe, +max(pack_des_xiehe) pack_des_xiehe, +max(drug_delivery_route) drug_delivery_route, +max(nfc) nfc, +max(LaunchTime) LaunchTime, +max(VBP_BATCH) VBP_BATCH, +max(VBP_IMPLEMENTING_TIME) VBP_IMPLEMENTING_TIME +from dm.dm_td_external_packinfo_temp2 +group by DATA_SOURCE,PACK_COD,dept_name,new_code,area +) + +insert overwrite dm.dm_td_external_packinfo_temp2 +select * from tmp; + +-- COMMAND ---------- + +------------------------------------------------------------------------------------------ +--修改时间:20241104 +--修改人:Fanxujia +--修改内容: +--CHPA有个分子式英文名:TRADITIONAL CHINESE MEDICINE,对应的中文名是取自另一个表tblProdCN的namec字段,每个产品的中文名目前是不同的。 +--用户想要让中文名统一显示成“传统中药” +--因此通过hardcoding的方式,把中文名修改成传统中药。 +--另外,本改动不局限于CHPA渠道,全部渠道一起修改。 +------------------------------------------------------------------------------------------- +update dm.dm_td_external_packinfo_temp2 +set CMPS_DES_C = '传统中药' +where upper(CMPS_DES) = 'TRADITIONAL CHINESE MEDICINE' +; + +-- COMMAND ---------- + +-------------------------------------------------------------------------------- +--修改时间:20241025 +--修改人:Fanxujia +--修改内容: +--外部数据报告优化,将PBI的逻辑搬到DBR +-------------------------------------------------------------------------------- +insert overwrite table dm.dm_td_external_packinfo +( +PACK_COD, +PACK_DES, +PACK_LCH, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +VBP_BATCH, +VBP_IMPLEMENTING_TIME, +STGH_DES, +BIO_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_ENTRY_DATE, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +MANU_COD, +MANU_DES, +MNFL_COD, +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, +APP1_COD, +APP1_DES, +APP1_DES_C, +APP2_COD, +APP2_DES, +APP2_DES_C, +APP3_COD, +APP3_DES, +APP3_DES_C, +GENE_ORIG_DESC, +VBP_DESC, +CORP_COD, +GEN_RN, +CORP_DES, +CORP_DES_C, +PACK_RN, +PROD_RN, +CMPS_RN, +DATA_SOURCE, +ATC, +NEW_CODE, +COMMON_NAME, +PRODUCT_NAME, +MANU_DES_XIEHE, +PACK_DES_XIEHE, +DRUG_DELIVERY_ROUTE, +NFC, +CORP_TYPE, +LAUNCHTIME, +VBP_BRAND +) + +with CHPA_PACK_SALES as ( + SELECT + upper(A.PACK_DES) PACK_DES, + upper(A.PROD_DES_C) PROD_DES_C, + upper(A.CORP_DES_C) CORP_DES_C, + SUM(B.SALES_VALUE_CAL) SALES_VALUE_CAL + FROM + DM.dm_td_external_packinfo_temp2 A + INNER JOIN external_sales_union B ON A.PACK_COD = B.PACK_COD + and A.dept_name = B.dept_name + and A.new_code = B.new_code + and A.area = B.area + and A.DATA_SOURCE = B.DATA_SOURCE + WHERE + B.YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + external_sales_union + WHERE + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) + AND B.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + GROUP BY + upper(A.PACK_DES), + upper(A.CORP_DES_C), + upper(A.PROD_DES_C) +) +,pack_N as ( + SELECT + PACK_DES, + PROD_DES_C, + CORP_DES_C, + row_number() OVER( + PARTITION BY 1 + ORDER BY + ( + CASE + WHEN PACK_DES = '' + OR PROD_DES_C = '' + OR CORP_DES_C = '' THEN 2 + ELSE 1 + END + ) ASC, + sum(SALES_VALUE_CAL) OVER(PARTITION BY PROD_DES_C, CORP_DES_C) DESC, + SALES_VALUE_CAL DESC + ) RN + FROM + CHPA_PACK_SALES +) + +,CHPA_BRAND_SALES as ( + SELECT + upper(A.PROD_DES_C) PROD_DES_C, + upper(A.CORP_DES_C) CORP_DES_C, + SUM(B.SALES_VALUE_CAL) SALES_VALUE_CAL + FROM + DM.dm_td_external_packinfo_temp2 A + INNER JOIN external_sales_union B ON A.PACK_COD = B.PACK_COD + and A.dept_name = B.dept_name + and A.new_code = B.new_code + and A.area = B.area + and A.DATA_SOURCE = B.DATA_SOURCE + WHERE + B.YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + external_sales_union + WHERE + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) + AND B.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + GROUP BY + upper(A.CORP_DES_C), + upper(A.PROD_DES_C) +) +,brand_N as ( + SELECT + PROD_DES_C, + CORP_DES_C, + row_number() OVER( + PARTITION BY 1 + ORDER BY + ( + CASE + WHEN PROD_DES_C = '' + OR CORP_DES_C = '' THEN 2 + ELSE 1 + END + ) ASC, + SALES_VALUE_CAL DESC + ) RN + FROM + CHPA_BRAND_SALES +) + +,CHPA_MOLE_SALES as ( + SELECT + upper(A.CMPS_DES) CMPS_DES, + upper(A.CMPS_DES_C) CMPS_DES_C, + SUM(B.SALES_VALUE_CAL) SALES_VALUE_CAL + FROM + DM.dm_td_external_packinfo_temp2 A + INNER JOIN external_sales_union B ON A.PACK_COD = B.PACK_COD + and A.dept_name = B.dept_name + and A.new_code = B.new_code + and A.area = B.area + and A.DATA_SOURCE = B.DATA_SOURCE + WHERE + B.YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + external_sales_union + WHERE + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) + AND B.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + GROUP BY + upper(A.CMPS_DES), + upper(A.CMPS_DES_C) +) +,mole_N as ( + SELECT + CMPS_DES, + CMPS_DES_C, + row_number() OVER( + PARTITION BY 1 + ORDER BY + ( + CASE + WHEN CMPS_DES = '' + OR CMPS_DES_C = '' THEN 2 + ELSE 1 + END + ) ASC, + SALES_VALUE_CAL DESC + ) RN + FROM + CHPA_MOLE_SALES +) + +------------------------------------------------------------------------------ +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--调整VBP_BRAND的逻辑 +--一个Brand对应多个pack,每个pack会有不同的VBP_DESC +--有以下几种情况 +--1:一个Brand下面的所有pack的VBP_DESC都一样,VBP_BRAND = VBP_DESC的值 +--2:一个Brand下面的VBP_DESC存在VBP-IN、VBP-OUT两种情况,VBP_BRAND = VBP-IN/OUT +--3:一个Brand下面的VBP_DESC存在VBP-IN、Non VBP两种情况,VBP_BRAND = VBP-IN/Non VBP +--4:一个Brand下面的VBP_DESC存在VBP-OUT、Non VBP两种情况,VBP_BRAND = VBP-OUT/Non VBP +--5:一个Brand下面的VBP_DESC存在VBP-IN、VBP-OUT、Non VBP三种情况,VBP_BRAND = VBP-IN/OUT/Non VBP +------------------------------------------------------------------------------ +-- ,vbp_brand as ( +-- select PROD_DES_C,DATA_SOURCE,max(VBP_DESC) VBP_BRAND +-- from DM.dm_td_external_packinfo_temp2 +-- group by PROD_DES_C,DATA_SOURCE +-- ) +,vbp_brand_1 as ( +select distinct +PROD_DES_C, +DATA_SOURCE, +case when VBP_DESC = 'VBP-IN' then 1 + when VBP_DESC = 'VBP-OUT' then 2 + when VBP_DESC = 'Non VBP' then 4 + else 99 +end as VBP_FLAG +from dm.dm_td_external_packinfo_temp2 +) +,vbp_brand as ( +select +PROD_DES_C, +DATA_SOURCE, +case +--单独一个VBP-IN(1) + when sum(VBP_FLAG) = 1 then 'VBP-IN' +--单独一个VBP-OUT(2) + when sum(VBP_FLAG) = 2 then 'VBP-OUT' +--单独一个Non VBP(4) + when sum(VBP_FLAG) = 4 then 'Non VBP' +--同时存在VBP-IN(1) + VBP-OUT(2) = 3 + when sum(VBP_FLAG) = 3 then 'VBP-IN/OUT' +--同时存在VBP-IN(1) + Non VBP(4) = 5 + when sum(VBP_FLAG) = 5 then 'VBP-IN/Non VBP' +--同时存在VBP-OUT(2) + Non VBP(4) = 6 + when sum(VBP_FLAG) = 6 then 'VBP-OUT/Non VBP' +--同时存在VBP-IN(1) + VBP-OUT(2) + Non VBP(4) = 7 + when sum(VBP_FLAG) = 7 then 'VBP-IN/OUT/Non VBP' + else '' +end as VBP_BRAND +from vbp_brand_1 +group by PROD_DES_C,DATA_SOURCE +) + + +SELECT + A.PACK_COD, + upper(max(A.PACK_DES)) PACK_DES, + max(A.PACK_LCH) PACK_LCH, + max(A.PROD_COD) PROD_COD, + max(A.PROD_DES) PROD_DES, + upper(max(A.PROD_DES_C)) PROD_DES_C, + max(A.CMPS_COD) CMPS_COD, + upper(max(A.CMPS_DES)) CMPS_DES, + upper(max(A.CMPS_DES_C)) CMPS_DES_C, + max(A.VBP_BATCH) VBP_BATCH, + max(A.VBP_IMPLEMENTING_TIME) VBP_IMPLEMENTING_TIME, + max(A.STGH_DES) STGH_DES, + max(A.BIO_DESC) BIO_DESC, + max(A.ETH_OTC_DESC) ETH_OTC_DESC, + max(A.NRDL_DESC) NRDL_DESC, + max(A.NRDL_ENTRY_DATE) NRDL_ENTRY_DATE, + max(A.EDL_DESC) EDL_DESC, + max(A.TCM_DESC) TCM_DESC, + max(A.PAED_DESC) PAED_DESC, + max(A.GQCE_DESC) GQCE_DESC, + max(A.MANU_COD) MANU_COD, + max(A.MANU_DES) MANU_DES, + max(A.MNFL_COD) MNFL_COD, + max(A.ATC1_COD) ATC1_COD, + max(A.ATC1_DES) ATC1_DES, + max(A.ATC1_DES_C) ATC1_DES_C, + max(A.ATC2_COD) ATC2_COD, + max(A.ATC2_DES) ATC2_DES, + max(A.ATC2_DES_C) ATC2_DES_C, + max(A.ATC3_COD) ATC3_COD, + max(A.ATC3_DES) ATC3_DES, + max(A.ATC3_DES_C) ATC3_DES_C, + max(A.ATC4_COD) ATC4_COD, + max(A.ATC4_DES) ATC4_DES, + max(A.ATC4_DES_C) ATC4_DES_C, + max(A.APP1_COD) APP1_COD, + max(A.APP1_DES) APP1_DES, + max(A.APP1_DES_C) APP1_DES_C, + max(A.APP2_COD) APP2_COD, + max(A.APP2_DES) APP2_DES, + max(A.APP2_DES_C) APP2_DES_C, + max(A.APP3_COD) APP3_COD, + max(A.APP3_DES) APP3_DES, + max(A.APP3_DES_C) APP3_DES_C, + max(A.GENE_ORIG_DESC) GENE_ORIG_DESC, + max(A.VBP_DESC) VBP_DESC, + max(A.CORP_COD) CORP_COD, + max(A.GEN_RN) GEN_RN, + max(A.CORP_DES) CORP_DES, + upper(max(A.CORP_DES_C)) CORP_DES_C, + NVL(max(PN.RN), 9999999) PACK_RN, + NVL(max(BN.RN), 9999999) PROD_RN, + NVL(max(MN.RN), 9999999) CMPS_RN, + A.DATA_SOURCE, + max(A.ATC) ATC, + A.NEW_CODE, + max(A.COMMON_NAME) COMMON_NAME, + max(A.PRODUCT_NAME) PRODUCT_NAME, + max(A.MANU_DES_XIEHE) MANU_DES_XIEHE, + max(A.PACK_DES_XIEHE) PACK_DES_XIEHE, + max(A.DRUG_DELIVERY_ROUTE) DRUG_DELIVERY_ROUTE, + max(A.NFC) NFC, + case when max(upper(A.MNFL_DES)) = 'LOCAL' then 'LOCAL' + else 'MNC' + end as CORP_TYPE, + max(A.LAUNCHTIME) LAUNCHTIME, + max(VBP.VBP_BRAND) VBP_BRAND +FROM + DM.dm_td_external_packinfo_temp2 A + LEFT JOIN pack_N PN ON upper(A.PACK_DES) = PN.PACK_DES + AND upper(A.PROD_DES_C) = PN.PROD_DES_C + AND upper(A.CORP_DES_C) = PN.CORP_DES_C + LEFT JOIN brand_N BN ON upper(A.PROD_DES_C) = BN.PROD_DES_C + AND upper(A.CORP_DES_C) = BN.CORP_DES_C + LEFT JOIN mole_N MN ON upper(A.CMPS_DES) = MN.CMPS_DES + AND upper(A.CMPS_DES_C) = MN.CMPS_DES_C + left join vbp_brand VBP on VBP.PROD_DES_C = A.PROD_DES_C + and VBP.DATA_SOURCE = A.DATA_SOURCE +group by A.PACK_COD,A.NEW_CODE,A.DATA_SOURCE + +-- COMMAND ---------- + +-- DBTITLE 1,找出多个中文名或英文名的PROD +insert overwrite table dm.dm_td_exchange_packinfo_m_prod +with +base_table as ( + select + PROD_DES_C + ,PROD_COD + ,CMPS_COD + ,CMPS_DES_C + ,DATA_SOURCE + from DM.DM_TD_EXTERNAL_PACKINFO + where PROD_COD is not null + group by 1,2,3,4,5 +) +select distinct + t1.prod_cod,t1.cmps_cod,t1.data_source +from base_table t1 + left join (select PROD_DES_C,DATA_SOURCE from base_table + group by 1,2 + having count(distinct PROD_COD)>1 + ) t2 +on t1.prod_des_c = t2.prod_des_c and t1.data_source = t2.data_source +left join (select CMPS_DES_C,DATA_SOURCE from base_table + group by 1,2 + having count(distinct cmps_cod)>1 + ) t3 +on t1.CMPS_DES_C = t3.CMPS_DES_C and t1.data_source = t3.data_source +where t2.prod_des_c is not null or t3.cmps_des_c is not null \ No newline at end of file diff --git a/08 dm_td_external_corp.sql b/08 dm_td_external_corp.sql new file mode 100644 index 0000000..a583b28 --- /dev/null +++ b/08 dm_td_external_corp.sql @@ -0,0 +1,83 @@ +-- Databricks notebook source +---------------------------------------------------------------------------- +--修改时间:20241126 +--修改人:Fanxujia +--修改内容: +--补充THC渠道的全国的事实表中的pack_cod +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +--修改时间:20241129 +--修改人:Fanxujia +--修改内容: +--补充Retail直取中DTP的手工文件里的pack_cod +---------------------------------------------------------------------------- +with external_sales as ( +select distinct PACK_COD +from dm.DM_TF_EXTERNAL_SALES +union +select distinct pack_cod +from dm.dm_tf_external_sales_thc +union +select distinct pack_code +from dm.dm_zk_retail_sales_kpi +where NVL(pack_code,'Others') <> 'Others' +and pack_code <> '' +) + +--只存放有外部数据的公司信息数据 +INSERT OVERWRITE dm.dm_td_external_corp(CORP_COD,CORP_DES,CORP_DES_C,CORP_TYPE) +SELECT A.CORP_COD,CASE WHEN MAX(CORP_DES) LIKE 'ASTRAZENECA%' THEN 'ASTRAZENECA' ELSE MAX(CORP_DES) END CORP_DES,MAX(CORP_DES_C) CORP_DES_C, +CASE WHEN MAX(UPPER(MNFL_DES)) = 'LOCAL' THEN 'LOCAL' +WHEN UPPER(A.CORP_COD) LIKE '%CORP_COD%' OR UPPER(A.CORP_COD) LIKE '%OTHERS%' THEN '' +ELSE 'MNC' END CORP_TYPE +FROM (select distinct PACK_COD,CORP_COD,CORP_DES,CORP_DES_C,MNFL_DES from DM.dm_td_external_packinfo_temp2) A +INNER JOIN external_sales B ON A.PACK_COD = B.PACK_COD +WHERE A.CORP_COD IS NOT NULL +GROUP BY A.CORP_COD + +-- COMMAND ---------- + + +------------ec补充缺少的Corp信息 +insert into dm.dm_td_external_corp(CORP_COD,CORP_DES,CORP_DES_C,CORP_TYPE) +select + case when CORP_COD is null or CORP_COD = '' then 'CORP_COD_EC(Monthly)' + else CORP_COD end as CORP_COD, + max(CORP_DES) CORP_DES, + max(CORP_DES_C) CORP_DES, + max(case when upper(MNFL_DES) = 'LOCAL' then 'LOCAL' else 'MNC' end) CORP_TYPE +from dwd.dwd_inc_gnd_retail_b2c_label_total +where CORP_COD in ( + select distinct + a.CORP_COD + from (select distinct corp_cod from dm.dm_zk_ec_sales_kpi ) a + where not exists( + select 1 from dm.dm_td_external_corp b + where a.CORP_COD = b.CORP_COD + ) +) +group by 1 + + +-- COMMAND ---------- + + +------------Retail补充缺少的Corp信息 +insert into dm.dm_td_external_corp(CORP_COD,CORP_DES,CORP_DES_C,CORP_TYPE) +select distinct + case when CORP_COD is null or CORP_COD = '' then 'CORP_COD_Retail(Quarterly)' + else CORP_COD end as CORP_COD, + max(CORP_DES) CORP_DES, + max(CORP_DES_C) CORP_DES, + max(case when upper(MNFL_DES) = 'LOCAL' then 'LOCAL' else 'MNC' end) CORP_TYPE +from dwd.dwd_inc_gnd_retail_b2c_label_total +where CORP_COD in ( + select distinct + a.CORP_COD + from (select distinct corp_cod from dm.dm_zk_retail_sales_kpi ) a + where not exists( + select 1 from dm.dm_td_external_corp b + where a.CORP_COD = b.CORP_COD + ) +) +group by 1 \ No newline at end of file diff --git a/09 dm_td_external_geo_type.sql b/09 dm_td_external_geo_type.sql new file mode 100644 index 0000000..4d072fd --- /dev/null +++ b/09 dm_td_external_geo_type.sql @@ -0,0 +1,1968 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC # dm.dm_td_external_geo_temp + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 排序 + +-- COMMAND ---------- + +-- DBTITLE 1,PROVINCE RANK +CREATE OR REPLACE TEMPORARY VIEW V_PROVINCE_RANK AS +WITH + MIN_YM AS ( --开始年月 + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + DM.DM_TF_EXTERNAL_SALES + ), + MAX_YM AS ( --结束年月 + SELECT + MAX(YYYYMM) + FROM + DM.DM_TF_EXTERNAL_SALES + ), + SALESRANK AS ( -- 省份销售额,取DM.DM_TF_DEMAND_SALES中的销量排序 + SELECT + T2.province_code AS PROVINCE_CODE, + T2.province_name AS PROVINCE_NAME, + SUM(SALES_VAL) SALES_VALUE + FROM + DM.DM_TF_DEMAND_SALES T1 + INNER JOIN DM.DM_TD_INSTITUTION T2 ON T1.BUYER_CODE = T2.INST_CODE + WHERE + T1.yyyymm BETWEEN ( + SELECT + YYYYMM + FROM + MIN_YM + ) AND ( + SELECT + YYYYMM + FROM + MAX_YM + ) + GROUP BY + 1,2 + ) + -- 排序结果 +SELECT + PROVINCE_CODE, + PROVINCE_NAME, + ROW_NUMBER() OVER ( + ORDER BY + SALES_VALUE DESC + ) RANK +FROM + SALESRANK + +-- COMMAND ---------- + +-- DBTITLE 1,CITY RANK +CREATE OR REPLACE TEMPORARY VIEW V_CITY_RANK AS +WITH + MIN_YM AS ( --开始年月 + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + DM.DM_TF_EXTERNAL_SALES + ), + MAX_YM AS ( --结束年月 + SELECT + MAX(YYYYMM) + FROM + DM.DM_TF_EXTERNAL_SALES + ), + SALESRANK AS ( -- 城市销售额,取DM.DM_TF_DEMAND_SALES中的销量排序 + SELECT + T2.city_code AS CITY_CODE, + T2.city_name AS CITY_NAME, + SUM(SALES_VAL) SALES_VALUE + FROM + DM.DM_TF_DEMAND_SALES T1 + INNER JOIN DM.DM_TD_INSTITUTION T2 ON T1.BUYER_CODE = T2.INST_CODE + WHERE + T1.yyyymm BETWEEN ( + SELECT + YYYYMM + FROM + MIN_YM + ) AND ( + SELECT + YYYYMM + FROM + MAX_YM + ) + GROUP BY + 1,2 + ) + -- 排序结果 +SELECT + CITY_CODE, + CITY_NAME, + ROW_NUMBER() OVER ( + ORDER BY + SALES_VALUE DESC + ) RANK +FROM + SALESRANK + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 各数据源逻辑 + +-- COMMAND ---------- + +-- DBTITLE 1,CHPA +CREATE OR REPLACE TEMPORARY VIEW V_CHPA_GEO AS +SELECT + A.AUDIT_COD, + A.CITY, + CASE + WHEN A.CITY_C = 'Other Low Tiers' THEN 'ROC' + ELSE A.CITY_C + END CITY_C, + A.CITY_TYPE, + A.CITY_TIER, + A.AZ_CITY_TIER, + A.PROVINCE, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_C + END PROVINCE_C, + NVL(A.PROVINCE_CODE, A.AUDIT_COD) PROVINCE_CODE, + CASE + WHEN A.CITY_MAP IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.CITY_MAP + END CITY_MAP, + CASE + WHEN A.PROVINCE_MAP IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_MAP + END PROVINCE_MAP, + A.REGION_CENTER, + CASE + WHEN A.CITY IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE C.RANK + END PROVINCE_RN, + CASE + WHEN A.CITY IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE B.RANK + END CITY_RN, + 'IQVIA-CHPA(Monthly)' DATA_SOURCE +FROM + DM.DM_IMS_TD_GEO A + LEFT JOIN V_CITY_RANK B + ON A.CITY_MAP = B.CITY_NAME + LEFT JOIN V_PROVINCE_RANK C + ON A.PROVINCE_CODE = C.province_code +WHERE + A.CITY_TYPE = 'City' + +-- COMMAND ---------- + +-- DBTITLE 1,COUNTY +CREATE OR REPLACE TEMPORARY VIEW V_COUNTY_GEO +AS +SELECT + A.AUDIT_COD, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_C + END CITY, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + when A.PROVINCE_C = '福厦泉' then '福建' + ELSE A.PROVINCE_C + END CITY_C, + "Province" CITY_TYPE, + null CITY_TIER, + NULL AZ_CITY_TIER, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_C + END PROVINCE, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + when A.PROVINCE_C = '福厦泉' then '福建' + ELSE A.PROVINCE_C + END PROVINCE_C, + A.AUDIT_COD PROVINCE_CODE, + CASE + WHEN A.PROVINCE_MAP IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_MAP + END CITY_MAP, + CASE + WHEN A.PROVINCE_MAP IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.PROVINCE_MAP + END PROVINCE_MAP, + A.REGION_CENTER, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE NVL(B.RANK,999) + END PROVINCE_RN, + CASE + WHEN A.PROVINCE_C IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE NVL(B.RANK,999) + END CITY_RN, + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE +FROM + DM.DM_IMS_TD_COUNTY_GEO A + LEFT JOIN V_PROVINCE_RANK AS B ON A.PROVINCE_C = B.PROVINCE_NAME + +-- COMMAND ---------- + +-- DBTITLE 1,Retail +CREATE OR REPLACE TEMPORARY VIEW V_RETAIL_GEO +AS +SELECT + geo_key AS AUDIT_COD, + city_name_en AS CITY, + CASE + WHEN A.city_c IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.city_c + END city_c, + city_type, + city_tier, + AZ_City_tier, + province_name_en AS PROVINCE, + CASE + WHEN A.province_name IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + when A.province_name = '福厦泉' then '福建' + ELSE A.province_name + END AS PROVINCE_C, + NVL(a.province_code, GEO_KEY) province_code, + CASE + WHEN A.city_map IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.city_map + END city_map, + CASE + WHEN A.province_map IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.province_map + END province_map, + area_code AS REGION_CENTER, + CASE + WHEN A.city_c IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE C.PROVINCE_RN + END PROVINCE_RN, + null CITY_RN, + 'Retail(Quarterly)' DATA_SOURCE +FROM + DM.dm_zk_retail_geo A + LEFT JOIN ( + SELECT + province_code, + ROW_NUMBER() OVER (ORDER BY SALES_VALUE DESC) PROVINCE_RN + FROM + ( + SELECT + T2.province_code, + SUM(T1.sales_value) SALES_VALUE + FROM + dm.dm_zk_retail_sales T1 + INNER JOIN dm.dm_zk_retail_geo T2 + ON T1.AUDIT_COD = T2.geo_key + WHERE + YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + dm.dm_zk_retail_sales + ) + AND YYYYMM <= ( + SELECT + MAX(YYYYMM) + FROM + dm.dm_zk_retail_sales + ) + AND AUDIT_COD != 'ROC' + GROUP BY + T2.province_code + ) + ) C + ON A.PROVINCE_CODE = C.province_code +WHERE + geo_key != 'CHT' + +-- COMMAND ---------- + +-- DBTITLE 1,DTP +CREATE OR REPLACE TEMPORARY VIEW V_DTP_GEO +AS +SELECT + geo_key AS AUDIT_COD, + city_name_en AS CITY, + CASE + WHEN A.city_c IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.city_c + END city_c, + city_type, + city_tier, + AZ_City_tier, + province_name_en AS PROVINCE, + CASE + WHEN A.province_name IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + when A.province_name = '福厦泉' then '福建' + ELSE A.province_name + END AS PROVINCE_C, + NVL(a.province_code, GEO_KEY) province_code, + CASE + WHEN A.city_map IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.city_map + END city_map, + CASE + WHEN A.province_map IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 'ROC' + ELSE A.province_map + END province_map, + area_code AS REGION_CENTER, + CASE + WHEN A.city_c IN ('Other Low Tiers', 'OTHER LOW TIERS') THEN 999 + ELSE C.PROVINCE_RN + END PROVINCE_RN, + null CITY_RN, + 'DTP(Quarterly)' DATA_SOURCE +FROM + DM.dm_zk_retail_geo A + LEFT JOIN ( + SELECT + province_code, + ROW_NUMBER() OVER (ORDER BY SALES_VALUE DESC) PROVINCE_RN + FROM + ( + SELECT + T2.province_code, + SUM(T1.sales_value) SALES_VALUE + FROM + dm.dm_zk_retail_sales T1 + INNER JOIN dm.dm_zk_retail_geo T2 + ON T1.AUDIT_COD = T2.geo_key + WHERE + YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + dm.dm_zk_retail_sales + ) + AND YYYYMM <= ( + SELECT + MAX(YYYYMM) + FROM + dm.dm_zk_retail_sales + ) + AND AUDIT_COD != 'ROC' + GROUP BY + T2.province_code + ) + ) C + ON A.PROVINCE_CODE = C.province_code +WHERE + geo_key != 'CHT' + +-- COMMAND ---------- + +-- DBTITLE 1,THC +CREATE OR REPLACE TEMPORARY VIEW V_THC_GEO +AS +select +case when t1.province_c = '全国' then 'CHT' + when t2.geo_key is null then t1.province_e + else t2.geo_key +end as AUDIT_COD, +t1.city_e as CITY, +t1.city_c, +'Province' as CITY_TYPE, +t3.city_tier, +t3.AZ_City_tier, +t1.province_e as province, +t1.province_c, +case when t1.province_c = '全国' then 'CHT' + when t2.province_code is null then t1.province_e + else t2.province_code +end as PROVINCE_CODE, +NVL(t2.city_name,'') as CITY_MAP, +case when t1.province_c = '全国' then '全国' + when t2.province_code in ('TJ','CQ','BJ','SH') then concat(t2.province_name,'市') + when t2.province_code in ('SC','YN','LN','SA','GZ', + 'HN','HL','SX','ZJ','JS', + 'SD','JL','FJ','GD','HU', + 'AH','GS','HE','JX','HB', + 'HA','QH','TW') + then concat(t2.province_name,'省') + when t2.province_code = 'GX' then concat(t2.province_name,'壮族自治区') + when t2.province_code = 'NX' then concat(t2.province_name,'回族自治区') + when t2.province_code in ('IM','XZ') then concat(t2.province_name,'自治区') + when t2.province_code in ('HK','MC') then concat(t2.province_name,'特别行政区') + when t2.province_code in ('XJ') then concat(t2.province_name,'维吾尔自治区') + ELSE coalesce(t2.province_name,t1.province_c) +end as province_map, +case when t1.province_c = '全国' then 'National' + else t2.area_code +end as REGION_CENTER, +1 as PROVINCE_RN, +1 as CITY_RN, +'THC(Quarterly)' as DATA_SOURCE +from dwd.dwd_gnd_ext_thc_geo t1 +left join dm.dm_td_geography t2 +--THC最细到省,用省关联 +on t1.province_c = t2.province_name +and t2.geo_key = t2.province_code +left join dws.dws_ims_td_geo t3 +on t1.province_c = replace(t3.AUDIT_DES_C,'市','') + +-- COMMAND ---------- + +-- DBTITLE 1,AIA +CREATE OR REPLACE TEMPORARY VIEW V_AIA_GEO +AS +select distinct upper(nvl(t2.inst_code,t1.ins_cd)) as AUDIT_COD, + COALESCE(t3.city_name_en,t4.city) as city, + CASE WHEN COALESCE(t3.city_name,t4.CITY_C) IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + ELSE COALESCE(t3.city_name,t4.CITY_C) + END as CITY_C, + COALESCE(t3.city_type_desc,t4.CITY_TYPE) as CITY_TYPE, + t4.CITY_TIER, + t4.AZ_CITY_TIER, + COALESCE(t3.province_name_en,t4.PROVINCE) as PROVINCE, + CASE WHEN COALESCE(t3.province_name,t4.PROVINCE_C) IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + when COALESCE(t3.province_name,t4.PROVINCE_C) = '福厦泉' then '福建' + ELSE COALESCE(t3.province_name,t4.PROVINCE_C) + END as province_c, + COALESCE(t3.province_code,t4.PROVINCE_CODE,t4.AUDIT_COD) as PROVINCE_CODE, + CASE WHEN COALESCE(t3.city_name,t4.CITY_MAP) IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + ELSE COALESCE(t3.city_name,t4.CITY_MAP) + END as CITY_MAP, + CASE WHEN t3.province_code in ('TJ','CQ','BJ','SH') then concat(t3.province_name,'市') + when t3.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(t3.province_name,'省') + when t3.province_code = 'GX' then concat(t3.province_name,'壮族自治区') + when t3.province_code ='IM' then concat(t3.province_name,'自治区') + when t4.PROVINCE_MAP IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + ELSE COALESCE(t3.province_name,t4.PROVINCE_MAP) + END as PROVINCE_MAP, + case when t3.area_code = 'SOUTH' then 'South' + when t3.area_code = 'WEST' then 'West' + when t3.area_code = 'CENTRAL' then 'Central' + when t3.area_code = 'NORTH' then 'North' + when t3.area_code = 'EAST' then 'East' + else t4.REGION_CENTER + end as REGION_CENTER, + 1 as PROVINCE_RN, + 1 as CITY_RN, + 'AIA(Monthly)' as DATA_SOURCE + +from (select distinct case when ins_cd is not null and length(ins_cd) < 7 then right(concat('0000000',ins_cd),7) else ins_cd end as ins_cd + from dwd.dwd_gnd_aia_rawdata) t1 +left join ( +select distinct +case when length(cpa_hospital_code) < 7 then right(concat('0000000',cpa_hospital_code),7) else cpa_hospital_code end as cpa_hospital_code, +ins_cd_nl as inst_code +from dwd.dwd_gnd_hospital_not_provided +) t2 +on NVL(t1.ins_cd,'') = t2.cpa_hospital_code +left join dm.dm_td_institution t3 +on t2.inst_code = t3.inst_code +left join dm.dm_ims_td_geo t4 +on t3.city_name_en = t4.city + +-- COMMAND ---------- + +-- DBTITLE 1,CHC +CREATE OR REPLACE TEMPORARY VIEW V_CHC_GEO +AS +select + upper( nvl(t2.AUDIT_COD ,t1.city_e) ) as AUDIT_COD, + t1.city_e as city, + CASE WHEN t1.city_c IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + when t1.city_c = '福厦泉' then '福建' ELSE t1.city_c END city_c, + case + when t1.city_e='Suzhou'then 'City' + when t1.city_e='Wuxi' then 'City' + when t1.city_e = 'Fuzhou' then 'City' + else t2.CITY_TYPE + end CITY_TYPE, + case + when t1.city_e='Suzhou'then '5' + when t1.city_e='Wuxi' then '5' + when t1.city_e = 'Fuzhou' then '5' + else t2.CITY_TIER + end CITY_TIER, + case + when t1.city_e='Suzhou'then '2' + when t1.city_e='Wuxi' then '2' + when t1.city_e = 'Fuzhou' then '2' + else t2.AZ_CITY_TIER + end AZ_CITY_TIER, + t1.province_e as province, + CASE WHEN t1.province_c IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + when t1.province_c = '福厦泉' then '福建' ELSE t1.province_c END province_c, + case + when t1.city_e='Suzhou'then 'JS' + when t1.city_e='Wuxi' then 'JS' + when t1.city_e = 'Fuzhou' then 'FJ' + else t2.PROVINCE_CODE + end PROVINCE_CODE, + case + when t1.city_e='Suzhou'then '苏锡' + when t1.city_e='Wuxi' then '苏锡' + when t1.city_e = 'Fuzhou' then '福厦泉' + when t1.city_e IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + when t2.CITY_MAP IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + else t2.CITY_MAP + end CITY_MAP, + case + when t1.city_e='Suzhou'then '江苏省' + when t1.city_e='Wuxi' then '江苏省' + when t1.city_e = 'Fuzhou' then '福建省' + when t1.city_e IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + when t2.PROVINCE_MAP IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' + else t2.PROVINCE_MAP + end PROVINCE_MAP, + case + when t1.city_e='Suzhou'then 'Central' + when t1.city_e='Wuxi' then 'Central' + when t1.city_e = 'Fuzhou' then 'East' + else t2.REGION_CENTER + end REGION_CENTER, + 1 as PROVINCE_RN, + 1 as CITY_RN, + 'CHC(Quarterly)' as DATA_SOURCE +from dwd.dwd_gnd_ext_chc_geo t1 +left join dm.dm_ims_td_geo t2 +on t1.city_e = t2.CITY + +-- COMMAND ---------- + +-- DBTITLE 1,EC +CREATE OR REPLACE TEMPORARY VIEW V_EC_GEO +AS +select + audit_cod, + city_e as CITY, + CASE WHEN t1.CITY_C IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' ELSE t1.CITY_C END CITY_C, + 'Province' as CITY_TYPE, + '0' as CITY_TIER, + '0' as AZ_CITY_TIER, + province_e as PROVINCE, + CASE WHEN t1.PROVINCE_C IN ('Other Low Tiers','OTHER LOW TIERS') THEN 'ROC' when t1.PROVINCE_C = '福厦泉' then '福建' ELSE t1.PROVINCE_C END PROVINCE_C, + 'National' as PROVINCE_CODE, + '' as CITY_MAP, + '全国' as PROVINCE_MAP, + 'National' as REGION_CENTER, + 1 as PROVINCE_RN, + 1 AS CITY_RN, + 'EC(Monthly)' as DATA_SOURCE +from dm.dm_zk_ec_geo T1 + +-- COMMAND ---------- + +-- DBTITLE 1,XIE HE +create or replace temporary view V_xiehe_geo +as +with +-- 计算 province, city 的rank +xiehe_sales( + select + city + ,province + ,yyyymm + ,sum(sales_value) sales_value + from dm.dm_ext_xiehe_sales + group by 1,2,3 +) +,thisyear ( + select + city + ,province + ,sum(sales_value) sales_value + from xiehe_sales a + left join (select LEFT(MAX(YYYYMM), 4) * 100 + 1 as start_ym,MAX(YYYYMM) as end_ym from xiehe_sales) b + where yyyymm>=b.start_ym and yyyymm <=b.end_ym + group by 1,2 +) +,otheryear ( + select + city + ,province + ,sum(sales_value) sales_value + from xiehe_sales a + left join (select LEFT(MAX(YYYYMM), 4) * 100 + 1 as start_ym from xiehe_sales) b + where yyyymm<=start_ym and concat(a.city,a.province) not in (select concat(city,province) from thisyear) + group by 1,2 +) +--city 部分的排序,考虑不在今年范围内的机构排序 +,city_rn ( +select + city + ,province + ,row_number() over( order by sales_value) CITY_RN +from thisyear +union all +select + city + ,province + ,(row_number() over( order by sales_value) + b.this_c) CITY_RN +from otheryear a +left join (select count(1) this_c from thisyear) b +) +--province部分的排序,考虑不在今年范围内的机构排序 +,province_rn ( +select + province + ,row_number() over( order by sum(sales_value)) PROVINCE_RN +from thisyear +group by 1 +union all +select + province + ,(row_number() over( order by sum(sales_value)) + b.this_c) PROVINCE_RN +from otheryear a +left join (select count(distinct province) this_c from thisyear) b +group by province,b.this_c +) + +SELECT + A.AUDIT_COD, + A.CITY, + A.CITY_C, + A.city_type, + A.AZ_City_tier city_tier, + AZ_City_tier, + A.PROVINCE, + A.PROVINCE_C, + NVL(A.PROVINCE_CODE, A.AUDIT_COD) PROVINCE_CODE, + A.CITY_MAP, + A.PROVINCE_MAP, + A.REGION_CENTER, + CASE WHEN B.CITY_RN is null then 60+ row_number() over( order by a.CITY) else B.CITY_RN end as CITY_RN, + CASE WHEN C.PROVINCE_RN is null then 40+ row_number() over( order by a.PROVINCE) else C.PROVINCE_RN end as PROVINCE_RN, + 'XH Data(Quarterly)' DATA_SOURCE +FROM + dm.dm_ext_xiehe_geo A +LEFT JOIN city_rn B ON B.city = A.city_c +LEFT JOIN province_rn C ON C.province = A.province_c + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## RESULT + +-- COMMAND ---------- + +INSERT OVERWRITE dm.dm_td_external_geo_temp ( + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +) +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_CHPA_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_CHC_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_RETAIL_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_DTP_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_THC_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_EC_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_xiehe_geo +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_COUNTY_GEO +UNION ALL +SELECT + AUDIT_COD, + CITY, + CITY_C, + CITY_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + PROVINCE_CODE, + CITY_MAP, + PROVINCE_MAP, + REGION_CENTER, + PROVINCE_RN, + CITY_RN, + DATA_SOURCE +FROM + V_AIA_GEO + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # TEMPORARY VIEW dm_td_external_geo_type_temp + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 各数据源逻辑 + +-- COMMAND ---------- + +-- DBTITLE 1,CHPA +-------------------------------------------------CHPA 城--------------------------------------------------------------- +CREATE OR REPLACE TEMPORARY VIEW CHPA_geo_type_temp +AS +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + CASE + WHEN + A.PROVINCE_C IN ( + 'BBU_OtherProv', 'OBU_OtherProv', 'Others', 'ROC', 'Other Low Tiers', 'OTHER LOW TIERS' + ) + OR A.PROVINCE_C IS NULL + THEN + 'ROC' + ELSE A.PROVINCE_C + END PROVINCE_C, + B.REGION_TYPE, + A.PROVINCE_MAP, + NVL( + A.CITY_C, + CASE + WHEN + A.PROVINCE_C IN ( + 'BBU_OtherProv', 'OBU_OtherProv', 'Others', 'ROC', 'Other Low Tiers', 'OTHER LOW TIERS' + ) + OR A.PROVINCE_C IS NULL + THEN + 'ROC' + ELSE A.CITY_C + END + ) CITY_C, + A.AZ_CITY_TIER, + 3 RN +FROM + DM.dm_td_external_geo_temp A + INNER JOIN DM.dm_tf_external_sales B + ON A.DATA_SOURCE = B.DATA_SOURCE + AND A.AUDIT_COD = B.AUDIT_COD +WHERE + A.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +UNION ALL +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + '全国' PROVINCE_C, + A.REGION_TYPE, + '全国' PROVINCE_MAP, + '全国' CITY_C, + NULL AZ_CITY_TIER, + 1 RN +FROM + DM.dm_tf_external_sales A +WHERE + A.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +UNION ALL +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + C.ProvinceGroup PROVINCE_C, + A.REGION_TYPE, + '' PROVINCE_MAP, + C.ProvinceGroup CITY_C, + NULL AZ_CITY_TIER, + 2 RN +FROM + DM.dm_tf_external_sales A + INNER JOIN ( + select + a.ProvinceGroup, + b.AUDIT_COD + from + dwd.dwd_gnd_province_group_city a + inner join dm.dm_td_external_geo_temp b + on ( + a.AUDIT_CD = b.AUDIT_COD + or a.AUDIT_CD = b.PROVINCE_CODE + ) + WHERE + B.CITY_TYPE = 'City' + and b.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) C + ON C.AUDIT_COD = a.AUDIT_COD +WHERE + A.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,county_mapping +CREATE OR REPLACE TEMPORARY VIEW county_mapping +AS +SELECT 'bbu_bu_county_obu_East5' as original_name,'BBU_BU_COUNTY' as display_name +union ALL +SELECT 'bbu_bu_county_obu_East5' as original_name,'OBU East5' as display_name +union ALL +SELECT 'bbu_bu_county_obu_nonEast5' as original_name,'BBU_BU_COUNTY' as display_name +union ALL +SELECT 'bbu_bu_county_obu_nonEast5' as original_name,'OBU NonEast5' as display_name +union ALL +SELECT 'bbu_county_obu_nonEast5' as original_name,'BBU County' as display_name +union ALL +SELECT 'bbu_county_obu_nonEast5' as original_name,'OBU NonEast5' as display_name + +-- COMMAND ---------- + +-- DBTITLE 1,COUNTY +------------------------------------------------COUNTY 省------------------------------------------------------------ +CREATE OR REPLACE TEMPORARY VIEW COUNTY_geo_type_temp +AS +SELECT + DATA_SOURCE, + AUDIT_COD, + PACK_COD, + PROVINCE_C, + REGION_TYPE, + PROVINCE_MAP, + CITY_C, + AZ_CITY_TIER, + RN +FROM + ( + SELECT DISTINCT + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + CASE + WHEN A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + --,'OBU_BU_County','OBU County','OBU_BU_COUNTY','OBU COUNTY' + ) + OR A.PROVINCE_C IS NULL THEN 'ROC' + ELSE A.PROVINCE_C + END PROVINCE_C, + NVL (B.REGION_TYPE, '') as REGION_TYPE, + A.PROVINCE_MAP, + CASE + WHEN A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'OTHER LOW TIERS', + 'Other Low Tiers' --,'OBU_BU_County','OBU County','OBU_BU_COUNTY','OBU COUNTY' + ) + OR A.PROVINCE_C IS NULL THEN 'ROC' + ELSE A.PROVINCE_C + END CITY_C, + NULL AZ_CITY_TIER, + 3 RN + FROM + DM.dm_ims_td_county_geo A + INNER JOIN DM.dm_ext_county_tf_sales_region B ON A.REGION_COD = B.REGION_COD + UNION ALL + SELECT DISTINCT + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + '全国' PROVINCE_C, + NVL (A.REGION_TYPE, '') REGION_TYPE, + '全国' PROVINCE_MAP, + '全国' CITY_C, + NULL AZ_CITY_TIER, + 1 RN + FROM + DM.dm_ext_county_tf_sales_region A + UNION ALL + SELECT DISTINCT + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + COALESCE(f1.display_name, A.REGION_TYPE, '') PROVINCE_C, + NVL (A.REGION_TYPE, '') REGION_TYPE, + '' PROVINCE_MAP, + COALESCE(f1.display_name, A.REGION_TYPE, '') CITY_C, + NULL AZ_CITY_TIER, + 2 RN + FROM + DM.dm_ext_county_tf_sales_region A + left join county_mapping f1 on A.REGION_TYPE = f1.original_name + WHERE + A.REGION_TYPE IS NOT NULL + UNION ALL + SELECT DISTINCT + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + C.ProvinceGroup PROVINCE_C, + NVL (A.REGION_TYPE, '') REGION_TYPE, + '' PROVINCE_MAP, + C.ProvinceGroup CITY_C, + NULL AZ_CITY_TIER, + 2 RN + FROM + DM.dm_ext_county_tf_sales_region A + INNER JOIN ( + select + a.ProvinceGroup, + b.AUDIT_COD + from + dwd.dwd_gnd_province_group_city a + inner join dm.dm_td_external_geo_temp b on ( + a.AUDIT_CD = b.AUDIT_COD + or a.AUDIT_CD = b.PROVINCE_CODE + ) + WHERE + B.CITY_TYPE = 'City' + and b.DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' + AND upper(A.ProvinceGroup) NOT IN ( + 'OBU EAST5', + 'BBU County', + 'BBU_BU_COUNTY', + 'OBU NONEAST5' + ) + ) C ON C.AUDIT_COD = a.AUDIT_COD + ) T +WHERE + T.PROVINCE_C <> 'Other Low Tiers' + +-- COMMAND ---------- + +-- DBTITLE 1,RETAIL +------------------------------------------------RETAIL 省------------------------------------------------------------ +---,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +CREATE OR REPLACE TEMPORARY VIEW RETAIL_geo_type_temp +AS +SELECT DISTINCT + 'Retail(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.iqvia_pack_code PACK_COD, + CASE + WHEN A.province_city IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + OR A.province_city IS NULL THEN 'ROC' + WHEN A.province_city = '福厦泉' THEN '福建' + ELSE A.province_city + END PROVINCE_C, + '' REGION_TYPE, + C.PROVINCE_MAP, + CASE + WHEN A.province_city IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + OR A.province_city IS NULL THEN 'ROC' + WHEN A.province_city = '福厦泉' THEN '福建' + ELSE A.province_city + END CITY_C, + NULL AZ_CITY_TIER, + 3 RN +FROM + DM.dm_zk_retail_sales A + LEFT JOIN DM.dm_zk_retail_geo C ON A.AUDIT_COD = C.geo_key +UNION ALL +SELECT DISTINCT + 'Retail(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.iqvia_pack_code PACK_COD, + '全国' PROVINCE_C, + '' REGION_TYPE, + '全国' PROVINCE_MAP, + '全国' CITY_C, + NULL AZ_CITY_TIER, + 1 RN +FROM + DM.dm_zk_retail_sales A +UNION ALL +SELECT DISTINCT + 'Retail(Quarterly)' DATA_SOURCE, + A.AUDIT_COD, + A.iqvia_pack_code, + c.ProvinceGroup PROVINCE_C, + '' REGION_TYPE, + '' PROVINCE_MAP, + c.ProvinceGroup CITY_C, + NULL AZ_CITY_TIER, + 2 RN +FROM + DM.dm_zk_retail_sales A + INNER JOIN ( + select + a.ProvinceGroup, + b.AUDIT_COD + from + dwd.dwd_gnd_province_group_city a + inner join dm.dm_td_external_geo_temp b on ( + a.AUDIT_CD = b.AUDIT_COD + or a.AUDIT_CD = b.PROVINCE_CODE + ) + WHERE + B.CITY_TYPE = 'City' + and b.DATA_SOURCE = 'Retail(Quarterly)' + ) C ON C.AUDIT_COD = a.AUDIT_COD + --DTP +UNION all +select + 'DTP(Quarterly)' DATA_SOURCE, + AUDIT_COD, + PACK_COD, + C.province_city, + '' REGION_TYPE, + C.province_map, + C.province_city CITY_C, + NULL AZ_CITY_TIER, + 3 RN +from + ( + select + iqvia_pack_code PACK_COD, + case + when AUDIT_COD = 'CHT' then 'ROC' + else AUDIT_COD + end AUDIT_COD + from + dm.dm_zk_retail_dtp_sales a + group by + 1, + 2 + ) A + LEFT JOIN DM.dm_zk_retail_geo C ON A.AUDIT_COD = C.geo_key + +-- COMMAND ---------- + +-- DBTITLE 1,THC +CREATE OR REPLACE TEMPORARY VIEW THC_geo_type_temp +AS +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + C.ProvinceGroup PROVINCE_C, + A.REGION_TYPE, + '' PROVINCE_MAP, + C.ProvinceGroup CITY_C, + NULL AZ_CITY_TIER, + 2 RN +FROM + dm.dm_tf_external_sales A + INNER JOIN ( + select + a.ProvinceGroup, + b.AUDIT_COD + from + dwd.dwd_gnd_province_group_city a + inner join dm.dm_td_external_geo_temp b on ( + a.city = b.province_c + or a.province = b.province_c + ) + WHERE + B.CITY_TYPE = 'Province' + and b.DATA_SOURCE = 'THC(Quarterly)' + ) C ON C.AUDIT_COD = a.AUDIT_COD +WHERE + A.DATA_SOURCE = 'THC(Quarterly)' +UNION ALL +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + A.PROVINCE_C, + B.REGION_TYPE, + A.PROVINCE_MAP, + A.CITY_C, + A.AZ_CITY_TIER, + 3 as RN +FROM + DM.dm_td_external_geo_temp A + INNER JOIN ( + --补充所有的geo维度,保证全国的数据和省份的数据都有对应的维度。 + select + PACK_COD, + REGION_TYPE, + DATA_SOURCE, + AUDIT_COD + from + dm.dm_tf_external_sales + WHERE + DATA_SOURCE = 'THC(Quarterly)' + union + select + PACK_COD, + '' REGION_TYPE, + 'THC(Quarterly)' DATA_SOURCE, + AUDIT_COD + from + dm.dm_tf_external_sales_thc + -- + ) B ON A.DATA_SOURCE = B.DATA_SOURCE + AND A.AUDIT_COD = B.AUDIT_COD +WHERE + A.DATA_SOURCE = 'THC(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,AIA +------------------------------------------------AIA------------------------------------------------------------ +CREATE OR REPLACE TEMPORARY VIEW AIA_geo_type_temp +AS +select distinct + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + '全国' as PROVINCE_C, + A.REGION_TYPE, + '全国' as PROVINCE_MAP, + '全国' as CITY_C, + NULL as AZ_CITY_TIER, + 1 as RN +from + dm.dm_tf_external_sales A +where + A.DATA_SOURCE = 'AIA(Monthly)' +union all +select distinct + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + B.ProvinceGroup as PROVINCE_C, + A.REGION_TYPE, + '' as PROVINCE_MAP, + B.ProvinceGroup as CITY_C, + null as AZ_CITY_TIER, + 2 as RN +from + dm.dm_tf_external_sales A + inner join ( + select + t1.ProvinceGroup, + t2.AUDIT_COD + from + dwd.dwd_gnd_province_group_city t1 + inner join dm.dm_td_external_geo_temp t2 on t1.AUDIT_CD = t2.AUDIT_COD + or t1.AUDIT_CD = t2.PROVINCE_CODE + WHERE + t2.CITY_TYPE = 'City' + and t2.DATA_SOURCE = 'AIA(Monthly)' + ) B ON A.AUDIT_COD = B.AUDIT_COD +WHERE + A.DATA_SOURCE = 'AIA(Monthly)' +union all +select distinct + A.DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + case + when A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + or A.PROVINCE_C IS NULL then 'ROC' + else A.PROVINCE_C + END as PROVINCE_C, + B.REGION_TYPE, + A.PROVINCE_MAP, + case + when A.CITY_C is not null then A.CITY_C + when A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + or A.PROVINCE_C IS NULL THEN 'ROC' + else A.PROVINCE_C + END as CITY_C, + A.AZ_CITY_TIER, + 3 as RN +from + dm.dm_td_external_geo_temp A + inner join dm.dm_tf_external_sales B on A.DATA_SOURCE = B.DATA_SOURCE + and A.AUDIT_COD = B.AUDIT_COD +where + A.DATA_SOURCE = 'AIA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,CHC +-------------------------------------------------CHC城--------------------------------------------------------------- +CREATE OR REPLACE TEMPORARY VIEW CHC_geo_type_temp +AS +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + CASE + WHEN A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + OR A.PROVINCE_C IS NULL THEN 'ROC' + ELSE A.PROVINCE_C + END PROVINCE_C, + B.REGION_TYPE, + A.PROVINCE_MAP, + NVL ( + A.CITY_C, + CASE + WHEN A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + OR A.PROVINCE_C IS NULL THEN 'ROC' + ELSE A.PROVINCE_C + END + ) CITY_C, + A.AZ_CITY_TIER, + 3 RN +FROM + DM.dm_td_external_geo_temp A + INNER JOIN DM.dm_tf_external_sales B ON A.DATA_SOURCE = B.DATA_SOURCE + AND A.AUDIT_COD = B.AUDIT_COD +WHERE + A.DATA_SOURCE = 'CHC(Quarterly)' +UNION ALL +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + '全国' PROVINCE_C, + A.REGION_TYPE, + '全国' PROVINCE_MAP, + '全国' CITY_C, + NULL AZ_CITY_TIER, + 1 RN +FROM + DM.dm_tf_external_sales A +WHERE + A.DATA_SOURCE = 'CHC(Quarterly)' +UNION ALL +SELECT DISTINCT + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + C.ProvinceGroup PROVINCE_C, + A.REGION_TYPE, + '' PROVINCE_MAP, + C.ProvinceGroup CITY_C, + NULL AZ_CITY_TIER, + 2 RN +FROM + DM.dm_tf_external_sales A + INNER JOIN ( + select + a.ProvinceGroup, + b.AUDIT_COD + from + dwd.dwd_gnd_province_group_city a + inner join dm.dm_td_external_geo_temp b on ( + a.AUDIT_CD = b.AUDIT_COD + or a.AUDIT_CD = b.PROVINCE_CODE + ) + WHERE + B.CITY_TYPE = 'City' + and b.DATA_SOURCE = 'CHC(Quarterly)' + ) C ON C.AUDIT_COD = a.AUDIT_COD +WHERE + A.DATA_SOURCE = 'CHC(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,EC +---------------------------------------------------EC 全国--------------------------------------------------- +CREATE OR REPLACE TEMPORARY VIEW EC_geo_type_temp +AS +select distinct + a.DATA_SOURCE, + a.AUDIT_COD, + b.PACK_COD, + a.PROVINCE_C, + b.REGION_TYPE, + a.PROVINCE_MAP, + a.CITY_C, + a.AZ_CITY_TIER, + 1 RN +from + dm.dm_td_external_geo_temp a + left join dm.dm_tf_external_sales b on a.audit_cod = b.AUDIT_COD +where + a.DATA_SOURCE = 'EC(Monthly)' + and b.DATA_SOURCE = 'EC(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,XIE HE +-----------------------------------------------XIEHE------------------- +CREATE OR REPLACE TEMPORARY VIEW XH_geo_type_temp +AS +select distinct + A.DATA_SOURCE, + A.AUDIT_COD, + A.PACK_COD, + '全国' as PROVINCE_C, + A.REGION_TYPE, + '全国' as PROVINCE_MAP, + '全国' as CITY_C, + NULL as AZ_CITY_TIER, + 1 as RN +from + dm.dm_tf_external_sales A +where + A.DATA_SOURCE = 'XH Data(Quarterly)' +union all +select distinct + A.DATA_SOURCE, + A.AUDIT_COD, + B.PACK_COD, + case + when A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + or A.PROVINCE_C IS NULL then 'ROC' + else A.PROVINCE_C + END as PROVINCE_C, + B.REGION_TYPE, + A.PROVINCE_MAP, + case + when A.CITY_C is not null then A.CITY_C + when A.PROVINCE_C IN ( + 'BBU_OtherProv', + 'OBU_OtherProv', + 'Others', + 'ROC', + 'Other Low Tiers', + 'OTHER LOW TIERS' + ) + or A.PROVINCE_C IS NULL THEN 'ROC' + else A.PROVINCE_C + END as CITY_C, + A.AZ_CITY_TIER, + 3 as RN +from + dm.dm_td_external_geo_temp A + inner join dm.dm_tf_external_sales B on A.DATA_SOURCE = B.DATA_SOURCE + and A.AUDIT_COD = B.AUDIT_COD +where + A.DATA_SOURCE = 'XH Data(Quarterly)' + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## RESULT + +-- COMMAND ---------- + +-- -----------------------此处需要注意,若源头数据只有全国,需要转化成ROC,否则下面的sql脚本跑出来的数据全国是错误的。--------------------------------------------- +-- insert overwrite dm.dm_td_external_geo_type_temp( +-- DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +-- ) +create or replace temporary view dm_td_external_geo_type_temp +as +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +CHPA_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +COUNTY_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +RETAIL_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +THC_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +AIA_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +CHC_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +EC_geo_type_temp +union all +select +DATA_SOURCE,AUDIT_COD,PACK_COD,PROVINCE_C,REGION_TYPE,PROVINCE_MAP,CITY_C,AZ_CITY_TIER,RN +from +XH_geo_type_temp + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # dm.dm_td_external_geo + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 各临时表 + +-- COMMAND ---------- + +-- DBTITLE 1,pmt +-- --省长信息 +-- pmt as ( +-- select distinct area_name,area_head_name +-- from dm.dm_pmt_td_area_head +-- where rmt_pmt = 'PMT' +-- ) +--pmt_region +create or replace temporary view pmt +as +select distinct PROVINCE_CODE,province_name,AREA_NAME_EN +from dm.dm_td_geography +where PROVINCE_CODE <> '' + +-- COMMAND ---------- + +-- DBTITLE 1,TEMP +create or replace temporary view TEMP +as + SELECT + DISTINCT t1.DATA_SOURCE, + t1.AUDIT_COD, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.PROVINCE_C + END PROVINCE_C, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.PROVINCE_MAP + END PROVINCE_MAP, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.CITY_C + END CITY_C, + CASE + WHEN t1.AUDIT_COD NOT IN ('CHT', 'ROC') THEN t1.AZ_CITY_TIER + END AZ_CITY_TIER, + t1.REGION_TYPE, + t1.AUDIT_COD as inst_code, + NVL(t2.inst_name,'') as inst_name, + NVL(t3.PROVINCE_CODE,'') as PROVINCE_CODE, + NVL(t4.AUDIT_COD,'') as CITY_CODE, + NVL(t2.county_name,'') as county_name, + NVL(t2.county_tier_desc,'') as county_tier, + -- NVL(t5.area_head_name,'') as pmt_region, + NVL(t5.AREA_NAME_EN,'') as pmt_region, + NVL(t2.inst_sub_type,'') as inst_sub_type, + NVL(t2.ins_level,'') as ins_level + FROM + dm_td_external_geo_type_temp t1 + left join (select distinct inst_code,inst_name,province_name,city_name,county_name,city_tier_desc,county_tier_desc,inst_sub_type,org_level_desc as ins_level, + case when city_name = '深圳市' then '深圳' else province_name end as pmt_key from dm.dm_td_institution) t2 + on t1.AUDIT_COD = t2.inst_code + left join dm.dm_td_external_geo_temp t3 + on t1.AUDIT_COD = t3.AUDIT_COD + and t1.DATA_SOURCE = t3.DATA_SOURCE + left join dm.dm_ims_td_geo t4 + on t1.CITY_C = t4.CITY_C + left join pmt t5 + -- on t2.pmt_key = t5.area_name + on t3.PROVINCE_CODE = t5.PROVINCE_CODE + where t1.DATA_SOURCE = 'AIA(Monthly)' + union all + SELECT + DISTINCT t1.DATA_SOURCE, + t1.AUDIT_COD, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.PROVINCE_C + END PROVINCE_C, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.PROVINCE_MAP + END PROVINCE_MAP, + CASE + WHEN t1.AUDIT_COD IN ('CHT', 'ROC') THEN 'ROC' + ELSE t1.CITY_C + END CITY_C, + CASE + WHEN t1.AUDIT_COD NOT IN ('CHT', 'ROC') THEN t1.AZ_CITY_TIER + END AZ_CITY_TIER, + t1.REGION_TYPE, + '' as inst_code, + '' as inst_name, + NVL(t3.PROVINCE_CODE,'') as PROVINCE_CODE, + NVL(t4.AUDIT_COD,'') as CITY_CODE, + '' as county_name, + '' as county_tier, + NVL(t5.AREA_NAME_EN,'') as pmt_region, + '' as inst_sub_type, + '' as ins_level + FROM + dm_td_external_geo_type_temp t1 + left join dm.dm_td_external_geo_temp t3 + on t1.AUDIT_COD = t3.AUDIT_COD + and t1.DATA_SOURCE = t3.DATA_SOURCE + left join dm.dm_ims_td_geo t4 + on t1.CITY_C = t4.CITY_C + left join pmt t5 + on t1.PROVINCE_C = t5.province_name + where t1.DATA_SOURCE <> 'AIA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,province_sales +create or replace temporary view province_sales +as + SELECT + A.PROVINCE_C, + SUM(B.SALES_VALUE_CAL) SALES_VALUE_CAL + FROM + TEMP A + INNER JOIN DM.DM_TF_EXTERNAL_SALES B ON A.AUDIT_COD = B.AUDIT_COD + AND A.DATA_SOURCE = B.DATA_SOURCE + AND A.REGION_TYPE = B.REGION_TYPE + and A.DATA_SOURCE = B.DATA_SOURCE + WHERE + B.YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + DM.DM_TF_EXTERNAL_SALES + WHERE + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) + AND B.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + GROUP BY + A.PROVINCE_C + + +-- COMMAND ---------- + +-- DBTITLE 1,Province_N +create or replace temporary view Province_N +as + SELECT + PROVINCE_C, + row_number() OVER( + PARTITION BY 1 + ORDER BY + ( + CASE + WHEN PROVINCE_C = 'ROC' THEN 2 + ELSE 1 + END + ) ASC, + SALES_VALUE_CAL DESC + ) RN_PROV + FROM + province_sales + + +-- COMMAND ---------- + +-- DBTITLE 1,city_sales +create or replace temporary view city_sales +as + SELECT + A.CITY_C, + SUM(B.SALES_VALUE_CAL) SALES_VALUE_CAL + FROM + TEMP A + INNER JOIN DM.DM_TF_EXTERNAL_SALES B ON A.AUDIT_COD = B.AUDIT_COD + AND A.DATA_SOURCE = B.DATA_SOURCE + AND A.REGION_TYPE = B.REGION_TYPE + and A.DATA_SOURCE = B.DATA_SOURCE + WHERE + B.YYYYMM >= ( + SELECT + LEFT(MAX(YYYYMM), 4) * 100 + 1 + FROM + DM.DM_TF_EXTERNAL_SALES + WHERE + DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) + AND B.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + GROUP BY + A.CITY_C + +-- COMMAND ---------- + +-- DBTITLE 1,city_N +create or replace temporary view city_N +as + SELECT + CITY_C, + row_number() OVER( + PARTITION BY 1 + ORDER BY + ( + CASE + WHEN CITY_C = 'ROC' THEN 2 + ELSE 1 + END + ) ASC, + SALES_VALUE_CAL DESC + ) RN_CITY + FROM + city_sales + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## RESULT + +-- COMMAND ---------- + +-------------------------------------------------------------------------------- +--修改时间:20241025 +--修改人:Fanxujia +--修改内容: +--外部数据报告优化,将PBI的逻辑搬到DBR +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +--修改时间:20241105 +--修改人:Fanxujia +--修改内容: +--for AIA Dashboard:增加county、pmt_region等字段 +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--其他渠道仿照AIA Dashboard增加一个pmt_region字段 +-------------------------------------------------------------------------------- +insert overwrite table dm.dm_td_external_geo +( +DATA_SOURCE, +AUDIT_COD, +REGION_TYPE, +PROVINCE_C, +CITY_C, +AZ_CITY_TIER, +PROV_RN, +CITY_RN, +PROVINCE_MAP, +inst_code, +inst_name, +PROVINCE_CODE, +CITY_CODE, +county_name, +county_tier, +pmt_region, +inst_sub_type, +ins_level +) +SELECT + A.DATA_SOURCE, + A.AUDIT_COD, + A.REGION_TYPE, + CASE + WHEN A.DATA_SOURCE = 'EC(Monthly)' THEN '全国' + WHEN A.DATA_SOURCE = 'THC(Quarterly)' AND A.AUDIT_COD = 'CHT' THEN '全国' + ELSE MAX(A.PROVINCE_C) + END PROVINCE_C, + CASE + WHEN A.DATA_SOURCE = 'EC(Monthly)' THEN '全国' + WHEN A.DATA_SOURCE = 'THC(Quarterly)' AND A.AUDIT_COD = 'CHT' THEN '全国' + ELSE MAX(A.CITY_C) + END CITY_C, + MAX(A.AZ_CITY_TIER) AZ_CITY_TIER, + NVL(MAX(PN.RN_PROV), 999) PROV_RN, + NVL(MAX(CN.RN_CITY), 999) CITY_RN, + case when A.DATA_SOURCE = 'THC(Quarterly)' AND A.AUDIT_COD = 'CHT' then '全国' + else MAX(A.PROVINCE_MAP) + end as PROVINCE_MAP, + A.inst_code, + A.inst_name, + case when A.AUDIT_COD = 'CHT' and A.PROVINCE_CODE = '' then 'CHT' else A.PROVINCE_CODE end as PROVINCE_CODE, + case when A.AUDIT_COD = 'CHT' and A.CITY_CODE = '' then 'CHT' + when A.AUDIT_COD <> A.PROVINCE_CODE and A.AUDIT_COD <> A.CITY_CODE and A.AUDIT_COD <> A.inst_code and A.CITY_CODE = '' then A.AUDIT_COD + else A.CITY_CODE + end as CITY_CODE, + A.county_name, + A.county_tier, + A.pmt_region, + A.inst_sub_type, + A.ins_level +FROM + TEMP A + LEFT JOIN Province_N PN ON A.PROVINCE_C = PN.PROVINCE_C + LEFT JOIN city_N CN ON A.CITY_C = CN.CITY_C +WHERE + A.PROVINCE_C NOT IN ( + SELECT + DISTINCT provincegroup + FROM + DWD.dwd_gnd_province_group_city + UNION ALL + SELECT + '全国' + UNION ALL + SELECT + 'BBU_BU_COUNTY' + ) + GROUP BY A.AUDIT_COD,A.REGION_TYPE,A.DATA_SOURCE,10,11,12,13,14,15,16,17,18 + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # dm.dm_td_external_geo_type + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 各临时表 + +-- COMMAND ---------- + +-- DBTITLE 1,TEMP +create or replace temporary view TEMP +as + SELECT + DISTINCT DATA_SOURCE, + AUDIT_COD, + PROVINCE_C, + PROVINCE_MAP, + CITY_C, + AZ_CITY_TIER, + RN, + REGION_TYPE, + CASE + WHEN PROVINCE_C <> 'Other Low Tiers' + AND ( + DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' + OR ( + DATA_SOURCE <> 'IQVIA-COUNTY(Quarterly)' + AND PROVINCE_C NOT IN ( + 'BBU_BU_COUNTY', + 'OBU_BU_COUNTY', + 'OBU COUNTY', + 'BBU COUNTY' + ) + ) + ) THEN 1 + ELSE 0 + END GEO_FLAG + FROM + dm_td_external_geo_type_temp + WHERE + PROVINCE_C <> 'ROC' + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## RESULT + +-- COMMAND ---------- + +-------------------------------------------------------------------------------- +--修改时间:20241025 +--修改人:Fanxujia +--修改内容: +--外部数据报告优化,将PBI的逻辑搬到DBR +-------------------------------------------------------------------------------- +insert overwrite table dm.dm_td_external_geo_type +( +DATA_SOURCE, +AUDIT_COD, +REGION_TYPE, +PROVINCE_GROUP +) +SELECT + DISTINCT DATA_SOURCE, + AUDIT_COD, + REGION_TYPE, + A.PROVINCE_C PROVINCE_GROUP +FROM + TEMP A +WHERE + A.PROVINCE_C IN ( + SELECT + DISTINCT provincegroup + FROM + DWD.dwd_gnd_province_group_city + UNION ALL + SELECT + '全国' + ) \ No newline at end of file diff --git a/11 DM_TD_EXTERNAL_MARKET_NEW.sql b/11 DM_TD_EXTERNAL_MARKET_NEW.sql new file mode 100644 index 0000000..1aef872 --- /dev/null +++ b/11 DM_TD_EXTERNAL_MARKET_NEW.sql @@ -0,0 +1,393 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET ( +-- MARKET STRING, +-- DATA_SOURCE STRING, +-- TA STRING, +-- AZ_RELATED STRING, +-- MARKET_DESC STRING, +-- TA_RN INT, +-- PRD_FLAG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET_TA ( +-- MARKET STRING COMMENT '市场', +-- DATA_SOURCE STRING COMMENT '数据源', +-- TA STRING COMMENT '治疗领域', +-- TA_MAP STRING COMMENT '治疗领域匹配', +-- TA_RN INT COMMENT '治疗领域排名', +-- MARKET_DESC STRING COMMENT '市场描述', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_ta'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_ta'; + +-- COMMAND ---------- + +-- DBTITLE 1,pbi页面展示ta标签 +-- create or replace table tmp.tmp_td_ext_unionall_market_ta_mapping +-- ( +-- market string, +-- ta string, +-- data_source string); +-- INSERT OVERWRITE tmp.tmp_td_ext_unionall_market_ta_mapping (market, ta, data_source) VALUES +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'DM', 'EC(Monthly)'), +-- ('GI Market', 'GI', 'EC(Monthly)'), +-- ('RE Market', 'RE', 'EC(Monthly)'), +-- ('ATTR_EPL', 'CV', 'DTP(Quarterly)'), +-- ('ONC Market', 'ONCO', 'DTP(Quarterly)'), +-- ('RARE Market', 'RARE', 'DTP(Quarterly)'), +-- ('RE Market', 'RE', 'Retail(Quarterly)'), +-- ('CV Market', 'CV', 'Retail(Quarterly)'), +-- ('RD Market', 'RD', 'Retail(Quarterly)'), +-- ('GI Market', 'GI', 'Retail(Quarterly)'), +-- ('DM Market', 'DM', 'THC(Quarterly)'), +-- ('GI Market', 'GI', 'THC(Quarterly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'THC(Quarterly)'), +-- ('RE Market', 'RE', 'THC(Quarterly)'), +-- ('ONC Market', 'ONCO', 'THC(Quarterly)'), +-- ('CV Market', 'CV', 'THC(Quarterly)'), +-- ('RE Market', 'RE', 'XH Data(Quarterly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'XH Data(Quarterly)'), +-- ('RD Market', 'RD', 'XH Data(Quarterly)'), +-- ('DM Market', 'DM', 'XH Data(Quarterly)'), +-- ('ONC Market', 'ONCO', 'XH Data(Quarterly)'), +-- ('RARE Market', 'RARE', 'XH Data(Quarterly)'), +-- ('CV Market', 'CV', 'XH Data(Quarterly)'), +-- ('DM Market', 'DM', 'IQVIA-COUNTY(Quarterly)'), +-- ('ONC Market', 'ONCO', 'IQVIA-COUNTY(Quarterly)'), +-- ('GI Market', 'GI', 'IQVIA-COUNTY(Quarterly)'), +-- ('RE Market', 'RE', 'IQVIA-COUNTY(Quarterly)'), +-- ('CV Market', 'CV', 'IQVIA-COUNTY(Quarterly)'), +-- ('RARE Market', 'RARE', 'IQVIA-COUNTY(Quarterly)'), +-- ('RD Market', 'RD', 'IQVIA-COUNTY(Quarterly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'IQVIA-COUNTY(Quarterly)'), +-- ('ONC Market', 'ONCO', 'IQVIA-CHPA(Monthly)'), +-- ('RE Market', 'RE', 'IQVIA-CHPA(Monthly)'), +-- ('RD Market', 'RD', 'IQVIA-CHPA(Monthly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'IQVIA-CHPA(Monthly)'), +-- ('RARE Market', 'RARE', 'IQVIA-CHPA(Monthly)'), +-- ('DM Market', 'DM', 'IQVIA-CHPA(Monthly)'), +-- ('GI Market', 'GI', 'IQVIA-CHPA(Monthly)'), +-- ('CV Market', 'CV', 'IQVIA-CHPA(Monthly)'), +-- ('DM Market', 'DM', 'AIA(Monthly)'), +-- ('CV Market', 'CV', 'AIA(Monthly)'), +-- ('GI Market', 'GI', 'AIA(Monthly)'), +-- ('RE Market', 'RE', 'AIA(Monthly)'), +-- ('RARE Market', 'RARE', 'AIA(Monthly)'), +-- ('ONC Market', 'ONCO', 'AIA(Monthly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'AIA(Monthly)'), +-- ('RD Market', 'RD', 'AIA(Monthly)'), +-- ('GI Market', 'GI', 'CHC(Quarterly)'), +-- ('DM Market', 'DM', 'CHC(Quarterly)'), +-- ('RE Market', 'RE', 'CHC(Quarterly)'), +-- ('CV Market', 'CV', 'CHC(Quarterly)'), +-- ('NIAD (Non-Insulin Anti-Diabetic) Market', 'NIAD', 'CHC(Quarterly)'), + +-- ('CVRM Market', 'CVRM', 'Retail(Quarterly)'), +-- ('CVRM Market', 'CVRM', 'EC(Monthly)'), +-- ('CVRM Market', 'CVRM', 'CHC(Quarterly)'), +-- ('CVRM Market', 'CVRM', 'AIA(Monthly)'), +-- ('CVRM Market', 'CVRM', 'IQVIA-COUNTY(Quarterly)'), +-- ('CVRM Market', 'CVRM', 'XH Data(Quarterly)'), +-- ('CVRM Market', 'CVRM', 'IQVIA-CHPA(Monthly)'), +-- ('CVRM Market', 'CVRM', 'THC(Quarterly)') +-- ; + +-- COMMAND ---------- + +-- DBTITLE 1,藏数逻辑标签 +-- -- 建表 +-- CREATE TABLE IF NOT EXISTS tmp.tmp_td_ext_market_hide_flag ( +-- data_source VARCHAR(20), +-- market VARCHAR(100), +-- flag VARCHAR(1) +-- ); + +-- -- 插入数据(对应 case when 中返回 '1' 的规则) +-- INSERT overwrite tmp.tmp_td_ext_market_hide_flag (data_source, market, flag) VALUES +-- -- Retail(Quarterly) 部分 +-- ('Retail(Quarterly)', 'Antacid anti GI swelling agent+PPI Oral', '1'), +-- ('Retail(Quarterly)', 'HTN Market', '1'), +-- ('Retail(Quarterly)', 'NIAD (Non-Insulin Anti-Diabetic) Market', '1'), +-- ('Retail(Quarterly)', 'Respules Market', '1'), +-- ('Retail(Quarterly)', 'Statin+XZK Market', '1'), +-- ('Retail(Quarterly)', 'BUDESONIDE Market', '1'), +-- ('Retail(Quarterly)', 'Rosuvastatin Market', '1'), +-- ('Retail(Quarterly)', 'Atorvastatin Market', '1'), +-- ('Retail(Quarterly)', 'Metoprolol Succinate Market', '1'), +-- ('Retail(Quarterly)', 'PPI Oral ESOMEPRAZOLE Market', '1'), +-- ('Retail(Quarterly)', 'PPI Oral OMEPRAZOLE Market', '1'), +-- ('Retail(Quarterly)', 'Inhaled Extended Market', '1'), +-- ('Retail(Quarterly)', 'Non-Omeprazole', '1'), +-- ('Retail(Quarterly)', 'Metoprolol Tartrate Market', '1'), +-- ('Retail(Quarterly)', 'Pediatric Cough Market', '1'), +-- ('Retail(Quarterly)', 'Anti-HER2 Market', '1'), +-- ('Retail(Quarterly)', 'Anti-HER2 mBC Market', '1'), +-- ('Retail(Quarterly)', 'Fasenra Market', '1'), +-- ('Retail(Quarterly)', 'Severe Asthma', '1'), +-- ('Retail(Quarterly)', 'DAPA Market', '1'), + +-- -- DTP(Quarterly) 部分 +-- ('DTP(Quarterly)', 'EGFR TKI Market', '1'), +-- ('DTP(Quarterly)', 'Anti-HER2 Market', '1'), +-- ('DTP(Quarterly)', 'Anti-HER2 mBC Market', '1'), +-- ('DTP(Quarterly)', 'Fasenra/Tezspire Related Market', '1'), +-- ('DTP(Quarterly)', 'Severe Asthma', '1'), +-- ('DTP(Quarterly)', 'Tezspire CRSwNP Market', '1'), +-- ('DTP(Quarterly)', 'CRSwNP Market', '1'), +-- ('DTP(Quarterly)', 'PAM Market', '1'); + +-- COMMAND ---------- + +-- ============================================================ +-- 目标表:dm.dm_td_ext_unionall_market +-- 功能:整合各数据源的市场、TA、AZ关联、产品标志等维度信息 +-- 调度:全量覆盖写入(INSERT OVERWRITE) +-- 作者/更新:chenwu +-- ============================================================ +INSERT OVERWRITE dm.dm_td_ext_unionall_market ( + MARKET, DATA_SOURCE, TA, AZ_RELATED, MARKET_DESC, TA_RN, PRD_FLAG, ETL_INSERT_DT, ETL_UPDATE_DT +) + +WITH + +-- ------------------------------------------------------------ +-- market_info:从包映射表取市场-数据源组合,关联竞品表补充市场描述 +-- 用 MAX(MARKET_DESC) 避免一对多 JOIN 导致重复行 +-- ------------------------------------------------------------ +market_info AS ( + SELECT + t1.MARKET, + t1.DATASOURCE AS DATA_SOURCE, + MAX(t2.MARKETDESC) AS MARKET_DESC + FROM dm.dm_td_ext_unionall_market_pack_mapping t1 + LEFT JOIN dm.dm_td_external_keycompatitor t2 + ON t1.MARKET = t2.MARKET + GROUP BY 1, 2 +), + +-- ------------------------------------------------------------ +-- TA_info:从市场属性表取市场-TA-排序,过滤占位行(MARKET_ORDER=999) +-- 末尾 UNION ALL 补充"ALL Market"汇总行 +-- 改用 SELECT DISTINCT 替代无聚合的 GROUP BY +-- ------------------------------------------------------------ +TA_info AS ( + SELECT DISTINCT + MARKET, + TA, + TA_ORDER + FROM DM.DM_IMS_TD_MARKET_PROPERTY + WHERE MARKET_ORDER <> 999 + UNION ALL + + -- SELECT + -- 'CVRM Market' AS MARKET, + -- 'CVRM' AS TA, + -- 0 AS TA_ORDER + -- UNION ALL + + SELECT + 'ALL Market' AS MARKET, + 'ALL' AS TA, + -1 AS TA_ORDER +), + +-- ------------------------------------------------------------ +-- AZ_RELATED_info:从临时映射表取市场-数据源-AZ关联关系(已去重) +-- ------------------------------------------------------------ +AZ_RELATED_info AS ( + SELECT DISTINCT + MARKET, + TA AS AZ_RELATED, + DATA_SOURCE + FROM tmp.tmp_td_ext_unionall_market_ta_mapping +) + +-- ------------------------------------------------------------ +-- 主查询:以 market_info 为驱动表,依次关联 TA、AZ关联、隐藏标志 +-- hide_flag 为小维表,添加 BROADCAST hint 避免 shuffle +-- PRD_FLAG=1 表示市场在隐藏标志表中存在(需隐藏/特殊处理) +-- ------------------------------------------------------------ +SELECT /*+ BROADCAST(t4) */ +DISTINCT + t1.MARKET, + t1.DATA_SOURCE, + t2.TA, + t3.AZ_RELATED, + t1.MARKET_DESC, + t2.TA_ORDER AS TA_RN, + IF(t4.MARKET IS NULL, 0, 1) AS PRD_FLAG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM market_info t1 +LEFT JOIN TA_info t2 + ON t1.MARKET = t2.MARKET +LEFT JOIN AZ_RELATED_info t3 + ON t1.MARKET = t3.MARKET + AND t1.DATA_SOURCE = t3.DATA_SOURCE +LEFT JOIN + tmp.tmp_td_ext_market_hide_flag t4 + ON t1.MARKET = t4.MARKET + AND t1.DATA_SOURCE = t4.DATA_SOURCE + +-- COMMAND ---------- + +insert overwrite dm.dm_td_ext_unionall_market_ta ( + MARKET, DATA_SOURCE, TA, TA_RN, MARKET_DESC, ETL_INSERT_DT, ETL_UPDATE_DT +) + SELECT + MARKET, + DATA_SOURCE, + AZ_RELATED TA, + TA_RN, + MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.dm_td_ext_unionall_market + -- WHERE MARKET NOT LIKE '%ALL Market%' and MARKET <>'Retail All Market' + -- UNION all + -- SELECT + -- MARKET, + -- DATA_SOURCE, + -- 'CVRM' TA, + -- 0 TA_RN, + -- MARKET_DESC, + -- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + -- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + -- FROM + -- DM.dm_td_ext_unionall_market + -- WHERE + -- MARKET = 'CVRM Market' + +-- COMMAND ---------- + +----------------------------------------------------------------------------------- +--修改时间:20240822 +--修改人:FanXujia +--修改内容: +--Retail、EC渠道,新增NIAD这个TA。数据与DM相同 +----------------------------------------------------------------------------------- +insert into dm.dm_td_ext_unionall_market_ta ( + MARKET, DATA_SOURCE, TA, TA_RN, MARKET_DESC, ETL_INSERT_DT, ETL_UPDATE_DT +) + select + market, + DATA_SOURCE, + 'NIAD' as TA, + 7 as TA_RN, + MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + from + dm.dm_td_ext_unionall_market_ta + where + DATA_SOURCE = 'Retail(Quarterly)' + and ta = 'DM' + union all + select + market, + DATA_SOURCE, + 'NIAD' as TA, + 7 as TA_RN, + MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + from + dm.dm_td_ext_unionall_market_ta + where + DATA_SOURCE = 'EC(Monthly)' + and ta = 'DM' + --20250701 chenwu 新增RARE = ONCO的Soliris Related Market + union all + select + market, + DATA_SOURCE, + 'RARE' as TA, + 8 as TA_RN, + MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + from + dm.dm_td_ext_unionall_market_ta + where + DATA_SOURCE = 'DTP(Quarterly)' + and ta = 'ONCO' + and MARKET = 'Soliris Related Market'; + +-- COMMAND ---------- + +-- log 20250226 auth:庄伟 +-- 对market_ta表中市场进行补全,并依据手工文件维护的 market 与 ta 映射,匹配出完整市场对应的TA_NAME +insert overwrite table dm.dm_td_ext_unionall_market_ta ( + MARKET, DATA_SOURCE, TA, TA_MAP, TA_RN, MARKET_DESC, ETL_INSERT_DT, ETL_UPDATE_DT +) + -----找出在market维度表中不存在的market列表 + with temp_ma_ext_market as (select distinct + MARKET, + DATA_SOURCE + from + dm.dm_td_ext_unionall_market + where + MARKET NOT IN ( + select distinct + MARKET + from + dm.dm_td_ext_unionall_market_ta + ) + ) + ------补充完整的market列表,并通过market匹配手工文件维护的market对应的TA + select + distinct + dim_mkt_ta.MARKET, + DATA_SOURCE, + dim_mkt_ta.TA, + case + when dim_mkt_ta.MARKET = 'ALL Market' then 'ALL' + else nvl(mkt_property.ta, mkt_property_key.TA) + end as TA_MAP, + dim_mkt_ta.TA_RN, + dim_mkt_ta.MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + from + ( + select + MARKET, + DATA_SOURCE, + TA, + TA_RN, + MARKET_DESC + from + dm.dm_td_ext_unionall_market_ta + ) dim_mkt_ta + left join dm.dm_ims_td_market_property mkt_property + on dim_mkt_ta.market = mkt_property.market + left join dm.dm_ims_td_market_property mkt_property_key + on dim_mkt_ta.MARKET = mkt_property_key.MARKET_KEY + union all + select + ext_market.MARKET, + ext_market.DATA_SOURCE, + null TA, + mkt_property.TA TA_MAP, + '99' as TA_RN, + null MARKET_DESC, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + from + temp_ma_ext_market ext_market + left join dm.dm_ims_td_market_property mkt_property + on ext_market.market = mkt_property.MARKET + where + nvl(mkt_property.TA, '') <> ''; \ No newline at end of file diff --git a/12 dm_td_external_org.sql b/12 dm_td_external_org.sql new file mode 100644 index 0000000..e121af6 --- /dev/null +++ b/12 dm_td_external_org.sql @@ -0,0 +1,358 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXTERNAL_ORG ( +-- REGION_CODE STRING, +-- region_name_en STRING, +-- RSM_Name STRING, +-- rc_code STRING, +-- rc_name_en STRING, +-- RC_Name STRING, +-- RegionCenter STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- bu_category STRING, +-- bu_name_en STRING, +-- sub_bu_name STRING, +-- sub_bu_code_auth STRING, +-- bu_code_auth STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_external_org'; + +-- COMMAND ---------- + +-- DBTITLE 1,UNIONALL_ORG +CREATE OR REPLACE TEMPORARY VIEW UNIONALL_ORG +AS +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_AIA_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_CHC_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_CHPA_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_COUNTY_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_EC_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_RETAIL_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_THC_ORG +UNION ALL +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM + DM.DM_TD_EXT_XIEHE_ORG + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite dm.dm_td_external_org +insert overwrite dm.dm_td_external_org +select +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +from + UNIONALL_ORG + +-- COMMAND ---------- + +-- /* +-- 修改时间:2025.09.18 +-- 修改人:chenwu +-- 修改内容:新增一个org表给merged data使用,原org表在13 external auth 中会被删除掉'BBU_County','CHC','EC','Eagle','Retail' +-- 故要在被删除前将这部分数据保留,供pbi端打目标机构标签 +-- */ +INSERT OVERWRITE DM.DM_TD_EXTERNAL_ORG_MERGED_DATA +SELECT + REGION_CODE, + REGION_NAME_EN, + RSM_NAME, + RC_CODE, + RC_NAME_EN, + RC_NAME, + REGIONCENTER, + AUDIT_COD, + MARKET, + BU_CATEGORY, + BU_NAME_EN, + SUB_BU_NAME, + SUB_BU_CODE_AUTH, + BU_CODE_AUTH, + DATA_SOURCE, + REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME +FROM DM.DM_TD_EXTERNAL_ORG \ No newline at end of file diff --git a/13 external auth.sql b/13 external auth.sql new file mode 100644 index 0000000..4824fdc --- /dev/null +++ b/13 external auth.sql @@ -0,0 +1,1230 @@ +-- Databricks notebook source +-- log 20250226 auth:庄伟 +-- MA和AIA权限表改造如下 +--1.MA销售权限表(dm.dm_auth_sales_ta),通过辖区中销售负责的产品(Family)找到对应的TA,然后按照权限矩阵的限制对用户所能看到的BU进行筛选 +-- Market Analysis_CHPA 全BU可看 +-- Market Analysis_County 除BU:EC以外可以看 +-- Market Analysis_CHC 除BU:EC&RDU 以外可以看 +-- Market Analysis_THC 除BU:EC&RDU 以外可以看 +-- Market Analysis_Retail/DTP 除BU:EC&RDU 以外可以看 +-- Market Analysis_EC 仅EC可看 --修改 全BU可看 +-- Market Analysis_AIA 除BU:EC以外可以看 +-- Market Analysis_科室市场数据 全BU可看 + +--2.MA和AIA非销售权限表,按照workmate和mds用户申请的权限看 +-- dm.dm_auth_nonsales_ta 直接按照用户申请的TA权限查看 +-- dm.dm_auth_nonsales_org 根据用户申请的Sub_bu/BU转换为TA权限查看 + +-- log 20251105 auth:chenwu +-- MA和AIA权限范围修改 dm.dm_auth_sales_ta +-- Market Analysis_AIA 除BU:EC,Retail以外可以看 +-- Market Analysis_科室市场数据 除BU:EC以外可以看 +-- Market Analysis_Retail/DTP 除BU: EC以外可以看 + +-- COMMAND ---------- + +--for ec into retail +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,p2.rsm_kcode,p2.rc_code,p2.rc_name_en,p2.region_code,p2.region_name_en,BU_CATEGORY,yyyymm,mr_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +------销售权限 +---从C月辖区中提取USER与TA映射 +drop view if exists tmp_auth_sales_user_ta_mapping; +create temporary view tmp_auth_sales_user_ta_mapping +as +( +select +bu_active_list.bm_name, +org.bu_code, +org.bu_name, +org.sub_bu_code, +org.sub_bu_name, +org.dsm_trty_code, +org.dsm_kcode, +org.rsm_trty_code, +org.rsm_kcode, +org.rsd_trty_code, +org.rsd_kcode, +org.nsd_trty_code, +org.nsd_kcode, +org.rc_code, +prod.ta_code, +case when prod.ta_name ='ONC' then 'ONCO' else prod.ta_name end ta_name +from +( +select distinct +yyyymm, +trty_code, +family_code +from dm.dm_td_sd_territory_indication +where yyyymm in( +select key_value as yyyymm +from dm.dm_td_date_config +where key_code = 'pfmc_cvh' +) and bu not in ('CUBE','KA') and family_code not in ('RTRT','ECEC') +and key_hp<>3 --chenwu 20250904 排除双考影响 +)trty_ind_c +left join dm.dm_td_product prod +on trty_ind_c.family_code = prod.prd_key +left join dm_td_org_temp org +on trty_ind_c.yyyymm = org.yyyymm and trty_ind_c.trty_code = org.mr_trty_code +left join dws.dws_td_bu_active bu_active_list +on org.bu_name =bu_active_list.bu_name +); + +-- COMMAND ---------- + +insert overwrite table dm.dm_auth_sales_ta +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +data_source, +concat(ta,data_source) ta_source, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from +( +----chpa 1 +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'IQVIA-CHPA(Monthly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +)auth_chpa +----county 2 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'IQVIA-COUNTY(Quarterly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where +-- bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where +-- bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where +-- bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where +-- bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_county +----chc 3 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'CHC(Quarterly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_chc +----thc 4 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'THC(Quarterly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('RDU','EC') +bu_name not in ('RDU') +and not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_thc +union +----retail 5 +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'Retail(Quarterly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_retail +----ec 6 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'EC(Monthly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +-- where --bu_name ='EC' +-- -- (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +-- not (bu_name in ('Retail') and rc_code in ('RC198')) -- EC 改成和CHPA一样, 全BU可看 20260305 yusuo +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +-- where --bu_name ='EC' +-- -- (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +-- not (bu_name in ('Retail') and rc_code in ('RC198')) -- EC 改成和CHPA一样, 全BU可看 20260305 yusuo +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +-- where --bu_name ='EC' +-- -- (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +-- not (bu_name in ('Retail') and rc_code in ('RC198')) -- EC 改成和CHPA一样, 全BU可看 20260305 yusuo +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +-- where --bu_name ='EC' +-- -- (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +-- not (bu_name in ('Retail') and rc_code in ('RC198')) -- EC 改成和CHPA一样, 全BU可看 20260305 yusuo +)auth_ec +----aia 7 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'AIA(Monthly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where bu_name not in ('Retail','EC') +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where bu_name not in ('Retail','EC') +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where bu_name not in ('Retail','EC') +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where bu_name not in ('Retail','EC') +)auth_aia +----xiehe 8 +union +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'XH Data(Quarterly)' data_source +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_xiehe +)auth_sales_ta + +----DTP 9 +union all +select +bu_name, +user_trty_code, +user_kcode, +ta, +role, +'DTP(Quarterly)' data_source, +concat(ta,data_source) ta_source, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from +( +--dsm +select +bu_name, +dsm_trty_code user_trty_code, +dsm_kcode user_kcode, +ta_name ta, +'dsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsm +select +bu_name, +rsm_trty_code user_trty_code, +rsm_kcode user_kcode, +ta_name ta, +'rsm' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--rsd +select +bu_name, +rsd_trty_code user_trty_code, +rsd_kcode user_kcode, +ta_name ta, +'rsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +union +--nsd +select +bu_name, +nsd_trty_code user_trty_code, +nsd_kcode user_kcode, +ta_name ta, +'nsd' role +from tmp_auth_sales_user_ta_mapping +where --bu_name not in ('EC') +not (bu_name in ('Retail') and rc_code in ('RC198')) --架构中 EC 合并到 Retail 调整 20260127 +)auth_retail + +; + + +-- COMMAND ---------- + +-----非销售权限 用户申请的TA维度权限 +insert overwrite table dm.dm_auth_nonsales_ta +select +user_kcode, +user_role, +ta_code, +case when ta_name ='ONC' then 'ONCO' else ta_name end ta_name, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from +( +select distinct user_kcode,role user_role,ta_code,ta_name +from dm.dm_td_user_permission_derived +where nvl(ta_name,'')<>'' +)nonsales_ta; + +-- COMMAND ---------- + +drop view if exists tmp_auth_sales_bu_ta_mapping; +create temporary view tmp_auth_sales_bu_ta_mapping +as +( +select distinct bu_code,bu_name,sub_bu_code,sub_bu_name,ta_code,ta_name +from tmp_auth_sales_user_ta_mapping +); + +-- COMMAND ---------- + +-----用户申请的BU维度权限转换为架构中负责的TA +insert overwrite table dm.dm_auth_nonsales_org +select +coalesce(subbu_ta_map.bu_code,nonsales_subbu.bu_code) bu_code, +coalesce(subbu_ta_map.bu_name,nonsales_subbu.bu_name) bu_name, +nonsales_subbu.user_kcode, +nonsales_subbu.user_role, +coalesce(subbu_ta_map.sub_bu_code,nonsales_subbu.sub_bu_code) sub_bu_code, +coalesce(subbu_ta_map.sub_bu_name,nonsales_subbu.sub_bu_name) sub_bu_name, +subbu_ta_map.ta_code, +subbu_ta_map.ta_name, +'SUB_BU' row_tag, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from +( +select +distinct +user_kcode, +role user_role, +bu_code, +bu_name, +sub_bu_code, +sub_bu_name +from dm.dm_td_user_permission_detail +where nvl(sub_bu_code,'')<>'' +)nonsales_subbu +left join +( +select bu_code,bu_name,sub_bu_code,sub_bu_name,ta_code,ta_name +from tmp_auth_sales_bu_ta_mapping +)subbu_ta_map +on nonsales_subbu.sub_bu_code = subbu_ta_map.sub_bu_code +union +select +nonsales_bu.user_kcode, +nonsales_bu.user_role, +coalesce(bu_ta_map.bu_code,nonsales_bu.bu_code) bu_code, +coalesce(bu_ta_map.bu_name,nonsales_bu.bu_name) bu_name, +bu_ta_map.sub_bu_code, +bu_ta_map.sub_bu_name, +bu_ta_map.ta_code, +bu_ta_map.ta_name, +'BU' row_tag, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from +( +select +distinct +user_kcode, +role user_role, +bu_code, +bu_name +from dm.dm_td_user_permission_detail +where nvl(sub_bu_code,'')='' and nvl(bu_code,'')<>'' +)nonsales_bu +left join +( +select distinct bu_code,bu_name,sub_bu_code,sub_bu_name,ta_code,ta_name +from tmp_auth_sales_bu_ta_mapping +)bu_ta_map +on nonsales_bu.bu_code = bu_ta_map.bu_code; + +-- COMMAND ---------- + +-- DBTITLE 1,old version +-- insert overwrite dm.dm_auth_geo(KCODE,CITY_CODE) +-- select distinct +-- t1.k_account as KCODE, +-- t2.AUDIT_COD as CITY_CODE +-- from ( +-- select K_ACCOUNT, +-- USER_NAME, +-- Province_GEO +-- from dm.DM_TD_SPECIAL_GROUP +-- where ROLE = 'PI_GEO_IMS' +-- and length(Province_GEO) > 0 +-- ) t1 +-- join +-- ( +-- select distinct +-- PROVINCE_C, +-- AUDIT_COD +-- from dm.DM_IMS_TD_GEO +-- where length(AUDIT_COD) > 0 +-- ) t2 +-- on t1.Province_GEO = t2.PROVINCE_C + +-- COMMAND ---------- + +-- insert overwrite dm.dm_auth_org(KCODE,SUB_BU_CODE) +-- select +-- t1.user_kcode as KCODE, +-- t2.SUB_BU_CODE as SUB_BU_CODE +-- from ( +-- select K_ACCOUNT as user_kcode, +-- bu_org as BU_NAME +-- from dm.DM_TD_SPECIAL_GROUP +-- where ROLE = 'PI_ORG_IMS' +-- and length(bu_org) > 0 +-- ) t1 +-- join ( +-- select distinct +-- BU_NAME, +-- SUB_BU_CODE +-- from DM.DM_TD_ORG +-- ) t2 +-- on t1.BU_NAME = t2.BU_NAME + +-- COMMAND ---------- + +-- --------------------------------------------------------------------------- +-- --修改时间:20241112 +-- --修改人:Fanxujia +-- --修改内容: +-- --for AIA Dashboard: +-- --1)MA报告没有权限,旧AIA报告有权限:增加旧AIA报告的权限人员,以旧AIA报告的范围开权限(by TA) +-- --2)MA报告有权限,旧AIA报告也有权限:以旧AIA报告权限范围为准 +-- --3)MA报告有权限,旧AIA报告没有权限:保持不变 +-- --------------------------------------------------------------------------- +-- with AIA_USERS as ( +-- select +-- distinct gu.k_account as KCODE, +-- upper(rg.ta_prd) as TA_PRD +-- from +-- dm.DM_TD_GROUP_USERS gu +-- join dm.DM_TD_REPORT_GROUP rg on gu.user_team = rg.user_group +-- where +-- rg.role = 'PI_PRD_CPA' +-- and length(rg.ta_prd) > 0 +-- union +-- SELECT distinct +-- K_ACCOUNT as KCODE, +-- upper(TA_PRD) as TA_PRD +-- FROM +-- dm.DM_TD_SPECIAL_GROUP +-- WHERE +-- ROLE = 'PI_PRD_CPA' +-- AND length(TA_PRD) > 0 +-- ) + +-- ,CHPA_USERS as ( +-- select +-- distinct gu.k_account as KCODE, +-- upper(rg.ta_prd) as TA_PRD +-- from +-- dm.DM_TD_GROUP_USERS gu +-- join dm.DM_TD_REPORT_GROUP rg on gu.user_team = rg.user_group +-- where +-- rg.role = 'PI_PRD_IMS' +-- and length(rg.ta_prd) > 0 +-- union +-- SELECT distinct +-- K_ACCOUNT as KCODE, +-- upper(TA_PRD) as TA_PRD +-- FROM +-- dm.DM_TD_SPECIAL_GROUP +-- WHERE +-- ROLE = 'PI_PRD_IMS' +-- AND length(TA_PRD) > 0 +-- ) + +-- ,ALL_USERS as ( +-- --单独CHPA用户 +-- select distinct +-- KCODE, +-- TA_PRD +-- from CHPA_USERS +-- where KCODE not in ( +-- select KCODE from AIA_USERS +-- ) +-- union +-- --1:单独AIA用户 +-- --2:同时存在于CHPA以及AIA的用户,以AIA的权限为准 +-- select distinct +-- KCODE, +-- TA_PRD +-- from AIA_USERS +-- ) + +-- ,TA_MARKET as ( +-- SELECT +-- DISTINCT TA, +-- MARKET +-- FROM +-- dm.dm_td_external_market_pack_mapping_temp +-- WHERE +-- length(TA) > 0 +-- ) + + +-- insert overwrite dm.dm_auth_prd( +-- KCODE, +-- MARKET +-- ) +-- select distinct +-- t1.KCODE, +-- t2.MARKET +-- from ALL_USERS t1 +-- inner join TA_MARKET t2 +-- on t1.TA_PRD = t2.TA + + +-- COMMAND ---------- + +-- ------------------------------------------------------------------------ +-- --修改时间:20241108 +-- --修改人:Fanxujia +-- --修改内容: +-- --增加产品粒度的权限表 +-- ------------------------------------------------------------------------ +-- insert overwrite table dm.dm_auth_prd_pack +-- ( +-- KCODE, +-- PACK_COD +-- ) +-- with market_pack as ( +-- select distinct +-- PACK_COD, +-- MARKET +-- from dm.dm_td_external_market_pack_mapping +-- ) + +-- select distinct +-- t1.KCODE, +-- t2.PACK_COD +-- from dm.dm_auth_prd t1 +-- inner join market_pack t2 +-- on t1.MARKET = t2.MARKET + + + +-- COMMAND ---------- + +-- --------------------------------chpa-------------------------------------------------------------------- +-- ------------------所有BU能看CHPA,用户需要排除非重点城市之外的人 +-- insert overwrite dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- WITH EMP AS ( +-- select distinct dsm_kcode KCODE,concat(bu_code,'IQVIA-CHPA(Monthly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) --and audit_cod is not null +-- union all +-- select distinct rsm_kcode KCODE,concat(bu_code,'IQVIA-CHPA(Monthly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct rsd_kcode KCODE,concat(bu_code,'IQVIA-CHPA(Monthly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct nsd_kcode KCODE,concat(bu_code,'IQVIA-CHPA(Monthly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 --and audit_cod is not null +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'IQVIA-CHPA(Monthly)') MKT_SOURCE,concat(B.AUDIT_COD,'IQVIA-CHPA(Monthly)') AUDIT_SOURCE +-- ,'IQVIA-CHPA(Monthly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- ----------------------------------------------------CHC------------------------------------------------------------------------------ +-- -----------------------CHC的人能看 +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- with emp as ( +-- select distinct dsm_kcode KCODE,concat(bu_code,'CHC(Quarterly)') as bu_code_auth,'' bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) AND BU_NAME_EN = 'CHC' +-- union all +-- select distinct rsm_kcode KCODE,concat(bu_code,'CHC(Quarterly)') as bu_code_auth,'' bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 AND BU_NAME_EN = 'CHC' +-- union all +-- select distinct rsd_kcode KCODE,concat(bu_code,'CHC(Quarterly)') as bu_code_auth,'' bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 AND BU_NAME_EN = 'CHC' +-- union all +-- select distinct nsd_kcode KCODE,concat(bu_code,'CHC(Quarterly)') as bu_code_auth,'' bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 AND BU_NAME_EN = 'CHC' +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'CHC(Quarterly)') MKT_SOURCE,concat(B.AUDIT_COD,'CHC(Quarterly)') AUDIT_SOURCE +-- ,'CHC(Quarterly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org ) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- ----------------------------------------------------county------------------------------------------------------------------------------ +-- -----------------------除了Eagle、CHC、Retail、EC的人都能看 +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- with emp as ( +-- select distinct dsm_kcode KCODE,concat('','IQVIA-COUNTY(Quarterly)') bu_code_auth,'' bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) AND BU_NAME_EN NOT IN ('Eagle','CHC','EC','Retail') +-- union all +-- select distinct rsm_kcode KCODE,concat('','IQVIA-COUNTY(Quarterly)') bu_code_auth,'' bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 AND BU_NAME_EN NOT IN ('Eagle','CHC','EC','Retail') +-- union all +-- select distinct rsd_kcode KCODE,concat('','IQVIA-COUNTY(Quarterly)') bu_code_auth,'' bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 AND BU_NAME_EN NOT IN ('Eagle','CHC','EC','Retail') +-- union all +-- select distinct nsd_kcode KCODE,concat('','IQVIA-COUNTY(Quarterly)') bu_code_auth,'' bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 AND BU_NAME_EN NOT IN ('Eagle','CHC','EC','Retail') +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'IQVIA-COUNTY(Quarterly)') MKT_SOURCE,concat(B.AUDIT_COD,'IQVIA-COUNTY(Quarterly)') AUDIT_SOURCE +-- ,'IQVIA-COUNTY(Quarterly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org ) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- ----------------------------------------------------THC------------------------------------------------------------------------------ +-- -----------------------Eagle的人能看 +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- with emp as ( +-- select distinct dsm_kcode KCODE,concat('','THC(Quarterly)') as bu_code_auth,'' bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) AND BU_NAME_EN = 'Eagle' +-- union all +-- select distinct rsm_kcode KCODE,concat('','THC(Quarterly)') as bu_code_auth,'' bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 AND BU_NAME_EN = 'Eagle' +-- union all +-- select distinct rsd_kcode KCODE,concat('','THC(Quarterly)') as bu_code_auth,'' bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 AND BU_NAME_EN = 'Eagle' +-- union all +-- select distinct nsd_kcode KCODE,concat('','THC(Quarterly)') as bu_code_auth,'' bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 AND BU_NAME_EN = 'Eagle' +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'THC(Quarterly)') MKT_SOURCE,concat(B.AUDIT_COD,'THC(Quarterly)') AUDIT_SOURCE +-- ,'THC(Quarterly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org ) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- --------------------------------Retail-------------------------------------------------------------------- +-- ------------------------------------------------ +-- --修改时间:20241016 +-- --修改人:FanXujia +-- --修改内容: +-- --给Eagle的人查看Metoprolol Tartrate Market的权限 +-- ------------------------------------------------- +-- ------------------所有BU能看CHPA,用户需要排除非重点城市之外的人 +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- with emp as ( +-- select distinct dsm_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) and bu_name_en in ('Retail','OBU') +-- union all +-- select distinct rsm_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 and bu_name_en in ('Retail','OBU') +-- union all +-- select distinct rsd_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 and bu_name_en in ('Retail','OBU') +-- union all +-- select distinct nsd_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 and bu_name_en in ('Retail','OBU') +-- ) +-- ,Eagle as ( +-- select distinct dsm_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) and bu_name_en in ('Eagle') +-- union all +-- select distinct rsm_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 and bu_name_en in ('Eagle') +-- union all +-- select distinct rsd_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 and bu_name_en in ('Eagle') +-- union all +-- select distinct nsd_kcode KCODE,concat('PC09','Retail(Quarterly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 and bu_name_en in ('Eagle') +-- ) +-- ,audit as ( +-- select distinct t1.AUDIT_COD +-- from dm.dm_tf_external_sales t1 +-- left join dm.dm_td_external_market_pack_mapping_temp t2 +-- on t1.DATA_SOURCE = t2.DATA_SOURCE +-- and t1.PACK_COD = t2.PACK_COD +-- where t1.DATA_SOURCE = 'Retail(Quarterly)' +-- and t2.MARKET = 'Metoprolol Tartrate Market' +-- ) + +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'Retail(Quarterly)') MKT_SOURCE,concat(B.AUDIT_COD,'Retail(Quarterly)') AUDIT_SOURCE +-- ,'Retail(Quarterly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org ) B ON A.bu_code_auth = B.bu_code_auth +-- union all +-- select t1.KCODE, +-- t1.bu_code_auth, +-- t1.bu_name, +-- t1.role, +-- concat('Metoprolol Tartrate Market','Retail(Quarterly)') MKT_SOURCE, +-- concat(t2.AUDIT_COD,'Retail(Quarterly)') AUDIT_SOURCE, +-- 'Retail(Quarterly)' DATA_SOURCE +-- from Eagle t1 +-- cross join audit t2 + + +-- COMMAND ---------- + +-- --------------------------------EC-------------------------------------------------------------------- +-- ------------------EC的数据暂时开通给EC +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- with emp as ( +-- select distinct dsm_kcode KCODE,concat('','EC(Monthly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) and bu_name_en = 'EC' +-- union all +-- select distinct rsm_kcode KCODE,concat('','EC(Monthly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 and bu_name_en = 'EC' +-- union all +-- select distinct rsd_kcode KCODE,concat('','EC(Monthly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 and bu_name_en = 'EC' +-- union all +-- select distinct nsd_kcode KCODE,concat('','EC(Monthly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 and bu_name_en = 'EC' +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'EC(Monthly)') MKT_SOURCE,concat(B.AUDIT_COD,'EC(Monthly)') AUDIT_SOURCE +-- ,'EC(Monthly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org ) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- --------------------------------AIA-------------------------------------------------------------------- +-- ------------------所有BU能看AIA +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- WITH EMP AS ( +-- select distinct dsm_kcode KCODE,concat(bu_code,'AIA(Monthly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) --and audit_cod is not null +-- union all +-- select distinct rsm_kcode KCODE,concat(bu_code,'AIA(Monthly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct rsd_kcode KCODE,concat(bu_code,'AIA(Monthly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct nsd_kcode KCODE,concat(bu_code,'AIA(Monthly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 --and audit_cod is not null +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'AIA(Monthly)') MKT_SOURCE,concat(B.AUDIT_COD,'AIA(Monthly)') AUDIT_SOURCE +-- ,'AIA(Monthly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- --------------------------------XIEHE-------------------------------------------------------------------- +-- ------------------所有BU能看XIEHE +-- insert into dm.dm_auth_sales(KCODE,bu_code_auth,bu_name,role,MKT_SOURCE,AUDIT_SOURCE,DATA_SOURCE) +-- WITH EMP AS ( +-- select distinct dsm_kcode KCODE,concat(bu_code,'XH Data(Quarterly)') as bu_code_auth,bu_name,'dsm' role from DM.DM_IMS_TD_ORG_HVH where length(dsm_kcode) > 0 and yyyymm=(select max(yyyymm) from DM.DM_IMS_TD_ORG_HVH) --and audit_cod is not null +-- union all +-- select distinct rsm_kcode KCODE,concat(bu_code,'XH Data(Quarterly)') as bu_code_auth,bu_name,'rsm' role from DM.DM_IMS_TD_ORG where length(rsm_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct rsd_kcode KCODE,concat(bu_code,'XH Data(Quarterly)') as bu_code_auth,bu_name,'rsd' role from DM.DM_IMS_TD_ORG where length(rsd_kcode) > 0 --and audit_cod is not null +-- union all +-- select distinct nsd_kcode KCODE,concat(bu_code,'XH Data(Quarterly)') as bu_code_auth,bu_name,'nsd' role from DM.DM_IMS_TD_ORG where length(nsd_kcode) > 0 --and audit_cod is not null +-- ) +-- SELECT A.KCODE,A.bu_code_auth,A.bu_name,A.role,concat(B.MARKET,'XH Data(Quarterly)') MKT_SOURCE,concat(B.AUDIT_COD,'XH Data(Quarterly)') AUDIT_SOURCE +-- ,'XH Data(Quarterly)' DATA_SOURCE FROM EMP A +-- INNER JOIN (SELECT DISTINCT bu_code_auth,AUDIT_COD,MARKET FROM DM.dm_td_external_org) B ON A.bu_code_auth = B.bu_code_auth + +-- COMMAND ---------- + +-- ------------------------------------------------------------------------- +-- --修改时间:20241106 +-- --修改人:Fanxujia +-- --修改内容: +-- --将PBI的逻辑移到DBR上(dm_auth_sales_geo) +-- ------------------------------------------------------------------------- +-- insert overwrite table dm.dm_auth_sales_geo( +-- KCODE, +-- AUDIT_SOURCE +-- ) +-- select +-- distinct KCODE, +-- AUDIT_SOURCE +-- from +-- dm.dm_auth_sales + +-- COMMAND ---------- + +-- ------------------------------------------------------------------------- +-- --修改时间:20241106 +-- --修改人:Fanxujia +-- --修改内容: +-- --将PBI的逻辑移到DBR上(dm_auth_sales_mkt) +-- ------------------------------------------------------------------------- +-- insert overwrite table dm.dm_auth_sales_mkt( +-- KCODE, +-- MKT_SOURCE +-- ) +-- select +-- distinct KCODE, +-- MKT_SOURCE +-- from +-- dm.dm_auth_sales + +-- COMMAND ---------- + +-- ------------------------------------------------------------------------- +-- --修改时间:20241106 +-- --修改人:Fanxujia +-- --修改内容: +-- --将PBI的逻辑移到DBR上(dm_auth_sales_org) +-- ------------------------------------------------------------------------- +-- insert overwrite table dm.dm_auth_sales_org( +-- KCODE, +-- BU_CODE_AUTH +-- ) +-- select +-- distinct KCODE, +-- BU_CODE_AUTH +-- from +-- dm.dm_auth_sales + +-- COMMAND ---------- + +-- DBTITLE 1,old version +-- ------------------------------------------------------------------------- +-- --修改时间:20241106 +-- --修改人:Fanxujia +-- --修改内容: +-- --将PBI的逻辑移到DBR上(dm_auth_sales_pack) +-- ------------------------------------------------------------------------- +-- insert overwrite table dm.dm_auth_sales_pack( +-- KCODE, +-- PACK_SOURCE +-- ) +-- with market_pack as ( +-- select distinct +-- concat(MARKET,DATA_SOURCE) as MKT_SOURCE, +-- concat(PACK_COD,DATA_SOURCE) as PACK_SOURCE +-- from dm.dm_td_external_market_pack_mapping +-- ) +-- ,user_market as ( +-- select distinct KCODE,MKT_SOURCE +-- from dm.dm_auth_sales +-- ) + +-- select distinct +-- t1.KCODE, +-- t2.PACK_SOURCE +-- from user_market t1 +-- inner join market_pack t2 +-- on t1.MKT_SOURCE = t2.MKT_SOURCE + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### ------------------------- + +-- COMMAND ---------- + +------------------------------------------------------------------------ +--修改时间:20241112 +--修改人:Fanxujia +--修改内容: +--CHPA渠道不显示以下几个BU的架构 ('BBU_County','CHC','EC','Eagle','Retail') +------------------------------------------------------------------------ +delete from DM.DM_TD_EXTERNAL_ORG +where bu_name_en in ('BBU_County','CHC','EC','Retail') +and data_source = 'IQVIA-CHPA(Monthly)'; +/* +修改时间:20251124 +修改人:Chenwu +修改内容:CHPA数据源,消化口服产品(Nexium Oral, Losec Oral)架构需要增加Eagle团队 +*/ +WITH market_list AS ( + SELECT DISTINCT m.MARKET + FROM dws.dws_ims_td_market m + INNER JOIN dwd.dwd_td_imscode_azcode a ON m.PACK_COD = a.ims_pack_cod + WHERE a.brandcode IN ('B018','B019') + AND a.ims_pack_cod IS NOT NULL +) +DELETE FROM DM.DM_TD_EXTERNAL_ORG +WHERE data_source = 'IQVIA-CHPA(Monthly)' + AND bu_name_en = 'Eagle' + AND MARKET NOT IN (SELECT MARKET FROM market_list); + +-- COMMAND ---------- + +--------------------------------------------------------------------------- +--修改时间:20240828 +--修改人:FanXujia +--修改内容: +--同一个城市的同一个市场同时对应了正常的大区以及ROC,这是不对的,需要把ROC的数据删除 +---------------------------------------------------------------------------- +with org as ( +select distinct DATA_SOURCE,AUDIT_COD,MARKET,'ROC' as region_name_en +from DM.DM_TD_EXTERNAL_ORG +where region_name_en <> 'ROC' +) + +merge into DM.DM_TD_EXTERNAL_ORG as t1 +using org t2 +on t1.DATA_SOURCE = t2.DATA_SOURCE +and t1.AUDIT_COD = t2.AUDIT_COD +and t1.MARKET = t2.MARKET +and t1.region_name_en = t2.region_name_en +when matched then +delete ; + +-- COMMAND ---------- + +--------------------------------------------------------------------------- +--修改时间:20240828 +--修改人:FanXujia +--修改内容: +--在上一步删除完之后 +--同一个城市的同一个市场只对应ROC,但是有多条数据对应ROC,保留1条数据,其余的删除 +---------------------------------------------------------------------------- +with org_1 as ( +select DATA_SOURCE,AUDIT_COD,MARKET +from DM.DM_TD_EXTERNAL_ORG +where region_name_en = 'ROC' +group by DATA_SOURCE,AUDIT_COD,MARKET +having count(1) >1 +) +,org_2 as ( +select t1.DATA_SOURCE,t1.AUDIT_COD,t1.MARKET, +max(concat(t1.RSM_Name,t1.rc_name,t1.regioncenter,t1.bu_category,t1.bu_name_en,t1.sub_bu_name,t1.sub_bu_code_auth,t1.bu_code_auth,t1.MR_TRTY_CODE)) link_key +from DM.DM_TD_EXTERNAL_ORG t1 +inner join org_1 t2 +on t1.DATA_SOURCE = t2.DATA_SOURCE +and t1.AUDIT_COD = t2.AUDIT_COD +and t1.MARKET = t2.MARKET +group by t1.DATA_SOURCE,t1.AUDIT_COD,t1.MARKET +) + +merge into DM.DM_TD_EXTERNAL_ORG as t1 +using org_2 t2 +on t1.DATA_SOURCE = t2.DATA_SOURCE +and t1.AUDIT_COD = t2.AUDIT_COD +and t1.MARKET = t2.MARKET +and concat(t1.RSM_Name,t1.rc_name,t1.regioncenter,t1.bu_category,t1.bu_name_en,t1.sub_bu_name,t1.sub_bu_code_auth,t1.bu_code_auth,t1.MR_TRTY_CODE) <> t2.link_key +when matched then +delete ; \ No newline at end of file diff --git a/14 dm_tf_external_retail_special_bkp.sql b/14 dm_tf_external_retail_special_bkp.sql new file mode 100644 index 0000000..6ea869d --- /dev/null +++ b/14 dm_tf_external_retail_special_bkp.sql @@ -0,0 +1,22 @@ +-- Databricks notebook source +insert overwrite table dm.dm_tf_external_retail_special +--dtp 部分的数据 EGFR TKI 需要直取 +select + case when a.market = 'EGFR TKI' then 'EGFR TKI Market' else a.market end as market + ,a.province_city + ,a.audit_key + ,a.audit_source + ,a.date_key + ,a.yyyymm + ,a.sales_value + ,a.sales_volume + ,a.pdot_counting_unit + ,c.sales_value sales_value_ly + ,c.sales_volume sales_volume_ly + ,c.pdot_counting_unit pdot_counting_unit_ly + ,'dtp' `source` +from dws.dws_tf_external_retail_dtp_special a +left join dws.dws_tf_external_retail_dtp_special c --取去年同期数据 + on a.province_city = c.province_city + and a.market = c.market + and (a.yyyymm-100) = c.yyyymm \ No newline at end of file diff --git a/AIA/01 dm_aia_pack_property.sql b/AIA/01 dm_aia_pack_property.sql new file mode 100644 index 0000000..c4ef679 --- /dev/null +++ b/AIA/01 dm_aia_pack_property.sql @@ -0,0 +1,355 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE dm.dm_aia_pack_property ( +-- PACK_COD STRING, +-- pack_des STRING, +-- stgh_des STRING, +-- pack_lch STRING, +-- PROD_COD STRING, +-- prod_des STRING, +-- prod_des_c STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- cmps_cod STRING, +-- cmps_des STRING, +-- cmps_des_c STRING, +-- atc1_cod STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_cod STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_cod STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_cod STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_cod STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_cod STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_cod STRING, +-- app3_des STRING, +-- app3_des_c STRING, +-- bio_desc STRING, +-- gene_orig_desc STRING, +-- eth_otc_desc STRING, +-- nrdl_desc STRING, +-- NRDL_Entry_Date STRING, +-- edl_desc STRING, +-- tcm_desc STRING, +-- paed_desc STRING, +-- gqce_desc STRING, +-- vbp_desc STRING, +-- manu_cod STRING, +-- manu_des STRING, +-- manu_des_c STRING, +-- mnfl_cod STRING, +-- mnfl_des STRING, +-- corp_cod STRING, +-- corp_des STRING, +-- corp_des_c STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_Related STRING, +-- COUNTING_UNIT STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_aia_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_aia_pack_property'; + +-- COMMAND ---------- + +--对用户上传的表进行去重处理 +--对部分编码字段进行补0 +create or replace temporary view aia_pack_property_distinct as +select distinct + iqvia_lineno, + case + when + length(trim(iqvia_pack_code)) < 12 + and trim(iqvia_pack_code) REGEXP '^[0-9]' + then + right(concat('000000000000', trim(iqvia_pack_code)), 12) + else trim(iqvia_pack_code) + end as iqvia_pack_code, + case + when length(iqvia_prod_code) < 9 then right(concat('000000000', iqvia_prod_code), 9) + else iqvia_prod_code + end as iqvia_prod_code, + iqvia_notes, + IS_NEW_PRD, + IS_IN_CHPA, + ATC1, + ATC2, + ATC3, + ATC4, + org_prd_cd, + org_mole_nm_c, + org_manu_prd_nm_c, + org_prd_nm_c, + org_pk, + org_prd_str, + org_pth, + min_pk_unit, + org_pk_unit, + org_manu_nm, + 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, + case + when length(cmps_cod) < 6 then right(concat('000000', cmps_cod), 6) + else cmps_cod + end as cmps_cod, + cmps_des, + cmps_des_c, + 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, + prod_des, + prod_des_c, + tcm_desc, + vbp_desc, + unit, + case + when + counting_unit is null + and org_pk_unit is null + then + 1 + when counting_unit is null then cast(org_pk_unit as decimal(30, 10)) + else cast(counting_unit / coalesce(unit, 1) as decimal(30, 10)) + end as counting_unit, + dosage_unit +from + dwd.dwd_gnd_ext_aia_cpt_data; + +-- COMMAND ---------- + +-- create or replace table dm.dm_aia_pack_property +insert overwrite table dm.dm_aia_pack_property +WITH dedup_l AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY iqvia_pack_code ORDER BY iqvia_pack_code) AS rn + FROM aia_pack_property_distinct + QUALIFY rn = 1 +), +dedup_r AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY PACK_COD ORDER BY PACK_COD) AS rn + FROM tmp.tmp_ext_chpa_pack_propetry + QUALIFY rn = 1 +) +SELECT + l.iqvia_pack_code AS PACK_COD, + + -- Pack / Product 描述 + COALESCE(r.PACK_DES, l.pack_des) AS pack_des, + COALESCE(r.STGH_DES, l.stgh_des) AS stgh_des, + COALESCE(r.PACK_LCH, l.pack_lch) AS pack_lch, + COALESCE(r.PROD_COD, l.iqvia_prod_code) AS PROD_COD, + COALESCE(r.PROD_DES, l.prod_des) AS prod_des, + COALESCE(r.PROD_DES_C, l.prod_des_c) AS prod_des_c, + + -- 右表独有:Family + r.Family_Code, + r.Family_Name, + + -- 成分 + COALESCE(r.CMPS_COD, l.cmps_cod) AS cmps_cod, + COALESCE(r.CMPS_DES, l.cmps_des) AS cmps_des, + COALESCE(r.CMPS_DES_C, l.cmps_des_c) AS cmps_des_c, + + -- ATC + COALESCE(r.ATC1_COD, l.atc1_cod) AS atc1_cod, + COALESCE(r.atc1_des, l.atc1_des) AS atc1_des, + COALESCE(r.atc1_des_c, l.atc1_des_c) AS atc1_des_c, + COALESCE(r.ATC2_COD, l.atc2_cod) AS atc2_cod, + COALESCE(r.atc2_des, l.atc2_des) AS atc2_des, + COALESCE(r.atc2_des_c, l.atc2_des_c) AS atc2_des_c, + COALESCE(r.ATC3_COD, l.atc3_cod) AS atc3_cod, + COALESCE(r.atc3_des, l.atc3_des) AS atc3_des, + COALESCE(r.atc3_des_c, l.atc3_des_c) AS atc3_des_c, + COALESCE(r.ATC4_COD, l.atc4_cod) AS atc4_cod, + COALESCE(r.atc4_des, l.atc4_des) AS atc4_des, + COALESCE(r.atc4_des_c, l.atc4_des_c) AS atc4_des_c, + + -- APP + COALESCE(r.APP1_COD, l.app1_cod) AS app1_cod, + COALESCE(r.app1_des, l.app1_des) AS app1_des, + COALESCE(r.app1_des_c, l.app1_des_c) AS app1_des_c, + COALESCE(r.APP2_COD, l.app2_cod) AS app2_cod, + COALESCE(r.app2_des, l.app2_des) AS app2_des, + COALESCE(r.app2_des_c, l.app2_des_c) AS app2_des_c, + COALESCE(r.APP3_COD, l.app3_cod) AS app3_cod, + COALESCE(r.app3_des, l.app3_des) AS app3_des, + COALESCE(r.app3_des_c, l.app3_des_c) AS app3_des_c, + + -- 标志位 + COALESCE(r.BIO_DESC, l.bio_desc) AS bio_desc, + COALESCE(r.GENE_ORIG_DESC, l.gene_orig_desc) AS gene_orig_desc, + COALESCE(r.ETH_OTC_DESC, l.eth_otc_desc) AS eth_otc_desc, + COALESCE(r.NRDL_DESC, l.nrdl_desc) AS nrdl_desc, + r.NRDL_Entry_Date, + COALESCE(r.EDL_DESC, l.edl_desc) AS edl_desc, + COALESCE(r.TCM_DESC, l.tcm_desc) AS tcm_desc, + COALESCE(r.PAED_DESC, l.paed_desc) AS paed_desc, + COALESCE(r.GQCE_DESC, l.gqce_desc) AS gqce_desc, + COALESCE(r.VBP_DESC, l.vbp_desc) AS vbp_desc, + + -- 厂商 + COALESCE(r.MANU_COD, l.manu_cod) AS manu_cod, + COALESCE(r.MANU_DES, l.manu_des) AS manu_des, + COALESCE(r.MANU_DES_C, l.manu_des_c) AS manu_des_c, + COALESCE(r.MNFL_COD, l.mnfl_cod) AS mnfl_cod, + COALESCE(r.MNFL_DES, l.mnfl_des) AS mnfl_des, + + -- 公司 + COALESCE(r.CORP_COD, l.corp_cod) AS corp_cod, + COALESCE(r.CORP_DES, l.corp_des) AS corp_des, + COALESCE(r.CORP_DES_C, l.corp_des_c) AS corp_des_c, + + -- 右表独有:品牌 / AZ 标志 + r.BrandType, + r.IS_AZ, + r.AZ_MAIN, + r.AZ_Related, + -- 左表独有 + l.COUNTING_UNIT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT +FROM dedup_l l +LEFT JOIN dedup_r r + ON l.iqvia_pack_code = r.PACK_COD + +-- COMMAND ---------- + +-- ----------------------------------------------------------- +-- --修改时间:20241118 +-- --修改人:Fanxujia +-- --修改内容: +-- --使用手工文件排除掉每个渠道的不需要显示的市场 +-- --由于AIA涉及后面的Flag逻辑、NEW AIA Dashboard,因此不能直接在最后的DM表进行限制,需要在这里限制。 +-- ----------------------------------------------------------- +-- with hidden_market as ( +-- select distinct +-- upper(hidden_market) as hidden_market +-- from dwd.dwd_gnd_ims_hidden_market +-- where upper(data_source) = 'AIA' +-- ) +-- ,tmp as ( +-- select +-- MARKET_PACK_KEY, +-- PACK_COD, +-- PACK_DES, +-- STGH_DES, +-- PACK_LCH, +-- Family_Code, +-- Family_Name, +-- PROD_COD, +-- PROD_DES, +-- PROD_DES_C, +-- CMPS_COD, +-- CMPS_DES, +-- CMPS_DES_C, +-- ATC1_COD, +-- ATC2_COD, +-- ATC3_COD, +-- ATC4_COD, +-- APP1_COD, +-- APP2_COD, +-- APP3_COD, +-- BIO_DESC, +-- GENE_ORIG_DESC, +-- ETH_OTC_DESC, +-- NRDL_DESC, +-- NRDL_Entry_Date, +-- EDL_DESC, +-- TCM_DESC, +-- PAED_DESC, +-- GQCE_DESC, +-- VBP_DESC, +-- MANU_COD, +-- MANU_DES, +-- MANU_DES_C, +-- MNFL_COD, +-- MNFL_DES, +-- CORP_COD, +-- CORP_DES, +-- CORP_DES_C, +-- BrandType, +-- t1.MARKET, +-- t1.MARKET_CHPA, +-- KEY_COMPETITOR, +-- IS_AZ, +-- AZ_MAIN, +-- 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, +-- Class, +-- ETL_INSERT_DT, +-- ETL_UPDATE_DT, +-- market_ratio, +-- counting_unit +-- from dm.dm_aia_pack_property t1 +-- left join hidden_market t3 +-- on upper(t1.MARKET) = t3.hidden_market +-- where t3.hidden_market is null +-- union +-- select * +-- from dm.dm_aia_pack_property +-- where MARKET = 'AIA ALL Market' +-- ) + +-- insert overwrite dm.dm_aia_pack_property +-- select * from tmp \ No newline at end of file diff --git a/AIA/02 dm_ext_aia_sales.sql b/AIA/02 dm_ext_aia_sales.sql new file mode 100644 index 0000000..c285f32 --- /dev/null +++ b/AIA/02 dm_ext_aia_sales.sql @@ -0,0 +1,710 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_AIA_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_aia_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_aia_sales'; + + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- 原始数据 +-- 字段值的初步处理 +CREATE OR REPLACE TEMPORARY VIEW AIA_RAWDATA +AS +SELECT + YEAR, + QTR, + CAST(YEAR * 100 + YM AS INT) YM, + ORG_PROV, + ORG_CITY, + INS_LEVEL, + CASE + WHEN + INS_CD IS NOT NULL + AND + LENGTH (INS_CD) < 7 + THEN RIGHT (CONCAT ('0000000', INS_CD), 7) + ELSE INS_CD + END AS ORG_INS_CD, + ATC1, + ATC2, + ATC3, + ATC4, + ATC, + MOLE_NM, + PROD_NM, + ORG_PRD_NM_C, + ORG_PK, + ORG_PRD_STR, + ORG_PTH, + MIN_UNIT, + VALUE, + UNIT, + CAST(PACK_DESC AS INT) AS PACK_DESC, + ORG_PK_UN, + MANU +FROM + DWD.DWD_GND_AIA_RAWDATA + +-- COMMAND ---------- + +--关联出AUDIT_COD、INST_CODE +CREATE OR REPLACE TEMPORARY VIEW AIA_RAWDATA_WITH_AUDIT_INST +AS +SELECT + UPPER(NVL (T2.INST_CODE, T1.ORG_INS_CD)) AS AUDIT_COD, + T1.YEAR, + T1.QTR, + T1.YM, + T1.ORG_PROV, + T1.ORG_CITY, + T1.INS_LEVEL, + T1.ORG_INS_CD, + T1.ATC1, + T1.ATC2, + T1.ATC3, + T1.ATC4, + T1.ATC, + T1.MOLE_NM, + T1.PROD_NM, + T1.ORG_PRD_NM_C, + T1.ORG_PK, + T1.ORG_PRD_STR, + T1.ORG_PTH, + T1.MIN_UNIT, + T1.VALUE, + T1.UNIT, + T1.PACK_DESC, + T1.ORG_PK_UN, + T1.MANU, + NVL (T2.INST_CODE, T1.ORG_INS_CD) AS INST_CODE +FROM + AIA_RAWDATA AS T1 +LEFT JOIN + ( + SELECT + DISTINCT + CASE + WHEN LENGTH (CPA_HOSPITAL_CODE) < 7 + THEN RIGHT (CONCAT ('0000000', CPA_HOSPITAL_CODE), 7) + ELSE CPA_HOSPITAL_CODE + END AS CPA_HOSPITAL_CODE, + INS_CD_NL AS INST_CODE + FROM + DWD.DWD_GND_HOSPITAL_NOT_PROVIDED + ) AS T2 +ON + T1.ORG_INS_CD = T2.CPA_HOSPITAL_CODE + +-- COMMAND ---------- + +/* +修改人 CHENWU +修改时间 20250513 +修改内容 打包分子的数据,不论 打通表 和 事实表,都没有系数,需要用 事实表里的 最小制剂单位数量 作为COUNTING_UNIT +*/ +--关联出PACK_COD、CORP_COD、COUNTING_UNIT +CREATE OR REPLACE TEMPORARY VIEW AIA_RAWDATA_WIHT_COUNTING_UNIT +AS +SELECT + CASE + WHEN + LENGTH (TRIM(T2.IQVIA_PACK_CODE)) < 12 + AND + TRIM(T2.IQVIA_PACK_CODE) REGEXP '^[0-9]' + THEN RIGHT (CONCAT ('000000000000', TRIM(T2.IQVIA_PACK_CODE)),12) + ELSE TRIM(T2.IQVIA_PACK_CODE) + END AS PACK_COD, + T3.CORP_COD, + CASE + WHEN LEFT (T2.IQVIA_PACK_CODE, 4) = 'AZP_' + THEN CAST(T1.MIN_UNIT / T1.ORG_PK_UN AS DECIMAL(38, 10)) + ELSE T3.COUNTING_UNIT + END COUNTING_UNIT, + T1.AUDIT_COD, + T1.YEAR, + T1.QTR, + T1.YM, + T1.ORG_PROV, + T1.ORG_CITY, + T1.INS_LEVEL, + T1.ORG_INS_CD, + T1.ATC1, + T1.ATC2, + T1.ATC3, + T1.ATC4, + T1.ATC, + T1.MOLE_NM, + T1.PROD_NM, + T1.ORG_PRD_NM_C, + T1.ORG_PK, + T1.ORG_PRD_STR, + T1.ORG_PTH, + T1.MIN_UNIT, + T1.VALUE, + T1.UNIT, + T1.PACK_DESC, + T1.ORG_PK_UN, + T1.MANU, + T1.INST_CODE +FROM + AIA_RAWDATA_WITH_AUDIT_INST T1 +LEFT JOIN + ( + SELECT + DISTINCT + TRIM(IQVIA_PACK_CODE) AS IQVIA_PACK_CODE, + ATC1, + ATC2, + ATC3, + ATC4, + ORG_PRD_CD, + ORG_MOLE_NM_C, + ORG_MANU_PRD_NM_C, + ORG_PRD_NM_C, + ORG_PK, + ORG_PRD_STR, + ORG_PTH, + MIN_PK_UNIT, + ORG_PK_UNIT, + ORG_MANU_NM + FROM + DWD.DWD_GND_EXT_AIA_CPT_DATA + ) AS T2 +--ATC1编码+ATC2编码+ATC3编码+ATC4编码+药品编码(ATC)+药品通用名+药品产品名+药品商品名+规格+剂型+给药途径+最小销售包装单位+包装规格+生产企业 +ON + NVL (T1.ATC1, '') = NVL (T2.ATC1, '') + AND NVL (T1.ATC2, '') = NVL (T2.ATC2, '') + AND NVL (T1.ATC3, '') = NVL (T2.ATC3, '') + AND NVL (T1.ATC4, '') = NVL (T2.ATC4, '') + AND NVL (T1.ATC, '') = NVL (T2.ORG_PRD_CD, '') + AND NVL (T1.MOLE_NM, '') = NVL (T2.ORG_MOLE_NM_C, '') + AND NVL (T1.PROD_NM, '') = NVL (T2.ORG_MANU_PRD_NM_C, '') + AND NVL (T1.ORG_PRD_NM_C, '') = NVL (T2.ORG_PRD_NM_C, '') + AND NVL (T1.ORG_PK, '') = NVL (T2.ORG_PK, '') + AND NVL (T1.ORG_PRD_STR, '') = NVL (T2.ORG_PRD_STR, '') + AND NVL (T1.ORG_PTH, '') = NVL (T2.ORG_PTH, '') + AND NVL (T1.UNIT, '') = NVL (T2.MIN_PK_UNIT, '') + AND NVL (T1.PACK_DESC, '') = NVL (T2.ORG_PK_UNIT, '') + AND NVL (T1.MANU, '') = NVL (T2.ORG_MANU_NM, '') +LEFT JOIN +( + SELECT + PACK_COD, + CORP_COD, + COUNTING_UNIT + FROM + DM.DM_AIA_PACK_PROPERTY + GROUP BY + PACK_COD, + CORP_COD, + COUNTING_UNIT +) T3 ON T2.IQVIA_PACK_CODE = T3.PACK_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FILTER_YM +AS +SELECT + MAX(YM) AS MAX_YYYYMM, + CONCAT(CAST(FLOOR(MAX(YM)/100-2) AS STRING),'01') AS MIN_YYYYMM +FROM + AIA_RAWDATA_WIHT_COUNTING_UNIT + +-- COMMAND ---------- + +--计算出LY销量 +CREATE OR REPLACE TEMPORARY VIEW AIA_RAWDATA_FINAL AS +SELECT + YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD, + SUM(VALUE) AS VALUE, + SUM(VOLUME) AS VOLUME, + SUM(COUNTING_UNIT) AS COUNTING_UNIT, + SUM(VALUE_LY) AS VALUE_LY, + SUM(VOLUME_LY) AS VOLUME_LY, + SUM(COUNTING_UNIT_LY) AS COUNTING_UNIT_LY +FROM + ( + SELECT + YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD, + CAST(VALUE AS DECIMAL(38, 10)) AS VALUE, + CAST(ORG_PK_UN AS DECIMAL(38, 10)) AS VOLUME, + CAST(ORG_PK_UN AS DECIMAL(38, 10)) * COALESCE(CAST(COUNTING_UNIT AS DECIMAL(38, 10)), 1) AS COUNTING_UNIT, + 0 AS VALUE_LY, + 0 AS VOLUME_LY, + 0 AS COUNTING_UNIT_LY + FROM + AIA_RAWDATA_WIHT_COUNTING_UNIT + UNION ALL + SELECT + CAST(CAST(YM AS INT) + 100 AS STRING) AS YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD, + 0 AS VALUE, + 0 AS VOLUME, + 0 AS COUNTING_UNIT, + CAST(VALUE AS DECIMAL(38, 10)) AS VALUE_LY, + CAST(ORG_PK_UN AS DECIMAL(38, 10)) AS VOLUME_LY, + CAST(ORG_PK_UN AS DECIMAL(38, 10)) * COALESCE(CAST(COUNTING_UNIT AS DECIMAL(38, 10)), 1) AS COUNTING_UNIT_LY + FROM + AIA_RAWDATA_WIHT_COUNTING_UNIT T1 + JOIN + FILTER_YM T2 + ON + 1 = 1 + WHERE + CAST(CAST(YM AS INT) + 100 AS STRING) <= T2.MAX_YYYYMM + ) +GROUP BY + YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FINAL_DM_TF_EXT_AIA_SALES +AS +SELECT + YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD, + SUM(VALUE) AS VALUE, + SUM(VOLUME) AS VOLUME, + SUM(COUNTING_UNIT) AS COUNTING_UNIT, + SUM(VALUE_LY) AS VALUE_LY, + SUM(VOLUME_LY) AS VOLUME_LY, + SUM(COUNTING_UNIT_LY) AS COUNTING_UNIT_LY +FROM + AIA_RAWDATA_FINAL +GROUP BY + YM, + ORG_INS_CD, + INST_CODE, + AUDIT_COD, + PACK_COD, + CORP_COD + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_AIA_SALES ( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) + SELECT + A.ym, + A.PACK_COD as PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'AIA(Monthly)' DATA_SOURCE, + ------------------------------------- + sum(volume) as SALES_UNIT_CAL, + sum(volume_ly) as SALES_UNIT_CAL_LY, + sum(value) as SALES_VALUE_CAL, + sum(value_ly) as SALES_VALUE_CAL_LY, + sum(counting_unit) as CONUTING_UNIT, + sum(counting_unit_ly) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + inst_code AS inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE, --可以移除,报告没有使用 + ------------------------------------- + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + FINAL_DM_TF_EXT_AIA_SALES A + WHERE + ym >= '202401' + GROUP BY + YM, + PACK_COD, + CORP_COD, + AUDIT_COD, + INST_CODE + +-- COMMAND ---------- + +-- 20260109 dm.dm_ext_aia_sales 是老的表,现在已经用DM.DM_TF_EXT_AIA_SALES 替换,但是为了下游,老表暂时不下线,仍然写入 + insert overwrite table dm.dm_ext_aia_sales ( + ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod, + value, + volume, + counting_unit, + value_ly, + volume_ly, + counting_unit_ly + ) +select + ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod, + sum(value) as value, + sum(volume) as volume, + sum(counting_unit) as counting_unit, + sum(value_ly) as value_ly, + sum(volume_ly) as volume_ly, + sum(counting_unit_ly) as counting_unit_ly +from + aia_rawdata_FINAL +CROSS JOIN + filter_ym +WHERE + YM BETWEEN filter_ym.min_yyyymm AND filter_ym.max_yyyymm +group by + ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC 下面是重构验证,chenwu可删 + +-- COMMAND ---------- + +-- %sql +-- inst_code +-- ym +-- MARKET + +-- COMMAND ---------- + +-- SELECT ym,AUDIT_COD,inst_code,SUM(value) value,SUM(volume) volume,SUM(counting_unit) counting_unit,SUM(value_ly) value_ly,SUM(volume_ly) volume_ly,SUM(counting_unit_ly) counting_unit_ly +-- FROM dm.dm_ext_aia_sales +-- GROUP BY ym,AUDIT_COD,inst_code +-- ORDER BY ym,AUDIT_COD,inst_code + +-- COMMAND ---------- + +-- SELECT ym,AUDIT_COD,SUM(value) value,SUM(volume) volume,SUM(counting_unit) counting_unit,SUM(value_ly) value_ly,SUM(volume_ly) volume_ly,SUM(counting_unit_ly) counting_unit_ly +-- FROM dm.dm_ext_aia_sales +-- GROUP BY ym,AUDIT_COD +-- ORDER BY ym,AUDIT_COD + +-- COMMAND ---------- + + +-- SELECT +-- old.ym, +-- OLD.AUDIT_COD, +-- OLD.inst_code, +-- OLD.value, +-- NEW.value, +-- OLD.value-NEW.value as dif_value, +-- OLD.value_ly, +-- NEW.value_ly, +-- OLD.value_ly-NEW.value_ly as dif_value_ly, +-- OLD.volume, +-- NEW.volume, +-- OLD.volume-NEW.volume as dif_volume, +-- OLD.volume_ly, +-- NEW.volume_ly, +-- OLD.volume_ly-NEW.volume_ly as dif_volume_ly, +-- OLD.counting_unit, +-- NEW.counting_unit, +-- OLD.counting_unit-NEW.counting_unit as dif_counting_unit, +-- OLD.counting_unit_ly, +-- NEW.counting_unit_ly, +-- OLD.counting_unit_ly-NEW.counting_unit_ly as dif_counting_unit_ly +-- FROM +-- ( +-- SELECT ym,AUDIT_COD,inst_code,SUM(value) value,SUM(volume) volume,SUM(counting_unit) counting_unit,SUM(value_ly) value_ly,SUM(volume_ly) volume_ly,SUM(counting_unit_ly) counting_unit_ly +-- FROM dm.dm_ext_aia_sales +-- GROUP BY ym,AUDIT_COD,inst_code +-- -- ORDER BY ym +-- ) AS OLD +-- LEFT JOIN +-- ( +-- SELECT YYYYMM,AUDIT_CODE,inst_code,SUM(SALES_VALUE_CAL) value,SUM(SALES_UNIT_CAL) volume,SUM(CONUTING_UNIT) counting_unit,SUM(SALES_VALUE_CAL_LY) value_ly,SUM(SALES_UNIT_CAL_LY) volume_ly,SUM(CONUTING_UNIT_LY) counting_unit_ly +-- FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY YYYYMM,AUDIT_CODE,inst_code +-- -- ORDER BY YYYYMM +-- ) AS NEW +-- ON OLD.YM =NEW.YYYYMM AND old.AUDIT_COD = NEW.AUDIT_CODE AND old.inst_code = new.inst_code +-- where +-- ABS(OLD.value - NEW.value) > 0.0000000001 OR +-- ABS(OLD.volume - NEW.volume) > 0.0000000001 OR +-- ABS(OLD.value_ly - NEW.value_ly) > 0.0000000001 OR +-- ABS(OLD.volume_ly - NEW.volume_ly) > 0.0000000001 OR +-- ABS(OLD.counting_unit - NEW.counting_unit) > 0.0000000001 OR +-- ABS(OLD.counting_unit_ly - NEW.counting_unit_ly) > 0.0000000001; + +-- COMMAND ---------- + + +-- SELECT +-- old.ym, +-- OLD.AUDIT_COD, +-- OLD.value, +-- NEW.value, +-- OLD.value-NEW.value as dif_value, +-- OLD.value_ly, +-- NEW.value_ly, +-- OLD.value_ly-NEW.value_ly as dif_value_ly, +-- OLD.volume, +-- NEW.volume, +-- OLD.volume-NEW.volume as dif_volume, +-- OLD.volume_ly, +-- NEW.volume_ly, +-- OLD.volume_ly-NEW.volume_ly as dif_volume_ly, +-- OLD.counting_unit, +-- NEW.counting_unit, +-- OLD.counting_unit-NEW.counting_unit as dif_counting_unit, +-- OLD.counting_unit_ly, +-- NEW.counting_unit_ly, +-- OLD.counting_unit_ly-NEW.counting_unit_ly as dif_counting_unit_ly +-- FROM +-- ( +-- SELECT ym,AUDIT_COD,SUM(value) value,SUM(volume) volume,SUM(counting_unit) counting_unit,SUM(value_ly) value_ly,SUM(volume_ly) volume_ly,SUM(counting_unit_ly) counting_unit_ly +-- FROM dm.dm_ext_aia_sales +-- GROUP BY ym,AUDIT_COD +-- -- ORDER BY ym +-- ) AS OLD +-- LEFT JOIN +-- ( +-- SELECT YYYYMM,AUDIT_CODE,SUM(SALES_VALUE_CAL) value,SUM(SALES_UNIT_CAL) volume,SUM(CONUTING_UNIT) counting_unit,SUM(SALES_VALUE_CAL_LY) value_ly,SUM(SALES_UNIT_CAL_LY) volume_ly,SUM(CONUTING_UNIT_LY) counting_unit_ly +-- FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY YYYYMM,AUDIT_CODE +-- -- ORDER BY YYYYMM +-- ) AS NEW +-- ON OLD.YM =NEW.YYYYMM AND old.AUDIT_COD = NEW.AUDIT_CODE +-- where +-- ABS(OLD.value - NEW.value) > 0.0000000001 OR +-- ABS(OLD.volume - NEW.volume) > 0.0000000001 OR +-- ABS(OLD.value_ly - NEW.value_ly) > 0.0000000001 OR +-- ABS(OLD.volume_ly - NEW.volume_ly) > 0.0000000001 OR +-- ABS(OLD.counting_unit - NEW.counting_unit) > 0.0000000001 OR +-- ABS(OLD.counting_unit_ly - NEW.counting_unit_ly) > 0.0000000001; + +-- COMMAND ---------- + + +-- SELECT +-- old.ym, +-- OLD.value, +-- NEW.value, +-- OLD.value-NEW.value as dif_value, +-- OLD.value_ly, +-- NEW.value_ly, +-- OLD.value_ly-NEW.value_ly as dif_value_ly, +-- OLD.volume, +-- NEW.volume, +-- OLD.volume-NEW.volume as dif_volume, +-- OLD.volume_ly, +-- NEW.volume_ly, +-- OLD.volume_ly-NEW.volume_ly as dif_volume_ly, +-- OLD.counting_unit, +-- NEW.counting_unit, +-- OLD.counting_unit-NEW.counting_unit as dif_counting_unit, +-- OLD.counting_unit_ly, +-- NEW.counting_unit_ly, +-- OLD.counting_unit_ly-NEW.counting_unit_ly as dif_counting_unit_ly +-- FROM +-- ( +-- SELECT ym,SUM(value) value,SUM(volume) volume,SUM(counting_unit) counting_unit,SUM(value_ly) value_ly,SUM(volume_ly) volume_ly,SUM(counting_unit_ly) counting_unit_ly +-- FROM dm.dm_ext_aia_sales +-- GROUP BY ym +-- ORDER BY ym +-- ) AS OLD +-- LEFT JOIN +-- ( +-- SELECT YYYYMM,SUM(SALES_VALUE_CAL) value,SUM(SALES_UNIT_CAL) volume,SUM(CONUTING_UNIT) counting_unit,SUM(SALES_VALUE_CAL_LY) value_ly,SUM(SALES_UNIT_CAL_LY) volume_ly,SUM(CONUTING_UNIT_LY) counting_unit_ly +-- FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY YYYYMM +-- ORDER BY YYYYMM +-- ) AS NEW +-- ON OLD.YM =NEW.YYYYMM +-- where +-- ABS(OLD.value - NEW.value) > 0.0000000001 OR +-- ABS(OLD.volume - NEW.volume) > 0.0000000001 OR +-- ABS(OLD.value_ly - NEW.value_ly) > 0.0000000001 OR +-- ABS(OLD.volume_ly - NEW.volume_ly) > 0.0000000001 OR +-- ABS(OLD.counting_unit - NEW.counting_unit) > 0.0000000001 OR +-- ABS(OLD.counting_unit_ly - NEW.counting_unit_ly) > 0.0000000001; + +-- COMMAND ---------- + +-- -- 这个sql证明,两张表的inst_code,值也相同 +-- SELECT +-- * +-- FROM +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY inst_code +-- ) AS NEW +-- FULL JOIN +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.dm_ext_aia_sales +-- GROUP BY inst_code +-- ) AS OLD +-- ON NEW.inst_code = old.inst_code +-- WHERE new.c1 != old.c1 + +-- COMMAND ---------- + +-- -- 这个sql证明,两张表的inst_code相同 +-- SELECT +-- * +-- FROM +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY inst_code +-- ) AS NEW +-- FULL JOIN +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY inst_code +-- ) AS OLD +-- ON NEW.inst_code = old.inst_code +-- WHERE NEW.inst_code IS NULL OR old.inst_code IS NULL + +-- COMMAND ---------- + +-- -- 这个sql证明,两张表的inst_code,值也相同 +-- SELECT +-- * +-- FROM +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY inst_code +-- ) AS NEW +-- FULL JOIN +-- ( +-- SELECT inst_code,COUNT(*) as c1 FROM DM.DM_TF_EXT_AIA_SALES +-- GROUP BY inst_code +-- ) AS OLD +-- ON NEW.inst_code = old.inst_code +-- WHERE new.c1 != old.c1 + +-- COMMAND ---------- + +-- SELECT COUNT(*) FROM DM.DM_TF_EXT_AIA_SALES + +-- COMMAND ---------- + +-- SELECT COUNT(*) FROM DM.dm_ext_aia_sales \ No newline at end of file diff --git a/AIA/02 dm_ext_aia_sales_bakup_20230327.sql b/AIA/02 dm_ext_aia_sales_bakup_20230327.sql new file mode 100644 index 0000000..66a5305 --- /dev/null +++ b/AIA/02 dm_ext_aia_sales_bakup_20230327.sql @@ -0,0 +1,195 @@ +-- Databricks notebook source +--字段值的初步处理 +create or replace temporary view aia_rawdata_1 as +select +year, +qtr, +cast(year * 100 + ym as int) ym, +org_prov, +org_city, +ins_level, +case when ins_cd is not null and length(ins_cd) < 7 then right(concat('0000000',ins_cd),7) else ins_cd end as org_ins_cd, +atc1, +atc2, +atc3, +atc4, +atc, +mole_nm, +prod_nm, +org_prd_nm_c, +org_pk, +org_prd_str, +org_pth, +min_unit, +value, +unit, +cast(pack_desc as int) as pack_desc, +org_pk_un, +manu +from dwd.dwd_gnd_aia_rawdata + +-- COMMAND ---------- + + +--关联出AUDIT_COD、inst_code +create or replace temporary view aia_rawdata_2 as +with hospital_mapping as ( +select distinct +case when length(cpa_hospital_code) < 7 then right(concat('0000000',cpa_hospital_code),7) else cpa_hospital_code end as cpa_hospital_code, +ins_cd_nl as inst_code +from dwd.dwd_gnd_hospital_not_provided +) + +select upper(nvl(t2.inst_code,t1.org_ins_cd)) AUDIT_COD, +t1.*, +nvl(t2.inst_code,t1.org_ins_cd) as inst_code +from aia_rawdata_1 t1 +left join hospital_mapping t2 +on t1.org_ins_cd = t2.cpa_hospital_code +-- left join dm.dm_td_institution t3 +-- on t2.ins_code = t3.inst_code +-- left join dm.dm_ims_td_geo t4 +-- on t3.city_name_en = t4.city + + +-- COMMAND ---------- + +/* +修改人 chenwu +修改时间 20250513 +修改内容 打包分子的数据,不论 打通表 和 事实表,都没有系数,需要用 事实表里的 最小制剂单位数量 作为counting_unit +*/ +--关联出pack_cod、corp_cod、counting_unit +create or replace temporary view aia_rawdata_3 as +select case when length(trim(t2.iqvia_pack_code)) < 12 and trim(t2.iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(t2.iqvia_pack_code)),12) + else trim(t2.iqvia_pack_code) + end as pack_cod, +t3.corp_cod, +case when left(t2.iqvia_pack_code,4) = 'AZP_' then cast(t1.min_unit/t1.org_pk_un as decimal(38,10)) else t3.counting_unit end counting_unit, +-- t3.counting_unit,20250513 +t1.* +from aia_rawdata_2 t1 +left join (select distinct trim(iqvia_pack_code) as iqvia_pack_code, +ATC1,ATC2,ATC3,ATC4,org_prd_cd,org_mole_nm_c, +org_manu_prd_nm_c,org_prd_nm_c,org_pk,org_prd_str, +org_pth,min_pk_unit,org_pk_unit,org_manu_nm from dwd.dwd_gnd_ext_aia_cpt_data) t2 +--ATC1编码+ATC2编码+ATC3编码+ATC4编码+药品编码(ATC)+药品通用名+药品产品名+药品商品名+规格+剂型+给药途径+最小销售包装单位+包装规格+生产企业 +on nvl(t1.ATC1,'') = nvl(t2.ATC1,'') +and nvl(t1.ATC2,'') = nvl(t2.ATC2,'') +and nvl(t1.ATC3,'') = nvl(t2.ATC3,'') +and nvl(t1.ATC4,'') = nvl(t2.ATC4,'') +and nvl(t1.ATC,'') = nvl(t2.org_prd_cd,'') +and nvl(t1.MOLE_NM,'') = nvl(t2.org_mole_nm_c,'') +and nvl(t1.PROD_NM,'') = nvl(t2.org_manu_prd_nm_c,'') +and nvl(t1.ORG_PRD_NM_C,'') = nvl(t2.org_prd_nm_c,'') +and nvl(t1.ORG_PK,'') = nvl(t2.org_pk,'') +and nvl(t1.ORG_PRD_STR,'') = nvl(t2.org_prd_str,'') +and nvl(t1.ORG_PTH,'') = nvl(t2.org_pth,'') +and nvl(t1.UNIT,'') = nvl(t2.min_pk_unit,'') +and nvl(t1.PACK_DESC,'') = nvl(t2.org_pk_unit,'') +and nvl(t1.MANU,'') = nvl(t2.org_manu_nm,'') +left join (select distinct PACK_COD,corp_cod,counting_unit from dm.dm_aia_pack_property) t3 +on t2.iqvia_pack_code = t3.PACK_COD + + +-- COMMAND ---------- + + +--计算出ly销量 +create or replace temporary view aia_rawdata_4 as +with max_ym as ( +select max(ym) as max_ym from aia_rawdata_3 +) + +select + YM, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod, + sum(value) as value, + sum(volume) as volume, + sum(counting_unit) as counting_unit, + sum(value_ly) as value_ly, + sum(volume_ly) as volume_ly, + sum(counting_unit_ly) as counting_unit_ly +from ( +select + ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod, + cast(value as decimal(38,10)) as value, + cast(ORG_PK_UN as decimal(38,10)) as volume, + cast(ORG_PK_UN as decimal(38,10)) * coalesce(cast(counting_unit as decimal(38,10)),1) as counting_unit, + 0 as value_ly, + 0 as volume_ly, + 0 as counting_unit_ly +from aia_rawdata_3 +union all +select + cast(cast(ym as int) + 100 as string) as ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod, + 0 as value, + 0 as volume, + 0 as counting_unit, + cast(value as decimal(38,10)) as value_ly, + cast(ORG_PK_UN as decimal(38,10)) as volume_ly, + cast(ORG_PK_UN as decimal(38,10)) * coalesce(cast(counting_unit as decimal(38,10)),1) as counting_unit_ly +from aia_rawdata_3 t1 +join max_ym t2 +on 1=1 +where cast(cast(ym as int) + 100 as string) <= t2.max_ym + ) +group by ym, + org_ins_cd, + inst_code, + AUDIT_COD, + pack_cod, + corp_cod + + +-- COMMAND ---------- + +insert overwrite table dm.dm_ext_aia_sales( +ym, +org_ins_cd, +inst_code, +AUDIT_COD, +pack_cod, +corp_cod, +value, +volume, +counting_unit, +value_ly, +volume_ly, +counting_unit_ly +) +select +ym, +org_ins_cd, +inst_code, +AUDIT_COD, +pack_cod, +corp_cod, +sum(value) as value, +sum(volume) as volume, +sum(counting_unit) as counting_unit, +sum(value_ly) as value_ly, +sum(volume_ly) as volume_ly, +sum(counting_unit_ly) as counting_unit_ly +from aia_rawdata_4 +group by +ym, +org_ins_cd, +inst_code, +AUDIT_COD, +pack_cod, +corp_cod \ No newline at end of file diff --git a/AIA/03 dm_aia_flag.sql b/AIA/03 dm_aia_flag.sql new file mode 100644 index 0000000..a33a05e --- /dev/null +++ b/AIA/03 dm_aia_flag.sql @@ -0,0 +1,84 @@ +-- Databricks notebook source +----------------------------------------------------------------------------------- +--修改时间:20241021 +--修改人:FanXujia +--修改内容: +--只取最新年-1 ~ 最新年范围内的,称为“2年共有”。增加 +----------------------------------------------------------------------------------- +--共有机构 +insert overwrite table dm.dm_aia_hp_flag +with max_year as ( +select +max(cast(year as int)) as max_year, +max(cast(year as int) - 1) as max_year_ly +from dwd.dwd_gnd_hospital_not_provided +) +,hp_flag as ( + select + distinct concat(t1.year, '-Y') as hp_his_flag, + case when length(t1.cpa_hospital_code) < 7 then right(concat('0000000',t1.cpa_hospital_code),7) else t1.cpa_hospital_code end as cpa_hospital_code + from + dwd.dwd_gnd_hospital_not_provided t1 + cross join max_year t2 + where cast(t1.year as int) >= t2.max_year_ly +) +,hp_flag2 as ( +SELECT + cpa_hospital_code, + CONCAT_WS(' ∩ ', SORT_ARRAY(COLLECT_LIST(hp_his_flag))) AS FLAG +FROM + hp_flag +GROUP BY + cpa_hospital_code +) +,inst_mapping as ( + -- select + -- distinct right(concat('0000000', org_cd), 7) org_cd, + -- ins_cd + -- from + -- dwd.dwd_gnd_hospitalmapping +select distinct +case when length(cpa_hospital_code) < 7 then right(concat('0000000',cpa_hospital_code),7) else cpa_hospital_code end as cpa_hospital_code, +ins_cd_nl as inst_code +from dwd.dwd_gnd_hospital_not_provided +) + +,ALL_INS as ( +select distinct inst_code +from dm.dm_ext_aia_sales +) + +,flag as ( + select distinct + coalesce(t2.inst_code,t1.cpa_hospital_code) as inst_code, + t1.flag as aia_hp_flag, + 'Y' as FLAG, +'AIA(Monthly)' as DATA_SOURCE + from hp_flag2 t1 + left join inst_mapping t2 on t1.cpa_hospital_code = t2.cpa_hospital_code + where + length(t1.flag) > 6 +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-CHPA(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'XH Data(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'EC(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'Retail(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'CHC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'THC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-COUNTY(Quarterly)' as DATA_SOURCE +) + +select t1.inst_code, +NVL(t2.aia_hp_flag,'') as aia_hp_flag, +NVL(t2.FLAG,'N') as FLAG, +'AIA(Monthly)' as DATA_SOURCE +from ALL_INS t1 +left join flag t2 +on t1.inst_code = t2.inst_code + diff --git a/AIA/04 dm_aia_provided_flag.sql b/AIA/04 dm_aia_provided_flag.sql new file mode 100644 index 0000000..c772213 --- /dev/null +++ b/AIA/04 dm_aia_provided_flag.sql @@ -0,0 +1,112 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dwd_hospital_classification`').createOrReplaceTempView('cdw_dwd_dwd_hospital_classification') + +-- COMMAND ---------- + +--连续取数机构 +---------------------------------------------------------------------------------------------------------------------- +--修改时间:20241029 +--修改人:FanXujia +--修改内容: +--根据事实表最新月,往前推12个月(含最新月),按机构 + 年月粒度汇总,如果每个月销量都不等于0,这家机构称为:滚动一年有数 +--根据事实表最新月,往前推24个月(含最新月),按机构 + 年月粒度汇总,如果每个月销量都不等于0,这家机构称为:滚动两年有数 +--2022年没有销量为正常情况,判断时仅考虑2023年01月起销量是否等于0 +---------------------------------------------------------------------------------------------------------------------- +insert overwrite table dm.dm_aia_provided_flag +with max_ym as ( +select max(ym) as max_ym +from dm.dm_ext_aia_sales +) +,ym_range as ( +select max_ym, +case when max_ym <= '202412' then cast(right(max_ym,2) as int) + else cast(12 as int) +end ym_12m, +case when max_ym <= '202312' then '202401' + when right(max_ym,2) = '12' then concat(left(max_ym,4),'01') + else concat(cast(left(max_ym, 4) - 1 as int),right(concat('0', cast(right(max_ym, 2) + 1 as int)), 2)) +end as ym_12m_before, +case when max_ym <= '202312' then cast(right(max_ym,2) as int) + when max_ym <= '202512' then cast(right(max_ym,2) as int) + 12 + else cast(24 as int) +end as ym_24m, +case when max_ym <= '202512' then '202401' + when right(max_ym,2) = '12' then concat(cast(left(max_ym,4) - 1 as int),'01') + else concat(cast(left(max_ym, 4) -2 as int),right(concat('0', cast(right(max_ym, 2) + 1 as int)), 2)) +end as ym_24m_before +from max_ym +) +,sales_1 as ( +select + inst_code, + ym +from + dm.dm_ext_aia_sales +group by + ym, + inst_code +having + sum(value) <> 0 +) +,sales_2 as ( +select + t1.inst_code, + t1.ym, + t2.max_ym, + t2.ym_12m, + t2.ym_12m_before, + t2.ym_24m, + t2.ym_24m_before +from sales_1 t1 +cross join ym_range t2 +) +,flag_12m as ( +select inst_code, +'滚动一年有数' as aia_provided_flag, +'AIA(Monthly)' as DATA_SOURCE +from sales_2 +where ym <= max_ym +and ym >= ym_12m_before +group by inst_code +having count(1) = (select ym_12m from ym_range) +) +,flag_24m as ( +select inst_code, +'滚动两年有数' as aia_provided_flag, +'AIA(Monthly)' as DATA_SOURCE +from sales_2 +where ym <= max_ym +and ym >= ym_24m_before +group by inst_code +having count(1) = (select ym_24m from ym_range) +) + +select inst_code, +aia_provided_flag, +DATA_SOURCE +from flag_12m +union all +select inst_code, +aia_provided_flag, +DATA_SOURCE +from flag_24m +union all +select '' as inst_code,'' as aia_provided_flag,'IQVIA-CHPA(Monthly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'XH Data(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'EC(Monthly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'Retail(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'CHC(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'THC(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'IQVIA-COUNTY(Quarterly)' as data_source diff --git a/AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql b/AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql new file mode 100644 index 0000000..3f5c061 --- /dev/null +++ b/AIA/06 DM_TD_EXT_AIA_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_PACK_PROPERTY +-- ( +-- -- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- -- MARKET STRING, +-- -- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- -- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- -- CLASS STRING, +-- -- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_PACK_PROPERTY +SELECT + -- MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + null as VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + -- MARKET, + -- KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + -- AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + -- CLASS, + -- NULL AS MARKET_RATIO, + NULL AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_AIA_PACK_PROPERTY; \ No newline at end of file diff --git a/AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql b/AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql new file mode 100644 index 0000000..fbc8ef7 --- /dev/null +++ b/AIA/07 DM_TD_EXT_AIA_PACK2MARKET.sql @@ -0,0 +1,334 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET_KEYCOMPETITOR ( +-- KEY_COMPETITOR STRING, +-- MARKET STRING, +-- PACK_CODE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market_keycompetitor'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market_keycompetitor'; + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET_CLASS ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CLASS STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market_class'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market_class'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC, + T1.ETH_OTC_DESC, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC, + T1.ETH_OTC_DESC, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +--删除需要隐藏的市场 +MERGE INTO DM.DM_TD_EXT_AIA_PACK2MARKET AS target +USING dwd.dwd_gnd_ims_hidden_market AS source +ON UPPER(target.market) = UPPER(source.hidden_market) +AND source.data_source = 'AIA' +WHEN MATCHED THEN DELETE; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET_KEYCOMPETITOR +WITH kc AS ( + SELECT + keycompetitor, no, + ROW_NUMBER() OVER (ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 + END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1, + ATC1_Code, ATC2_Code, ATC3_Code, ATC4_Code, + NFC1_Code, NFC2_Code, NFC3_Code, + corporation_code, Manufacturer_Code, + Product_Code, Pack_Code, Strength, Molecule_Code, market + FROM dwd.dwd_gnd_ims_tblkeycompetitor +), +joined AS ( + SELECT + /*+ BROADCAST(kc) */ + COALESCE(kc.keycompetitor, 'OTHERS') AS Key_Competitor, -- ✅ UPDATE 逻辑内联 + t1.market, t1.PACK_CODE + /*bug 调试区 + , + kc.no, + kc.no1, + t1.PROD_COD, t1.CMPS_COD, t1.CMPS_DES, + t1.ATC1_COD, t1.ATC2_COD, t1.ATC3_COD, t1.ATC4_COD, + t1.APP1_COD, t1.APP2_COD, t1.APP3_COD, + t1.BIO_DESC, t1.GENE_ORIG_DESC, t1.ETH_OTC_DESC, + t1.NRDL_DESC, t1.NRDL_Entry_Date, t1.EDL_DESC, t1.TCM_DESC, + t1.PAED_DESC, t1.GQCE_DESC, t1.VBP_DESC, + t1.MANU_COD, t1.MANU_DES, t1.MNFL_COD, t1.MNFL_DES, + t1.CORP_COD, t1.CORP_DES, t1.BrandType, t1.bu, t1.Market_Ratio + */ + ,ROW_NUMBER() OVER ( + PARTITION BY t1.market, t1.PACK_CODE, t1.PROD_CODE + ORDER BY kc.no1 DESC, kc.no DESC + ) AS _rn + FROM DM.DM_TD_EXT_AIA_PACK2MARKET t1 + LEFT JOIN kc + ON (kc.ATC1_Code IS NULL OR t1.ATC1_CODE = kc.ATC1_Code) + AND (kc.ATC2_Code IS NULL OR t1.ATC2_CODE = kc.ATC2_Code) + AND (kc.ATC3_Code IS NULL OR t1.ATC3_CODE = kc.ATC3_Code) + AND (kc.ATC4_Code IS NULL OR t1.ATC4_CODE = kc.ATC4_Code) + AND (kc.NFC1_Code IS NULL OR t1.APP1_CODE = kc.NFC1_Code) + AND (kc.NFC2_Code IS NULL OR t1.APP2_CODE = kc.NFC2_Code) + AND (kc.NFC3_Code IS NULL OR t1.APP3_CODE = kc.NFC3_Code) + AND (kc.corporation_code IS NULL OR t1.CORP_CODE = kc.corporation_code) + AND (kc.Manufacturer_Code IS NULL OR t1.MANU_CODE = kc.Manufacturer_Code) + AND (kc.Product_Code IS NULL OR t1.PROD_CODE = kc.Product_Code) + AND (kc.Pack_Code IS NULL OR t1.PACK_CODE = kc.Pack_Code) + AND (kc.Strength IS NULL OR t1.STGH_DESC = kc.Strength) + AND (kc.Molecule_Code IS NULL OR t1.CMPS_CODE = kc.Molecule_Code) + AND (kc.market IS NULL OR t1.market = kc.market) +) +SELECT distinct Key_Competitor,market,pack_code +FROM joined +WHERE _rn = 1; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET_CLASS +SELECT + /*+ BROADCAST(T2) */ + DISTINCT + T1.MARKET, + T1.PACK_CODE, + COALESCE( T2.CLASS, 'OTHERS') AS CLASS +FROM DM.DM_TD_EXT_AIA_PACK2MARKET T1 +LEFT JOIN DWD.DWD_GND_TBLCLASS T2 + ON (T2.MARKET IS NULL OR T1.MARKET = T2.MARKET) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) \ No newline at end of file diff --git a/AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql b/AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql new file mode 100644 index 0000000..2651cf1 --- /dev/null +++ b/AIA/08 DM_TD_EXT_AIA_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql b/AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..1bba9c1 --- /dev/null +++ b/AIA/09 DM_TD_EXT_AIA_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql b/AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..798af44 --- /dev/null +++ b/AIA/10 DM_TD_EXT_AIA_MARKET_PACK_MAPPING.sql @@ -0,0 +1,71 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING + SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T4.CLASS, + T5.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.DM_TD_EXT_AIA_PACK2MARKET T1 + LEFT JOIN DM.DM_TD_EXT_AIA_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET + AND T1.PACK_CODE = T2.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_AIA_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET + AND T1.PACK_CODE = T3.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_AIA_PACK2MARKET_CLASS T4 + ON T1.PACK_CODE = T4.PACK_CODE + AND T1.MARKET = T4.MARKET + LEFT JOIN DM.DM_TD_EXT_AIA_PACK2MARKET_KEYCOMPETITOR T5 + ON T1.PACK_CODE = T5.PACK_CODE + AND T1.MARKET = T5.MARKET + WHERE + UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql b/AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql new file mode 100644 index 0000000..e1cd656 --- /dev/null +++ b/AIA/11 DM_TD_EXT_AIA_TARGET_INST.sql @@ -0,0 +1,11 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + + diff --git a/AIA/11 dm_aia_targethp_flag.sql b/AIA/11 dm_aia_targethp_flag.sql new file mode 100644 index 0000000..f310520 --- /dev/null +++ b/AIA/11 dm_aia_targethp_flag.sql @@ -0,0 +1,366 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dwd_hospital_classification`').createOrReplaceTempView('cdw_dwd_dwd_hospital_classification') + +-- COMMAND ---------- + +--------------------------------------------------------------------------- +--修改时间:20241108 +--修改人:Fanxujia +--修改内容: +--for AIA Dashboard +--增加sub_channel,dragon_flag,ka_flag,target_ins_level字段 +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--增加sub channel的排序 +--------------------------------------------------------------------------- +--目标医院 +insert overwrite table dm.dm_aia_targethp_flag --获取全部的机构 + 市场 +with sales as ( + select distinct t1.inst_code,t2.MARKET + from dm.dm_ext_aia_sales t1 + left join DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING t2 + on t1.pack_cod = t2.PACK_CODE +) +--获取产品与市场的映射关系 +,pack_market as ( +select distinct +PACK_CODE as PACK_COD, +MARKET +from DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +) +--辖区表,获取到KA_Flag、target_ins_level以及目标机构Flag(在辖区表里存在的就是目标机构) +,td_territory_inst as ( +select distinct +inst_code, +trty_code, +family_code, +ka_flag, +TARGET_LEVEL as target_ins_level +from dm.dm_td_sd_territory_indication --eagle的非重点医院同样加为目标机构 +where yyyymm in ( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) +and bu not in ('CUBE','KA') +and key_hp<>3 --chenwu 20250904 排除双考影响 +) +--汇报线表,获取到Channel,后续用于判断出sub_channel +,td_org as ( +select distinct +t1.mr_trty_code, +case when t1.bu_code in ('PC14','PC16','PC18','PC19') then 'BU' + when t1.bu_code = 'SC01' and t1.sub_bu_code = 'NA29' then sub_bu_name + when t1.bu_code = 'SC01' then 'BU' + when t1.bu_code <> 'SC01' and t2.bm_name = 'BCBH' then 'BU' + when t1.bu_code <> 'SC01' then t1.bu_name +end as channel +from dm.dm_td_org t1 +left join dws.dws_td_bu_active t2 +on t1.bu_name = t2.bu_name +where t1.yyyymm in ( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) +) +--Family粒度和Brand粒度的映射表 +,product_wide as ( +select distinct +prd_family_cd, +prd_brand_cd +from cdw_dwd_dim_product_wide +) +--内部Brand粒度与外部pack_cod的映射表 +,imscode_azcode as ( +select distinct +brandcode, +case when length(ims_pack_cod) < 12 and ims_pack_cod REGEXP '^[0-9]' then right(concat('00000000000',ims_pack_cod),12) else ims_pack_cod end as ims_pack_cod +from dwd.dwd_td_imscode_azcode +) +--综合上面的几个表,得到KA_flag、target_ins_level、channel、目标机构Flag +,target_hp_all as ( +select + distinct + t1.inst_code, + t1.ka_flag, + t1.target_ins_level, + t2.channel, + t5.MARKET +from + td_territory_inst t1 + inner join td_org t2 on t1.trty_code = t2.mr_trty_code + left join product_wide t3 on t3.prd_family_cd = t1.family_code + left join imscode_azcode t4 on t3.prd_brand_cd = t4.brandcode + left join pack_market t5 on t4.ims_pack_cod = t5.pack_cod +where t5.MARKET is not null +) +--target_hp_all里一个机构一个市场对应了多个属性,这里按优先级依次取唯一值 +--ka_flag +,ka_flag1 as ( +select distinct +inst_code, +MARKET, +ka_flag +from target_hp_all +) +,ka_flag2 as ( +select +inst_code, +MARKET, +ka_flag, +row_number() over(partition by inst_code,market + order by case when ka_flag = 'KA' then 1 + ELSE 2 end asc) as RN +from ka_flag1 +) +,ka_flag_final as ( +select +inst_code, +MARKET, +ka_flag +from ka_flag2 +where RN = 1 +) +--target_ins_level不取唯一值 +--加个hardcoding,ONC Market和ALL Market设置成NA +,target_ins_level1 as ( +select distinct +inst_code, +MARKET, +case when MARKET in ('ALL Market','ONC Market') then 'NA' + else target_ins_level +end as target_ins_level +from target_hp_all +) +,target_ins_level_final as ( +select distinct +inst_code, +MARKET, +target_ins_level +from target_ins_level1 +) +--target_hp_all里一个机构一个市场对应了多个属性,这里按优先级依次取唯一值 +--Channel +,Channel1 as ( +select distinct +inst_code, +MARKET, +channel +from target_hp_all +) +,channel2 as ( +select +inst_code, +MARKET, +channel, +row_number() over(partition by inst_code,market + order by case when channel = 'BU' then 1 + when channel = 'BBU_County' then 2 + when channel = 'CHC' then 3 + when channel = 'Eagle' then 4 + ELSE 5 end asc) as RN +from channel1 +) +,channel_final as ( +select +inst_code, +MARKET, +channel +from channel2 +where RN = 1 +) +--确定唯一值后重新放一起 +,target_hp1 as ( +select distinct +inst_code, +MARKET +from target_hp_all +) +,target_hp as ( +select t1.inst_code, +t1.market, +t2.ka_flag, +t3.target_ins_level, +t4.channel +from target_hp1 t1 +left join ka_flag_final t2 +on t1.inst_code = t2.inst_code +and t1.market = t2.market +left join target_ins_level_final t3 +on t1.inst_code = t3.inst_code +and t1.market = t3.market +left join channel_final t4 +on t1.inst_code = t4.inst_code +and t1.market = t4.market +) + +--获取Dragon_type +--判断Dragon_type是否为County +,county as ( +select distinct inst_code,county_tier_desc +from dm.dm_td_institution +) +--判断另外2种 +-- 20250825修改 +,dragon_type as ( +select src_hcc_code as inst_code, +src_prod_code as family_code, +max(is_core) is_core +from cdw_dwd_dwd_hospital_classification +where active_status = 1 +and src_sales_cycle = (select key_value from dm.dm_td_date_config where key_code = 'pfmc_cvh') +group by src_hcc_code, +src_prod_code +) +--将Family_code转为pack_cod +,dragon_type_market1 as ( +select distinct +t1.inst_code, +t1.is_core, +t4.market +from dragon_type t1 +left join cdw_dwd_dim_product_wide t2 +on t1.family_code = t2.prd_family_cd +left join dwd.dwd_td_imscode_azcode t3 +on t2.prd_brand_cd = t3.brandcode +left join pack_market t4 +on t3.ims_pack_cod = t4.pack_cod +where t4.market is not null +) +--按优先级取唯一值 +,dragon_type_market2 as ( +select distinct +inst_code, +is_core, +market, +row_number() over(partition by inst_code,market + order by case when is_core = 'CORE' then 1 + when is_core = 'EMERGING' then 2 + else 3 end asc) as RN +from dragon_type_market1 +) +,dragon_type_market as ( +select distinct +inst_code, +is_core, +market +from dragon_type_market2 +where RN = 1 +) +--综合前面几个表,得出dragon_flag +,dragon_flag1 as ( +select distinct +t0.inst_code, +t0.market, +case when t1.county_tier_desc in ('County','County level city') then 'County' + when t2.is_core is null or length(t2.is_core) = 0 then 'Others' + else t2.is_core +end as dragon_flag +from target_hp t0 +left join county t1 +on t0.inst_code = t1.inst_code +left join dragon_type_market t2 +on t0.inst_code = t2.inst_code +and t0.MARKET = t2.MARKET +) +--按优先级取唯一值 +,dragon_flag2 as ( +select inst_code, +market, +dragon_flag, +row_number() over(partition by inst_code,market + order by case when dragon_flag = 'CORE' then 1 + when dragon_flag = 'EMERGING' then 2 + when dragon_flag = 'County' then 3 + else 4 end asc) as RN +from dragon_flag1 +) +,dragon_flag as ( +select inst_code, +market, +dragon_flag +from dragon_flag2 +where RN = 1 +) + +--下面是为了把其他渠道并进来 +,other_data_source as ( +select explode(array('IQVIA-CHPA(Monthly)','XH Data(Quarterly)','EC(Monthly)','Retail(Quarterly)','CHC(Quarterly)','THC(Quarterly)','IQVIA-COUNTY(Quarterly)')) +) +,col as ( +select '' as inst_code, +'' as MARKET, +'' as is_target_hp, +'' as sub_channel, +'' as dragon_flag, +'' as ka_flag, +'' as target_ins_level +) + +,temp_1 as ( +select distinct +case when t1.inst_code is null or t1.inst_code = '' then 'ROC' + else t1.inst_code +end as inst_code, +t1.MARKET, +case when t2.inst_code is null then 'N' else 'Y' end as is_target_hp, +case when t2.channel = 'BU' and geo.county_tier_desc in ('County','County level city') then 'BU_County' + when t2.channel = 'BU' and geo.county_tier_desc in ('City-3b','City-4a','City-4b') then 'BU_Emerging' + when t2.channel = 'BU' and t3.dragon_flag = 'CORE' then 'BU_Core' + when t2.channel = 'BU' then 'BU_Emerging' + when t2.channel in ('Eagle','CHC','BBU_County') then t2.channel + when t2.inst_code is null then 'NON_TARGET' + else 'NA' +end as sub_channel, +case when t3.dragon_flag is null then 'NON_TARGET' + else t3.dragon_flag +end as dragon_flag, +case when t2.ka_flag is null then 'NON_TARGET' + else t2.ka_flag +end as ka_flag, +case when t2.target_ins_level is null then 'NON_TARGET' + else t2.target_ins_level +end as target_ins_level, +'AIA(Monthly)' as DATA_SOURCE +from sales t1 +left join target_hp t2 +on t1.inst_code = t2.inst_code +and t1.MARKET = t2.MARKET +left join dragon_flag t3 +on t1.inst_code = t3.inst_code +and t1.MARKET = t3.MARKET +left join dm.dm_td_institution inst +on t1.inst_code =inst.inst_code +left join dm.dm_td_geography geo +on inst.county_code = geo.geo_key +union all +select * +from col +cross join other_data_source +) +,sub_channel_rank as ( +select distinct SUB_CHANNELSTD,SUB_CHANNEL_ORDER +from dm.dm_td_sd_channel +) + + +select t1.*,NVL(t2.SUB_CHANNEL_ORDER,100) as SUB_CHANNEL_ORDER +from temp_1 t1 +left join sub_channel_rank t2 +on t1.sub_channel = t2.SUB_CHANNELSTD diff --git a/AIA/z_03 dm_aia_flag_备份用.sql b/AIA/z_03 dm_aia_flag_备份用.sql new file mode 100644 index 0000000..0738500 --- /dev/null +++ b/AIA/z_03 dm_aia_flag_备份用.sql @@ -0,0 +1,643 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dwd_hospital_classification`').createOrReplaceTempView('cdw_dwd_dwd_hospital_classification') + +-- COMMAND ---------- + +----------------------------------------------------------------------------------- +--修改时间:20241021 +--修改人:FanXujia +--修改内容: +--只取最新年-1 ~ 最新年范围内的,称为“2年共有”。增加 +----------------------------------------------------------------------------------- +--共有机构 +insert overwrite table dm.dm_aia_hp_flag +with max_year as ( +select +max(cast(year as int)) as max_year, +max(cast(year as int) - 1) as max_year_ly +from dwd.dwd_gnd_hospital_not_provided +) +,hp_flag as ( + select + distinct concat(t1.year, '-Y') as hp_his_flag, + case when length(t1.cpa_hospital_code) < 7 then right(concat('0000000',t1.cpa_hospital_code),7) else t1.cpa_hospital_code end as cpa_hospital_code + from + dwd.dwd_gnd_hospital_not_provided t1 + cross join max_year t2 + where cast(t1.year as int) >= t2.max_year_ly +) +,hp_flag2 as ( +SELECT + cpa_hospital_code, + CONCAT_WS(' ∩ ', SORT_ARRAY(COLLECT_LIST(hp_his_flag))) AS FLAG +FROM + hp_flag +GROUP BY + cpa_hospital_code +) +,inst_mapping as ( + -- select + -- distinct right(concat('0000000', org_cd), 7) org_cd, + -- ins_cd + -- from + -- dwd.dwd_gnd_hospitalmapping +select distinct +case when length(cpa_hospital_code) < 7 then right(concat('0000000',cpa_hospital_code),7) else cpa_hospital_code end as cpa_hospital_code, +ins_cd_nl as inst_code +from dwd.dwd_gnd_hospital_not_provided +) + +,ALL_INS as ( +select distinct inst_code +from dm.dm_ext_aia_sales +) + +,flag as ( + select distinct + coalesce(t2.inst_code,t1.cpa_hospital_code) as inst_code, + t1.flag as aia_hp_flag, + 'Y' as FLAG, +'AIA(Monthly)' as DATA_SOURCE + from hp_flag2 t1 + left join inst_mapping t2 on t1.cpa_hospital_code = t2.cpa_hospital_code + where + length(t1.flag) > 6 +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-CHPA(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'XH Data(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'EC(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'Retail(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'CHC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'THC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-COUNTY(Quarterly)' as DATA_SOURCE +) + +select t1.inst_code, +NVL(t2.aia_hp_flag,'') as aia_hp_flag, +NVL(t2.FLAG,'N') as FLAG, +'AIA(Monthly)' as DATA_SOURCE +from ALL_INS t1 +left join flag t2 +on t1.inst_code = t2.inst_code + + +-- COMMAND ---------- + +----------------------------------------------------------------------------------- +--修改时间:20241021 +--修改人:FanXujia +--修改内容: +--只取最新年-1 ~ 最新年范围内的,称为“2年共有”。增加 +----------------------------------------------------------------------------------- +--共有机构 +insert overwrite table dm.dm_aia_hp_flag +with max_year as ( +select +max(cast(year as int)) as max_year, +max(cast(year as int) - 1) as max_year_ly +from dwd.dwd_gnd_hospital_not_provided +) +,hp_flag as ( + select + distinct concat(t1.year, '-Y') as hp_his_flag, + case when length(t1.cpa_hospital_code) < 7 then right(concat('0000000',t1.cpa_hospital_code),7) else t1.cpa_hospital_code end as cpa_hospital_code + from + dwd.dwd_gnd_hospital_not_provided t1 + cross join max_year t2 + where cast(t1.year as int) >= t2.max_year_ly +) +,hp_flag2 as ( +SELECT + cpa_hospital_code, + CONCAT_WS(' ∩ ', SORT_ARRAY(COLLECT_LIST(hp_his_flag))) AS FLAG +FROM + hp_flag +GROUP BY + cpa_hospital_code +) +,inst_mapping as ( + -- select + -- distinct right(concat('0000000', org_cd), 7) org_cd, + -- ins_cd + -- from + -- dwd.dwd_gnd_hospitalmapping +select distinct +case when length(cpa_hospital_code) < 7 then right(concat('0000000',cpa_hospital_code),7) else cpa_hospital_code end as cpa_hospital_code, +ins_cd_nl as inst_code +from dwd.dwd_gnd_hospital_not_provided +) + +,ALL_INS as ( +select distinct inst_code +from dm.dm_ext_aia_sales +) + +,flag as ( + select distinct + coalesce(t2.inst_code,t1.cpa_hospital_code) as inst_code, + t1.flag as aia_hp_flag, + 'Y' as FLAG, +'AIA(Monthly)' as DATA_SOURCE + from hp_flag2 t1 + left join inst_mapping t2 on t1.cpa_hospital_code = t2.cpa_hospital_code + where + length(t1.flag) > 6 +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-CHPA(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'XH Data(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'EC(Monthly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'Retail(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'CHC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'THC(Quarterly)' as DATA_SOURCE +union all +select '' as inst_code,'' as aia_hp_flag,'' as FLAG,'IQVIA-COUNTY(Quarterly)' as DATA_SOURCE +) + +select t1.inst_code, +NVL(t2.aia_hp_flag,'') as aia_hp_flag, +NVL(t2.FLAG,'N') as FLAG, +'AIA(Monthly)' as DATA_SOURCE +from ALL_INS t1 +left join flag t2 +on t1.inst_code = t2.inst_code + + +-- COMMAND ---------- + +--连续取数机构 +---------------------------------------------------------------------------------------------------------------------- +--修改时间:20241029 +--修改人:FanXujia +--修改内容: +--根据事实表最新月,往前推12个月(含最新月),按机构 + 年月粒度汇总,如果每个月销量都不等于0,这家机构称为:滚动一年有数 +--根据事实表最新月,往前推24个月(含最新月),按机构 + 年月粒度汇总,如果每个月销量都不等于0,这家机构称为:滚动两年有数 +--2022年没有销量为正常情况,判断时仅考虑2023年01月起销量是否等于0 +---------------------------------------------------------------------------------------------------------------------- +insert overwrite table dm.dm_aia_provided_flag +with max_ym as ( +select max(ym) as max_ym +from dm.dm_ext_aia_sales +) +,ym_range as ( +select max_ym, +case when max_ym <= '202412' then cast(right(max_ym,2) as int) + else cast(12 as int) +end ym_12m, +case when max_ym <= '202312' then '202401' + when right(max_ym,2) = '12' then concat(left(max_ym,4),'01') + else concat(cast(left(max_ym, 4) - 1 as int),right(concat('0', cast(right(max_ym, 2) + 1 as int)), 2)) +end as ym_12m_before, +case when max_ym <= '202312' then cast(right(max_ym,2) as int) + when max_ym <= '202512' then cast(right(max_ym,2) as int) + 12 + else cast(24 as int) +end as ym_24m, +case when max_ym <= '202512' then '202401' + when right(max_ym,2) = '12' then concat(cast(left(max_ym,4) - 1 as int),'01') + else concat(cast(left(max_ym, 4) -2 as int),right(concat('0', cast(right(max_ym, 2) + 1 as int)), 2)) +end as ym_24m_before +from max_ym +) +,sales_1 as ( +select + inst_code, + ym +from + dm.dm_ext_aia_sales +group by + ym, + inst_code +having + sum(value) <> 0 +) +,sales_2 as ( +select + t1.inst_code, + t1.ym, + t2.max_ym, + t2.ym_12m, + t2.ym_12m_before, + t2.ym_24m, + t2.ym_24m_before +from sales_1 t1 +cross join ym_range t2 +) +,flag_12m as ( +select inst_code, +'滚动一年有数' as aia_provided_flag, +'AIA(Monthly)' as DATA_SOURCE +from sales_2 +where ym <= max_ym +and ym >= ym_12m_before +group by inst_code +having count(1) = (select ym_12m from ym_range) +) +,flag_24m as ( +select inst_code, +'滚动两年有数' as aia_provided_flag, +'AIA(Monthly)' as DATA_SOURCE +from sales_2 +where ym <= max_ym +and ym >= ym_24m_before +group by inst_code +having count(1) = (select ym_24m from ym_range) +) + +select inst_code, +aia_provided_flag, +DATA_SOURCE +from flag_12m +union all +select inst_code, +aia_provided_flag, +DATA_SOURCE +from flag_24m +union all +select '' as inst_code,'' as aia_provided_flag,'IQVIA-CHPA(Monthly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'XH Data(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'EC(Monthly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'Retail(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'CHC(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'THC(Quarterly)' as data_source +union all +select '' as inst_code,'' as aia_provided_flag,'IQVIA-COUNTY(Quarterly)' as data_source + + +-- COMMAND ---------- + +--------------------------------------------------------------------------- +--修改时间:20241108 +--修改人:Fanxujia +--修改内容: +--for AIA Dashboard +--增加sub_channel,dragon_flag,ka_flag,target_ins_level字段 +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--增加sub channel的排序 +--------------------------------------------------------------------------- +--目标医院 +insert overwrite table dm.dm_aia_targethp_flag --获取全部的机构 + 市场 +with sales as ( + select distinct t1.inst_code,t2.MARKET + from dm.dm_ext_aia_sales t1 + left join dm.dm_aia_pack_property t2 + on t1.pack_cod = t2.PACK_COD +) +--获取产品与市场的映射关系 +,pack_market as ( +select distinct +PACK_COD, +MARKET +from dm.dm_aia_pack_property +) +--辖区表,获取到KA_Flag、target_ins_level以及目标机构Flag(在辖区表里存在的就是目标机构) +,td_territory_inst as ( +select distinct +inst_code, +trty_code, +family_code, +ka_flag, +TARGET_LEVEL as target_ins_level +from dm.dm_td_sd_territory_indication --eagle的非重点医院同样加为目标机构 +where yyyymm in ( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) +and bu not in ('CUBE','KA') +and key_hp<>3 --chenwu 20250904 排除双考影响 +) +--汇报线表,获取到Channel,后续用于判断出sub_channel +,td_org as ( +select distinct +t1.mr_trty_code, +case when t1.bu_code in ('PC14','PC16','PC18','PC19') then 'BU' + when t1.bu_code = 'SC01' and t1.sub_bu_code = 'NA29' then sub_bu_name + when t1.bu_code = 'SC01' then 'BU' + when t1.bu_code <> 'SC01' and t2.bm_name = 'BCBH' then 'BU' + when t1.bu_code <> 'SC01' then t1.bu_name +end as channel +from dm.dm_td_org t1 +left join dws.dws_td_bu_active t2 +on t1.bu_name = t2.bu_name +where t1.yyyymm in ( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) +) +--Family粒度和Brand粒度的映射表 +,product_wide as ( +select distinct +prd_family_cd, +prd_brand_cd +from cdw_dwd_dim_product_wide +) +--内部Brand粒度与外部pack_cod的映射表 +,imscode_azcode as ( +select distinct +brandcode, +case when length(ims_pack_cod) < 12 and ims_pack_cod REGEXP '^[0-9]' then right(concat('00000000000',ims_pack_cod),12) else ims_pack_cod end as ims_pack_cod +from dwd.dwd_td_imscode_azcode +) +--综合上面的几个表,得到KA_flag、target_ins_level、channel、目标机构Flag +,target_hp_all as ( +select + distinct + t1.inst_code, + t1.ka_flag, + t1.target_ins_level, + t2.channel, + t5.MARKET +from + td_territory_inst t1 + inner join td_org t2 on t1.trty_code = t2.mr_trty_code + left join product_wide t3 on t3.prd_family_cd = t1.family_code + left join imscode_azcode t4 on t3.prd_brand_cd = t4.brandcode + left join pack_market t5 on t4.ims_pack_cod = t5.pack_cod +where t5.MARKET is not null +) +--target_hp_all里一个机构一个市场对应了多个属性,这里按优先级依次取唯一值 +--ka_flag +,ka_flag1 as ( +select distinct +inst_code, +MARKET, +ka_flag +from target_hp_all +) +,ka_flag2 as ( +select +inst_code, +MARKET, +ka_flag, +row_number() over(partition by inst_code,market + order by case when ka_flag = 'KA' then 1 + ELSE 2 end asc) as RN +from ka_flag1 +) +,ka_flag_final as ( +select +inst_code, +MARKET, +ka_flag +from ka_flag2 +where RN = 1 +) +--target_ins_level不取唯一值 +--加个hardcoding,ONC Market和ALL Market设置成NA +,target_ins_level1 as ( +select distinct +inst_code, +MARKET, +case when MARKET in ('AIA ALL Market','ONC Market') then 'NA' + else target_ins_level +end as target_ins_level +from target_hp_all +) +,target_ins_level_final as ( +select distinct +inst_code, +MARKET, +target_ins_level +from target_ins_level1 +) +--target_hp_all里一个机构一个市场对应了多个属性,这里按优先级依次取唯一值 +--Channel +,Channel1 as ( +select distinct +inst_code, +MARKET, +channel +from target_hp_all +) +,channel2 as ( +select +inst_code, +MARKET, +channel, +row_number() over(partition by inst_code,market + order by case when channel = 'BU' then 1 + when channel = 'BBU_County' then 2 + when channel = 'CHC' then 3 + when channel = 'Eagle' then 4 + ELSE 5 end asc) as RN +from channel1 +) +,channel_final as ( +select +inst_code, +MARKET, +channel +from channel2 +where RN = 1 +) +--确定唯一值后重新放一起 +,target_hp1 as ( +select distinct +inst_code, +MARKET +from target_hp_all +) +,target_hp as ( +select t1.inst_code, +t1.market, +t2.ka_flag, +t3.target_ins_level, +t4.channel +from target_hp1 t1 +left join ka_flag_final t2 +on t1.inst_code = t2.inst_code +and t1.market = t2.market +left join target_ins_level_final t3 +on t1.inst_code = t3.inst_code +and t1.market = t3.market +left join channel_final t4 +on t1.inst_code = t4.inst_code +and t1.market = t4.market +) + +--获取Dragon_type +--判断Dragon_type是否为County +,county as ( +select distinct inst_code,county_tier_desc +from dm.dm_td_institution +) +--判断另外2种 +-- 20250825修改 +,dragon_type as ( +select src_hcc_code as inst_code, +src_prod_code as family_code, +max(is_core) is_core +from cdw_dwd_dwd_hospital_classification +where active_status = 1 +and src_sales_cycle = (select key_value from dm.dm_td_date_config where key_code = 'pfmc_cvh') +group by src_hcc_code, +src_prod_code +) +--将Family_code转为pack_cod +,dragon_type_market1 as ( +select distinct +t1.inst_code, +t1.is_core, +t4.market +from dragon_type t1 +left join cdw_dwd_dim_product_wide t2 +on t1.family_code = t2.prd_family_cd +left join dwd.dwd_td_imscode_azcode t3 +on t2.prd_brand_cd = t3.brandcode +left join pack_market t4 +on t3.ims_pack_cod = t4.pack_cod +where t4.market is not null +) +--按优先级取唯一值 +,dragon_type_market2 as ( +select distinct +inst_code, +is_core, +market, +row_number() over(partition by inst_code,market + order by case when is_core = 'CORE' then 1 + when is_core = 'EMERGING' then 2 + else 3 end asc) as RN +from dragon_type_market1 +) +,dragon_type_market as ( +select distinct +inst_code, +is_core, +market +from dragon_type_market2 +where RN = 1 +) +--综合前面几个表,得出dragon_flag +,dragon_flag1 as ( +select distinct +t0.inst_code, +t0.market, +case when t1.county_tier_desc in ('County','County level city') then 'County' + when t2.is_core is null or length(t2.is_core) = 0 then 'Others' + else t2.is_core +end as dragon_flag +from target_hp t0 +left join county t1 +on t0.inst_code = t1.inst_code +left join dragon_type_market t2 +on t0.inst_code = t2.inst_code +and t0.MARKET = t2.MARKET +) +--按优先级取唯一值 +,dragon_flag2 as ( +select inst_code, +market, +dragon_flag, +row_number() over(partition by inst_code,market + order by case when dragon_flag = 'CORE' then 1 + when dragon_flag = 'EMERGING' then 2 + when dragon_flag = 'County' then 3 + else 4 end asc) as RN +from dragon_flag1 +) +,dragon_flag as ( +select inst_code, +market, +dragon_flag +from dragon_flag2 +where RN = 1 +) + +--下面是为了把其他渠道并进来 +,other_data_source as ( +select explode(array('IQVIA-CHPA(Monthly)','XH Data(Quarterly)','EC(Monthly)','Retail(Quarterly)','CHC(Quarterly)','THC(Quarterly)','IQVIA-COUNTY(Quarterly)')) +) +,col as ( +select '' as inst_code, +'' as MARKET, +'' as is_target_hp, +'' as sub_channel, +'' as dragon_flag, +'' as ka_flag, +'' as target_ins_level +) + +,temp_1 as ( +select distinct +case when t1.inst_code is null or t1.inst_code = '' then 'ROC' + else t1.inst_code +end as inst_code, +t1.MARKET, +case when t2.inst_code is null then 'N' else 'Y' end as is_target_hp, +case when t2.channel = 'BU' and geo.county_tier_desc in ('County','County level city') then 'BU_County' + when t2.channel = 'BU' and geo.county_tier_desc in ('City-3b','City-4a','City-4b') then 'BU_Emerging' + when t2.channel = 'BU' and t3.dragon_flag = 'CORE' then 'BU_Core' + when t2.channel = 'BU' then 'BU_Emerging' + when t2.channel in ('Eagle','CHC','BBU_County') then t2.channel + when t2.inst_code is null then 'NON_TARGET' + else 'NA' +end as sub_channel, +case when t3.dragon_flag is null then 'NON_TARGET' + else t3.dragon_flag +end as dragon_flag, +case when t2.ka_flag is null then 'NON_TARGET' + else t2.ka_flag +end as ka_flag, +case when t2.target_ins_level is null then 'NON_TARGET' + else t2.target_ins_level +end as target_ins_level, +'AIA(Monthly)' as DATA_SOURCE +from sales t1 +left join target_hp t2 +on t1.inst_code = t2.inst_code +and t1.MARKET = t2.MARKET +left join dragon_flag t3 +on t1.inst_code = t3.inst_code +and t1.MARKET = t3.MARKET +left join dm.dm_td_institution inst +on t1.inst_code =inst.inst_code +left join dm.dm_td_geography geo +on inst.county_code = geo.geo_key +union all +select * +from col +cross join other_data_source +) +,sub_channel_rank as ( +select distinct SUB_CHANNELSTD,SUB_CHANNEL_ORDER +from dm.dm_td_sd_channel +) + + +select t1.*,NVL(t2.SUB_CHANNEL_ORDER,100) as SUB_CHANNEL_ORDER +from temp_1 t1 +left join sub_channel_rank t2 +on t1.sub_channel = t2.SUB_CHANNELSTD diff --git a/CHC/01 dm_chc_pack_property.sql b/CHC/01 dm_chc_pack_property.sql new file mode 100644 index 0000000..da8ae3b --- /dev/null +++ b/CHC/01 dm_chc_pack_property.sql @@ -0,0 +1,231 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE dm.dm_chc_pack_property ( +-- PACK_COD STRING, +-- pack_des STRING, +-- stgh_des STRING, +-- pack_lch STRING, +-- PROD_COD STRING, +-- prod_des STRING, +-- prod_des_c STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- cmps_cod STRING, +-- cmps_des STRING, +-- cmps_des_c STRING, +-- atc1_cod STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_cod STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_cod STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_cod STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_cod STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_cod STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_cod STRING, +-- app3_des STRING, +-- app3_des_c STRING, +-- bio_desc STRING, +-- gene_orig_desc STRING, +-- eth_otc_desc STRING, +-- nrdl_desc STRING, +-- NRDL_Entry_Date STRING, +-- edl_desc STRING, +-- tcm_desc STRING, +-- paed_desc STRING, +-- gqce_desc STRING, +-- vbp_desc STRING, +-- manu_cod STRING, +-- manu_des STRING, +-- manu_des_c STRING, +-- mnfl_cod STRING, +-- mnfl_des STRING, +-- corp_cod STRING, +-- corp_des STRING, +-- corp_des_c STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_Related STRING, +-- countingunit STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_aia_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_aia_pack_property'; + +-- COMMAND ---------- + +-- update dwd.dwd_gnd_ext_chc_pack_property +-- set iqvia_pack_code = if( iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',iqvia_pack_code),12),iqvia_pack_code) +-- ,iqvia_prod_code = right(concat('000000000',iqvia_prod_code),9) + +-- COMMAND ---------- + +create or replace temporary view dwd_pack_property +as +select distinct + iqvia_pack_code , + iqvia_prod_code , + pack_cod , + 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_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 , + prod_des , + prod_des_c , + tcm_desc , + vbp_desc , + -- builtinarchivedate , + source_file_path , + source_file_name , + etl_insert_dt , + countingunit +from dwd.dwd_gnd_dept_pack_property + +-- COMMAND ---------- + +-- create or replace table dm.dm_chc_pack_property +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_chc_pack_property' +-- as +insert overwrite table dm.dm_chc_pack_property +WITH dedup_l AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY iqvia_pack_code ORDER BY iqvia_pack_code) AS rn + FROM dwd_pack_property + QUALIFY rn = 1 +), +dedup_r AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY PACK_COD ORDER BY PACK_COD) AS rn + FROM tmp.tmp_ext_chpa_pack_propetry + QUALIFY rn = 1 +) +SELECT + l.iqvia_pack_code AS PACK_COD, + + -- Pack / Product 描述 + COALESCE(r.PACK_DES, l.pack_des) AS pack_des, + COALESCE(r.STGH_DES, l.stgh_des) AS stgh_des, + COALESCE(r.PACK_LCH, l.pack_lch) AS pack_lch, + COALESCE(r.PROD_COD, l.iqvia_prod_code) AS PROD_COD, + COALESCE(r.PROD_DES, l.prod_des) AS prod_des, + COALESCE(r.PROD_DES_C, l.prod_des_c) AS prod_des_c, + + -- 右表独有:Family + r.Family_Code, + r.Family_Name, + + -- 成分 + COALESCE(r.CMPS_COD, l.cmps_cod) AS cmps_cod, + COALESCE(r.CMPS_DES, l.cmps_des) AS cmps_des, + COALESCE(r.CMPS_DES_C, l.cmps_des_c) AS cmps_des_c, + + -- ATC + COALESCE(r.ATC1_COD, l.atc1_cod) AS atc1_cod, + COALESCE(r.atc1_des, l.atc1_des) AS atc1_des, + COALESCE(r.atc1_des_c, l.atc1_des_c) AS atc1_des_c, + COALESCE(r.ATC2_COD, l.atc2_cod) AS atc2_cod, + COALESCE(r.atc2_des, l.atc2_des) AS atc2_des, + COALESCE(r.atc2_des_c, l.atc2_des_c) AS atc2_des_c, + COALESCE(r.ATC3_COD, l.atc3_cod) AS atc3_cod, + COALESCE(r.atc3_des, l.atc3_des) AS atc3_des, + COALESCE(r.atc3_des_c, l.atc3_des_c) AS atc3_des_c, + COALESCE(r.ATC4_COD, l.atc4_cod) AS atc4_cod, + COALESCE(r.atc4_des, l.atc4_des) AS atc4_des, + COALESCE(r.atc4_des_c, l.atc4_des_c) AS atc4_des_c, + + -- APP + COALESCE(r.APP1_COD, l.app1_cod) AS app1_cod, + COALESCE(r.app1_des, l.app1_des) AS app1_des, + COALESCE(r.app1_des_c, l.app1_des_c) AS app1_des_c, + COALESCE(r.APP2_COD, l.app2_cod) AS app2_cod, + COALESCE(r.app2_des, l.app2_des) AS app2_des, + COALESCE(r.app2_des_c, l.app2_des_c) AS app2_des_c, + COALESCE(r.APP3_COD, l.app3_cod) AS app3_cod, + COALESCE(r.app3_des, l.app3_des) AS app3_des, + COALESCE(r.app3_des_c, l.app3_des_c) AS app3_des_c, + + -- 标志位 + COALESCE(r.BIO_DESC, l.bio_desc) AS bio_desc, + COALESCE(r.GENE_ORIG_DESC, l.gene_orig_desc) AS gene_orig_desc, + COALESCE(r.ETH_OTC_DESC, l.eth_otc_desc) AS eth_otc_desc, + COALESCE(r.NRDL_DESC, l.nrdl_desc) AS nrdl_desc, + r.NRDL_Entry_Date, + COALESCE(r.EDL_DESC, l.edl_desc) AS edl_desc, + COALESCE(r.TCM_DESC, l.tcm_desc) AS tcm_desc, + COALESCE(r.PAED_DESC, l.paed_desc) AS paed_desc, + COALESCE(r.GQCE_DESC, l.gqce_desc) AS gqce_desc, + COALESCE(r.VBP_DESC, l.vbp_desc) AS vbp_desc, + + -- 厂商 + COALESCE(r.MANU_COD, l.manu_cod) AS manu_cod, + COALESCE(r.MANU_DES, l.manu_des) AS manu_des, + COALESCE(r.MANU_DES_C, l.manu_des_c) AS manu_des_c, + COALESCE(r.MNFL_COD, l.mnfl_cod) AS mnfl_cod, + COALESCE(r.MNFL_DES, l.mnfl_des) AS mnfl_des, + + -- 公司 + COALESCE(r.CORP_COD, l.corp_cod) AS corp_cod, + COALESCE(r.CORP_DES, l.corp_des) AS corp_des, + COALESCE(r.CORP_DES_C, l.corp_des_c) AS corp_des_c, + + -- 右表独有:品牌 / AZ 标志 + r.BrandType, + r.IS_AZ, + r.AZ_MAIN, + r.AZ_Related, + -- 左表独有 + l.countingunit, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT +FROM dedup_l l +LEFT JOIN dedup_r r + ON l.iqvia_pack_code = r.PACK_COD \ No newline at end of file diff --git a/CHC/02 DM_TF_EXT_CHC_SALES.sql b/CHC/02 DM_TF_EXT_CHC_SALES.sql new file mode 100644 index 0000000..cf88a3c --- /dev/null +++ b/CHC/02 DM_TF_EXT_CHC_SALES.sql @@ -0,0 +1,418 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_CHC_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chc_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chc_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RAW_DATA +AS +SELECT + CASE + WHEN SUBSTRING(YQ, 5, 2) = 'Q1' + THEN CONCAT (SUBSTRING(YQ, 1, 4), '03') + WHEN SUBSTRING(YQ, 5, 2) = 'Q2' + THEN CONCAT (SUBSTRING(YQ, 1, 4), '06') + WHEN SUBSTRING(YQ, 5, 2) = 'Q3' + THEN CONCAT (SUBSTRING(YQ, 1, 4), '09') + WHEN SUBSTRING(YQ, 5, 2) = 'Q4' + THEN CONCAT (SUBSTRING(YQ, 1, 4), '12') + ELSE YQ + END AS YQ, + CITY_C, + PACK_COD, + PROD_COD, + VALUE, + TOTALUNIT, + COUNTINGUNIT +FROM + DWD.DWD_GND_CHC_RAWDATA +WHERE + YEAR >= '2021' + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FILTER_YM +AS +SELECT + MAX(YQ) AS MAX_YYYYMM, + CONCAT(CAST(FLOOR(MAX(YQ)/100-1) AS STRING),'01') AS MIN_YYYYMM +FROM + RAW_DATA + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW CORP_DATA +AS +SELECT + PACK_COD, + CORP_COD, + CORP_DES +FROM + DM.DM_IMS_TD_PACK_PROPERTY +GROUP BY + PACK_COD, + CORP_COD, + CORP_DES + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW PACK_DATA +AS +SELECT + DISTINCT + IQVIA_PACK_CODE, + IQVIA_PROD_CODE, + PACK_COD, + 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_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, + PROD_DES, + PROD_DES_C, + TCM_DESC, + VBP_DESC, + -- BUILTINARCHIVEDATE, + SOURCE_FILE_PATH, + SOURCE_FILE_NAME, + ETL_INSERT_DT, + COUNTINGUNIT +FROM + DWD.dwd_gnd_dept_pack_property + +-- COMMAND ---------- + +--CHC本身唯独表 存在CORP_COD以及 CORP_DES 与手工数据不一致的问题 +CREATE OR REPLACE TEMPORARY VIEW PACK_WIHT_CORP_DATA +AS +SELECT + T1.PACK_COD, + T1.IQVIA_PACK_CODE, + T1.COUNTINGUNIT, + COALESCE(T2.CORP_COD, T1.CORP_COD) AS CORP_COD, + COALESCE(T2.CORP_DES, T1.CORP_DES) AS CORP_DES +FROM + PACK_DATA T1 +LEFT JOIN + CORP_DATA T2 +ON + T1.IQVIA_PACK_CODE = T2.PACK_COD + +-- COMMAND ---------- + +--GEO相关信息 在CHPA中没有 苏州、无锡、福州等数据,根据业务反馈,按照 CITY_C当作AUDIT_COD +CREATE OR REPLACE TEMPORARY VIEW DIM_EXCHC_GEO +AS +SELECT + T1.CITY_E, + CONCAT (T1.CITY_C, '市') AS CITY_C, + UPPER(NVL (T2.AUDIT_COD, T1.CITY_E)) AS AUDIT_COD +FROM + DWD.DWD_GND_EXT_CHC_GEO T1 +LEFT JOIN + DM.DM_IMS_TD_GEO T2 +ON + T1.CITY_E = T2.CITY + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RAW_DATA_WIHT_PACK_CORP_GEO_DATA +AS +SELECT + T1.YQ, + T1.CITY_C, + T3.IQVIA_PACK_CODE AS PACK_COD, + T3.CORP_COD AS CORP_COD, + C.AUDIT_COD AS AUDIT_COD, + T1.PROD_COD, + T1.VALUE, + T1.TOTALUNIT, + T1.TOTALUNIT * NVL (T3.COUNTINGUNIT, 1) AS COUNTINGUNIT +FROM + RAW_DATA T1 +LEFT JOIN + PACK_WIHT_CORP_DATA T3 +ON + T1.PACK_COD = T3.PACK_COD +LEFT JOIN + DIM_EXCHC_GEO C +ON + T1.CITY_C = C.CITY_C + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RAW_DATA_WIHT_LY +AS +SELECT + A.YQ, + A.AUDIT_COD, + A.PACK_COD, + A.CORP_COD, + SUM(A.VALUE) VALUE, + SUM(A.TOTALUNIT) TOTALUNIT, + SUM(A.COUNTINGUNIT) COUNTINGUNIT, + SUM(VALUE_LY) VALUE_LY, + SUM(TOTALUNIT_LY) TOTALUNIT_LY, + SUM(COUNTINGUNIT_LY) COUNTINGUNIT_LY +FROM + ( + SELECT + T1.YQ, + T1.AUDIT_COD, + T1.PACK_COD, + T1.CORP_COD, + T1.VALUE, + T1.TOTALUNIT, + T1.COUNTINGUNIT, + 0 VALUE_LY, + 0 TOTALUNIT_LY, + 0 COUNTINGUNIT_LY + FROM + RAW_DATA_WIHT_PACK_CORP_GEO_DATA T1 + UNION ALL + SELECT + CAST(T1.YQ + 100 AS INT), + T1.AUDIT_COD, + T1.PACK_COD, + T1.CORP_COD, + 0 VALUE, + 0 TOTALUNIT, + 0 COUNTINGUNIT, + T1.VALUE VALUE_LY, + T1.TOTALUNIT TOTALUNIT_LY, + T1.COUNTINGUNIT COUNTINGUNIT_LY + FROM + RAW_DATA_WIHT_PACK_CORP_GEO_DATA AS T1 + CROSS JOIN + FILTER_YM AS T2 + WHERE + T1.YQ + 100 <= T2.MAX_YYYYMM + ) A +GROUP BY + A.YQ, + A.AUDIT_COD, + A.PACK_COD, + A.CORP_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RAW_DATA_FINAL +AS +SELECT + T1.YQ AS YYYYMM, + T1.AUDIT_COD, + T1.PACK_COD, + T1.CORP_COD, + SUM(TOTALUNIT) AS SALES_UNIT_CAL, -- TOTALUNIT, + SUM(TOTALUNIT_LY) AS SALES_UNIT_CAL_LY, --TOTALUNIT_LY, + SUM(VALUE) AS SALES_VALUE_CAL, --VALUE, + SUM(VALUE_LY) AS SALES_VALUE_CAL_LY, + SUM(COUNTINGUNIT) AS CONUTING_UNIT, --COUNTINGUNIT, + SUM(COUNTINGUNIT_LY) AS CONUTING_UNIT_LY, + 'CHC(Quarterly)' AS DATA_SOURCE +FROM + RAW_DATA_WIHT_LY T1 +GROUP BY + T1.YQ, + T1.AUDIT_COD, + T1.PACK_COD, + T1.CORP_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DM_TF_EXT_CHC_SALES AS +SELECT + A.YYYYMM, + A.PACK_COD AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'CHC(Quarterly)' DATA_SOURCE, + ------------------------------------- + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用E +------------------------------------- +FROM + RAW_DATA_FINAL A +WHERE + YYYYMM + >= ( + SELECT + CAST((LEFT(MAX(YYYYMM), 4) - 3) * 100 + 1 AS INT) + FROM + RAW_DATA_FINAL + ) + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_CHC_SALES ( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) + SELECT + YYYYMM, + NVL(NULLIF(PACK_CODE, ''), CONCAT('PACK_CODE_', DATA_SOURCE)) AS PACK_CODE, + NVL(NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM_TF_EXT_CHC_SALES; \ No newline at end of file diff --git a/CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql b/CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql new file mode 100644 index 0000000..fe11e4c --- /dev/null +++ b/CHC/03 DM_TD_EXT_CHC_PACK_PROPERTY.sql @@ -0,0 +1,147 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_PACK_PROPERTY +-- ( +-- -- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- -- MARKET STRING, +-- -- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- -- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- -- CLASS STRING, +-- -- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack_property'; + + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_PACK_PROPERTY +SELECT + -- MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + null as VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + -- MARKET, + -- KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + -- AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + -- CLASS, + -- NULL AS MARKET_RATIO, + COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_CHC_PACK_PROPERTY; \ No newline at end of file diff --git a/CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql b/CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql new file mode 100644 index 0000000..feabc38 --- /dev/null +++ b/CHC/04 DM_TD_EXT_CHC_PACK2MARKET.sql @@ -0,0 +1,327 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_chc_PACK2MARKET_KEYCOMPETITOR ( +-- KEY_COMPETITOR STRING, +-- MARKET STRING, +-- PACK_CODE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market_keycompetitor'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market_keycompetitor'; + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE DM.DM_TD_EXT_chc_PACK2MARKET_CLASS ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CLASS STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market_class'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market_class'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_PACK2MARKET_KEYCOMPETITOR +WITH kc AS ( + SELECT + keycompetitor, no, + ROW_NUMBER() OVER (ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 + END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1, + ATC1_Code, ATC2_Code, ATC3_Code, ATC4_Code, + NFC1_Code, NFC2_Code, NFC3_Code, + corporation_code, Manufacturer_Code, + Product_Code, Pack_Code, Strength, Molecule_Code, market + FROM dwd.dwd_gnd_ims_tblkeycompetitor +), +joined AS ( + SELECT + /*+ BROADCAST(kc) */ + COALESCE(kc.keycompetitor, 'OTHERS') AS Key_Competitor, -- ✅ UPDATE 逻辑内联 + t1.market, t1.PACK_CODE + /*bug 调试区 + , + kc.no, + kc.no1, + t1.PROD_COD, t1.CMPS_COD, t1.CMPS_DES, + t1.ATC1_COD, t1.ATC2_COD, t1.ATC3_COD, t1.ATC4_COD, + t1.APP1_COD, t1.APP2_COD, t1.APP3_COD, + t1.BIO_DESC, t1.GENE_ORIG_DESC, t1.ETH_OTC_DESC, + t1.NRDL_DESC, t1.NRDL_Entry_Date, t1.EDL_DESC, t1.TCM_DESC, + t1.PAED_DESC, t1.GQCE_DESC, t1.VBP_DESC, + t1.MANU_COD, t1.MANU_DES, t1.MNFL_COD, t1.MNFL_DES, + t1.CORP_COD, t1.CORP_DES, t1.BrandType, t1.bu, t1.Market_Ratio + */ + ,ROW_NUMBER() OVER ( + PARTITION BY t1.market, t1.PACK_CODE, t1.PROD_CODE + ORDER BY kc.no1 DESC, kc.no DESC + ) AS _rn + FROM DM.DM_TD_EXT_CHC_PACK2MARKET t1 + LEFT JOIN kc + ON (kc.ATC1_Code IS NULL OR t1.ATC1_CODE = kc.ATC1_Code) + AND (kc.ATC2_Code IS NULL OR t1.ATC2_CODE = kc.ATC2_Code) + AND (kc.ATC3_Code IS NULL OR t1.ATC3_CODE = kc.ATC3_Code) + AND (kc.ATC4_Code IS NULL OR t1.ATC4_CODE = kc.ATC4_Code) + AND (kc.NFC1_Code IS NULL OR t1.APP1_CODE = kc.NFC1_Code) + AND (kc.NFC2_Code IS NULL OR t1.APP2_CODE = kc.NFC2_Code) + AND (kc.NFC3_Code IS NULL OR t1.APP3_CODE = kc.NFC3_Code) + AND (kc.corporation_code IS NULL OR t1.CORP_CODE = kc.corporation_code) + AND (kc.Manufacturer_Code IS NULL OR t1.MANU_CODE = kc.Manufacturer_Code) + AND (kc.Product_Code IS NULL OR t1.PROD_CODE = kc.Product_Code) + AND (kc.Pack_Code IS NULL OR t1.PACK_CODE = kc.Pack_Code) + AND (kc.Strength IS NULL OR t1.STGH_DESC = kc.Strength) + AND (kc.Molecule_Code IS NULL OR t1.CMPS_CODE = kc.Molecule_Code) + AND (kc.market IS NULL OR t1.market = kc.market) +) +SELECT distinct Key_Competitor,market,pack_code +FROM joined +WHERE _rn = 1; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_PACK2MARKET_CLASS +SELECT + /*+ BROADCAST(T2) */ + DISTINCT + T1.MARKET, + T1.PACK_CODE, + COALESCE( T2.CLASS, 'OTHERS') AS CLASS +FROM DM.DM_TD_EXT_CHC_PACK2MARKET T1 +LEFT JOIN DWD.DWD_GND_TBLCLASS T2 + ON (T2.MARKET IS NULL OR T1.MARKET = T2.MARKET) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) \ No newline at end of file diff --git a/CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql b/CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql new file mode 100644 index 0000000..cc48748 --- /dev/null +++ b/CHC/05 DM_TD_EXT_CHC_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql b/CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..31d5aa6 --- /dev/null +++ b/CHC/06 DM_TD_EXT_CHC_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql b/CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..08e6199 --- /dev/null +++ b/CHC/07 DM_TD_EXT_CHC_MARKET_PACK_MAPPING.sql @@ -0,0 +1,71 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHC_MARKET_PACK_MAPPING + SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T4.CLASS, + T5.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.DM_TD_EXT_CHC_PACK2MARKET T1 + LEFT JOIN DM.DM_TD_EXT_CHC_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET + AND T1.PACK_CODE = T2.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_CHC_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET + AND T1.PACK_CODE = T3.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_CHC_PACK2MARKET_CLASS T4 + ON T1.PACK_CODE = T4.PACK_CODE + AND T1.MARKET = T4.MARKET + LEFT JOIN DM.DM_TD_EXT_CHC_PACK2MARKET_KEYCOMPETITOR T5 + ON T1.PACK_CODE = T5.PACK_CODE + AND T1.MARKET = T5.MARKET + WHERE + UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/CHPA/01 dwd_ims_atc_hierarchy.sql b/CHPA/01 dwd_ims_atc_hierarchy.sql new file mode 100644 index 0000000..ced8853 --- /dev/null +++ b/CHPA/01 dwd_ims_atc_hierarchy.sql @@ -0,0 +1,42 @@ +-- Databricks notebook source +--dwd to dws +--清洗数据的操作 + + +---处理宽维度表 202108 +--PRINT(GETDATE()) + +---ATC 处理成宽表 + +insert overwrite table dwd.dwd_ims_atc_hierarchy +SELECT * --into DIM_ATC_Hierarchy + FROM (SELECT Therapeutic_ID AS ATC1_ID, + Therapeutic_Code AS ATC1_CODE, + Therapeutic_Name AS ATC1_DES + FROM dwd.dwd_ims_td_therapeutic_class ATC + WHERE ATC. Therapeutic_Level = '1') ATC1 + + LEFT JOIN (SELECT Therapeutic_ID AS ATC2_ID, + Therapeutic_Code AS ATC2_CODE, + Therapeutic_Name AS ATC2_DES + FROM dwd.dwd_ims_td_therapeutic_class ATC + WHERE ATC. Therapeutic_Level = '2') ATC2 + ON ATC1. ATC1_CODE = + LEFT (ATC2. ATC2_CODE, 1) + + LEFT JOIN (SELECT Therapeutic_ID AS ATC3_ID, + Therapeutic_Code AS ATC3_CODE, + Therapeutic_Name AS ATC3_DES + FROM dwd.dwd_ims_td_therapeutic_class ATC + WHERE ATC. Therapeutic_Level = '3') ATC3 + ON ATC2. ATC2_CODE = + LEFT (ATC3. ATC3_CODE, 3) + + LEFT JOIN (SELECT Therapeutic_ID AS ATC4_ID, + Therapeutic_Code AS ATC4_CODE, + Therapeutic_Name AS ATC4_DES + FROM dwd.dwd_ims_td_therapeutic_class ATC + WHERE ATC. Therapeutic_Level = '4') ATC4 + ON ATC3. ATC3_CODE = + LEFT (ATC4. ATC4_CODE, 4) +; \ No newline at end of file diff --git a/CHPA/01 dwd_ims_nfc_hierarchy.sql b/CHPA/01 dwd_ims_nfc_hierarchy.sql new file mode 100644 index 0000000..8adc695 --- /dev/null +++ b/CHPA/01 dwd_ims_nfc_hierarchy.sql @@ -0,0 +1,26 @@ +-- Databricks notebook source +--NFC 处理成宽表 +insert overwrite table dwd.dwd_ims_nfc_hierarchy +SELECT * + FROM (SELECT NewFormClass_ID as NFC1_ID, + NewFormClass_Code as NFC1_CODE, + NewFormClass_Name as NFC1_DES + FROM dwd.dwd_ims_td_new_form_class NFC + WHERE NewFormClass_Level = '1') NFC1 + + LEFT JOIN (SELECT NewFormClass_ID as NFC2_ID, + NewFormClass_Code as NFC2_CODE, + NewFormClass_Name as NFC2_DES + FROM dwd.dwd_ims_td_new_form_class NFC + WHERE NewFormClass_Level = '2') NFC2 + ON NFC1.NFC1_CODE = + LEFT (NFC2.NFC2_CODE, 1) + + LEFT JOIN (SELECT NewFormClass_ID as NFC3_ID, + NewFormClass_Code as NFC3_CODE, + NewFormClass_Name as NFC3_DES + FROM dwd.dwd_ims_td_new_form_class NFC + WHERE NewFormClass_Level = '3') NFC3 + ON NFC2.NFC2_CODE = + LEFT (NFC3.NFC3_CODE, 2) +; \ No newline at end of file diff --git a/CHPA/01 dwd_ims_td_manufacturer_corp.sql b/CHPA/01 dwd_ims_td_manufacturer_corp.sql new file mode 100644 index 0000000..94e6cc3 --- /dev/null +++ b/CHPA/01 dwd_ims_td_manufacturer_corp.sql @@ -0,0 +1,24 @@ +-- Databricks notebook source +----------------------------------------------------------------------------------------------------------------- +--修改时间:20240904 +--修改人:FanXujia +--修改内容: +--id为93的数,manufacturer_abbr不是SH/了,所以不能使用这个语句更新了。 +------------------------------------------------------------------------ +--MANU维度表,ManufacturerType_ID中存在为0的数据,关联不出对应的ManufacturerType +--经过检查,ManufacturerType_ID = 0 的数据,其下属子集或者本身为MNC,所以将其修改成2,让报告上能正常识别成MNC +UPDATE dwd.dwd_ims_td_manufacturer SET ManufacturerType_ID = 2 WHERE ManufacturerType_ID = 0; +-- SH/的一行数据 中 / 为转义符,后面的数据不能有效识别,需要手动更新 +-- update dwd.dwd_ims_td_manufacturer set manufacturer_abbr ='SH/' where manufacturer_id = '93'; +-- update dwd.dwd_ims_td_manufacturer set corporation_id ='93' where manufacturer_id = '93'; +-- update dwd.dwd_ims_td_manufacturer set corporation_code ='00221' where manufacturer_id = '93'; +-- update dwd.dwd_ims_td_manufacturer set manufacturertype_id ='1' where manufacturer_id = '93'; +----------------------------------------------------------------------------------------------------------------- + +--处理manu跟corp的mapping关系 +insert overwrite table dwd.dwd_ims_td_manufacturer_corp +SELECT T1.*,T2.Corporation_Code AS CORP_MASTER_CODE,T2.Manufacturer_Abbr AS CORP_ABBR,T2.Manufacturer_Name AS CORP_DES +FROM dwd.dwd_ims_td_manufacturer T1 +LEFT JOIN dwd.dwd_ims_td_manufacturer T2 +ON T1.Corporation_Code = T2.Manufacturer_CODE +; \ No newline at end of file diff --git a/CHPA/01 dwd_ims_td_pack_property.sql b/CHPA/01 dwd_ims_td_pack_property.sql new file mode 100644 index 0000000..ab4da1a --- /dev/null +++ b/CHPA/01 dwd_ims_td_pack_property.sql @@ -0,0 +1,89 @@ +-- Databricks notebook source + +-------使用新的DIM表,生成PackProfile,保证后续的逻辑 +-- 20260119 依赖前面 dwd.dwd_ims_nfc_hierarchy、dwd.dwd_ims_atc_hierarchy、dwd.dwd_ims_td_manufacturer_corp +-- 20260119 依赖上面补0 dwd.dwd_gnd_ims_tblbrandtype + +insert overwrite table dwd.dwd_ims_td_pack_property +select DISTINCT +if( PACK.Pack_Code REGEXP '^[0-9]',right(concat('000000000000',PACK.Pack_Code),12),PACK.Pack_Code) as PACK_COD, --RIGHT(concat('0000000',PACK.Pack_Code),7) +PACK.Pack_Description AS PACK_DES, +PACK.STRENGTH AS STGH_DES, +concat('Y',LEFT(PACK.LAUNCHTIME,4),'M',RIGHT(PACK.LAUNCHTIME,2)) AS PACK_LCH, + +RIGHT(concat('000000000',PROD.Product_Code),9) AS PROD_COD, --RIGHT(concat('00000',PROD.Product_Code),5) +RIGHT(concat('000000',MOLE.MoleCompCode),6) AS CMPS_COD, +MOLE.MoleCompDesc AS CMPS_DES, + +ATCH.ATC1_CODE AS ATC1_COD, +ATCH.ATC2_CODE AS ATC2_COD, +ATCH.ATC3_CODE AS ATC3_COD, +ATCH.ATC4_CODE AS ATC4_COD, + +NFCH.NFC1_CODE AS APP1_COD, +NFCH.NFC2_CODE AS APP2_COD, +NFCH.NFC3_CODE AS APP3_COD, + +MOLE.BIO AS BIO_DESC, +MOLE.Gene_Orig AS GENE_ORIG_DESC, +MOLE.Rx_Flag AS ETH_OTC_DESC, +MOLE.NRDL AS NRDL_DESC, +MOLE.NRDL_Entry_Date, +MOLE.EDL AS EDL_DESC, +MOLE.TCMEX AS TCM_DESC, +MOLE.PAED AS PAED_DESC, +MOLE.GQCE AS GQCE_DESC, +MOLE.VBP AS VBP_DESC, +MANU.Manufacturer_Abbr AS MANU_COD, +MANU.Manufacturer_Name AS MANU_DES, +MANUT.ManufacturerType_CODE AS MNFL_COD, +MANUT.ManufacturerType_Name AS MNFL_DES, +MANU.CORP_ABBR AS CORP_COD, +MANU.CORP_DES AS CORP_DES, +BRANDTYPE.Brand_Type AS BrandType +from dwd.dwd_ims_td_pack PACK +LEFT JOIN dwd.dwd_ims_td_product PROD ON PACK.Product_ID = PROD.Product_ID +LEFT JOIN dwd.dwd_ims_td_new_form_class NFC ON PACK.NewFormClass_ID = NFC.NewFormClass_ID +LEFT JOIN dwd.dwd_ims_nfc_hierarchy NFCH ON NFC.NewFormClass_Code = NFCH.NFC3_CODE +LEFT JOIN dwd.dwd_ims_td_therapeutic_class ATC ON PACK.Therapeutic_ID = ATC.Therapeutic_ID +LEFT JOIN dwd.dwd_ims_atc_hierarchy ATCH ON ATC.Therapeutic_Code = ATCH.ATC4_CODE +LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE ON PACK.Pack_ID = MOLE.Pack_ID +LEFT JOIN dwd.dwd_ims_td_manufacturer_corp MANU ON PROD.Manufacturer_ID = MANU.Manufacturer_ID +LEFT JOIN dwd.dwd_ims_td_manufacturertype MANUT ON MANU.ManufacturerType_ID = MANUT.ManufacturerType_ID +LEFT JOIN dwd.dwd_gnd_ims_tblbrandtype BRANDTYPE ON PACK.Pack_Code = BRANDTYPE.PACK_COD +; + +update dwd.dwd_ims_td_pack_property set CORP_COD ='' where CORP_COD is null ; +update dwd.dwd_ims_td_pack_property set STGH_DES ='' where STGH_DES is null ; + +-- COMMAND ---------- + +-- 20260119 修改 dwd.dwd_ims_td_pack_property 我感觉可以拉到前面去 +-- 要调研下,为什么前面没有写,而在后面写。 +--Update AZ BRANDS SCOPE---MANU的页面显示 +---by Product&Pack add in 'Fluimucil, Broncho-vaxom, Ai Rui Zhuo', by AC 202103 +update dwd.dwd_ims_td_pack_property +set CORP_COD = 'A5Z', CORP_DES = 'ASTRAZENECA GROUP' +where PROD_COD in( + select + right(concat('0000000000',PROD_COD),9) as PROD_COD --right(concat('000000',PROD_COD),5) + from dwd.dwd_gnd_tbl_corp_change where corp_cod='A5Z') +or PACK_COD in( + select + if( PACK_COD REGEXP '^[0-9]',right(concat('000000000000',PACK_COD),12),PACK_COD) as PACK_COD --right(concat('000000',PACK_COD),7) + from dwd.dwd_gnd_tbl_corp_change where corp_cod='A5Z') +-- where PROD_COD in ('97336','73148') OR PACK_COD = '0795918' +; +---by Product&Pack remove out tblAZScope.xlsx', by AC 202103 +update dwd.dwd_ims_td_pack_property +set CORP_COD = 'A5ZD', CORP_DES = 'AZDealed',MANU_COD = 'A5ZD' ,MANU_DES = 'AZDealed' +where PROD_COD in( + select + right(concat('0000000000',PROD_COD),9) as PROD_COD + from dwd.dwd_gnd_tbl_corp_change where corp_cod='A5ZD') +or PACK_COD in( + select + if( PACK_COD REGEXP '^[0-9]',right(concat('000000000000',PACK_COD),12),PACK_COD) as PACK_COD + from dwd.dwd_gnd_tbl_corp_change where corp_cod='A5ZD') +-- where PROD_COD in ('02267','14691','58423','12754','06482','97266','14164') +; \ No newline at end of file diff --git a/CHPA/01 dwd_update.sql b/CHPA/01 dwd_update.sql new file mode 100644 index 0000000..747aa69 --- /dev/null +++ b/CHPA/01 dwd_update.sql @@ -0,0 +1,32 @@ +-- Databricks notebook source +--对折算规则文件中的Pack,Mole code 补0 +--时间条件为空的,赋默认值 +--地理维度表增加KCT和ROC +UPDATE dwd.dwd_gnd_ims_tblBrandRatio +SET +PACK_COD = if( CAST(PACK_COD AS string) REGEXP '^[0-9]',right(concat('000000000000',CAST(PACK_COD AS string)),12),CAST(PACK_COD AS string)), +CMPS_COD = RIGHT(concat('000000',CAST(CMPS_COD AS string)),6), +StartTime = CASE WHEN StartTime IS NULL OR UPPER(StartTime)= 'ALL' THEN '190001' ELSE StartTime END, +EndTime = CASE WHEN EndTime IS NULL OR UPPER(EndTime)= 'ALL' THEN '209901' ELSE EndTime END +; + + +-- COMMAND ---------- + +-- 20260119 这个补0操作,可以放最前面,或者专门找个地方放。 +----确保Market和KeyCompetitor配置表中,Pack_Code,Product_Code,Molecule_Code 三个字段都已经补0 + +UPDATE dwd.dwd_gnd_ims_tblmarket +--20250428 chenwu iqivacode扩到12位,brandcode 扩到9位 +SET Pack_Code = if( Pack_Code REGEXP '^[0-9]',right(concat('000000000000',Pack_Code),12),Pack_Code) +,Product_Code = RIGHT(concat('000000000',Product_Code),9) --RIGHT(concat('00000',Product_Code),5) +,Molecule_Code = RIGHT(concat('000000',Molecule_Code),6) +; +UPDATE dwd.dwd_gnd_ims_tblkeycompetitor +SET Pack_Code = if( Pack_Code REGEXP '^[0-9]',right(concat('000000000000',Pack_Code),12),Pack_Code) +,Product_Code = RIGHT(concat('000000000',Product_Code),9) --RIGHT(concat('00000',Product_Code),5) +,Molecule_Code = RIGHT(concat('000000',Molecule_Code),6) +; +UPDATE dwd.dwd_gnd_ims_tblbrandtype +SET PACK_COD = if( PACK_COD REGEXP '^[0-9]',right(concat('000000000000',PACK_COD),12),PACK_COD) --RIGHT(concat('0000000',PACK_COD),7) +; \ No newline at end of file diff --git a/CHPA/01_FB_BLOB_TO_DWD.sql b/CHPA/01_FB_BLOB_TO_DWD.sql new file mode 100644 index 0000000..30fdf6d --- /dev/null +++ b/CHPA/01_FB_BLOB_TO_DWD.sql @@ -0,0 +1,210 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC ### 从blob读取csv文件作为chap法伯的事实表 + +-- COMMAND ---------- + +-- 源表:文件 +-- 目标表:DWD.DWD_GND_PHARBERS_PROV_FACT + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC from datetime import datetime, timedelta +-- MAGIC import pandas as pd + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC if ENVIRONMENT == PRD_ENVIRONMENT_VALUE: +-- MAGIC factsales_file_path_template = "abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +-- MAGIC elif ENVIRONMENT == TEST_ENVIRONMENT_VALUE: +-- MAGIC factsales_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 计算时间得到当天的路径 +-- MAGIC current_date = datetime.utcnow() + timedelta(hours=8) +-- MAGIC date_path = current_date.strftime("%Y/%m/%d/") +-- MAGIC base_path = factsales_file_path_template + date_path + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 路径是否存在 +-- MAGIC def path_exists(path): +-- MAGIC try: +-- MAGIC dbutils.fs.ls(path) +-- MAGIC return True +-- MAGIC except Exception as e: +-- MAGIC if "java.io.FileNotFoundException" in str(e): +-- MAGIC return False +-- MAGIC else: +-- MAGIC print(f"检查路径 {path} 时出错: {e}") +-- MAGIC raise + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 列出blob上的文件列表 +-- MAGIC def list_file_name(path): +-- MAGIC first_path_list = [i.path for i in dbutils.fs.ls(path)] +-- MAGIC second_path_list = [dbutils.fs.ls(i)[0] for i in first_path_list ] +-- MAGIC return second_path_list + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 从blob下载文件到local +-- MAGIC def download_file(file_path, local_path): +-- MAGIC # dbutils.fs.cp(file_path, local_path.replace("/dbfs", "")) +-- MAGIC dbutils.fs.cp(file_path, local_path) +-- MAGIC print(f"已下载 {file_path} 到 {local_path}") +-- MAGIC return local_path + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### 获取路径下的文件名称 +-- MAGIC - 并挑出符合条件的文件路径 + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC try: +-- MAGIC if path_exists(base_path): +-- MAGIC all_file_list = list_file_name(base_path) +-- MAGIC # 生成df来筛选内容 +-- MAGIC files_df = pd.DataFrame([{ +-- MAGIC 'path':f.path, +-- MAGIC 'modificationtime': f.modificationTime, +-- MAGIC 'name': f.name +-- MAGIC } for f in all_file_list]) +-- MAGIC print(f"{base_path} 路径存在") +-- MAGIC else: +-- MAGIC print(f"{base_path} 路径不存在") +-- MAGIC except Exception as e: +-- MAGIC print(e) + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC try: +-- MAGIC files_df = files_df.sort_values('modificationtime', ascending=False).drop_duplicates('name').sort_index() +-- MAGIC files_df = files_df[files_df['name'].str.match(r'^Pharbers_PROV_Fact.*\.csv$')] +-- MAGIC files_df +-- MAGIC except Exception as e: +-- MAGIC print(e) + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### 读取文件内容 + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC import os + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 下载数据到local +-- MAGIC try: +-- MAGIC if files_df['path'].tolist(): +-- MAGIC # 如果列表不为空 +-- MAGIC df_all = [] +-- MAGIC for file in files_df['path'].tolist(): +-- MAGIC local_path = download_file(file, f"/Volumes/{NGBI_CATALOG}/tmp/volume_tmp/tmp/{os.path.basename(file)}") +-- MAGIC file_df = (spark.read.option("header", "true").option("quote", '"').option("escape", '"').option("multiLine", "true").option("mode", "PERMISSIVE").csv(local_path)) +-- MAGIC file_df = file_df.drop("TA",'Market') +-- MAGIC print(f'已读取{local_path}') +-- MAGIC df_all.append(file_df) +-- MAGIC # df_combine = pd.concat(df_all) +-- MAGIC df_ifexists = True +-- MAGIC else: +-- MAGIC print('没有符合条件的文件') +-- MAGIC df_ifexists= False +-- MAGIC except Exception as e: +-- MAGIC print(e) + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC try: +-- MAGIC if df_ifexists: # 如果不为空 +-- MAGIC spark.sql(f"TRUNCATE table tmp.tmp_chpa_raw_data") +-- MAGIC num = 1 +-- MAGIC for i in df_all: +-- MAGIC i.withColumnRenamed('IMS.药品ID','IMS_DRUG_ID') \ +-- MAGIC .withColumnRenamed('是否法伯编码','IS_HOSP_CODE') \ +-- MAGIC .withColumnRenamed('规格','SPEC') \ +-- MAGIC .withColumnRenamed('转换比','CONVERSION_RATIO') \ +-- MAGIC .withColumnRenamed('剂型','DOSAGE_FORM') \ +-- MAGIC .withColumnRenamed('价格','PRICE') +-- MAGIC # i.columns = ['area','city','yyyyqq','yyyymm','reimburse','prescription_source','prescription_dept_lv1','prescription_dept_lv2','prescription_dept_lv3','ATC','new_code','common_name','product_name','pack_des','PackSize','PackageType','nfc','manu_des','drug_delivery_route','prescription','sales_vol','sales_value'] #'h_level', +-- MAGIC # sdf = spark.createDataFrame(i) +-- MAGIC i.createOrReplaceTempView('fact_sales') +-- MAGIC spark.sql(f"INSERT into tmp.tmp_chpa_raw_data SELECT * FROM fact_sales") +-- MAGIC print(f'第{num}个') +-- MAGIC num +=1 +-- MAGIC except Exception as e: +-- MAGIC print(e) + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### 将读取到的dataframe写入表中 + +-- COMMAND ---------- + +-- 全量覆盖 +insert overwrite dwd.dwd_gnd_pharbers_prov_fact +select +year, +ym, +province_c, +ims_drug_id, +is_hosp_code, +prod_corp, +prod_cod, +pack_cod, +phcd, +prod_des, +cmps_des, +corp_des, +mnfl_cod, +prod_des_c, +cmps_c, +corp_des_c, +pack_des, +spec, +conversion_ratio, +dosage_form, +atc4_cod, +app1_cod, +app1_des, +app1_des_c, +app2_cod, +app2_des, +app2_des_c, +app3_cod, +app3_des, +app3_des_c, +vbp_batch, +vbp, +value, +totalunit, +countingunit, +price, +manu_des, +manu_des_c, +NULL AS source_file_path, +NULL AS source_file_name, +from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt +from tmp.tmp_chpa_raw_data \ No newline at end of file diff --git a/CHPA/02 DWS_IMS_TD_GEO.sql b/CHPA/02 DWS_IMS_TD_GEO.sql new file mode 100644 index 0000000..6e5fd50 --- /dev/null +++ b/CHPA/02 DWS_IMS_TD_GEO.sql @@ -0,0 +1,19 @@ +-- Databricks notebook source +-- 20260119 地理数据 我感觉可以拉到前面去 +--地理维度信息 Audit +-- 20260122 因为城市数据不再提供,改为硬编码省份数据. By Yusuo/Chenwu +INSERT OVERWRITE TABLE DWS.DWS_IMS_TD_GEO +SELECT + AUDIT_COD, + AUDIT_DES, + AUDIT_DES_C, + AUDIT_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + REGIONCENTER, + ETL_INSERT_DT, + ETL_UPDATE_DT +FROM + tmp.tmp_province_rawdata \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_atc_cn.sql b/CHPA/02 dws_ims_td_atc_cn.sql new file mode 100644 index 0000000..793a116 --- /dev/null +++ b/CHPA/02 dws_ims_td_atc_cn.sql @@ -0,0 +1,33 @@ +-- Databricks notebook source +-- 源表:DWD.DWD_GND_IMS_TBLATC,DWD.DWD_IMS_ATC_HIERARCHY +-- 目标表:DWS.DWS_IMS_TD_ATC_CN + +-- COMMAND ---------- + +--ATC挂中文名 +insert overwrite table dws.dws_ims_td_atc_cn +SELECT DISTINCT + T1.ATC1_CODE AS ATC1_COD, + T1.ATC1_DES, + case when ATC1.ATC1_DES_C is null then T1.ATC1_DES else ATC1.ATC1_DES_C end AS ATC1_DES_C, + T1.ATC2_CODe AS ATC2_COD, + T1.ATC2_DES, + case when ATC2.ATC2_DES_C is null then T1.ATC2_DES else ATC2.ATC2_DES_C end AS ATC2_DES_C, + T1.ATC3_CODe AS ATC3_COD, + T1.ATC3_DES, + case when ATC3.ATC3_DES_C is null then T1.ATC3_DES else ATC3.ATC3_DES_C end AS ATC3_DES_C, + T1.ATC4_CODe AS ATC4_COD, + T1.ATC4_DES, + case when ATC4.ATC4_DES_C is null then T1.ATC4_DES else ATC4.ATC4_DES_C end AS ATC4_DES_C, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +FROM dwd.dwd_ims_ATC_Hierarchy T1 +LEFT JOIN (SELECT DISTINCT ATC4_COD,ATC4_DES_C FROM dwd.dwd_gnd_ims_tblATC) ATC4 +ON T1.ATC4_CODE = ATC4.ATC4_COD +LEFT JOIN (SELECT DISTINCT ATC3_COD,ATC3_DES_C FROM dwd.dwd_gnd_ims_tblATC) ATC3 +ON T1.ATC3_CODE = ATC3.ATC3_COD +LEFT JOIN (SELECT DISTINCT ATC2_COD,ATC2_DES_C FROM dwd.dwd_gnd_ims_tblATC) ATC2 +ON T1.ATC2_CODE = ATC2.ATC2_COD +LEFT JOIN (SELECT DISTINCT ATC1_COD,ATC1_DES_C FROM dwd.dwd_gnd_ims_tblATC) ATC1 +ON T1.ATC1_CODE = ATC1.ATC1_COD +; \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_corp_cn.sql b/CHPA/02 dws_ims_td_corp_cn.sql new file mode 100644 index 0000000..a6e967e --- /dev/null +++ b/CHPA/02 dws_ims_td_corp_cn.sql @@ -0,0 +1,19 @@ +-- Databricks notebook source +-- 20260119 CORP 公司名中文信息 我感觉可以拉到前面去 +--CORP 公司名中文信息 +insert overwrite table dws.dws_ims_td_corp_cn +SELECT DISTINCT T1.CORP_ABBR AS CORP_COD,T1.CORP_DES,T2.nameC AS CORP_DES_C, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +FROM dwd.dwd_ims_td_manufacturer_corp T1 +LEFT JOIN dwd.dwd_gnd_ims_tblmanucn T2 +ON T1.CORP_ABBR = T2.abbrev +WHERE CORP_ABBR IS NOT NULL +; + +-- COMMAND ---------- + +--新增AZDealed部分的维度 +INSERT INTO dws.dws_ims_td_corp_cn SELECT 'A5ZD','AZDealed','AZDealed', + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8'); \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_date.sql b/CHPA/02 dws_ims_td_date.sql new file mode 100644 index 0000000..5f04aea --- /dev/null +++ b/CHPA/02 dws_ims_td_date.sql @@ -0,0 +1,28 @@ +-- Databricks notebook source +-- 依赖事实表 tmp.tmp_ims_tf_fact_sales; 所以一定要放后面。 +--基于Fact数据动态计算时间维度 最近五年 +insert overwrite table dws.dws_ims_td_date +select distinct +YM, +left(cast(YM as string),4) as YEAR, +right(cast(YM as string),2) as MONTH, +concat( + 'Q',quarter( + date( + concat( + left(cast(YM as string),4),'-',right(cast(YM as string),2),'-01' + )))) as QUARTER, +concat( + left(cast(YM as string),4),'Q',quarter( + date( + concat( + left(cast(YM as string),4),'-',right(cast(YM as string),2),'-01' + )))) as YQ, +case when YM=(select max(YM) from tmp.tmp_ims_tf_fact_sales) then 'R' else right(cast(YM as string),2) end as DATE_FLAG, +case when YM%100>6 then concat(left(cast(YM as string),4),'H2') else concat(left(cast(YM as string),4),'H1') end as HALF_YEAR, +from_utc_timestamp(current_timestamp(),'UTC+8'), +from_utc_timestamp(current_timestamp(),'UTC+8') +from tmp.tmp_ims_tf_fact_sales +where YM > (select max(YM)-900 from tmp.tmp_ims_tf_fact_sales) +order by YM desc +; \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_manu_cn.sql b/CHPA/02 dws_ims_td_manu_cn.sql new file mode 100644 index 0000000..8f8a659 --- /dev/null +++ b/CHPA/02 dws_ims_td_manu_cn.sql @@ -0,0 +1,18 @@ +-- Databricks notebook source +-- 20260119 MANU 生产商名中文信息 我感觉可以拉到前面去 +---MANU 生产商名中文信息 +insert overwrite table dws.dws_ims_td_manu_cn +SELECT DISTINCT T1.Manufacturer_Abbr AS MANU_COD,T1.Manufacturer_Name AS MANU_DES,T2.nameC AS MANU_DES_C, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +FROM dwd.dwd_ims_td_manufacturer_corp T1 +LEFT JOIN dwd.dwd_gnd_ims_tblmanucn T2 +ON T1.Manufacturer_Abbr = T2.abbrev +WHERE T1.Manufacturer_Abbr IS NOT NULL +; + +-- COMMAND ---------- + +INSERT INTO dws.dws_ims_td_manu_cn SELECT 'A5ZD','AZDealed','AZDealed', + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8'); \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_market.sql b/CHPA/02 dws_ims_td_market.sql new file mode 100644 index 0000000..790a7aa --- /dev/null +++ b/CHPA/02 dws_ims_td_market.sql @@ -0,0 +1,238 @@ +-- Databricks notebook source +-- 20260119 依赖上面 dwd.dwd_ims_td_pack_property +-- 20260119 依赖上面补0 dwd.dwd_ims_td_pack_property dwd.dwd_gnd_ims_tblmarket +-----MARKET +--第一步: +--先处理 Extend_Market 和 NOT_IN_FLAG 都为空的数据,代表有明确定义得市场 +insert overwrite table tmp.tmp_ims_td_temp_market +select distinct t2.market,t1.*, +t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio +from dwd.dwd_ims_td_pack_property t1 +left join (select * from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NULL AND ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' )) t2 +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 t1.PROD_COD = case when t2.Product_Code is null then t1.PROD_COD else t2.Product_Code end +and t1.PACK_COD = case when t2.Pack_Code is null then t1.PACK_COD else t2.Pack_Code end +and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end +and t1.CMPS_COD = case when t2.Molecule_Code is null then t1.CMPS_COD else t2.Molecule_Code end +where t2.market is not null +; + + + +-- COMMAND ---------- + +--第二步: +--处理 Extend_Market 为空,并且 NOT_IN_FLAG 有值的数据,代表反选定义市场的规则 +insert overwrite table tmp.tmp_ims_td_temp_market_del +select distinct t2.market,t1.*,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio + from dwd.dwd_ims_td_pack_property t1 + left join (select * from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NULL AND NOT_IN_FLAG = '0' ) t2 + 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 t1.PROD_COD = case when t2.Product_Code is null then t1.PROD_COD else t2.Product_Code end + and t1.PACK_COD = case when t2.Pack_Code is null then t1.PACK_COD else t2.Pack_Code end + and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end + and t1.CMPS_COD = case when t2.Molecule_Code is null then t1.CMPS_COD else t2.Molecule_Code end + where t2.market is not null + ; + + +-- COMMAND ---------- + +--!!!注意此段是反选的规则,故执行的是从已经定义好的TempMKT中删除数据 +--需要看TempMKT的字段结构,没有值的字段,在Value里面放个空值 +MERGE INTO tmp.tmp_ims_td_temp_market AS t1 +USING tmp.tmp_ims_td_temp_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.PROD_COD = t2.PROD_COD + and t1.PACK_COD = t2.PACK_COD + and t1.STGH_DES = t2.STGH_DES + and t1.CMPS_COD = t2.CMPS_COD + and t1.market = t2.market +WHEN MATCHED THEN DELETE +; + + +-- COMMAND ---------- + +---第三步: +--处理 Extend_Market 有值得数据,用已有市场,定义新的市场,带上系数 +insert into tmp.tmp_ims_td_temp_market +select distinct +t2.Market, +t1.PACK_COD , +t1.PACK_DES , +t1.STGH_DES , +t1.PACK_LCH , +t1.PROD_COD , +t1.CMPS_COD , +t1.CMPS_DES , +t1.ATC1_COD , +t1.ATC2_COD , +t1.ATC3_COD , +t1.ATC4_COD , +t1.APP1_COD , +t1.APP2_COD , +t1.APP3_COD , +t1.BIO_DESC , +t1.GENE_ORIG_DESC , +t1.ETH_OTC_DESC , +t1.NRDL_DESC , +t1.NRDL_Entry_Date , +t1.EDL_DESC , +t1.TCM_DESC , +t1.PAED_DESC , +t1.GQCE_DESC , +t1.VBP_DESC , +t1.MANU_COD , +t1.MANU_DES , +t1.MNFL_COD , +t1.MNFL_DES , +t1.CORP_COD , +t1.CORP_DES , +t2.BU, +t1.BrandType , +case when t2.Extend_Market_Ratio is null then '1' end AS Market_Ratio--市场的系数若没有维护,默认为1 +from tmp.tmp_ims_td_temp_market t1 +left join (select Market, BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NOT NULL) t2 on t1.Market=t2.Extend_Market +where t2.Market is not null +; + + +-- COMMAND ---------- + +--将,市场的系数为空值的数据,初始化为1 +UPDATE tmp.tmp_ims_td_temp_market SET Market_Ratio = 1 WHERE Market_Ratio IS NULL; + +-- COMMAND ---------- + +-- 20260119 依赖 tmp.tmp_ims_td_temp_market +-- 20260119 依赖上面补0 dwd.dwd_gnd_ims_tblkeycompetitor + +--KeyCompetitor部分 +--定义Key Competitor +insert overwrite table tmp.tmp_ims_td_temp_market_upd1 +select distinct t2.keycompetitor as Key_Competitor,t2.no,t2.no1,t1.* +from tmp.tmp_ims_td_temp_market t1 +left join ( + select + ROW_NUMBER() OVER(ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1,* from dwd.dwd_gnd_ims_tblkeycompetitor +)t2 + 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 t1.PROD_COD = case when t2.Product_Code is null then t1.PROD_COD else t2.Product_Code end + and t1.PACK_COD = case when t2.Pack_Code is null then t1.PACK_COD else t2.Pack_Code end + and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end + and t1.CMPS_COD = case when t2.Molecule_Code is null then t1.CMPS_COD else t2.Molecule_Code end + and t1.market = case when t2.market is null then t1.market else t2.market end +; + + +-- COMMAND ---------- + +--删除被重复定义的Key Competitor,删除写入时间早的(No 小的)的对应行即可,保留No最大的一行即最新的规则 +insert overwrite table tmp.tmp_ims_td_temp_market_upd2 +select * from( + select row_number() over(partition by market,pack_cod,prod_cod order by no1 desc,no desc) as id,* + from tmp.tmp_ims_td_temp_market_upd1) where id>1 +; + + +-- COMMAND ---------- + +MERGE INTO tmp.tmp_ims_td_temp_market_upd1 AS t1 +USING tmp.tmp_ims_td_temp_market_upd2 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.PROD_COD = t2.PROD_COD + and t1.PACK_COD = t2.PACK_COD + and t1.STGH_DES = t2.STGH_DES + and t1.CMPS_COD = t2.CMPS_COD + and t1.market = t2.market + and t1.Key_Competitor = t2.Key_Competitor + and t1.no=t2.no +WHEN MATCHED THEN DELETE +; + + +-- COMMAND ---------- + +--没有挂上KeyCompetitor的,更新为Others ,最后去掉No,写入临时表备用 +update tmp.tmp_ims_td_temp_market_upd1 set Key_Competitor = 'Others' where Key_Competitor is NULL; + + +-- COMMAND ---------- + +insert overwrite table tmp.tmp_ims_td_temp_market_upd +select + Key_Competitor,market,PACK_COD,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,CMPS_COD,CMPS_DES, + ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD,APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC, + ETH_OTC_DESC,NRDL_DESC,NRDL_Entry_Date,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC,VBP_DESC, + MANU_COD,MANU_DES,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,BrandType,bu,Market_Ratio +from tmp.tmp_ims_td_temp_market_upd1 +; + +-- COMMAND ---------- + +-- 20260119 市场维度信息 我感觉可以拉到前面去 +--市场维度信息 +insert overwrite table dws.dws_ims_td_market +select distinct market,PACK_COD,PACK_DES,STGH_DES,PACK_LCH,PROD_COD,CMPS_COD,CMPS_DES, + ATC1_COD,ATC2_COD,ATC3_COD,ATC4_COD,APP1_COD,APP2_COD,APP3_COD,BIO_DESC,GENE_ORIG_DESC, + ETH_OTC_DESC,NRDL_DESC,NRDL_Entry_Date,EDL_DESC,TCM_DESC,PAED_DESC,GQCE_DESC,VBP_DESC, + MANU_COD,MANU_DES,MNFL_COD,MNFL_DES,CORP_COD,CORP_DES,BrandType,bu,Market_Ratio,Key_Competitor, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +from tmp.tmp_ims_td_temp_market_upd +; \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_market_ta.sql b/CHPA/02 dws_ims_td_market_ta.sql new file mode 100644 index 0000000..1d3d034 --- /dev/null +++ b/CHPA/02 dws_ims_td_market_ta.sql @@ -0,0 +1,7 @@ +-- Databricks notebook source +-- 20260119 市场&TA 关系信息 我感觉可以拉到前面去 +--市场&TA 关系信息 +insert overwrite table dws.dws_ims_td_market_ta +select * +from dwd.dwd_gnd_ims_tblmarket_ta_map +; \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_nfc_cn.sql b/CHPA/02 dws_ims_td_nfc_cn.sql new file mode 100644 index 0000000..6d29796 --- /dev/null +++ b/CHPA/02 dws_ims_td_nfc_cn.sql @@ -0,0 +1,22 @@ +-- Databricks notebook source +--NFC挂中文名 +insert overwrite table dws.dws_ims_td_nfc_cn +SELECT DISTINCT T1.NFC1_CODE AS APP1_COD , + T1.NFC1_DES AS APP1_DES, + case when NFC1.APP1_DES_C is null then T1.NFC1_DES else NFC1.APP1_DES_C end AS APP1_DES_C, + T1.NFC2_CODE AS APP2_COD , + T1.NFC2_DES AS APP2_DES, + case when NFC2.APP2_DES_C is null then T1.NFC2_DES else NFC2.APP2_DES_C end AS APP2_DES_C, + T1.NFC3_CODE AS APP3_COD, + T1.NFC3_DES AS APP3_DES, + case when NFC3.APP3_DES_C is null then T1.NFC3_DES else NFC3.APP3_DES_C end AS APP3_DES_C, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +FROM dwd.dwd_ims_NFC_Hierarchy T1 +LEFT JOIN (SELECT DISTINCT APP3_COD,APP3_DES_C FROM dwd.dwd_gnd_ims_tblAPP) NFC3 +ON T1.NFC3_CODE = NFC3.APP3_COD +LEFT JOIN (SELECT DISTINCT APP2_COD,APP2_DES_C FROM dwd.dwd_gnd_ims_tblAPP) NFC2 +ON T1.NFC2_CODE = NFC2.APP2_COD +LEFT JOIN (SELECT DISTINCT APP1_COD,APP1_DES_C FROM dwd.dwd_gnd_ims_tblAPP) NFC1 +ON T1.NFC1_CODE = NFC1.APP1_COD +; \ No newline at end of file diff --git a/CHPA/02 dws_ims_td_prod_cn.sql b/CHPA/02 dws_ims_td_prod_cn.sql new file mode 100644 index 0000000..72c9387 --- /dev/null +++ b/CHPA/02 dws_ims_td_prod_cn.sql @@ -0,0 +1,7 @@ +-- Databricks notebook source +--产品挂中文名 +insert overwrite table dws.dws_ims_td_prod_cn +SELECT distinct RIGHT(concat('0000000000',prodcode),9) AS PROD_COD,ename as PROD_DES,namec as PROD_DES_C, gene_name as CMPS_DES_C,1 AS RANK_TYPE, + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +FROM dwd.dwd_gnd_ims_tblprodcn \ No newline at end of file diff --git a/CHPA/02 tmp_ims_td_prod_tmp.sql b/CHPA/02 tmp_ims_td_prod_tmp.sql new file mode 100644 index 0000000..43a24b6 --- /dev/null +++ b/CHPA/02 tmp_ims_td_prod_tmp.sql @@ -0,0 +1,32 @@ +-- Databricks notebook source +-- DBTITLE 1,产品挂中文名 + + +--Product中文名字,若有超过5个CORP或者MANU生产,则将其报告上排序的优先级调低 +insert overwrite table tmp.tmp_ims_td_prod_tmp +SELECT DISTINCT PROD.PROD_COD + FROM dws.dws_ims_td_prod_cn PROD + LEFT JOIN dwd.dwd_ims_td_pack_property PACK + ON PROD.PROD_COD = PACK.PROD_COD + LEFT JOIN dws.dws_ims_td_corp_cn CORP + ON PACK.CORP_COD = CORP.CORP_COD + WHERE PROD.PROD_DES_C IN + ( + --先计算出超过10个厂家生产的Prod_CN + + --先计算出有多个厂家生产的Prod_CN + SELECT PROD.PROD_DES_C + FROM dwd.dwd_ims_td_pack_property PACK + LEFT JOIN dws.dws_ims_td_prod_cn PROD + ON PACK.PROD_COD = PROD.PROD_COD + GROUP BY PROD.PROD_DES_C + HAVING ( COUNT(DISTINCT CORP_DES) > 5 OR COUNT(DISTINCT MANU_DES) > 5 ) + AND PROD.PROD_DES_C IS NOT NULL + ); + + +-- COMMAND ---------- + +UPDATE dws.dws_ims_td_prod_cn SET RANK_TYPE = 0 where PROD_COD in ( + SELECT DISTINCT PROD_COD FROM tmp.tmp_ims_td_prod_tmp + ); \ No newline at end of file diff --git a/CHPA/02 tmp_ims_tf_fact_sales.sql b/CHPA/02 tmp_ims_tf_fact_sales.sql new file mode 100644 index 0000000..9accb32 --- /dev/null +++ b/CHPA/02 tmp_ims_tf_fact_sales.sql @@ -0,0 +1,317 @@ +-- Databricks notebook source +-- 20260130 临时方案,解决测试环境有NULL值问题 +create or replace temporary view dwd_ims_td_pack +as +select + distinct + pack_id, + pack_code +from dwd.dwd_ims_td_pack + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FACT_CHPA_SALES_TEMP_WITH_PREVIOUS +AS +SELECT + CAST(YM AS INT) AS YM, + CAST(YEAR AS INT) AS YEAR, + CAST(REPLACE(YM,YEAR,'') AS INT) AS MONTH, + CAST(VALUE AS DECIMAL(38,10)) AS VALUE, + CAST(COUNTINGUNIT AS DECIMAL(38,10)) AS COUNTINGUNIT, + CAST(TOTALUNIT AS DECIMAL(38,10)) AS TOTALUNIT, + PROVINCE_C, + PHCD, + conversion_ratio +FROM dwd.dwd_gnd_pharbers_prov_fact + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DIM_PROVINCE +AS +select + -- t2.geo_key , + t2.province_code, + CASE + WHEN + t2.province_name + IN ('上海','北京','天津','重庆') + THEN + CONCAT(t2.province_name,'市') + WHEN + t2.province_name + IN ('内蒙古','西藏') + THEN + CONCAT(t2.province_name,'自治区') + WHEN + t2.province_name = '宁夏' + THEN CONCAT(t2.province_name,'回族自治区') + WHEN + t2.province_name = '广西' + THEN CONCAT(t2.province_name,'壮族自治区') + WHEN + t2.province_name = '新疆' + THEN CONCAT(t2.province_name,'维吾尔自治区') + ELSE CONCAT(t2.province_name,'省') + END AS province_name +from dm.dm_td_geography t2 +where t2.geo_key = t2.province_code +and province_name not in ('台湾','澳门','香港') + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DIM_CHPA_PACK_INFO +AS +SELECT + PACK_COD, + MAX(IQVIA_PACK_CODE) AS IQVIA_PACK_CODE, + MAX(countingunit) as COUNTINGUNIT_RATIO +FROM + dwd.dwd_gnd_dept_pack_property +GROUP BY + PACK_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FACT_CHPA_SALES +AS +SELECT + YM, + YEAR, + REPLACE(YM,YEAR,'') AS MONTH, + T3.IQVIA_PACK_CODE AS PACK_CODE, + T2.PROVINCE_CODE AS AUDIT_COD, + VALUE AS MTH00LC, + 0 AS MTH00LCLY, + CASE WHEN T3.COUNTINGUNIT_RATIO IS NULL THEN TOTALUNIT*T1.conversion_ratio ELSE TOTALUNIT*T3.COUNTINGUNIT_RATIO END AS MTH00CN, + 0 AS MTH00CNLY, + TOTALUNIT AS MTH00UN, + 0 AS MTH00UNLY +FROM FACT_CHPA_SALES_TEMP_WITH_PREVIOUS AS T1 +LEFT JOIN DIM_PROVINCE AS T2 ON T1.PROVINCE_C = T2.PROVINCE_NAME +LEFT JOIN DIM_CHPA_PACK_INFO AS T3 ON T1.PHCD = T3.PACK_COD +UNION ALL +SELECT + CAST((YEAR+1)*100+REPLACE(YM,YEAR,'') AS INT) AS YM, + YEAR+1, + CAST(REPLACE(YM,YEAR,'') AS INT) AS MONTH, + T3.IQVIA_PACK_CODE AS PACK_CODE, + T2.PROVINCE_CODE AS AUDIT_COD, + 0 AS MTH00LC, + VALUE AS MTH00LCLY, + 0 AS MTH00CN, + CASE WHEN T3.COUNTINGUNIT_RATIO IS NULL THEN TOTALUNIT*T1.conversion_ratio ELSE TOTALUNIT*T3.COUNTINGUNIT_RATIO END AS MTH00CNLY, + 0 AS MTH00UN, + TOTALUNIT AS MTH00UNLY +FROM FACT_CHPA_SALES_TEMP_WITH_PREVIOUS AS T1 +LEFT JOIN DIM_PROVINCE AS T2 ON T1.PROVINCE_C = T2.PROVINCE_NAME +LEFT JOIN DIM_CHPA_PACK_INFO AS T3 ON T1.PHCD = T3.PACK_COD + +-- COMMAND ---------- + +-- 20260119 dwd.dwd_ims_td_pack、dwd.dwd_ims_tf_fact_sales 不依赖 +--删除最近五年的dim pack数据,将最新的dim pack写入 +delete from dws.dws_ims_td_pack_ym +where ym + 500 > + (select max(year * 100 + month) from dwd.dwd_ims_tf_fact_sales); +insert into dws.dws_ims_td_pack_ym +select + distinct ym, + pack_id, + pack_code, + from_utc_timestamp(current_timestamp(), 'UTC+8'), + from_utc_timestamp(current_timestamp(), 'UTC+8') +from + ( + select + distinct year * 100 + month as ym + from + dwd.dwd_ims_tf_fact_sales + where + year * 100 + month + 500 > ( + select max(year * 100 + month) from dwd.dwd_ims_tf_fact_sales + ) + ) full + -- join dwd.dwd_ims_td_pack + join dwd_ims_td_pack + ; + +-- COMMAND ---------- + +-- --IMS 原始数据预处理 +-- --FACT SALES 处理 +-- insert overwrite table tmp.tmp_ims_tf_fact_sales +-- select distinct +-- FACT.YM,AUDIT.Audit_Code AS AUDIT_COD,FACT.Pack_Code AS PACK_COD, +-- sum(MTH00LC) as MTH00LC,sum(MTH00LCLY) as MTH00LCLY, +-- sum(MTH00CN) as MTH00CN,sum(MTH00CNLY) as MTH00CNLY, +-- sum(MTH00UN) as MTH00UN,sum(MTH00UNLY) as MTH00UNLY +-- from( +-- select +-- Year*100+Month as YM, +-- Year , +-- Month , +-- t2.pack_code , +-- Audit_ID , +-- SalesValue_LC as MTH00LC, +-- 0 as MTH00LCLY, +-- Counting_Unit as MTH00CN, +-- 0 as MTH00CNLY, +-- Sales_Unit as MTH00UN, +-- 0 as MTH00UNLY +-- from dwd.dwd_ims_tf_fact_sales t1 +-- --补充历史的PACK ID 和 PACK CODE的关联关系,带上YM将最新dim pack表full join 最近五年 +-- left join dws.dws_ims_td_pack_ym t2 on t1.Pack_ID=t2.pack_id and t1.Year*100+t1.Month=t2.ym +-- union all +-- select +-- (Year+1)*100+Month as YM, +-- Year+1 , +-- Month , +-- t2.pack_code , +-- Audit_ID , +-- 0 as MTH00LC, +-- SalesValue_LC as MTH00LCLY, +-- 0 as MTH00CN, +-- Counting_Unit as MTH00CNLY, +-- 0 as MTH00UN, +-- Sales_Unit as MTH00UNLY +-- from dwd.dwd_ims_tf_fact_sales t1 +-- --补充历史的PACK ID 和 PACK CODE的关联关系,带上YM将最新dim pack表full join 最近五年 +-- left join dws.dws_ims_td_pack_ym t2 on t1.Pack_ID=t2.pack_id and t1.Year*100+t1.Month=t2.ym +-- )FACT +-- LEFT JOIN dwd.dwd_ims_td_audit AUDIT +-- ON FACT.Audit_ID = AUDIT.Audit_ID +-- where FACT.YM<=(select max(Year*100+Month) from dwd.dwd_ims_tf_fact_sales) +-- ----------20260320 chenwu CHPA的数据只保留202201之后的 +-- and FACT.YM>=202201 +-- ---------- +-- AND AUDIT.Audit_Code = 'CHT' +-- group by FACT.YM,AUDIT.Audit_Code,FACT.Pack_Code + + + +-- -- 20260120新增 +-- -- 以前 全国和省份数据放在一起,现在全国是上面,省份是新的,单独放在下面。 +-- union all +-- select distinct +-- CAST(YM AS INT) AS YM, +-- AUDIT_COD,Pack_Code AS PACK_COD, +-- sum(MTH00LC) as MTH00LC,sum(MTH00LCLY) as MTH00LCLY, +-- sum(MTH00CN) as MTH00CN,sum(MTH00CNLY) as MTH00CNLY, +-- sum(MTH00UN) as MTH00UN,sum(MTH00UNLY) as MTH00UNLY +-- from +-- FACT_CHPA_SALES +-- where +-- YM<=(select max(YM) from dwd.dwd_gnd_pharbers_prov_fact) +-- group by YM,Audit_Cod,Pack_Code +-- ; + + +-- COMMAND ---------- + +-- IMS 原始数据预处理 —— FACT SALES 处理 +INSERT OVERWRITE TABLE tmp.tmp_ims_tf_fact_sales + +WITH yearmont_range (--防止翘角导致数据存在差异 + select + min(ym) YM +from + ( + select + max(ym) ym + from + dwd.dwd_gnd_pharbers_prov_fact + union all + select + max(Year * 100 + Month) ym + from + dwd.dwd_ims_tf_fact_sales + ) +) + +-- ════════════════════════════════════════════ +-- Part 1:全国数据(CHT) +-- ════════════════════════════════════════════ +SELECT DISTINCT + FACT.YM, + AUDIT.Audit_Code AS AUDIT_COD, + FACT.Pack_Code AS PACK_COD, + SUM(MTH00LC) AS MTH00LC, + SUM(MTH00LCLY) AS MTH00LCLY, + SUM(MTH00CN) AS MTH00CN, + SUM(MTH00CNLY) AS MTH00CNLY, + SUM(MTH00UN) AS MTH00UN, + SUM(MTH00UNLY) AS MTH00UNLY +FROM ( + -- 当期销售数据 + SELECT + Year * 100 + Month AS YM, + Year, + Month, + t2.pack_code, + Audit_ID, + SalesValue_LC AS MTH00LC, + 0 AS MTH00LCLY, + Counting_Unit AS MTH00CN, + 0 AS MTH00CNLY, + Sales_Unit AS MTH00UN, + 0 AS MTH00UNLY + FROM dwd.dwd_ims_tf_fact_sales t1 + -- 补充历史 Pack_ID → Pack_Code 映射(带 YM,关联最近五年快照) + LEFT JOIN dws.dws_ims_td_pack_ym t2 + ON t1.Pack_ID = t2.pack_id + AND t1.Year * 100 + t1.Month = t2.ym + + UNION ALL + + -- 同期数据(当期行 YM+1 年,作为去年同期值) + SELECT + (Year + 1) * 100 + Month AS YM, + Year + 1, + Month, + t2.pack_code, + Audit_ID, + 0 AS MTH00LC, + SalesValue_LC AS MTH00LCLY, + 0 AS MTH00CN, + Counting_Unit AS MTH00CNLY, + 0 AS MTH00UN, + Sales_Unit AS MTH00UNLY + FROM dwd.dwd_ims_tf_fact_sales t1 + -- 补充历史 Pack_ID → Pack_Code 映射(带 YM,关联最近五年快照) + LEFT JOIN dws.dws_ims_td_pack_ym t2 + ON t1.Pack_ID = t2.pack_id + AND t1.Year * 100 + t1.Month = t2.ym +) FACT +LEFT JOIN dwd.dwd_ims_td_audit AUDIT + ON FACT.Audit_ID = AUDIT.Audit_ID +WHERE FACT.YM <= (SELECT YM FROM yearmont_range) + AND FACT.YM >= 202201 -- 20260320 chenwu CHPA 数据只保留 202201 之后 + AND AUDIT.Audit_Code = 'CHT' +GROUP BY + FACT.YM, + AUDIT.Audit_Code, + FACT.Pack_Code + +UNION ALL + +-- ════════════════════════════════════════════ +-- Part 2:省份数据(CHPA) +-- 20260120 新增:全国与省份拆分,省份数据单独维护 +-- ════════════════════════════════════════════ +SELECT DISTINCT + CAST(YM AS INT) AS YM, + AUDIT_COD, + Pack_Code AS PACK_COD, + SUM(MTH00LC) AS MTH00LC, + SUM(MTH00LCLY) AS MTH00LCLY, + SUM(MTH00CN) AS MTH00CN, + SUM(MTH00CNLY) AS MTH00CNLY, + SUM(MTH00UN) AS MTH00UN, + SUM(MTH00UNLY) AS MTH00UNLY +FROM FACT_CHPA_SALES +WHERE YM <= (SELECT YM FROM yearmont_range) +GROUP BY + YM, + Audit_Cod, + Pack_Code +; \ No newline at end of file diff --git a/CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql b/CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..15b76e1 --- /dev/null +++ b/CHPA/03 DM_TD_EXT_CHPA_MARKET_BRAND_RATIO.sql @@ -0,0 +1,160 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD \ No newline at end of file diff --git a/CHPA/03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql b/CHPA/03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..0baca06 --- /dev/null +++ b/CHPA/03 DM_TD_EXT_CHPA_MARKET_PACK_MAPPING.sql @@ -0,0 +1,71 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING + SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T4.CLASS, + T5.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.DM_TD_EXT_CHPA_PACK2MARKET T1 + LEFT JOIN DM.DM_TD_EXT_CHPA_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET + AND T1.PACK_CODE = T2.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_CHPA_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET + AND T1.PACK_CODE = T3.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_CHPA_PACK2MARKET_CLASS T4 + ON T1.PACK_CODE = T4.PACK_CODE + AND T1.MARKET = T4.MARKET + LEFT JOIN DM.DM_TD_EXT_CHPA_PACK2MARKET_KEYCOMPETITOR T5 + ON T1.PACK_CODE = T5.PACK_CODE + AND T1.MARKET = T5.MARKET + WHERE + UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql b/CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql new file mode 100644 index 0000000..ae0dad7 --- /dev/null +++ b/CHPA/03 DM_TD_EXT_CHPA_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql b/CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql new file mode 100644 index 0000000..77a1a0d --- /dev/null +++ b/CHPA/03 DM_TD_EXT_CHPA_PACK2MARKET.sql @@ -0,0 +1,327 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET_KEYCOMPETITOR ( +-- KEY_COMPETITOR STRING, +-- MARKET STRING, +-- PACK_CODE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market_keycompetitor'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market_keycompetitor'; + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET_CLASS ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CLASS STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market_class'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market_class'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET_KEYCOMPETITOR +WITH kc AS ( + SELECT + keycompetitor, no, + ROW_NUMBER() OVER (ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 + END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1, + ATC1_Code, ATC2_Code, ATC3_Code, ATC4_Code, + NFC1_Code, NFC2_Code, NFC3_Code, + corporation_code, Manufacturer_Code, + Product_Code, Pack_Code, Strength, Molecule_Code, market + FROM dwd.dwd_gnd_ims_tblkeycompetitor +), +joined AS ( + SELECT + /*+ BROADCAST(kc) */ + COALESCE(kc.keycompetitor, 'OTHERS') AS Key_Competitor, -- ✅ UPDATE 逻辑内联 + t1.market, t1.PACK_CODE + /*bug 调试区 + , + kc.no, + kc.no1, + t1.PROD_COD, t1.CMPS_COD, t1.CMPS_DES, + t1.ATC1_COD, t1.ATC2_COD, t1.ATC3_COD, t1.ATC4_COD, + t1.APP1_COD, t1.APP2_COD, t1.APP3_COD, + t1.BIO_DESC, t1.GENE_ORIG_DESC, t1.ETH_OTC_DESC, + t1.NRDL_DESC, t1.NRDL_Entry_Date, t1.EDL_DESC, t1.TCM_DESC, + t1.PAED_DESC, t1.GQCE_DESC, t1.VBP_DESC, + t1.MANU_COD, t1.MANU_DES, t1.MNFL_COD, t1.MNFL_DES, + t1.CORP_COD, t1.CORP_DES, t1.BrandType, t1.bu, t1.Market_Ratio + */ + ,ROW_NUMBER() OVER ( + PARTITION BY t1.market, t1.PACK_CODE, t1.PROD_CODE + ORDER BY kc.no1 DESC, kc.no DESC + ) AS _rn + FROM DM.DM_TD_EXT_CHPA_PACK2MARKET t1 + LEFT JOIN kc + ON (kc.ATC1_Code IS NULL OR t1.ATC1_CODE = kc.ATC1_Code) + AND (kc.ATC2_Code IS NULL OR t1.ATC2_CODE = kc.ATC2_Code) + AND (kc.ATC3_Code IS NULL OR t1.ATC3_CODE = kc.ATC3_Code) + AND (kc.ATC4_Code IS NULL OR t1.ATC4_CODE = kc.ATC4_Code) + AND (kc.NFC1_Code IS NULL OR t1.APP1_CODE = kc.NFC1_Code) + AND (kc.NFC2_Code IS NULL OR t1.APP2_CODE = kc.NFC2_Code) + AND (kc.NFC3_Code IS NULL OR t1.APP3_CODE = kc.NFC3_Code) + AND (kc.corporation_code IS NULL OR t1.CORP_CODE = kc.corporation_code) + AND (kc.Manufacturer_Code IS NULL OR t1.MANU_CODE = kc.Manufacturer_Code) + AND (kc.Product_Code IS NULL OR t1.PROD_CODE = kc.Product_Code) + AND (kc.Pack_Code IS NULL OR t1.PACK_CODE = kc.Pack_Code) + AND (kc.Strength IS NULL OR t1.STGH_DESC = kc.Strength) + AND (kc.Molecule_Code IS NULL OR t1.CMPS_CODE = kc.Molecule_Code) + AND (kc.market IS NULL OR t1.market = kc.market) +) +SELECT distinct Key_Competitor,market,pack_code +FROM joined +WHERE _rn = 1; + +-- COMMAND ---------- + +-- DBTITLE 1,CLASS +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET_CLASS +SELECT + /*+ BROADCAST(T2) */ + DISTINCT + T1.MARKET, + T1.PACK_CODE, + COALESCE( T2.CLASS, 'OTHERS') AS CLASS +FROM DM.DM_TD_EXT_CHPA_PACK2MARKET T1 +LEFT JOIN DWD.DWD_GND_TBLCLASS T2 + ON (T2.MARKET IS NULL OR T1.MARKET = T2.MARKET) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) \ No newline at end of file diff --git a/CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql b/CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql new file mode 100644 index 0000000..dd8b87d --- /dev/null +++ b/CHPA/03 DM_TD_EXT_CHPA_PACK_PROPERTY.sql @@ -0,0 +1,147 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK_PROPERTY +-- ( +-- -- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- -- MARKET STRING, +-- -- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- -- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- -- CLASS STRING, +-- -- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_CHPA_PACK_PROPERTY +SELECT + -- MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + -- MARKET, + -- KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + -- AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + -- CLASS, + -- NULL AS MARKET_RATIO, + NULL AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_IMS_TD_PACK_PROPERTY +; \ No newline at end of file diff --git a/CHPA/03 DM_TF_EXT_CHPA_SALES.sql b/CHPA/03 DM_TF_EXT_CHPA_SALES.sql new file mode 100644 index 0000000..e8486b0 --- /dev/null +++ b/CHPA/03 DM_TF_EXT_CHPA_SALES.sql @@ -0,0 +1,166 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_CHPA_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chpa_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chpa_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW CHPA_SALES AS + SELECT + A.YYYYMM, + A.PACK_COD AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'IQVIA-CHPA(Monthly)' DATA_SOURCE, + ------------------------------------- + SUM(SALES_UNIT_CAL) SALES_UNIT_CAL, + SUM(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY, + SUM(SALES_VALUE_CAL) SALES_VALUE_CAL, + SUM(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + SUM(CONUTING_UNIT) CONUTING_UNIT, + SUM(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 + ------------------------------------- + FROM + DM.DM_IMS_TF_SALES A + where + A.YYYYMM >= '202201' + -- AND A.MARKET = 'IMS ALL Market' + GROUP BY + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_CHPA_SALES ( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) +SELECT + YYYYMM, + NVL ( + NULLIF(PACK_CODE, ''), + CONCAT ('PACK_CODE_', DATA_SOURCE) + ) AS PACK_CODE, + NVL (NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + CHPA_SALES; \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_calendar.sql b/CHPA/03 dm_ims_td_calendar.sql new file mode 100644 index 0000000..bf8d121 --- /dev/null +++ b/CHPA/03 dm_ims_td_calendar.sql @@ -0,0 +1,58 @@ +-- Databricks notebook source +-- 源表:DWS.DWS_IMS_TD_DATE +-- 目标表:DM.DM_IMS_TD_CALENDAR,DM.DM_IMS_S_DATE + +-- COMMAND ---------- + +--DM 逻辑 +--DATE +INSERT OVERWRITE TABLE DM.DM_IMS_TD_CALENDAR +--当前年销量日期日历表缺少的用去年补全 +SELECT + CAST(YM+100 AS INT) AS YYYYMM, + CAST(YEAR+1 AS INT) AS YEAR, + MONTH, + QUARTER, + CONCAT(CAST(LEFT(YQ,4) AS INT)+1,QUARTER) AS YQ , + CAST(CONCAT(CAST(YEAR AS INT)+1,'-',MONTH,'-01') AS DATE) AS DAY_DATE, + CASE WHEN YM+100= (SELECT MAX(YM) FROM TMP.TMP_IMS_TF_FACT_SALES) THEN 'R' ELSE DATE_FLAG END, + CONCAT(CAST(LEFT(HALF_YEAR,4) AS INT)+1,RIGHT(HALF_YEAR,2)) AS HALF_YEAR, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') ETL_UPDATE_DT +FROM DWS.DWS_IMS_TD_DATE +WHERE YEAR+1=(SELECT MAX(YEAR) FROM DWS.DWS_IMS_TD_DATE) + +--前四年的日历表 +UNION ALL + +SELECT + CAST(YM AS INT) AS YYYYMM, + CAST(YEAR AS INT), + MONTH, + QUARTER, + YQ, + CAST(CONCAT(YEAR,'-',MONTH,'-01') AS DATE) AS DAY_DATE, + DATE_FLAG, + HALF_YEAR, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') ETL_UPDATE_DT +FROM DWS.DWS_IMS_TD_DATE +WHERE YEAR<(SELECT MAX(YEAR) FROM DWS.DWS_IMS_TD_DATE) + AND YEAR+9>(SELECT MAX(YEAR) FROM DWS.DWS_IMS_TD_DATE) + + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_IMS_S_DATE +SELECT + YYYYMM, + YEAR, + MONTH, + QUARTER, + YQ, + DAY_DATE, + DATE_FLAG, + HALF_YEAR, + ETL_INSERT_DT, + ETL_UPDATE_DT +FROM DM.DM_IMS_TD_CALENDAR \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_geo.sql b/CHPA/03 dm_ims_td_geo.sql new file mode 100644 index 0000000..051a1e4 --- /dev/null +++ b/CHPA/03 dm_ims_td_geo.sql @@ -0,0 +1,67 @@ +-- Databricks notebook source +-- 源表:DM.DM_TD_GEOGRAPHY,DWS.DWS_IMS_TD_GEO +-- 目标表:DM.DM_IMS_TD_GEO + +-- COMMAND ---------- + +-- 20260119 地理数据 我感觉可以拉到前面去 +--地理维度信息 AUDIT +-- 20260122 因为城市数据不再提供,改为硬编码省份数据. BY YUSUO/CHENWU +INSERT OVERWRITE TABLE DWS.DWS_IMS_TD_GEO +SELECT + AUDIT_COD, + AUDIT_DES, + AUDIT_DES_C, + AUDIT_TYPE, + CITY_TIER, + AZ_CITY_TIER, + PROVINCE, + PROVINCE_C, + REGIONCENTER, + ETL_INSERT_DT, + ETL_UPDATE_DT +FROM + TMP.TMP_PROVINCE_RAWDATA + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DIM_PROVINCE +AS +SELECT + T2.PROVINCE_CODE, + CASE + WHEN T2.PROVINCE_NAME IN ('上海', '北京', '天津', '重庆') THEN CONCAT (T2.PROVINCE_NAME, '市') + WHEN T2.PROVINCE_NAME IN ('内蒙古', '西藏') THEN CONCAT (T2.PROVINCE_NAME, '自治区') + WHEN T2.PROVINCE_NAME = '宁夏' THEN CONCAT (T2.PROVINCE_NAME, '回族自治区') + WHEN T2.PROVINCE_NAME = '广西' THEN CONCAT (T2.PROVINCE_NAME, '壮族自治区') + WHEN T2.PROVINCE_NAME = '新疆' THEN CONCAT (T2.PROVINCE_NAME, '维吾尔自治区') + ELSE CONCAT (T2.PROVINCE_NAME, '省') + END AS PROVINCE_NAME +FROM + DM.DM_TD_GEOGRAPHY T2 +WHERE + T2.GEO_KEY = T2.PROVINCE_CODE + AND PROVINCE_NAME NOT IN ('台湾', '澳门', '香港') + +-- COMMAND ---------- + +--DM 地理纬度表 +INSERT OVERWRITE TABLE DM.DM_IMS_TD_GEO +SELECT DISTINCT + T1.AUDIT_COD, + T1.AUDIT_DES AS CITY, + T1.AUDIT_DES_C AS CITY_C, + T1.AUDIT_TYPE AS CITY_TYPE, + T1.CITY_TIER, + T1.AZ_CITY_TIER, + T1.PROVINCE, + T1.PROVINCE_C, + T2.PROVINCE_CODE, + T2.PROVINCE_NAME AS CITY_MAP, + T2.PROVINCE_NAME, + T1.REGIONCENTER AS REGION_CENTER, + T1.ETL_INSERT_DT, + T1.ETL_UPDATE_DT +FROM + DWS.DWS_IMS_TD_GEO AS T1 + LEFT JOIN DIM_PROVINCE AS T2 ON T1.AUDIT_COD = T2.PROVINCE_CODE \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_market_property.sql b/CHPA/03 dm_ims_td_market_property.sql new file mode 100644 index 0000000..77447f0 --- /dev/null +++ b/CHPA/03 dm_ims_td_market_property.sql @@ -0,0 +1,35 @@ +-- Databricks notebook source +-- 源表:DWD.DWD_TD_IMS_MARKET_TA_ORDER +-- 目标表:DM.DM_IMS_TD_MARKET_PROPERTY + +-- COMMAND ---------- + +update dwd.dwd_td_ims_market_ta_order +set + market = 'Pulmicort VBP Benchmark Market' +where + market = 'Pumicort VBP Benchmark Market' + +-- COMMAND ---------- + +--dm market property 市场相关属性和market&ta 的排序 by qingli 20230425 +insert overwrite table dm.dm_ims_td_market_property +select + market_order, + bu as bu, + ta as ta_key, + case + when ta = 'ONC' then 'ONCO' + else ta + end as ta, + market as market_key, + case + when market = 'ONC Market' then 'ONCO Market' + else market + end as market, + null as svg, + ta_order, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + dwd.dwd_td_ims_market_ta_order \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_org.sql b/CHPA/03 dm_ims_td_org.sql new file mode 100644 index 0000000..7c873a6 --- /dev/null +++ b/CHPA/03 dm_ims_td_org.sql @@ -0,0 +1,615 @@ +-- Databricks notebook source +-- 源表:DM.dm_td_org,dm.dm_td_territory_indication,dm.dm_td_date_config,dm.dm_ims_tf_sales +-- 目标表:dm.dm_ims_td_org + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +create or replace temporary view dm_td_org_tmp as +SELECT + org_key, + mr_trty_tag, + district_code, + rsm_name, + rc_name, + p2.region_name, + p2.rsd_kcode, + p2.rsd_name, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bu_code = 'PC12' then 'PC09' + else p2.bu_code + end bu_code, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bu_report = 'EC' THEN 'Retail' + ELSE p2.bu_report + end bu_report, + CASE + WHEN p2.yyyymm >= '202601' + and p2.sub_bu_code = 'NA27' then 'NA06' + else p2.sub_bu_code + end sub_bu_code, + CASE + WHEN p2.yyyymm >= '202601' + and p2.sub_bu_name = 'EC' then 'Retail' + else p2.sub_bu_name + end sub_bu_name, + CASE + WHEN p2.yyyymm >= '202601' + and p2.sub_bu_name_en = 'EC' then 'Retail' + else p2.sub_bu_name_en + end sub_bu_name_en, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bu_name = 'EC' then 'Retail' + else p2.bu_name + end bu_name, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bu_name_en = 'EC' then 'Retail' + else p2.bu_name_en + end bu_name_en, + CASE + WHEN p2.yyyymm >= '202601' + and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' + else p2.nsd_kcode + end nsd_kcode, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bu_name = 'EC' + and p2.nsd_name = 'Vacant' then '李白杨' + else p2.nsd_name + end nsd_name, + CASE + WHEN p2.yyyymm >= '202601' + and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' + else p2.nsd_trty_code + end nsd_trty_code, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' + else p2.bsd_kcode + end bsd_kcode, + CASE + WHEN p2.yyyymm >= '202601' + and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' + else p2.bsd_trty_code + end bsd_trty_code, + p2.rsm_kcode, + p2.rc_code, + p2.rc_name_en, + p2.region_code, + p2.region_name_en, + BU_CATEGORY, + yyyymm, + mr_trty_code, + mr_kcode, + dsm_trty_code, + rsm_trty_code, + dsm_kcode, + rsd_trty_code +FROM + DM.dm_td_org P2 + +-- COMMAND ---------- + +--dm_org --使用和performance cvh 的org架构 +-- insert overwrite table tmp.tmp_ims_td_org +create or replace temporary view tmp_ims_td_org as +select distinct + rsm_trty_code, + rsm_kcode, + case + when rsm_name = 'Vacant' then concat (rsm_trty_code, '_V') + else rsm_name + end as rsm_name, + rsd_trty_code, + rsd_kcode, + case + when rsd_name = 'Vacant' then concat (rsd_trty_code, '_V') + else rsd_name + end as rsd_name, + nsd_trty_code, + nsd_kcode, + case + when nsd_name = 'Vacant' then concat (nsd_trty_code, '_V') + else nsd_name + end as nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t3.market, + t2.province_code as ims_audit_cod, + 1 as ims_city_ratio +from + dm_td_org_tmp t1 + left join ( + select distinct + t1.yyyymm, + t1.trty_code, + t2.city_name, + -- 20260210 Yusuo ADD + t2.province_code, + t4.ims_prod_cod, + t4.ims_pack_cod + from + dm.dm_td_territory_indication t1 + left join dwd.dwd_td_institution t2 on t1.inst_code = t2.inst_code + left join cdw_dwd_dim_product_wide t3 on t3.prd_family_cd = t1.family_code + left join dwd.dwd_td_imscode_azcode t4 on t3.prd_brand_cd = t4.brandcode + where + t1.bu not in ('CUBE', 'KA') + ) t2 on t2.trty_code = t1.mr_trty_code + and t2.yyyymm = t1.yyyymm + left join dws.dws_ims_td_market t3 on t2.ims_pack_cod = t3.pack_cod + --使用和performance cvh 的org架构 +where + t1.yyyymm in ( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) + +-- COMMAND ---------- + +--将还没有做出来AZ产品关系的market挂给所有的对应BU +-- insert into tmp_ims_td_org +create or replace temporary view tmp_ims_td_org1 as +select distinct + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Non AZ Region' as region_code, + 'Non AZ Region' as region_name, + 'Non AZ Region' as region_name_en, + 'Non AZ Region' as rc_code, + 'Non AZ Region' as rc_name, + 'Non AZ Region' as rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + null as ims_pack_cod, + t2.market, + ims_audit_cod, + ims_city_ratio +from + tmp_ims_td_org t1 + left join ( + select distinct + t2.market, + t2.bu + from + tmp_ims_td_org t1 + right join dwd.dwd_td_ims_market_ta_order t2 on t1.market = t2.market + where + t1.market is null + and t2.market <> 'IMS ALL Market' + ) t2 on t1.bu_name_en = t2.bu +where + t2.market is not null + +-- COMMAND ---------- + +--将所有的ROC的市场数据补全,同时根据市场找到对应BU +-- insert into tmp_ims_td_org +create or replace temporary view tmp_ims_td_org2 as +select distinct + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + t2.bu_code, + t2.bu_name, + t2.bu_name_en, + t2.bu_category, + t2.sub_bu_code, + t2.sub_bu_name, + t2.sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t2.market, + t2.ims_audit_cod, + t2.ims_city_ratio +from + ( + select + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Other Low Tiers' as region_code, + 'Other Low Tiers' as region_name, + 'Other Low Tiers' as region_name_en, + 'Other Low Tiers' as rc_code, + 'Other Low Tiers' as rc_name, + 'Other Low Tiers' as rc_name_en, + 'Other Low Tiers' as city_name, + 'ROC' as audit_cod + ) t1 + full join ( + select distinct + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + market, + ims_city_ratio, + 'Other Low Tiers' as city_name, + 'ROC' as ims_audit_cod + from + tmp_ims_td_org1 + where + bu_code is not null + --有销量的ROC数据 + and concat (market, '_ROC') in ( + select distinct + concat(market,'_ROC' ) market_audit_key from + dm.dm_tf_ext_unionall_market_sales + where DATA_SOURCE = 'IQVIA-CHPA(Monthly)' and + audit_cod = 'ROC' + ) + ) t2 on t1.audit_cod = t2.ims_audit_cod + +-- COMMAND ---------- + +--将所有未能挂上Org的市场数据补全,同时根据市场找到对应BU +-- insert into tmp_ims_td_org +create or replace temporary view tmp_ims_td_org3 as +select distinct + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + t2.bu_code, + t2.bu_name, + t2.bu_name_en, + t2.bu_category, + t2.sub_bu_code, + t2.sub_bu_name, + t2.sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t2.market, + t2.ims_audit_cod, + t2.ims_city_ratio +from + ( + select + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Non AZ Region' as region_code, + 'Non AZ Region' as region_name, + 'Non AZ Region' as region_name_en, + 'Non AZ Region' as rc_code, + 'Non AZ Region' as rc_name, + 'Non AZ Region' as rc_name_en + ) t1 + full join ( + select distinct + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + -- 'ALL' as sub_bu_code,'ALL' as sub_bu_name,'ALL' as sub_bu_name_en, + t2.audit_cod as ims_audit_cod, + null as city_name, + t2.market, + ims_city_ratio + from + tmp_ims_td_org2 t1 + inner join ( + --筛选出挂不上Org的市场城市,同时又有销量的 + select distinct + t2.market, + t2.audit_cod, + t3.bu + from + tmp_ims_td_org2 t1 + right join ( + select distinct + audit_cod, + market + from + dm.dm_tf_ext_unionall_market_sales + where DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + ) t2 on concat (t1.market, '_', t1.ims_audit_cod) = concat (t2.market, '_', t2.audit_cod) + left join dwd.dwd_td_ims_market_ta_order t3 on t2.market = t3.market + where + concat (t1.market, '_', t1.ims_audit_cod) is null + and t2.market <> 'IMS ALL Market' + ) t2 on t1.bu_name_en = t2.bu + ) t2 +where + t2.bu_code is not null + +-- COMMAND ---------- + +create or replace temporary view tmp_ims_td_org4 as +select + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + ims_pack_cod, + market, + ims_audit_cod, + ims_city_ratio +from + tmp_ims_td_org +union all +select + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + ims_pack_cod, + market, + ims_audit_cod, + ims_city_ratio +from + tmp_ims_td_org1 +union all +select + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + ims_pack_cod, + market, + ims_audit_cod, + ims_city_ratio +from + tmp_ims_td_org2 +union all +select + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + ims_pack_cod, + market, + ims_audit_cod, + ims_city_ratio +from + tmp_ims_td_org3 + +-- COMMAND ---------- + +insert overwrite table dm.dm_ims_td_org +select distinct + concat (t1.market, '_', t2.audit_cod) as ORG_KEY, + t1.rsm_trty_code, + t1.rsm_kcode, + t1.rsm_name, + t1.rsd_trty_code, + t1.rsd_kcode, + t1.rsd_name, + t1.nsd_trty_code, + t1.nsd_kcode, + t1.nsd_name, + t1.region_code, + t1.region_name, + t1.region_name_en, + t1.rc_code, + t1.rc_name, + t1.rc_name_en, + t1.bu_code, + t1.bu_name, + t1.bu_name_en, + t1.bu_category, + t1.sub_bu_code, + t1.sub_bu_name, + t1.sub_bu_name_en, + t1.sub_bu_code as sub_bu_code_auth, --前端权限配置需要的字段 + t1.bu_code as bu_code_auth, --前端权限配置需要的字段 + t2.audit_cod, + t2.audit_des, + t2.audit_des_c, + t2.Province, + t2.Province_C, + t2.RegionCenter, + t1.market, + concat (t1.market, '_', t2.audit_cod) as market_audit_key, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp_ims_td_org4 t1 + left join dws.dws_ims_td_geo t2 on t1.ims_audit_cod = t2.audit_cod + --where t1.market is not null and t1.ims_audit_cod is not null + + /* 20260409 chenwu IMS ALL Market 不需要了 +union all +select distinct + concat ('IMS ALL Market_', t2.audit_cod) as ORG_KEY, + t1.rsm_trty_code, + t1.rsm_kcode, + t1.rsm_name, + t1.rsd_trty_code, + t1.rsd_kcode, + t1.rsd_name, + t1.nsd_trty_code, + t1.nsd_kcode, + t1.nsd_name, + t1.region_code, + t1.region_name, + t1.region_name_en, + t1.rc_code, + t1.rc_name, + t1.rc_name_en, + t1.bu_code, + t1.bu_name, + t1.bu_name_en, + t1.bu_category, + t1.sub_bu_code, + t1.sub_bu_name, + t1.sub_bu_name_en, + 'ALL' as sub_bu_code_auth, + 'ALL' as bu_code_auth, + t2.audit_cod, + t2.audit_des, + t2.audit_des_c, + t2.Province, + t2.Province_C, + t2.RegionCenter, + 'IMS ALL Market' as market, + concat ('IMS ALL Market_', t2.audit_cod) as market_audit_key, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp_ims_td_org4 t1 + left join dws.dws_ims_td_geo t2 on t1.ims_audit_cod = t2.audit_cod +where + t1.market is not null + and t1.ims_audit_cod is not null + */ \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_org_hvh.sql b/CHPA/03 dm_ims_td_org_hvh.sql new file mode 100644 index 0000000..5fe746f --- /dev/null +++ b/CHPA/03 dm_ims_td_org_hvh.sql @@ -0,0 +1,463 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +--dm_org --使用和performance cvh 的org架构 +insert overwrite table tmp.tmp_ims_td_org_hvh +select distinct + t1.yyyymm, + dsm_trty_code, + dsm_kcode, + case + when dsm_name = 'Vacant' then concat (dsm_trty_code, '_V') + else dsm_name + end as dsm_name, + rsm_trty_code, + rsm_kcode, + case + when rsm_name = 'Vacant' then concat (rsm_trty_code, '_V') + else rsm_name + end as rsm_name, + rsd_trty_code, + rsd_kcode, + case + when rsd_name = 'Vacant' then concat (rsd_trty_code, '_V') + else rsd_name + end as rsd_name, + nsd_trty_code, + nsd_kcode, + case + when nsd_name = 'Vacant' then concat (nsd_trty_code, '_V') + else nsd_name + end as nsd_name, + district_code, + district_name, + district_name_en, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t3.market, + t2.province_code as ims_audit_cod, + --福厦泉 苏锡 珠三角 对应多个city的情况的拆分比 + -- 20260210 Yusuo Update + -- case when t4.ratio is null then 1 else t4.ratio end as ims_city_ratio + 1 as ims_city_ratio +from + dm.dm_td_org t1 + left join ( + select distinct + t1.yyyymm, + t1.trty_code, + t2.city_name, + t2.province_code, + t4.ims_prod_cod, + t4.ims_pack_cod + from + dm.dm_td_territory_indication t1 + left join dwd.dwd_td_institution t2 on t1.inst_code = t2.inst_code + left join cdw_dwd_dim_product_wide t3 on t3.prd_family_cd = t1.family_code + left join dwd.dwd_td_imscode_azcode t4 on t3.prd_brand_cd = t4.brandcode + where + t1.bu not in ('CUBE', 'KA') + ) t2 on t2.trty_code = t1.mr_trty_code + and t2.yyyymm = t1.yyyymm + left join dws.dws_ims_td_market t3 on t2.ims_pack_cod = t3.pack_cod + -- left join dws.dws_td_ims_city_mapping t4 on t2.city_name=concat(t4.city_c_d,'市') + --使用和performance cvh 的org架构 +where + left (t1.yyyymm, 4) in ( + select + left (key_value, 4) + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) + +-- COMMAND ---------- + + --将还没有做出来AZ产品关系的market挂给所有的对应BU +insert into + tmp.tmp_ims_td_org_hvh +select distinct + t1.yyyymm, + 'Vacant' as dsm_trty_code, + 'Vacant' as dsm_kcode, + 'Vacant' as dsm_name, + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Non AZ Region' as district_code, + 'Non AZ Region' as district_name, + 'Non AZ Region' as district_name_en, + 'Non AZ Region' as region_code, + 'Non AZ Region' as region_name, + 'Non AZ Region' as region_name_en, + 'Non AZ Region' as rc_code, + 'Non AZ Region' as rc_name, + 'Non AZ Region' as rc_name_en, + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + city_name, + null as ims_pack_cod, + t2.market, + ims_audit_cod, + ims_city_ratio +from + tmp.tmp_ims_td_org_hvh t1 + left join ( + select distinct + t2.market, + t2.bu + from + tmp.tmp_ims_td_org_hvh t1 + right join dwd.dwd_td_ims_market_ta_order t2 on t1.market = t2.market + where + t1.market is null + and t2.market <> 'IMS ALL Market' + ) t2 on t1.bu_name_en = t2.bu +where + t2.market is not null + +-- COMMAND ---------- + + --将所有的ROC的市场数据补全,同时根据市场找到对应BU +insert into + tmp.tmp_ims_td_org_hvh +select distinct + yyyymm, + dsm_trty_code, + dsm_kcode, + dsm_name, + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + district_code, + district_name, + district_name_en, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + t2.bu_code, + t2.bu_name, + t2.bu_name_en, + t2.bu_category, + t2.sub_bu_code, + t2.sub_bu_name, + t2.sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t2.market, + t2.ims_audit_cod, + t2.ims_city_ratio +from + ( + select + 'Vacant' as dsm_trty_code, + 'Vacant' as dsm_kcode, + 'Vacant' as dsm_name, + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Non AZ Region' as district_code, + 'Non AZ Region' as district_name, + 'Non AZ Region' as district_name_en, + 'Other Low Tiers' as region_code, + 'Other Low Tiers' as region_name, + 'Other Low Tiers' as region_name_en, + 'Other Low Tiers' as rc_code, + 'Other Low Tiers' as rc_name, + 'Other Low Tiers' as rc_name_en, + 'Other Low Tiers' as city_name, + 'ROC' as audit_cod + ) t1 + full join ( + select distinct + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + -- 'ALL' as sub_bu_code,'ALL' as sub_bu_name,'ALL' as sub_bu_name_en, + market, + ims_city_ratio, + yyyymm, + 'Other Low Tiers' as city_name, + 'ROC' as ims_audit_cod + from + tmp.tmp_ims_td_org_hvh + -- )t2 --on t1.bu=t2.bu_name_en + where + bu_code is not null + --有销量的ROC数据 + and concat (market, '_ROC') in ( + select distinct + market_audit_key + from + dm.dm_ims_tf_sales + where + audit_cod = 'ROC' + ) + ) t2 on t1.audit_cod = t2.ims_audit_cod + +-- COMMAND ---------- + + --将所有未能挂上Org的市场数据补全,同时根据市场找到对应BU +insert into + tmp.tmp_ims_td_org_hvh +select distinct + yyyymm, + dsm_trty_code, + dsm_kcode, + dsm_name, + rsm_trty_code, + rsm_kcode, + rsm_name, + rsd_trty_code, + rsd_kcode, + rsd_name, + nsd_trty_code, + nsd_kcode, + nsd_name, + district_code, + district_name, + district_name_en, + region_code, + region_name, + region_name_en, + rc_code, + rc_name, + rc_name_en, + t2.bu_code, + t2.bu_name, + t2.bu_name_en, + t2.bu_category, + t2.sub_bu_code, + t2.sub_bu_name, + t2.sub_bu_name_en, + t2.city_name, + null as ims_pack_cod, + t2.market, + t2.ims_audit_cod, + t2.ims_city_ratio +from + ( + select + 'Vacant' as dsm_trty_code, + 'Vacant' as dsm_kcode, + 'Vacant' as dsm_name, + 'Vacant' as rsm_trty_code, + 'Vacant' as rsm_kcode, + 'Vacant' as rsm_name, + 'Vacant' as rsd_trty_code, + 'Vacant' as rsd_kcode, + 'Vacant' as rsd_name, + 'Vacant' as nsd_trty_code, + 'Vacant' as nsd_kcode, + 'Vacant' as nsd_name, + 'Non AZ Region' as district_code, + 'Non AZ Region' as district_name, + 'Non AZ Region' as district_name_en, + 'Non AZ Region' as region_code, + 'Non AZ Region' as region_name, + 'Non AZ Region' as region_name_en, + 'Non AZ Region' as rc_code, + 'Non AZ Region' as rc_name, + 'Non AZ Region' as rc_name_en + ) t1 + full join ( + select distinct + bu_code, + bu_name, + bu_name_en, + bu_category, + sub_bu_code, + sub_bu_name, + sub_bu_name_en, + -- 'ALL' as sub_bu_code,'ALL' as sub_bu_name,'ALL' as sub_bu_name_en, + t2.audit_cod as ims_audit_cod, + null as city_name, + t1.yyyymm, + t2.market, + ims_city_ratio + from + tmp.tmp_ims_td_org_hvh t1 + inner join ( + --筛选出挂不上Org的市场城市,同时又有销量的 + select distinct + t2.market, + t2.audit_cod, + t3.bu + from + tmp.tmp_ims_td_org_hvh t1 + right join ( + select distinct + audit_cod, + market + from + dm.dm_ims_tf_sales + ) t2 on concat (t1.market, '_', t1.ims_audit_cod) = concat (t2.market, '_', t2.audit_cod) + left join dwd.dwd_td_ims_market_ta_order t3 on t2.market = t3.market + where + concat (t1.market, '_', t1.ims_audit_cod) is null + and t2.market <> 'IMS ALL Market' + ) t2 on t1.bu_name_en = t2.bu + ) t2 +where + t2.bu_code is not null + +-- COMMAND ---------- + + insert overwrite table dm.dm_ims_td_org_hvh +select distinct + t1.yyyymm, + concat ( + t1.market, + '_', + t2.audit_cod, + '_', + right (t1.yyyymm, 2) + ) as ORG_KEY, + t1.dsm_trty_code, + t1.dsm_kcode, + t1.dsm_name, + t1.rsm_trty_code, + t1.rsm_kcode, + t1.rsm_name, + t1.rsd_trty_code, + t1.rsd_kcode, + t1.rsd_name, + t1.nsd_trty_code, + t1.nsd_kcode, + t1.nsd_name, + t1.district_code, + t1.district_name, + t1.district_name_en, + t1.region_code, + t1.region_name, + t1.region_name_en, + t1.rc_code, + t1.rc_name, + t1.rc_name_en, + t1.bu_code, + t1.bu_name, + t1.bu_name_en, + t1.bu_category, + t1.sub_bu_code, + t1.sub_bu_name, + t1.sub_bu_name_en, + t1.sub_bu_code as sub_bu_code_auth, --前端权限配置需要的字段 + t1.bu_code as bu_code_auth, --前端权限配置需要的字段 + t2.audit_cod, + t2.audit_des, + t2.audit_des_c, + t2.Province, + t2.Province_C, + t2.RegionCenter, + t1.market, + concat (t1.market, '_', t2.audit_cod) as market_audit_key, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp.tmp_ims_td_org_hvh t1 + left join dws.dws_ims_td_geo t2 on t1.ims_audit_cod = t2.audit_cod + --where t1.market is not null and t1.ims_audit_cod is not null +union all +select distinct + t1.yyyymm, + concat ( + 'IMS ALL Market', + '_', + t2.audit_cod, + '_', + right (t1.yyyymm, 2) + ) as ORG_KEY, + t1.dsm_trty_code, + t1.dsm_kcode, + t1.dsm_name, + t1.rsm_trty_code, + t1.rsm_kcode, + t1.rsm_name, + t1.rsd_trty_code, + t1.rsd_kcode, + t1.rsd_name, + t1.nsd_trty_code, + t1.nsd_kcode, + t1.nsd_name, + t1.district_code, + t1.district_name, + t1.district_name_en, + t1.region_code, + t1.region_name, + t1.region_name_en, + t1.rc_code, + t1.rc_name, + t1.rc_name_en, + t1.bu_code, + t1.bu_name, + t1.bu_name_en, + t1.bu_category, + t1.sub_bu_code, + t1.sub_bu_name, + t1.sub_bu_name_en, + 'ALL' as sub_bu_code_auth, + 'ALL' as bu_code_auth, + t2.audit_cod, + t2.audit_des, + t2.audit_des_c, + t2.Province, + t2.Province_C, + t2.RegionCenter, + 'IMS ALL Market' as market, + concat ('IMS ALL Market_', t2.audit_cod) as market_audit_key, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp.tmp_ims_td_org_hvh t1 + left join dws.dws_ims_td_geo t2 on t1.ims_audit_cod = t2.audit_cod \ No newline at end of file diff --git a/CHPA/03 dm_ims_td_pack_property.sql b/CHPA/03 dm_ims_td_pack_property.sql new file mode 100644 index 0000000..9950825 --- /dev/null +++ b/CHPA/03 dm_ims_td_pack_property.sql @@ -0,0 +1,1679 @@ +-- Databricks notebook source +-- 源表:DWS.DWS_IMS_TD_ATC_CN,DWS.DWS_IMS_TD_NFC_CN,DWS.DWS_IMS_TD_CORP_CN,DWS.DWS_IMS_TD_MANU_CN,DWS.DWS_IMS_TD_PROD_CN,DWD.DWD_IMS_TD_MOLECULE,DWD.DWD_GND_IMS_TBLMARKET_TA_MAP,DWS.DWS_IMS_TD_MARKET,DWD.DWD_IMS_TD_PACK_PROPERTY,DWD.DWD_GND_DEPT_PACK_PROPERTY,DWD.DWD_GND_IMS_TBLMARKET,DWD.DWD_GND_IMS_TBLKEYCOMPETITOR,DWD.DWD_GND_TBLCLASS,TMP.TMP_IMS_TF_FACT_SALES,DWD.DWD_GND_IMS_TBLBRANDRATIO,DWS.DWS_IMS_TD_PACK_PROPERTY,DWS.DWS_IMS_TD_MARKET,TMP.TMP_IMS_TD_MARKET_RATIO1 +-- 目标表:DWS.DWS_IMS_TD_PACK_PROPERTY,DM.DM_IMS_TD_PACK_PROPERTY,DWS.DWS_IMS_TD_MARKET,DWS.DWS_IMS_TD_MARKET_RATIO,TMP.TMP_IMS_TD_MARKET_RATIO1 + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_ATC +CREATE OR REPLACE TEMPORARY VIEW DIM_ATC AS +SELECT DISTINCT + 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 +FROM + DWS.DWS_IMS_TD_ATC_CN + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_NFC +CREATE OR REPLACE TEMPORARY VIEW DIM_NFC AS +SELECT DISTINCT + APP1_COD, + APP1_DES, + APP1_DES_C, + APP2_COD, + APP2_DES, + APP2_DES_C, + APP3_COD, + APP3_DES, + APP3_DES_C +FROM + DWS.DWS_IMS_TD_NFC_CN + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_CORP + CREATE + OR REPLACE TEMPORARY VIEW DIM_CORP AS +SELECT DISTINCT + CORP_COD, + CORP_DES_CN +FROM + DWS.DWS_IMS_TD_CORP_CN + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_MANU + CREATE + OR REPLACE TEMPORARY VIEW DIM_MANU AS +SELECT DISTINCT + MANU_COD, + MANU_DES_CN +FROM + DWS.DWS_IMS_TD_MANU_CN + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_PROD + CREATE + OR REPLACE TEMPORARY VIEW DIM_PROD AS +SELECT DISTINCT + PROD_COD, + PROD_DES, + PROD_DES_C, + CMPS_DES_C +FROM + DWS.DWS_IMS_TD_PROD_CN + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_MOLECULE + CREATE + OR REPLACE TEMPORARY VIEW DIM_MOLECULE AS +SELECT DISTINCT + MOLECULE_NAME, + FAMILY_CODE, + FAMILY_NAME +FROM + DWD.DWD_IMS_TD_MOLECULE + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_MARKET_TA_MAPPING + CREATE + OR REPLACE TEMPORARY VIEW DIM_MARKET_TA_MAPPING AS +SELECT DISTINCT + MARKET, + TA +FROM + DWD.DWD_GND_IMS_TBLMARKET_TA_MAP + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_MARKET + CREATE + OR REPLACE TEMPORARY VIEW DIM_MARKET AS +SELECT DISTINCT + PACK_COD, + PROD_COD, + MARKET, + KEY_COMPETITOR +FROM + DWS.DWS_IMS_TD_MARKET + +-- COMMAND ---------- + +-- DBTITLE 1,DIM_PACK_PROPERTY + CREATE + OR REPLACE TEMPORARY VIEW DIM_PACK_PROPERTY AS +SELECT DISTINCT + PROD_COD +FROM + DWD.DWD_IMS_TD_PACK_PROPERTY +WHERE + CORP_COD = 'A5Z' + +-- COMMAND ---------- + +-- CREATE or replace TABLE catalog_e2_ngbi_qas.dws.dws_ims_td_pack_property ( +-- PACK_COD STRING, +-- PACK_DES STRING, +-- STGH_DES STRING, +-- PACK_LCH STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- PROD_COD STRING, +-- PROD_DES STRING, +-- PROD_DES_C STRING, +-- CMPS_COD STRING, +-- CMPS_DES STRING, +-- CMPS_DES_C STRING, +-- ATC1_COD STRING, +-- ATC2_COD STRING, +-- ATC3_COD STRING, +-- ATC4_COD STRING, +-- APP1_COD STRING, +-- APP2_COD STRING, +-- APP3_COD STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_Entry_Date STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_COD STRING, +-- MANU_DES STRING, +-- MANU_DES_C STRING, +-- MNFL_COD STRING, +-- MNFL_DES STRING, +-- CORP_COD STRING, +-- CORP_DES STRING, +-- CORP_DES_C STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_des STRING, +-- app3_des_c STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_ims_td_pack_property' + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite dws_ims_td_pack_property +--pack 属性表逻辑 +insert overwrite table dws.dws_ims_td_pack_property +select distinct + -- case + -- when dm.Market is null then concat ('Non Market_', dp.PACK_COD) + -- else concat (dm.Market, '_', dp.PACK_COD) + -- end as MARKET_PACK_KEY, + dp.PACK_COD, + dp.PACK_DES, + dp.STGH_DES, + dp.PACK_LCH, + dm1.Family_Code, + dm1.Family_Name, + dp.PROD_COD, + dp1.PROD_DES, + dp1.PROD_DES_C, + dp.CMPS_COD, + dp.CMPS_DES, + dp1.CMPS_DES_C as CMPS_DES_C, --20240530正式新增字段 + dp.ATC1_COD, + dp.ATC2_COD, + dp.ATC3_COD, + dp.ATC4_COD, + dp.APP1_COD, + dp.APP2_COD, + dp.APP3_COD, + dp.BIO_DESC, + dp.GENE_ORIG_DESC, + dp.ETH_OTC_DESC, + dp.NRDL_DESC, + dp.NRDL_Entry_Date, + dp.EDL_DESC, + dp.TCM_DESC, + dp.PAED_DESC, + dp.GQCE_DESC, + dp.VBP_DESC as VBP_DESC_V, --20240530正式新增字段 + CASE + WHEN dp.VBP_DESC IN ('VBP-IN', 'VBP-N/A') THEN 'VBP' + ELSE 'Non VBP' + END VBP_DESC, + dp.MANU_COD, + dp.MANU_DES, + manu.MANU_DES_CN as MANU_DES_C, --20240530正式新增字段 + case + when dp.MNFL_COD = 'L' then 'L' + else 'M' + end MNFL_COD, + case + when dp.MNFL_DES = 'Local' then 'LOCAL' + else 'MNC' + end MNFL_DES, + dp.CORP_COD, + dp.CORP_DES, + crop.CORP_DES_CN as CORP_DES_C, --20240530正式新增字段 + dp.BrandType, + -- case + -- when dm.Market is null then 'Non Market' + -- else dm.Market + -- end as MARKET, + -- NVL (dm.KEY_COMPETITOR, 'Others') KEY_COMPETITOR, + case + when ta.PROD_COD is not null then 'Y' + else 'N' + end as IS_AZ, + null as AZ_MAIN, + -- case + -- when dmt.TA is null then 'Others MKT' + -- else 'AZ Related MKT' + -- end as AZ_Related, + t2.atc1_des, + t2.atc1_des_c, + t3.atc2_des, + t3.atc2_des_c, + t4.atc3_des, + t4.atc3_des_c, + t5.atc4_des, + t5.atc4_des_c, + n1.app1_des, + n1.app1_des_c, + n2.app2_des, + n2.app2_des_c, + n3.app3_des, + n3.app3_des_c +from + dwd.dwd_ims_td_pack_property dp + -- left join DIM_MARKET AS dm on dp.PACK_COD = dm.PACK_COD + -- and dp.PROD_COD = dm.PROD_COD + --将AZ在卖的产品全部给打上AZ标签,包括其他公司在卖的产品 + left join DIM_PACK_PROPERTY AS ta on dp.prod_cod = ta.prod_cod + -- left join DIM_MARKET_TA_MAPPING AS dmt on dmt.Market = dm.Market + left join DIM_MOLECULE AS dm1 on dp.CMPS_DES = dm1.Molecule_Name + left join DIM_PROD dp1 on dp1.PROD_COD = dp.PROD_COD + left join ( + SELECT DISTINCT + ATC1_COD, + ATC1_DES, + ATC1_DES_C + FROM + DIM_ATC + ) AS t2 on dp.atc1_cod = t2.atc1_cod + left join ( + SELECT DISTINCT + ATC2_COD, + ATC2_DES, + ATC2_DES_C + FROM + DIM_ATC + ) AS t3 on dp.atc2_cod = t3.atc2_cod + left join ( + SELECT DISTINCT + ATC3_COD, + ATC3_DES, + ATC3_DES_C + FROM + DIM_ATC + ) AS t4 on dp.atc3_cod = t4.atc3_cod + left join ( + SELECT DISTINCT + ATC4_COD, + ATC4_DES, + ATC4_DES_C + FROM + DIM_ATC + ) t5 on dp.atc4_cod = t5.atc4_cod + left join ( + SELECT DISTINCT + APP1_COD, + APP1_DES, + APP1_DES_C + FROM + DIM_NFC + ) AS n1 on dp.app1_cod = n1.app1_cod + left join ( + SELECT DISTINCT + APP2_COD, + APP2_DES, + APP2_DES_C + FROM + DIM_NFC + ) AS n2 on dp.app2_cod = n2.app2_cod + left join ( + SELECT DISTINCT + APP3_COD, + APP3_DES, + APP3_DES_C + FROM + DIM_NFC + ) AS n3 on dp.app3_cod = n3.app3_cod + left join DIM_CORP AS crop on dp.CORP_COD = crop.CORP_COD --20240530正式新增字段CORP_DES_C + left join DIM_MANU AS manu on dp.MANU_COD = manu.MANU_COD --20240530正式新增字段MANU_DES_C +; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # FB数据 + +-- COMMAND ---------- + +-- DBTITLE 1,FB_RAW_DATA +CREATE +OR REPLACE TEMPORARY VIEW FB_RAW_DATA AS +select DISTINCT + IQVIA_PACK_CODE as PACK_COD, + IQVIA_PROD_CODE as PROD_COD, + PACK_COD as FB_PACK_COD, + 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_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, + PROD_DES, + PROD_DES_C, + TCM_DESC, + VBP_DESC, + COUNTINGUNIT, + NULL as NRDL_Entry_Date, + null as BrandType + ,null as Is_AZ + ,null as AZ_MAIN + ,null as AZ_Related + ,null as Family_Code + ,null as Family_Name +from + dwd.dwd_gnd_dept_pack_property + +-- COMMAND ---------- + +-- DBTITLE 1,FB_MARKET +-- CREATE +-- OR REPLACE TEMPORARY VIEW FB_MARKET AS +-- -- select distinct +-- -- CONCAT (t2.market, '_', t1.PACK_COD) AS MARKET_PACK_KEY, +-- -- t2.market, +-- -- CASE +-- -- WHEN t2.extend_market_ratio IS NULL THEN '1' +-- -- ELSE t2.extend_market_ratio +-- -- END AS Market_Ratio, +-- -- t1.* +-- -- from +-- -- ( +-- select +-- t1.iqvia_pack_code as PACK_COD, +-- t1.PACK_DES, +-- t1.STGH_DES, +-- t1.PACK_LCH, +-- null as Family_Code, +-- null as Family_Name, +-- t1.iqvia_prod_code as PROD_COD, +-- t1.PROD_DES, +-- t1.PROD_DES_C, +-- t1.CMPS_COD, +-- t1.CMPS_DES, +-- t1.CMPS_DES_C, +-- t1.ATC1_COD, +-- t1.ATC2_COD, +-- t1.ATC3_COD, +-- t1.ATC4_COD, +-- t1.APP1_COD, +-- t1.APP2_COD, +-- t1.APP3_COD, +-- t1.BIO_DESC, +-- t1.GENE_ORIG_DESC, +-- t1.ETH_OTC_DESC, +-- t1.NRDL_DESC, +-- null as NRDL_Entry_Date, +-- t1.EDL_DESC, +-- t1.TCM_DESC, +-- t1.PAED_DESC, +-- t1.GQCE_DESC, +-- t1.VBP_DESC, +-- t1.MANU_COD, +-- t1.MANU_DES, +-- t1.MANU_DES_C, +-- t1.MNFL_COD, +-- t1.MNFL_DES, +-- t1.CORP_COD, +-- t1.CORP_DES, +-- t1.CORP_DES_C, +-- null as BrandType, +-- null as IS_AZ, +-- null as AZ_MAIN, +-- null as AZ_Related, +-- t1.atc1_des, +-- t1.atc1_des_c, +-- t1.atc2_des, +-- t1.atc2_des_c, +-- t1.atc3_des, +-- t1.atc3_des_c, +-- t1.atc4_des, +-- t1.atc4_des_c, +-- t1.app1_des, +-- t1.app1_des_c, +-- t1.app2_des, +-- t1.app2_des_c, +-- t1.app3_des, +-- t1.app3_des_c, +-- countingunit, +-- null as ETL_INSERT_DT, +-- null as ETL_UPDATE_DT +-- from +-- FB_RAW_DATA t1 +-- -- ) t1 +-- -- left join ( +-- -- select +-- -- * +-- -- from +-- -- dwd.dwd_gnd_ims_tblmarket +-- -- WHERE +-- -- Extend_Market IS NULL +-- -- AND ( +-- -- NOT_IN_FLAG IS NULL +-- -- or NOT_IN_FLAG = '1' +-- -- ) +-- -- ) t2 on COALESCE(t1.ATC1_COD, '') = case +-- -- when t2.ATC1_Code is null then COALESCE(t1.ATC1_COD, '') +-- -- else t2.ATC1_Code +-- -- end +-- -- and COALESCE(t1.ATC2_COD, '') = case +-- -- when t2.ATC2_Code is null then COALESCE(t1.ATC2_COD, '') +-- -- else t2.ATC2_Code +-- -- end +-- -- and COALESCE(t1.ATC3_COD, '') = case +-- -- when t2.ATC3_Code is null then COALESCE(t1.ATC3_COD, '') +-- -- else t2.ATC3_Code +-- -- end +-- -- and COALESCE(t1.ATC4_COD, '') = case +-- -- when t2.ATC4_Code is null then COALESCE(t1.ATC4_COD, '') +-- -- else t2.ATC4_Code +-- -- end +-- -- and COALESCE(t1.APP1_COD, '') = case +-- -- when t2.NFC1_Code is null then COALESCE(t1.APP1_COD, '') +-- -- else t2.NFC1_Code +-- -- end +-- -- and COALESCE(t1.APP2_COD, '') = case +-- -- when t2.NFC2_Code is null then COALESCE(t1.APP2_COD, '') +-- -- else t2.NFC2_Code +-- -- end +-- -- and COALESCE(t1.APP3_COD, '') = case +-- -- when t2.NFC3_Code is null then COALESCE(t1.APP3_COD, '') +-- -- else t2.NFC3_Code +-- -- end +-- -- and COALESCE(t1.CORP_COD, '') = case +-- -- when t2.corporation_code is null then COALESCE(t1.CORP_COD, '') +-- -- else t2.corporation_code +-- -- end +-- -- and COALESCE(t1.MANU_COD, '') = case +-- -- when t2.Manufacturer_Code is null then COALESCE(t1.MANU_COD, '') +-- -- else t2.Manufacturer_Code +-- -- end +-- -- and COALESCE(t1.PROD_COD, '') = case +-- -- when t2.Product_Code is null then COALESCE(t1.PROD_COD, '') +-- -- else t2.Product_Code +-- -- end +-- -- and COALESCE(t1.PACK_COD, '') = case +-- -- when t2.Pack_Code is null then COALESCE(t1.PACK_COD, '') +-- -- else t2.Pack_Code +-- -- end +-- -- and COALESCE(t1.STGH_DES, '') = case +-- -- when t2.Strength is null then COALESCE(t1.STGH_DES, '') +-- -- else t2.Strength +-- -- end +-- -- and COALESCE(t1.CMPS_COD, '') = case +-- -- when t2.Molecule_Code is null then COALESCE(t1.CMPS_COD, '') +-- -- else t2.Molecule_Code +-- -- end +-- -- left join ( +-- -- select +-- -- * +-- -- from +-- -- dwd.dwd_gnd_ims_tblmarket +-- -- WHERE +-- -- Extend_Market IS NULL +-- -- AND NOT_IN_FLAG = '0' +-- -- ) t3 on COALESCE(t1.ATC1_COD, '') = case +-- -- when t3.ATC1_Code is null then COALESCE(t1.ATC1_COD, '') +-- -- else t3.ATC1_Code +-- -- end +-- -- and COALESCE(t1.ATC2_COD, '') = case +-- -- when t3.ATC2_Code is null then COALESCE(t1.ATC2_COD, '') +-- -- else t3.ATC2_Code +-- -- end +-- -- and COALESCE(t1.ATC3_COD, '') = case +-- -- when t3.ATC3_Code is null then COALESCE(t1.ATC3_COD, '') +-- -- else t3.ATC3_Code +-- -- end +-- -- and COALESCE(t1.ATC4_COD, '') = case +-- -- when t3.ATC4_Code is null then COALESCE(t1.ATC4_COD, '') +-- -- else t3.ATC4_Code +-- -- end +-- -- and COALESCE(t1.APP1_COD, '') = case +-- -- when t3.NFC1_Code is null then COALESCE(t1.APP1_COD, '') +-- -- else t3.NFC1_Code +-- -- end +-- -- and COALESCE(t1.APP2_COD, '') = case +-- -- when t3.NFC2_Code is null then COALESCE(t1.APP2_COD, '') +-- -- else t3.NFC2_Code +-- -- end +-- -- and COALESCE(t1.APP3_COD, '') = case +-- -- when t3.NFC3_Code is null then COALESCE(t1.APP3_COD, '') +-- -- else t3.NFC3_Code +-- -- end +-- -- and COALESCE(t1.CORP_COD, '') = case +-- -- when t3.corporation_code is null then COALESCE(t1.CORP_COD, '') +-- -- else t3.corporation_code +-- -- end +-- -- and COALESCE(t1.MANU_COD, '') = case +-- -- when t3.Manufacturer_Code is null then COALESCE(t1.MANU_COD, '') +-- -- else t3.Manufacturer_Code +-- -- end +-- -- and COALESCE(t1.PROD_COD, '') = case +-- -- when t3.Product_Code is null then COALESCE(t1.PROD_COD, '') +-- -- else t3.Product_Code +-- -- end +-- -- and COALESCE(t1.PACK_COD, '') = case +-- -- when t3.Pack_Code is null then COALESCE(t1.PACK_COD, '') +-- -- else t3.Pack_Code +-- -- end +-- -- and COALESCE(t1.STGH_DES, '') = case +-- -- when t3.Strength is null then COALESCE(t1.STGH_DES, '') +-- -- else t3.Strength +-- -- end +-- -- and COALESCE(t1.CMPS_COD, '') = case +-- -- when t3.Molecule_Code is null then COALESCE(t1.CMPS_COD, '') +-- -- else t3.Molecule_Code +-- -- end +-- -- and t2.market = t3.market +-- -- where +-- -- t2.market is not null +-- -- and t3.market is null + +-- COMMAND ---------- + +-- DBTITLE 1,FB_COMPETITOR +-- CREATE +-- OR REPLACE TEMPORARY VIEW FB_COMPETITOR AS +-- --可以按照MARKET_PACK_KEY去重 +-- select distinct +-- upper(t2.keycompetitor) as Key_Competitor, +-- t1.*, +-- T2.NO1 +-- from +-- FB_MARKET t1 +-- left join ( +-- select +-- ROW_NUMBER() OVER ( +-- ORDER BY +-- CASE +-- WHEN ATC1_Code IS NOT NULL THEN 1 +-- WHEN ATC2_Code IS NOT NULL THEN 2 +-- WHEN ATC3_Code IS NOT NULL THEN 3 +-- WHEN ATC4_Code IS NOT NULL THEN 4 +-- WHEN Molecule_Code IS NOT NULL THEN 5 +-- WHEN Product_Code IS NOT NULL THEN 6 +-- WHEN Pack_Code IS NOT NULL THEN 7 +-- ELSE 999 +-- END, +-- CASE +-- WHEN NFC1_CODE IS NULL THEN 0 +-- ELSE 1 +-- END, +-- CASE +-- WHEN NFC2_CODE IS NULL THEN 0 +-- ELSE 1 +-- END, +-- CASE +-- WHEN NFC2_CODE IS NULL THEN 0 +-- ELSE 1 +-- END, +-- CASE +-- WHEN NFC3_CODE IS NULL THEN 0 +-- ELSE 1 +-- END +-- ) AS no1, +-- * +-- from +-- dwd.dwd_gnd_ims_tblkeycompetitor +-- ) t2 on COALESCE(t1.ATC1_COD, '') = case +-- when t2.ATC1_Code is null then COALESCE(t1.ATC1_COD, '') +-- else t2.ATC1_Code +-- end +-- and COALESCE(t1.ATC2_COD, '') = case +-- when t2.ATC2_Code is null then COALESCE(t1.ATC2_COD, '') +-- else t2.ATC2_Code +-- end +-- and COALESCE(t1.ATC3_COD, '') = case +-- when t2.ATC3_Code is null then COALESCE(t1.ATC3_COD, '') +-- else t2.ATC3_Code +-- end +-- and COALESCE(t1.ATC4_COD, '') = case +-- when t2.ATC4_Code is null then COALESCE(t1.ATC4_COD, '') +-- else t2.ATC4_Code +-- end +-- and COALESCE(t1.APP1_COD, '') = case +-- when t2.NFC1_Code is null then COALESCE(t1.APP1_COD, '') +-- else t2.NFC1_Code +-- end +-- and COALESCE(t1.APP2_COD, '') = case +-- when t2.NFC2_Code is null then COALESCE(t1.APP2_COD, '') +-- else t2.NFC2_Code +-- end +-- and COALESCE(t1.APP3_COD, '') = case +-- when t2.NFC3_Code is null then COALESCE(t1.APP3_COD, '') +-- else t2.NFC3_Code +-- end +-- and COALESCE(t1.CORP_COD, '') = case +-- when t2.corporation_code is null then COALESCE(t1.CORP_COD, '') +-- else t2.corporation_code +-- end +-- and COALESCE(t1.MANU_COD, '') = case +-- when t2.Manufacturer_Code is null then COALESCE(t1.MANU_COD, '') +-- else t2.Manufacturer_Code +-- end +-- and COALESCE(t1.PROD_COD, '') = case +-- when t2.Product_Code is null then COALESCE(t1.PROD_COD, '') +-- else t2.Product_Code +-- end +-- and COALESCE(t1.PACK_COD, '') = case +-- when t2.Pack_Code is null then COALESCE(t1.PACK_COD, '') +-- else t2.Pack_Code +-- end +-- and COALESCE(t1.STGH_DES, '') = case +-- when t2.Strength is null then COALESCE(t1.STGH_DES, '') +-- else t2.Strength +-- end +-- and COALESCE(t1.CMPS_COD, '') = case +-- when t2.Molecule_Code is null then COALESCE(t1.CMPS_COD, '') +-- else t2.Molecule_Code +-- end +-- and COALESCE(t1.market, '') = case +-- when t2.market is null then COALESCE(t1.market, '') +-- else t2.market +-- end + +-- COMMAND ---------- + +-- DBTITLE 1,FB_COMPETITOR_FILTER +-- -- 20260206 这里增加筛选条件,因为后面发现数据有重复 +-- -- 和Chenwu沟通后,认为需要把no1这个开窗排序字段用上,而且在其他数据源,也需要用到 +-- CREATE +-- OR REPLACE TEMPORARY VIEW FB_COMPETITOR_FILTER AS +-- select +-- * +-- from +-- ( +-- select +-- *, +-- row_number() over ( +-- partition by +-- PACK_COD, +-- MARKET +-- order by +-- no1 desc +-- ) as new_order +-- FROM +-- FB_COMPETITOR +-- ) as new +-- WHERE +-- new.new_order = 1 + +-- COMMAND ---------- + +-- DBTITLE 1,FB_CLASS +-- CREATE +-- OR REPLACE TEMPORARY VIEW FB_CLASS AS +-- select +-- t1.*, +-- t3.class +-- from +-- FB_COMPETITOR_FILTER t1 +-- left join dwd.dwd_gnd_tblclass t3 on t1.market = ifnull (t3.market, t1.market) +-- and t1.pack_cod = ifnull (t3.pack_code, t1.pack_cod) +-- and t1.prod_cod = ifnull (t3.product_code, t1.prod_cod) +-- and t1.cmps_cod = ifnull (t3.molecule_code, t1.cmps_cod) +-- and t1.corp_cod = ifnull (t3.Corporation_code, t1.corp_cod) +-- and t1.manu_cod = ifnull (t3.Manufacturer_Code, t1.manu_cod) +-- and t1.ATC1_COD = ifnull (t3.ATC1_Code, t1.ATC1_COD) +-- and t1.ATC2_COD = ifnull (t3.ATC2_Code, t1.ATC2_COD) +-- and t1.ATC3_COD = ifnull (t3.ATC3_Code, t1.ATC3_COD) +-- and t1.ATC4_COD = ifnull (t3.ATC4_Code, t1.ATC4_COD) +-- and t1.APP1_COD = ifnull (t3.NFC1_Code, t1.APP1_COD) +-- and t1.APP2_COD = ifnull (t3.NFC2_Code, t1.APP2_COD) +-- and t1.APP3_COD = ifnull (t3.NFC3_Code, t1.APP3_COD) +-- and t1.STGH_DES = ifnull (t3.Strength, t1.STGH_DES) + +-- COMMAND ---------- + +-- DBTITLE 1,CHPA_UNION_FB_DATA +-- 20260201 新增 +CREATE +OR REPLACE TEMPORARY VIEW CHPA_UNION_FB_DATA AS +select distinct + -- t1.MARKET_PACK_KEY, + t1.PACK_COD, + t1.PACK_DES, + t1.STGH_DES, + t1.PACK_LCH, + t1.Family_Code, + t1.Family_Name, + t1.PROD_COD, + t1.PROD_DES, + t1.PROD_DES_C, + t1.CMPS_COD, + t1.CMPS_DES, + t1.CMPS_DES_C as CMPS_DES_C, + t1.ATC1_COD, + t1.ATC2_COD, + t1.ATC3_COD, + t1.ATC4_COD, + t1.APP1_COD, + t1.APP2_COD, + t1.APP3_COD, + t1.BIO_DESC, + t1.GENE_ORIG_DESC, + t1.ETH_OTC_DESC, + t1.NRDL_DESC, + t1.NRDL_Entry_Date, + t1.EDL_DESC, + t1.TCM_DESC, + t1.PAED_DESC, + t1.GQCE_DESC, + t1.VBP_DESC_V as VBP_DESC_V, + t1.VBP_DESC, + t1.MANU_COD, + t1.MANU_DES, + t1.MANU_DES_C as MANU_DES_C, + t1.MNFL_COD, + t1.MNFL_DES, + t1.CORP_COD, + case + when t1.CORP_DES like '% GROUP%' then replace (t1.CORP_DES, ' GROUP', '') + else t1.CORP_DES + end CORP_DES, + t1.CORP_DES_C as CORP_DES_C, + t1.BrandType, + -- t1.MARKET, + -- upper(t1.KEY_COMPETITOR) as KEY_COMPETITOR, + t1.AZ_MAIN, + -- t1.AZ_Related, + t1.atc1_des, + t1.atc1_des_c, + t1.atc2_des, + t1.atc2_des_c, + t1.atc3_des, + t1.atc3_des_c, + t1.atc4_des, + t1.atc4_des_c, + t1.app1_des, + t1.app1_des_c, + t1.app2_des, + t1.app2_des_c, + t1.app3_des, + t1.app3_des_c + -- ,t3.class +from + dws.dws_ims_td_pack_property t1 + -- left join dwd.dwd_gnd_tblclass t3 on t1.market = ifnull (t3.market, t1.market) + -- and t1.pack_cod = ifnull (t3.pack_code, t1.pack_cod) + -- and t1.prod_cod = ifnull (t3.product_code, t1.prod_cod) + -- and t1.cmps_cod = ifnull (t3.molecule_code, t1.cmps_cod) + -- and t1.corp_cod = ifnull (t3.Corporation_code, t1.corp_cod) + -- and t1.manu_cod = ifnull (t3.Manufacturer_Code, t1.manu_cod) + -- and t1.ATC1_COD = ifnull (t3.ATC1_Code, t1.ATC1_COD) + -- and t1.ATC2_COD = ifnull (t3.ATC2_Code, t1.ATC2_COD) + -- and t1.ATC3_COD = ifnull (t3.ATC3_Code, t1.ATC3_COD) + -- and t1.ATC4_COD = ifnull (t3.ATC4_Code, t1.ATC4_COD) + -- and t1.APP1_COD = ifnull (t3.NFC1_Code, t1.APP1_COD) + -- and t1.APP2_COD = ifnull (t3.NFC2_Code, t1.APP2_COD) + -- and t1.APP3_COD = ifnull (t3.NFC3_Code, t1.APP3_COD) + -- and t1.STGH_DES = ifnull (t3.Strength, t1.STGH_DES) +UNION ALL +select DISTINCT + -- MARKET_PACK_KEY, + PACK_COD, + PACK_DES, + STGH_DES, + PACK_LCH, + Family_Code, + Family_Name, + PROD_COD, + PROD_DES, + PROD_DES_C, + CMPS_COD, + CMPS_DES, + CMPS_DES_C, + ATC1_COD, + ATC2_COD, + ATC3_COD, + ATC4_COD, + APP1_COD, + APP2_COD, + APP3_COD, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_Entry_Date, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC AS VBP_DESC_V, + VBP_DESC, + MANU_COD, + MANU_DES, + MANU_DES_C, + MNFL_COD, + MNFL_DES, + CORP_COD, + CORP_DES, + CORP_DES_C, + BrandType, + -- MARKET, + -- KEY_COMPETITOR, + AZ_MAIN, + -- 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 + -- ,class +from + FB_RAW_DATA as t +where + not EXISTS ( + select + 0 + from + dws.dws_ims_td_pack_property + where + PACK_COD = t.pack_cod + ) + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE catalog_e2_ngbi_qas.dm.dm_ims_td_pack_property ( +-- PACK_COD STRING, +-- PACK_DES STRING, +-- STGH_DES STRING, +-- PACK_LCH STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- PROD_COD STRING, +-- PROD_DES STRING, +-- PROD_DES_C STRING, +-- CMPS_COD STRING, +-- CMPS_DES STRING, +-- CMPS_DES_C STRING, +-- ATC1_COD STRING, +-- ATC2_COD STRING, +-- ATC3_COD STRING, +-- ATC4_COD STRING, +-- APP1_COD STRING, +-- APP2_COD STRING, +-- APP3_COD STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_Entry_Date STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_COD STRING, +-- MANU_DES STRING, +-- MANU_DES_C STRING, +-- MNFL_COD STRING, +-- MNFL_DES STRING, +-- CORP_COD STRING, +-- CORP_DES STRING, +-- CORP_DES_C STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_des STRING, +-- app3_des_c STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ims_td_pack_property' + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite dm.dm_ims_td_pack_property +insert overwrite table dm.dm_ims_td_pack_property +-- create or replace table dm.dm_ims_td_pack_property +select distinct + -- t1.MARKET_PACK_KEY, + t1.PACK_COD, + t1.PACK_DES, + t1.STGH_DES, + t1.PACK_LCH, + t1.Family_Code, + t1.Family_Name, + t1.PROD_COD, + t1.PROD_DES, + t1.PROD_DES_C, + t1.CMPS_COD, + t1.CMPS_DES, + t1.CMPS_DES_C as CMPS_DES_C, --20240530正式新增字段 + t1.ATC1_COD, + t1.ATC2_COD, + t1.ATC3_COD, + t1.ATC4_COD, + t1.APP1_COD, + t1.APP2_COD, + t1.APP3_COD, + t1.BIO_DESC, + t1.GENE_ORIG_DESC, + t1.ETH_OTC_DESC, + t1.NRDL_DESC, + t1.NRDL_Entry_Date, + t1.EDL_DESC, + t1.TCM_DESC, + t1.PAED_DESC, + t1.GQCE_DESC, + t1.VBP_DESC_V as VBP_DESC_V, --20240530正式新增字段 + t1.VBP_DESC, + t1.MANU_COD, + t1.MANU_DES, + t1.MANU_DES_C as MANU_DES_C, --20240530正式新增字段 + t1.MNFL_COD, + t1.MNFL_DES, + t1.CORP_COD, + case + when t1.CORP_DES like '% GROUP%' then replace (t1.CORP_DES, ' GROUP', '') + else t1.CORP_DES + end CORP_DES, + t1.CORP_DES_C as CORP_DES_C, --20240530正式新增字段 + t1.BrandType, + -- t1.MARKET, + --六大市场即AZ 市场的key competitor=All Brands(PROD_DES) + ------------------------------------------------------------------- + -- upper(t1.KEY_COMPETITOR) as KEY_COMPETITOR, + ifnull (t2.IS_AZ, 'N') as IS_AZ, + t1.AZ_MAIN, + -- t1.AZ_Related, + t1.atc1_des, + t1.atc1_des_c, + t1.atc2_des, + t1.atc2_des_c, + t1.atc3_des, + t1.atc3_des_c, + t1.atc4_des, + t1.atc4_des_c, + t1.app1_des, + t1.app1_des_c, + t1.app2_des, + t1.app2_des_c, + t1.app3_des, + t1.app3_des_c, + -- ifnull (t1.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 + CHPA_UNION_FB_DATA t1 + left join ( + select distinct + prod_cod, + prod_des, + 'Y' as IS_AZ + from + dws.dws_ims_td_pack_property + where + corp_cod = 'A5Z' + ) t2 on t1.prod_des = t2.prod_des +-- where +-- t1.market <> 'Non Market' +-- --IMS ALL Market pack表属性补全 +-- union all +-- select distinct +-- concat ('IMS ALL Market_', t1.PACK_COD) as MARKET_PACK_KEY, +-- t1.PACK_COD, +-- t1.PACK_DES, +-- t1.STGH_DES, +-- t1.PACK_LCH, +-- t1.Family_Code, +-- t1.Family_Name, +-- t1.PROD_COD, +-- t1.PROD_DES, +-- t1.PROD_DES_C, +-- t1.CMPS_COD, +-- t1.CMPS_DES, +-- t1.CMPS_DES_C as CMPS_DES_C, --20240530正式新增字段 +-- t1.ATC1_COD, +-- t1.ATC2_COD, +-- t1.ATC3_COD, +-- t1.ATC4_COD, +-- t1.APP1_COD, +-- t1.APP2_COD, +-- t1.APP3_COD, +-- t1.BIO_DESC, +-- t1.GENE_ORIG_DESC, +-- t1.ETH_OTC_DESC, +-- t1.NRDL_DESC, +-- t1.NRDL_Entry_Date, +-- t1.EDL_DESC, +-- t1.TCM_DESC, +-- t1.PAED_DESC, +-- t1.GQCE_DESC, +-- t1.VBP_DESC_V as VBP_DESC_V, --20240530正式新增字段 +-- t1.VBP_DESC, +-- t1.MANU_COD, +-- t1.MANU_DES, +-- t1.MANU_DES_C as MANU_DES_C, --20240530正式新增字段 +-- t1.MNFL_COD, +-- t1.MNFL_DES, +-- t1.CORP_COD, +-- case +-- when t1.CORP_DES like '% GROUP%' then replace (t1.CORP_DES, ' GROUP', '') +-- else t1.CORP_DES +-- end CORP_DES, +-- t1.CORP_DES_C as CORP_DES_C, --20240530正式新增字段 +-- t1.BrandType, +-- 'IMS ALL Market' as MARKET, +-- upper(t1.PROD_DES) as KEY_COMPETITOR, +-- ifnull (t2.IS_AZ, 'N') as IS_AZ, +-- null as AZ_MAIN, +-- null as AZ_Related, +-- t1.atc1_des, +-- t1.atc1_des_c, +-- t1.atc2_des, +-- t1.atc2_des_c, +-- t1.atc3_des, +-- t1.atc3_des_c, +-- t1.atc4_des, +-- t1.atc4_des_c, +-- t1.app1_des, +-- t1.app1_des_c, +-- t1.app2_des, +-- t1.app2_des_c, +-- t1.app3_des, +-- t1.app3_des_c, +-- 'Others' as Class, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +-- from +-- CHPA_UNION_FB_DATA t1 +-- left join ( +-- select distinct +-- prod_cod, +-- prod_des, +-- 'Y' as IS_AZ +-- from +-- dws.dws_ims_td_pack_property +-- where +-- corp_cod = 'A5Z' +-- ) t2 on t1.prod_des = t2.prod_des + +-- COMMAND ---------- + +-- create or replace table tmp.tmp_ext_chpa_pack_propetry +insert overwrite table tmp.tmp_ext_chpa_pack_propetry +select + PACK_COD, + max(PACK_DES) as PACK_DES, + max(STGH_DES) as STGH_DES, + max(PACK_LCH) as PACK_LCH, + max(Family_Code) as Family_Code, + max(Family_Name) as Family_Name, + max(PROD_COD) as PROD_COD, + max(PROD_DES) as PROD_DES, + max(PROD_DES_C) as PROD_DES_C, + max(CMPS_COD) as CMPS_COD, + max(CMPS_DES) as CMPS_DES, + max(CMPS_DES_C) as CMPS_DES_C, + max(ATC1_COD) as ATC1_COD, + max(ATC2_COD) as ATC2_COD, + max(ATC3_COD) as ATC3_COD, + max(ATC4_COD) as ATC4_COD, + max(APP1_COD) as APP1_COD, + max(APP2_COD) as APP2_COD, + max(APP3_COD) as APP3_COD, + max(BIO_DESC) as BIO_DESC, + max(GENE_ORIG_DESC) as GENE_ORIG_DESC, + max(ETH_OTC_DESC) as ETH_OTC_DESC, + max(NRDL_DESC) as NRDL_DESC, + max(NRDL_Entry_Date) as NRDL_Entry_Date, + max(EDL_DESC) as EDL_DESC, + max(TCM_DESC) as TCM_DESC, + max(PAED_DESC) as PAED_DESC, + max(GQCE_DESC) as GQCE_DESC, + max(VBP_DESC) as VBP_DESC, + max(MANU_COD) as MANU_COD, + max(MANU_DES) as MANU_DES, + max(MANU_DES_C) as MANU_DES_C, + max(MNFL_COD) as MNFL_COD, + max(MNFL_DES) as MNFL_DES, + max(CORP_COD) as CORP_COD, + max(CORP_DES) as CORP_DES, + max(CORP_DES_C) as CORP_DES_C, + max(BrandType) as BrandType, + max(IS_AZ) as IS_AZ, + max(AZ_MAIN) as AZ_MAIN, + null as AZ_Related, + max(atc1_des) as atc1_des, + max(atc1_des_c) as atc1_des_c, + max(atc2_des) as atc2_des, + max(atc2_des_c) as atc2_des_c, + max(atc3_des) as atc3_des, + max(atc3_des_c) as atc3_des_c, + max(atc4_des) as atc4_des, + max(atc4_des_c) as atc4_des_c, + max(app1_des) as app1_des, + max(app1_des_c) as app1_des_c, + max(app2_des) as app2_des, + max(app2_des_c) as app2_des_c, + max(app3_des) as app3_des, + max(app3_des_c) as app3_des_c +from + dm.dm_ims_td_pack_property +group by + PACK_COD + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # market ratio PDOT CU + +-- COMMAND ---------- + +-- DBTITLE 1,UPDATE dws.dws_ims_td_market +-- -- 补充 法伯部分的数据 +-- insert into +-- table dws.dws_ims_td_market +-- with +-- FB_MARKET_RATIO as ( +-- select distinct +-- market, +-- PACK_COD, +-- PACK_DES, +-- STGH_DES, +-- PACK_LCH, +-- PROD_COD, +-- CMPS_COD, +-- CMPS_DES, +-- ATC1_COD, +-- ATC2_COD, +-- ATC3_COD, +-- ATC4_COD, +-- APP1_COD, +-- APP2_COD, +-- APP3_COD, +-- BIO_DESC, +-- GENE_ORIG_DESC, +-- ETH_OTC_DESC, +-- NRDL_DESC, +-- NRDL_Entry_Date, +-- EDL_DESC, +-- TCM_DESC, +-- PAED_DESC, +-- GQCE_DESC, +-- VBP_DESC, +-- MANU_COD, +-- MANU_DES, +-- MNFL_COD, +-- MNFL_DES, +-- CORP_COD, +-- CORP_DES, +-- BrandType, +-- null as bu, +-- Market_Ratio, +-- Key_Competitor, +-- from_utc_timestamp (current_timestamp(), 'UTC+8'), +-- from_utc_timestamp (current_timestamp(), 'UTC+8') +-- from +-- from +-- FB_CLASS as t +-- where +-- not EXISTS ( +-- select +-- 0 +-- from +-- dws.dws_ims_td_pack_property +-- where +-- PACK_COD = t.pack_cod +-- ) +-- ) +-- select +-- * +-- from +-- FB_MARKET_RATIO + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite dws.dws_ims_td_market_ratio +-- --由于360中折算规则更加灵活,所以将市场的Ratio打开,分别对应三个不同的KPI字段 +-- --此处会关联YM字段,原因是需要按照市场进行折算 +-- --市场维度信息 挂上360中的折算规则 先用日期表做笛卡儿积,保证不同时间的规则可以关联上 +-- insert overwrite table dws.dws_ims_td_market_ratio ( +-- YM, +-- MARKET, +-- PACK_COD, +-- PACK_DES, +-- STGH_DES, +-- PACK_LCH, +-- PROD_COD, +-- CMPS_COD, +-- CMPS_DES, +-- ATC1_COD, +-- ATC2_COD, +-- ATC3_COD, +-- ATC4_COD, +-- APP1_COD, +-- APP2_COD, +-- APP3_COD, +-- BIO_DESC, +-- GENE_ORIG_DESC, +-- ETH_OTC_DESC, +-- NRDL_DESC, +-- NRDL_Entry_Date, +-- EDL_DESC, +-- TCM_DESC, +-- PAED_DESC, +-- GQCE_DESC, +-- VBP_DESC, +-- MANU_COD, +-- MANU_DES, +-- MNFL_COD, +-- MNFL_DES, +-- CORP_COD, +-- CORP_DES, +-- BrandType, +-- BU, +-- Key_Competitor, +-- Value_Market_Ratio, +-- Unit_Market_Ratio, +-- CountingUnit_Market_Ratio, +-- PDOT_Market_Ratio, +-- ETL_INSERT_DT, +-- ETL_UPDATE_DT +-- ) +-- SELECT DISTINCT +-- YM.YM, +-- Market.MARKET, +-- Market.PACK_COD, +-- Market.PACK_DES, +-- Market.STGH_DES, +-- Market.PACK_LCH, +-- Market.PROD_COD, +-- Market.CMPS_COD, +-- Market.CMPS_DES, +-- Market.ATC1_COD, +-- Market.ATC2_COD, +-- Market.ATC3_COD, +-- Market.ATC4_COD, +-- Market.APP1_COD, +-- Market.APP2_COD, +-- Market.APP3_COD, +-- Market.BIO_DESC, +-- Market.GENE_ORIG_DESC, +-- Market.ETH_OTC_DESC, +-- Market.NRDL_DESC, +-- Market.NRDL_Entry_Date, +-- Market.EDL_DESC, +-- Market.TCM_DESC, +-- Market.PAED_DESC, +-- Market.GQCE_DESC, +-- Market.VBP_DESC, +-- Market.MANU_COD, +-- Market.MANU_DES, +-- Market.MNFL_COD, +-- Market.MNFL_DES, +-- Market.CORP_COD, +-- Market.CORP_DES, +-- Market.BrandType, +-- Market.BU, +-- Market.Key_Competitor, +-- Market.Market_Ratio AS Value_Market_Ratio, +-- Market.Market_Ratio AS Unit_Market_Ratio, +-- Market.Market_Ratio AS CountingUnit_Market_Ratio, +-- Market.Market_Ratio AS PDOT_Market_Ratio, +-- from_utc_timestamp (current_timestamp(), 'UTC+8'), +-- from_utc_timestamp (current_timestamp(), 'UTC+8') +-- FROM +-- dws.dws_ims_td_market Market +-- CROSS JOIN ( +-- SELECT DISTINCT +-- cast(YM as int) as YM +-- FROM +-- tmp.tmp_ims_tf_fact_sales +-- ) YM +-- -- WHERE YM.YM >= (SELECT MIN(cast(YM as int)) FROM dws.dws_ims_td_date) +-- ; + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite tmp.tmp_ims_td_market_ratio1 +-- ----------------------------------------------------------------------------------------------------------------------------- +-- --修改时间:20240820 +-- --修改人:FanXujia +-- --修改内容: +-- --market_ratio的逻辑调整 +-- --修改前:market_ratio(tblmarket) * ratio(tblbrandratio_pack) * ratio(tblbrandratio_MOLECULE) ,三者相乘得到最终的ratio +-- --修改后:market_ratio(tblmarket) * ratio(优先取pack级别的ratio,没有pack级别的就取molecule级别的ratio),两者相乘得到最终的ratio +-- ----------------------------------------------------------------------------------------------------------------------------- +-- ---按照折算的Type,分三个类型的Ratio进行折算 VALUE,UNIT,COUNTINGUNIT +-- insert overwrite table tmp.tmp_ims_td_market_ratio1 +-- select distinct +-- t1.YM, +-- t1.MARKET, +-- t1.PACK_COD, +-- t1.PACK_DES, +-- t1.STGH_DES, +-- t1.PACK_LCH, +-- t1.PROD_COD, +-- t1.CMPS_COD, +-- t1.CMPS_DES, +-- t1.ATC1_COD, +-- t1.ATC2_COD, +-- t1.ATC3_COD, +-- t1.ATC4_COD, +-- t1.APP1_COD, +-- t1.APP2_COD, +-- t1.APP3_COD, +-- t1.BIO_DESC, +-- t1.GENE_ORIG_DESC, +-- t1.ETH_OTC_DESC, +-- t1.NRDL_DESC, +-- t1.NRDL_Entry_Date, +-- t1.EDL_DESC, +-- t1.TCM_DESC, +-- t1.PAED_DESC, +-- t1.GQCE_DESC, +-- t1.VBP_DESC, +-- t1.MANU_COD, +-- t1.MANU_DES, +-- t1.MNFL_COD, +-- t1.MNFL_DES, +-- t1.CORP_COD, +-- t1.CORP_DES, +-- t1.BrandType, +-- t1.BU, +-- t1.Key_Competitor, +-- case +-- when t2.ratio is not null then t1.Value_Market_Ratio * t2.ratio +-- else t1.Value_Market_Ratio * nvl (t5.ratio, 1) +-- end as Value_Market_Ratio, +-- case +-- when t3.ratio is not null then t1.Unit_Market_Ratio * t3.ratio +-- else t1.Unit_Market_Ratio * nvl (t6.ratio, 1) +-- end as Unit_Market_Ratio, +-- case +-- when t4.ratio is not null then t1.CountingUnit_Market_Ratio * t4.ratio +-- else t1.CountingUnit_Market_Ratio * nvl (t7.ratio, 1) +-- end as CountingUnit_Market_Ratio, +-- t1.PDOT_Market_Ratio, +-- 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_ims_td_market_ratio t1 +-- left join ( --VALUE--PACK +-- 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) = 'VALUE' +-- and UPPER(Level) = 'PACK' +-- ) t2 on t1.market = t2.market +-- and t1.PACK_COD = t2.PACK_COD +-- and t1.YM >= t2.starttime +-- and t1.YM <= t2.endtime +-- left join ( --UNIT--PACK +-- 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) = 'UNIT' +-- and UPPER(Level) = 'PACK' +-- ) t3 on t1.market = t3.market +-- and t1.PACK_COD = t3.PACK_COD +-- and t1.YM >= t3.starttime +-- and t1.YM <= t3.endtime +-- left join ( --COUNTINGUNIT--PACK +-- 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 t1.market = t4.market +-- and t1.PACK_COD = t4.PACK_COD +-- and t1.YM >= t4.starttime +-- and t1.YM <= t4.endtime +-- left join ( --VALUE--MOLECULE +-- 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) = 'VALUE' +-- and UPPER(Level) = 'MOLECULE' +-- ) t5 on t1.market = t5.market +-- and t1.CMPS_COD = t5.CMPS_COD +-- and t1.YM >= t5.starttime +-- and t1.YM <= t5.endtime +-- left join ( --UNIT--MOLECULE +-- 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) = 'UNIT' +-- and UPPER(Level) = 'MOLECULE' +-- ) t6 on t1.market = t6.market +-- and t1.CMPS_COD = t6.CMPS_COD +-- and t1.YM >= t6.starttime +-- and t1.YM <= t6.endtime +-- left join ( --COUNTINGUNIT--MOLECULE +-- 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' +-- ) t7 on t1.market = t7.market +-- and t1.CMPS_COD = t7.CMPS_COD +-- and t1.YM >= t7.starttime +-- and t1.YM <= t7.endtime; + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite dws.dws_ims_td_market_ratio +-- --看市场维度需要用到的Ratio 写入 DWS 备用 +-- insert overwrite table dws.dws_ims_td_market_ratio ( +-- YM, +-- MARKET, +-- PACK_COD, +-- PACK_DES, +-- STGH_DES, +-- PACK_LCH, +-- PROD_COD, +-- CMPS_COD, +-- CMPS_DES, +-- ATC1_COD, +-- ATC2_COD, +-- ATC3_COD, +-- ATC4_COD, +-- APP1_COD, +-- APP2_COD, +-- APP3_COD, +-- BIO_DESC, +-- GENE_ORIG_DESC, +-- ETH_OTC_DESC, +-- NRDL_DESC, +-- NRDL_Entry_Date, +-- EDL_DESC, +-- TCM_DESC, +-- PAED_DESC, +-- GQCE_DESC, +-- VBP_DESC, +-- MANU_COD, +-- MANU_DES, +-- MNFL_COD, +-- MNFL_DES, +-- CORP_COD, +-- CORP_DES, +-- BrandType, +-- BU, +-- Key_Competitor, +-- Value_Market_Ratio, +-- Unit_Market_Ratio, +-- CountingUnit_Market_Ratio, +-- PDOT_Market_Ratio, +-- ETL_INSERT_DT, +-- ETL_UPDATE_DT +-- ) +-- select +-- t1.YM, +-- t1.MARKET, +-- t1.PACK_COD, +-- t1.PACK_DES, +-- t1.STGH_DES, +-- t1.PACK_LCH, +-- t1.PROD_COD, +-- t1.CMPS_COD, +-- t1.CMPS_DES, +-- t1.ATC1_COD, +-- t1.ATC2_COD, +-- t1.ATC3_COD, +-- t1.ATC4_COD, +-- t1.APP1_COD, +-- t1.APP2_COD, +-- t1.APP3_COD, +-- t1.BIO_DESC, +-- t1.GENE_ORIG_DESC, +-- t1.ETH_OTC_DESC, +-- t1.NRDL_DESC, +-- t1.NRDL_Entry_Date, +-- t1.EDL_DESC, +-- t1.TCM_DESC, +-- t1.PAED_DESC, +-- t1.GQCE_DESC, +-- t1.VBP_DESC, +-- t1.MANU_COD, +-- t1.MANU_DES, +-- t1.MNFL_COD, +-- t1.MNFL_DES, +-- t1.CORP_COD, +-- t1.CORP_DES, +-- t1.BrandType, +-- t1.BU, +-- t1.Key_Competitor, +-- Value_Market_Ratio, +-- Unit_Market_Ratio, +-- CountingUnit_Market_Ratio, +-- PDOT_Market_Ratio, +-- 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_ims_td_market_ratio1 t1 \ No newline at end of file diff --git a/CHPA/03 dm_ims_tf_sales.sql b/CHPA/03 dm_ims_tf_sales.sql new file mode 100644 index 0000000..a089268 --- /dev/null +++ b/CHPA/03 dm_ims_tf_sales.sql @@ -0,0 +1,759 @@ +-- Databricks notebook source +-- DBTITLE 1,建表SQL +-- CREATE OR REPLACE TABLE dm.dm_ims_tf_sales ( +-- YYYYMM STRING, +-- DAY_DATE STRING, +-- PACK_COD STRING, +-- AUDIT_COD STRING, +-- Related_flag STRING, +-- ORG_KEY STRING, +-- Market STRING, +-- MARKET_PACK_KEY STRING, +-- MARKET_AUDIT_KEY STRING, +-- SALES_VALUE DECIMAL(30,10), +-- SALES_VALUE_LY DECIMAL(30,10), +-- SALES_VALUE_L2Y DECIMAL(30,10), +-- SALES_UNIT DECIMAL(30,10), +-- SALES_UNIT_LY DECIMAL(30,10), +-- SALES_UNIT_L2Y DECIMAL(30,10), +-- CONUTING_UNIT DECIMAL(30,10), +-- CONUTING_UNIT_LY DECIMAL(30,10), +-- CONUTING_UNIT_L2Y DECIMAL(30,10), +-- PDOT DECIMAL(30,10), +-- PDOT_LY DECIMAL(30,10), +-- PDOT_L2Y DECIMAL(30,10), +-- SALES_VALUE_CAL DECIMAL(30,10), +-- SALES_VALUE_CAL_LY DECIMAL(30,10), +-- SALES_UNIT_CAL DECIMAL(30,10), +-- SALES_UNIT_CAL_LY DECIMAL(30,10), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ims_tf_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,tmp_ims_tf_fact_sales_l2y +--提前算好前端需要两年前的数据 +-- tmp.tmp_ims_tf_fact_sales 整张表对应的notebook path:/Workspace/Users/kthc245@azc.partner.onmschina.cn/20251125Rebuild MA/rebuildMA/DWS/dws_ims_tbl +CREATE +OR REPLACE TEMPORARY VIEW tmp_ims_tf_fact_sales_l2y AS +select + YM, + AUDIT_COD, + PACK_COD, + sum(MTH00LC) as MTH00LC, + sum(MTH00LCLY) as MTH00LCLY, + sum(MTH00LCL2Y) as MTH00LCL2Y, + sum(MTH00CN) as MTH00CN, + sum(MTH00CNLY) as MTH00CNLY, + sum(MTH00CNL2Y) as MTH00CNL2Y, + sum(MTH00UN) as MTH00UN, + sum(MTH00UNLY) as MTH00UNLY, + sum(MTH00UNL2Y) as MTH00UNL2Y +from + ( + select + YM, + AUDIT_COD, + PACK_COD, + MTH00LC, + MTH00LCLY, + 0 as MTH00LCL2Y, + MTH00CN, + MTH00CNLY, + 0 as MTH00CNL2Y, + MTH00UN, + MTH00UNLY, + 0 as MTH00UNL2Y + from + tmp.tmp_ims_tf_fact_sales + union all + select + YM + 200 as YM, + AUDIT_COD, + PACK_COD, + 0 as MTH00LC, + 0 as MTH00LCLY, + MTH00LC as MTH00LCL2Y, + 0 as MTH00CN, + 0 as MTH00CNLY, + MTH00CN as MTH00CNL2Y, + 0 as MTH00UN, + 0 as MTH00UNLY, + MTH00UN as MTH00UNL2Y + from + tmp.tmp_ims_tf_fact_sales + where + YM + 200 in ( + select distinct + YM + from + tmp.tmp_ims_tf_fact_sales + ) + ) +group by + YM, + AUDIT_COD, + PACK_COD + +-- COMMAND ---------- + + -- DBTITLE 1,tmp_ims_tf_sales_total + --提前算好需要IMS 折算的value和不折算的value + CREATE + OR REPLACE TEMPORARY VIEW tmp_ims_tf_sales_total AS +-- select distinct +-- t1.YM as YYYYMM, +-- t1.PACK_COD, +-- t1.AUDIT_COD, +-- 'ALL' AS RELATE_FLAG, +-- t1.AUDIT_COD as ORG_KEY, +-- case +-- when t2.market is null then 'Non Market' +-- else t2.market +-- end Market, +-- case +-- when t2.market is null then concat ('Non Market_', t1.pack_cod) +-- else concat (t2.market, '_', t2.pack_cod) +-- end as MARKET_PACK_KEY, +-- case +-- when t2.market is null then concat ('Non Market_', t1.audit_cod) +-- else concat (t2.market, '_', t1.audit_cod) +-- end as MARKET_AUDIT_KEY, +-- t1.MTH00LC * ( +-- case +-- when t2.Value_Market_Ratio is null then 1 +-- else t2.Value_Market_Ratio +-- end +-- ) as SALES_VALUE, +-- t1.MTH00LCLY * ( +-- case +-- when t2.Value_Market_Ratio is null then 1 +-- else t2.Value_Market_Ratio +-- end +-- ) as SALES_VALUE_LY, +-- t1.MTH00LCL2Y * ( +-- case +-- when t2.Value_Market_Ratio is null then 1 +-- else t2.Value_Market_Ratio +-- end +-- ) as SALES_VALUE_L2Y, +-- t1.MTH00UN * ( +-- case +-- when t2.Unit_Market_Ratio is null then 1 +-- else t2.Unit_Market_Ratio +-- end +-- ) as SALES_UNIT, +-- t1.MTH00UNLY * ( +-- case +-- when t2.Unit_Market_Ratio is null then 1 +-- else t2.Unit_Market_Ratio +-- end +-- ) as SALES_UNIT_LY, +-- t1.MTH00UNL2Y * ( +-- case +-- when t2.Unit_Market_Ratio is null then 1 +-- else t2.Unit_Market_Ratio +-- end +-- ) as SALES_UNIT_L2Y, +-- t1.MTH00CN as CONUTING_UNIT, +-- t1.MTH00CNLY as CONUTING_UNIT_LY, +-- t1.MTH00CNL2Y as CONUTING_UNIT_L2Y, +-- t1.MTH00CN * ( +-- case +-- when t2.CountingUnit_Market_Ratio is null then 1 +-- else t2.CountingUnit_Market_Ratio +-- end +-- ) as PDOT, +-- t1.MTH00CNLY * ( +-- case +-- when t2.CountingUnit_Market_Ratio is null then 1 +-- else t2.CountingUnit_Market_Ratio +-- end +-- ) as PDOT_LY, +-- t1.MTH00CNL2Y * ( +-- case +-- when t2.CountingUnit_Market_Ratio is null then 1 +-- else t2.CountingUnit_Market_Ratio +-- end +-- ) as PDOT_L2Y, +-- t1.MTH00LC as SALES_VALUE_CAL, +-- t1.MTH00LCLY as SALES_VALUE_CAL_LY, +-- t1.MTH00LCL2Y as SALES_VALUE_CAL_L2Y, +-- t1.MTH00UN as SALES_UNIT_CAL, +-- t1.MTH00UNLY as SALES_UNIT_CAL_LY, +-- t1.MTH00UNL2Y as SALES_UNIT_CAL_L2Y, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') as ETL_INSERT_DT, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') as ETL_UPDATE_DT +-- from +-- tmp_ims_tf_fact_sales_l2y t1 +-- left join ( +-- select distinct +-- YM, +-- market, +-- pack_cod, +-- Value_Market_Ratio, +-- Unit_Market_Ratio, +-- CountingUnit_Market_Ratio +-- from +-- dws.dws_ims_td_market_ratio +-- ) t2 on t1.pack_cod = t2.pack_cod +-- and t1.YM = t2.YM +-- where +-- -- t1.YM in (select YYYYMM from dm.dm_ims_td_calendar)and +-- t2.market is not null +-- union all +-- -- IMS ALL Market 为所有的IMS市场 不折算的数据的汇总,即不折算的所有市场的city粒度数据 +select distinct + t1.YM as YYYYMM, + t1.PACK_COD, + t1.AUDIT_COD, + -- 'ALL' AS RELATE_FLAG, + t1.AUDIT_COD as ORG_KEY, + -- 'IMS ALL Market' Market, + -- concat ('IMS ALL Market_', t1.pack_cod) as MARKET_PACK_KEY, + -- concat ('IMS ALL Market_', t1.audit_cod) as MARKET_AUDIT_KEY, + t1.MTH00LC SALES_VALUE, + t1.MTH00LCLY SALES_VALUE_LY, + t1.MTH00LCL2Y SALES_VALUE_L2Y, + t1.MTH00UN SALES_UNIT, + t1.MTH00UNLY SALES_UNIT_LY, + t1.MTH00UNL2Y SALES_UNIT_L2Y, + t1.MTH00CN CONUTING_UNIT, + t1.MTH00CNLY CONUTING_UNIT_LY, + t1.MTH00CNL2Y CONUTING_UNIT_L2Y, + t1.MTH00CN PDOT, + t1.MTH00CNLY PDOT_LY, + t1.MTH00CNL2Y PDOT_L2Y, + t1.MTH00LC SALES_VALUE_CAL, + t1.MTH00LCLY SALES_VALUE_CAL_LY, + t1.MTH00LCL2Y SALES_VALUE_CAL_L2Y, + t1.MTH00UN SALES_UNIT_CAL, + t1.MTH00UNLY SALES_UNIT_CAL_LY, + t1.MTH00UNL2Y SALES_UNIT_CAL_L2Y, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp_ims_tf_fact_sales_l2y t1 + -- where t1.YM in (select YYYYMM from dm.dm_ims_td_calendar) +; + +-- COMMAND ---------- + +-- DBTITLE 1,tmp_ims_tf_sales_tamarket +-- --在原本的数据上加上AZ Related Market,此为AZ 相关的六大市场数据汇总 +-- --以及年月日的日期格式标签 +-- CREATE +-- OR REPLACE TEMPORARY VIEW tmp_ims_tf_sales_tamarket AS +-- select distinct +-- YYYYMM, +-- concat (left (YYYYMM, 4), '-', right (YYYYMM, 2), '-01') as DAY_DATE, +-- PACK_COD, +-- AUDIT_COD, +-- RELATE_FLAG, +-- ORG_KEY, +-- Market, +-- MARKET_PACK_KEY, +-- MARKET_AUDIT_KEY, +-- SALES_VALUE, +-- SALES_VALUE_LY, +-- SALES_VALUE_L2Y, +-- SALES_UNIT, +-- SALES_UNIT_LY, +-- SALES_UNIT_L2Y, +-- CONUTING_UNIT, +-- CONUTING_UNIT_LY, +-- CONUTING_UNIT_L2Y, +-- PDOT, +-- PDOT_LY, +-- PDOT_L2Y, +-- SALES_VALUE_CAL, +-- SALES_VALUE_CAL_LY, +-- SALES_VALUE_CAL_L2Y, +-- SALES_UNIT_CAL, +-- SALES_UNIT_CAL_LY, +-- SALES_UNIT_CAL_L2Y, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +-- from +-- tmp_ims_tf_sales_total + +-- COMMAND ---------- + + -- DBTITLE 1,插入逻辑1-需保留 + -- dm.dm_ims_tf_sales_china 和 dm.dm_ims_tf_sales 区别就在于 audit_cod = 'CHT' 或者 t1.audit_cod <> 'CHT' + -- insert overwrite table dm.dm_ims_tf_sales_china + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod = 'CHT' and (sales_value<>0 or sales_value_ly<>0) and t1.market not in ('Primary Prevention Market-XZK','Iressa 1L TKI Market' ) + -- union all + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod = 'CHT' and (sales_value<>0 or sales_value_ly<>0) and t1.market in ('Primary Prevention Market-XZK','Iressa 1L TKI Market') + -- insert overwrite table dm.dm_ims_tf_sales + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod <> 'CHT' and t1.market not in ('Primary Prevention Market-XZK','Iressa 1L TKI Market')and (sales_value<>0 or sales_value_ly<>0) + -- union all + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod <> 'CHT' and t1.market in ('Primary Prevention Market-XZK','Iressa 1L TKI Market')and (sales_value<>0 or sales_value_ly<>0) + +-- COMMAND ---------- + +-- CREATE TABLE catalog_e2_ngbi_qas.dm.dm_ims_tf_sales_china ( +-- YYYYMM INT, +-- PACK_COD STRING, +-- AUDIT_COD STRING, +-- SALES_VALUE DECIMAL(38,10), +-- SALES_VALUE_LY DECIMAL(38,10), +-- SALES_VALUE_L2Y DECIMAL(38,10), +-- SALES_UNIT DECIMAL(38,10), +-- SALES_UNIT_LY DECIMAL(38,10), +-- SALES_UNIT_L2Y DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- CONUTING_UNIT_L2Y DECIMAL(38,10), +-- PDOT DECIMAL(38,10), +-- PDOT_LY DECIMAL(38,10), +-- PDOT_L2Y DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ims_tf_sales_china' + +-- COMMAND ---------- + + -- DBTITLE 1,overwrite dm.dm_ims_tf_sales_china + --SALES + --CHINA CHPA数据 + -- t1.market not in ('Primary Prevention Market-XZK','Iressa 1L TKI Market') + -- ,CONUTING_UNIT + -- ,CONUTING_UNIT_LY + -- ,CONUTING_UNIT_L2Y + -- ,SALES_VALUE_CAL + -- ,SALES_VALUE_CAL_LY + -- ,SALES_UNIT_CAL + -- ,SALES_UNIT_CAL_LY + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod = 'CHT' and (sales_value<>0 or sales_value_ly<>0) and t1.market not in ('Primary Prevention Market-XZK','Iressa 1L TKI Market' ) + -- t1.market in ('Primary Prevention Market-XZK','Iressa 1L TKI Market') + -- PDOT as CONUTING_UNIT + -- ,PDOT_LY as CONUTING_UNIT_LY + -- ,PDOT_L2Y as CONUTING_UNIT_L2Y + -- ,SALES_VALUE as SALES_VALUE_CAL + -- ,SALES_VALUE_LY as SALES_VALUE_CAL_LY + -- ,SALES_UNIT as SALES_UNIT_CAL + -- ,SALES_UNIT_LY as SALES_UNIT_CAL_LY + -- from tmp_ims_tf_sales_tamarket t1 + -- where t1.audit_cod = 'CHT' and (sales_value<>0 or sales_value_ly<>0) and t1.market in ('Primary Prevention Market-XZK','Iressa 1L TKI Market') + -- create or replace table dm.dm_ims_tf_sales_china + insert overwrite table dm.dm_ims_tf_sales_china +select distinct + YYYYMM, + -- DAY_DATE, + PACK_COD, + AUDIT_COD, + -- RELATE_FLAG, + -- ORG_KEY, + -- Market, + -- MARKET_PACK_KEY, + -- MARKET_AUDIT_KEY, + SALES_VALUE, + SALES_VALUE_LY, + SALES_VALUE_L2Y, + SALES_UNIT, + SALES_UNIT_LY, + SALES_UNIT_L2Y, + CONUTING_UNIT, + CONUTING_UNIT_LY, + CONUTING_UNIT_L2Y, + PDOT, + PDOT_LY, + PDOT_L2Y, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp_ims_tf_sales_total t1 +where + t1.audit_cod = 'CHT' + and ( + sales_value <> 0 + or sales_value_ly <> 0 + ) + -- and t1.market not in ( + -- 'Primary Prevention Market-XZK', + -- 'Iressa 1L TKI Market' + -- ) +-- union all +-- select distinct +-- YYYYMM, +-- DAY_DATE, +-- PACK_COD, +-- AUDIT_COD, +-- RELATE_FLAG, +-- ORG_KEY, +-- Market, +-- MARKET_PACK_KEY, +-- MARKET_AUDIT_KEY, +-- SALES_VALUE, +-- SALES_VALUE_LY, +-- SALES_VALUE_L2Y, +-- SALES_UNIT, +-- SALES_UNIT_LY, +-- SALES_UNIT_L2Y, +-- PDOT as CONUTING_UNIT, +-- PDOT_LY as CONUTING_UNIT_LY, +-- PDOT_L2Y as CONUTING_UNIT_L2Y, +-- PDOT, +-- PDOT_LY, +-- PDOT_L2Y, +-- SALES_VALUE as SALES_VALUE_CAL, +-- SALES_VALUE_LY as SALES_VALUE_CAL_LY, +-- SALES_UNIT as SALES_UNIT_CAL, +-- SALES_UNIT_LY as SALES_UNIT_CAL_LY, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +-- from +-- tmp_ims_tf_sales_tamarket t1 +-- where +-- t1.audit_cod = 'CHT' +-- and ( +-- sales_value <> 0 +-- or sales_value_ly <> 0 +-- ) +-- and t1.market in ( +-- 'Primary Prevention Market-XZK', +-- 'Iressa 1L TKI Market' +-- ) + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE dm.dm_ims_tf_sales ( +-- YYYYMM INT, +-- PACK_COD STRING, +-- AUDIT_COD STRING, +-- SALES_VALUE DECIMAL(38,10), +-- SALES_VALUE_LY DECIMAL(38,10), +-- SALES_VALUE_L2Y DECIMAL(38,10), +-- SALES_UNIT DECIMAL(38,10), +-- SALES_UNIT_LY DECIMAL(38,10), +-- SALES_UNIT_L2Y DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- CONUTING_UNIT_L2Y DECIMAL(38,10), +-- PDOT DECIMAL(38,10), +-- PDOT_LY DECIMAL(38,10), +-- PDOT_L2Y DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ims_tf_sales' + +-- COMMAND ---------- + + -- DBTITLE 1,overwrite dm.dm_ims_tf_sales + --SALES + --CITY + insert overwrite table dm.dm_ims_tf_sales +select distinct + YYYYMM, + -- DAY_DATE, + PACK_COD, + AUDIT_COD, + -- RELATE_FLAG, + -- ORG_KEY, + -- Market, + -- MARKET_PACK_KEY, + -- MARKET_AUDIT_KEY, + SALES_VALUE, + SALES_VALUE_LY, + SALES_VALUE_L2Y, + SALES_UNIT, + SALES_UNIT_LY, + SALES_UNIT_L2Y, + CONUTING_UNIT, + CONUTING_UNIT_LY, + CONUTING_UNIT_L2Y, + PDOT, + PDOT_LY, + PDOT_L2Y, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp_ims_tf_sales_total t1 +where + t1.audit_cod <> 'CHT' + -- and t1.market not in ( + -- 'Primary Prevention Market-XZK', + -- 'Iressa 1L TKI Market' + -- ) + and ( + sales_value <> 0 + or sales_value_ly <> 0 + ) +-- union all +-- --'Primary Prevention Market-XZK','Iressa 1L TKI Market' 两个市场特殊处理,所有的value都是折算过的 +-- select distinct +-- YYYYMM, +-- DAY_DATE, +-- PACK_COD, +-- AUDIT_COD, +-- RELATE_FLAG, +-- ORG_KEY, +-- Market, +-- MARKET_PACK_KEY, +-- MARKET_AUDIT_KEY, +-- SALES_VALUE, +-- SALES_VALUE_LY, +-- SALES_VALUE_L2Y, +-- SALES_UNIT, +-- SALES_UNIT_LY, +-- SALES_UNIT_L2Y, +-- PDOT as CONUTING_UNIT, +-- PDOT_LY as CONUTING_UNIT_LY, +-- PDOT_L2Y as CONUTING_UNIT_L2Y, +-- PDOT, +-- PDOT_LY, +-- PDOT_L2Y, +-- SALES_VALUE as SALES_VALUE_CAL, +-- SALES_VALUE_LY as SALES_VALUE_CAL_LY, +-- SALES_UNIT as SALES_UNIT_CAL, +-- SALES_UNIT_LY as SALES_UNIT_CAL_LY, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, +-- from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +-- from +-- tmp_ims_tf_sales_tamarket t1 +-- where +-- t1.audit_cod <> 'CHT' +-- -- and t1.market in ( +-- -- 'Primary Prevention Market-XZK', +-- -- 'Iressa 1L TKI Market' +-- -- ) +-- -- and ( +-- -- sales_value <> 0 +-- -- or sales_value_ly <> 0 +-- -- ) + +-- COMMAND ---------- + + -- DBTITLE 1,插入逻辑2-需保留 + -- -- 关键词 + -- audit_cod <> 'CHT' -》 dm.dm_ims_tf_sales + -- audit_cod = 'CHT' -》dm.dm_ims_tf_sales_china + -- KCT 所有城市的IMS数据 基于 dm.dm_ims_tf_sales + -- ROC 其他城市的IMS数据计算 ROC = CHT-KCT + +-- COMMAND ---------- + + -- DBTITLE 1,overwrite tmp.tmp_ims_tf_sales_kct + -- 所有城市汇总的IMS数据计算 KCT=sum(all city) + -- create or replace table tmp.tmp_ims_tf_sales_kct + insert overwrite table tmp.tmp_ims_tf_sales_kct +select + YYYYMM, + PACK_COD, + 'KCT' as AUDIT_COD, + -- Related_flag, + -- 'KCT' as ORG_KEY, + -- Market, + -- MARKET_PACK_KEY, + -- concat (Market, '_KCT') as MARKET_AUDIT_KEY, + sum(SALES_VALUE) as SALES_VALUE, + sum(SALES_VALUE_LY) as SALES_VALUE_LY, + sum(SALES_VALUE_L2Y) as SALES_VALUE_L2Y, + sum(SALES_UNIT) as SALES_UNIT, + sum(SALES_UNIT_LY) as SALES_UNIT_LY, + sum(SALES_UNIT_L2Y) as SALES_UNIT_L2Y, + sum(CONUTING_UNIT) as CONUTING_UNIT, + sum(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + sum(CONUTING_UNIT_L2Y) as CONUTING_UNIT_L2Y, + sum(PDOT) as PDOT, + sum(PDOT_LY) as PDOT_LY, + sum(PDOT_LY) as PDOT_L2Y, + sum(SALES_VALUE_CAL) as SALES_VALUE_CAL, + sum(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + sum(SALES_UNIT_CAL) as SALES_UNIT_CAL, + sum(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY +from + dm.dm_ims_tf_sales +group by + YYYYMM, + PACK_COD + -- Related_flag, + -- Market, + -- MARKET_PACK_KEY; + +-- COMMAND ---------- + +-- DBTITLE 1,overwrite tmp.tmp_ims_tf_sales_roc +-- 其他城市的IMS数据计算 ROC=CHT-KCT +insert overwrite table tmp.tmp_ims_tf_sales_roc +WITH + DIM_YM_PACK_MARKT ( + SELECT + YYYYMM as CHINA_YYYYMM, + PACK_COD as CHINA_PACK_COD + -- ,CHINA_Market + from + dm.dm_ims_tf_sales_china + group by + YYYYMM, + PACK_COD + -- ,CHINA_Market + UNION + SELECT + YYYYMM, + PACK_COD + -- ,Market + from + tmp.tmp_ims_tf_sales_kct + group by + YYYYMM, + PACK_COD + -- ,Market + ), + CHPA_SALES ( + select + YYYYMM, + PACK_COD, + -- CHINA_Market, + sum(SALES_VALUE) as CHINA_SALES_VALUE, + sum(SALES_VALUE_LY) as CHINA_SALES_VALUE_LY, + sum(SALES_VALUE_L2Y) as CHINA_SALES_VALUE_L2Y, + sum(SALES_UNIT) as CHINA_SALES_UNIT, + sum(SALES_UNIT_LY) as CHINA_SALES_UNIT_LY, + sum(SALES_UNIT_L2Y) as CHINA_SALES_UNIT_L2Y, + sum(CONUTING_UNIT) as CHINA_CONUTING_UNIT, + sum(CONUTING_UNIT_LY) as CHINA_CONUTING_UNIT_LY, + sum(CONUTING_UNIT_L2Y) as CHINA_CONUTING_UNIT_L2Y, + sum(PDOT) as CHINA_PDOT, + sum(PDOT_LY) as CHINA_PDOT_LY, + sum(PDOT_L2Y) as CHINA_PDOT_L2Y, + sum(SALES_VALUE_CAL) as SALES_VALUE_CAL, + sum(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + sum(SALES_UNIT_CAL) as SALES_UNIT_CAL, + sum(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY + from + dm.dm_ims_tf_sales_china + group by + YYYYMM, + PACK_COD + -- ,CHINA_Market + ), + FABO_SALES ( + select + YYYYMM, + PACK_COD, + -- Market, + sum(SALES_VALUE) as SALES_VALUE, + sum(SALES_VALUE_LY) as SALES_VALUE_LY, + sum(SALES_VALUE_L2Y) as SALES_VALUE_L2Y, + sum(SALES_UNIT) as SALES_UNIT, + sum(SALES_UNIT_LY) as SALES_UNIT_LY, + sum(SALES_UNIT_L2Y) as SALES_UNIT_L2Y, + sum(CONUTING_UNIT) as CONUTING_UNIT, + sum(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + sum(CONUTING_UNIT_L2Y) as CONUTING_UNIT_L2Y, + sum(PDOT) as PDOT, + sum(PDOT_LY) as PDOT_LY, + sum(PDOT_L2Y) as PDOT_L2Y, + sum(SALES_VALUE_CAL) as SALES_VALUE_CAL, + sum(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + sum(SALES_UNIT_CAL) as SALES_UNIT_CAL, + sum(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY + from + tmp.tmp_ims_tf_sales_kct + group by + YYYYMM, + PACK_COD + -- ,Market + ) +SELECT + t1.CHINA_YYYYMM as YYYYMM, + t1.CHINA_PACK_COD as PACK_COD, + 'ROC' as AUDIT_COD, + -- null as Related_flag, + -- 'ROC' as ORG_KEY, + -- t1.CHINA_Market as Market, + -- concat (t1.CHINA_Market, '_', t1.china_pack_cod) as MARKET_PACK_KEY, + -- concat (t1.CHINA_Market, '_ROC') as MARKET_AUDIT_KEY, + nvl (t2.CHINA_SALES_VALUE, 0) - nvl (t3.SALES_VALUE, 0) as SALES_VALUE, + nvl (t2.CHINA_SALES_VALUE_LY, 0) - nvl (t3.SALES_VALUE_LY, 0) as SALES_VALUE_LY, + nvl (t2.CHINA_SALES_VALUE_L2Y, 0) - nvl (t3.SALES_VALUE_L2Y, 0) as SALES_VALUE_L2Y, + nvl (t2.CHINA_SALES_UNIT, 0) - nvl (t3.SALES_UNIT, 0) as SALES_UNIT, + nvl (t2.CHINA_SALES_UNIT_L2Y, 0) - nvl (t3.SALES_UNIT_L2Y, 0) as SALES_UNIT_LY, + nvl (t2.CHINA_SALES_UNIT_LY, 0) - nvl (t3.SALES_UNIT_LY, 0) as SALES_UNIT_L2Y, + nvl (t2.CHINA_CONUTING_UNIT, 0) - nvl (t3.CONUTING_UNIT, 0) as CONUTING_UNIT, + nvl (t2.CHINA_CONUTING_UNIT_LY, 0) - nvl (t3.CONUTING_UNIT_LY, 0) as CONUTING_UNIT_LY, + nvl (t2.CHINA_CONUTING_UNIT_L2Y, 0) - nvl (t3.CONUTING_UNIT_L2Y, 0) as CONUTING_UNIT_L2Y, + nvl (t2.CHINA_PDOT, 0) - nvl (t3.PDOT, 0) as PDOT, + nvl (t2.CHINA_PDOT_LY, 0) - nvl (t3.PDOT_LY, 0) as PDOT_LY, + nvl (t2.CHINA_PDOT_L2Y, 0) - nvl (t3.PDOT_L2Y, 0) as PDOT_L2Y, + nvl (t2.SALES_VALUE_CAL, 0) - nvl (t3.SALES_VALUE_CAL, 0) as SALES_VALUE_CAL, + nvl (t2.SALES_VALUE_CAL_LY, 0) - nvl (t3.SALES_VALUE_CAL_LY, 0) as SALES_VALUE_CAL_LY, + nvl (t2.SALES_UNIT_CAL, 0) - nvl (t3.SALES_UNIT_CAL, 0) as SALES_UNIT_CAL, + nvl (t2.SALES_UNIT_CAL_LY, 0) - nvl (t3.SALES_UNIT_CAL_LY, 0) as SALES_UNIT_CAL_LY +FROM + dim_ym_pack_markt t1 + LEFT JOIN chpa_sales t2 on + -- t1.china_market = t2.china_market and + t1.china_yyyymm = t2.yyyymm + and t1.china_pack_cod = t2.pack_cod + LEFT JOIN fabo_sales t3 on + -- t1.china_market = t3.market and + t1.china_yyyymm = t3.yyyymm + and t1.china_pack_cod = t3.pack_cod + +-- COMMAND ---------- + + -- DBTITLE 1,insert into dm.dm_ims_tf_sales + --将ROC的数据写入dm.dm_ims_tf_sales +insert into + dm.dm_ims_tf_sales +select distinct + YYYYMM, + -- concat (left (YYYYMM, 4), '-', right (YYYYMM, 2), '-01') as DAY_DATE, + PACK_COD, + AUDIT_COD, + -- RELATED_FLAG, + -- ORG_KEY, + -- Market, + -- MARKET_PACK_KEY, + -- MARKET_AUDIT_KEY, + SALES_VALUE, + SALES_VALUE_LY, + SALES_VALUE_L2Y, + SALES_UNIT, + SALES_UNIT_LY, + SALES_UNIT_L2Y, + CONUTING_UNIT, + CONUTING_UNIT_LY, + CONUTING_UNIT_L2Y, + PDOT, + PDOT_LY, + PDOT_L2Y, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp (current_timestamp(), 'UTC+8') ETL_UPDATE_DT +from + tmp.tmp_ims_tf_sales_roc +where + sales_value <> 0 + or sales_value_ly <> 0; \ No newline at end of file diff --git a/CHPA/03 dm_td_chpa_market_definition.sql b/CHPA/03 dm_td_chpa_market_definition.sql new file mode 100644 index 0000000..a18500f --- /dev/null +++ b/CHPA/03 dm_td_chpa_market_definition.sql @@ -0,0 +1,14 @@ +-- Databricks notebook source +-- 源表:DWD.DWD_GND_IMS_MARKET_DEFINITION +-- 目标表:DM.DM_TD_CHPA_MARKET_DEFINITION + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_CHPA_MARKET_DEFINITION +SELECT + TA, + MARKET, + MARKET_DEFINITION_EN, + MARKET_DEFINITION_CN +FROM + DWD.DWD_GND_IMS_MARKET_DEFINITION; \ No newline at end of file diff --git a/CHPA/03 dm_td_ims_city_mapping.sql b/CHPA/03 dm_td_ims_city_mapping.sql new file mode 100644 index 0000000..503ebd6 --- /dev/null +++ b/CHPA/03 dm_td_ims_city_mapping.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- 源表:DWD.DWD_TD_IMS_CITY_MAPPING +-- 目标表:DM.DM_TD_IMS_CITY_MAPPING,DWS.DWS_TD_GEOGRAPHY + +-- COMMAND ---------- + +--dwd to dws +--ims city和标准城市名以及拆分比mapping表 +insert overwrite table dws.dws_td_ims_city_mapping +select distinct + audit_cod , + city_c , + city_c_d , + ratio , + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +from dwd.dwd_td_ims_city_mapping +; +--dws to dm +insert overwrite table dm.dm_td_ims_city_mapping +select distinct + audit_cod , + city_c , + city_c_d , + city_code, + ratio , + from_utc_timestamp(current_timestamp(),'UTC+8'), + from_utc_timestamp(current_timestamp(),'UTC+8') +from dws.dws_td_ims_city_mapping t1 +left join dws.dws_td_geography t2 on concat(t1.city_c_d,'市')=t2.city_name \ No newline at end of file diff --git a/EC/03 ec_load_data.sql b/EC/03 ec_load_data.sql new file mode 100644 index 0000000..f3c8c8d --- /dev/null +++ b/EC/03 ec_load_data.sql @@ -0,0 +1,1544 @@ +-- Databricks notebook source +-- 有几张表发生了变化 +-- tmp.tmp_ec_temp_market +-- tmp.tmp_ec_temp_market_del +-- dws.dws_zk_ec_pack_property + +-- dm.dm_zk_ec_market_ratio + +-- COMMAND ---------- + +insert overwrite table tmp.tmp_ec_temp_market +select distinct + b.iqvia_lineno , + if( nvl(b.iqvia_pack_code,0) REGEXP '^[0-9]',right(concat('000000000000',nvl(b.iqvia_pack_code,0)),12),nvl(b.iqvia_pack_code,0)) as iqvia_pack_code,-- right(concat('0000000',nvl(b.iqvia_pack_code,0)),7) + right(concat('000000000',nvl(b.iqvia_prod_code,0)),9) as prod_cod ,-- right(concat('00000',nvl(b.iqvia_prod_code,0)),5) + b.iqvia_notes , + b.new_pack_flag , + b.is_exists_chpa , + right(concat('0000000',nvl(b.product_id,0)),7) as product_id, + b.prescription_nature , + b.medicine_type , + b.zk_medicine_tier1 , + b.zk_medicine_tier2 , + b.zk_medicine_tier3 , + b.zk_medicine_tier4 , + b.common_name , + b.dosage_form , + b.user_type , + b.category_name , + b.product_name , + b.brand_name , + b.zk_manu_des , + b.zk_corp_des , + b.zk_pack_des , + b.counting_unit_a , + b.dosage_unit_a , + b.unit_a , + b.app1_cod , + b.app1_des , + b.app1_des_c , + b.app2_cod , + b.app2_des , + b.app2_des_c , + b.app3_cod , + b.app3_des , + b.app3_des_c , + b.atc1_cod , + b.atc1_des , + b.atc1_des_c , + b.atc2_cod , + b.atc2_des , + b.atc2_des_c , + b.atc3_cod , + b.atc3_des , + b.atc3_des_c , + b.atc4_cod , + b.atc4_des , + b.atc4_des_c , + b.bio_desc , + right(concat('000000',nvl(b.cmps_cod,0 )),6) cmps_cod, + b.cmps_des , + b.cmps_des_c , + b.corp_cod , + b.corp_des , + b.corp_des_c , + b.edl_desc , + b.eth_otc_desc , + b.gene_orig_desc , + b.gqce_desc , + b.manu_cod , + b.manu_des , + b.manu_des_c , + b.mnfl_cod , + b.mnfl_des , + b.nrdl_desc , + b.pack_des , + b.stgh_des , + b.pack_lch , + b.paed_desc , + b.prod_des , + b.prod_des_c , + b.tcm_desc , + b.vbp_desc , + b.unit , + b.counting_unit , + b.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, + -- c.ta, + if(b.corp_des_c in ('阿斯利康制药集团'),'Y','N') as is_az +from dwd.dwd_gnd_ext_retail_pack_property as b +left join dwd.dwd_ims_td_pack_additional_attribute mole on b.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,pack_desc,strength,product_code,product_desc,molecule_code,molecule_desc,not_in_flag,extend_market,extend_market_ratio,corporation_code,corporation_desc,manufacturer_code,manufacturer_desc,zk_common_name,zk_product_id,zk_dosage_form + from dwd.dwd_gnd_ec_retail_tblmarket_rule + where extend_market is null and ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' ) +) tblmkt +on COALESCE(b.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then COALESCE(b.ATC1_COD,'') else tblmkt.ATC1_Code end + and COALESCE(b.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then COALESCE(b.ATC2_COD,'') else tblmkt.ATC2_Code end + and COALESCE(b.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then COALESCE(b.ATC3_COD,'') else tblmkt.ATC3_Code end + and COALESCE(b.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then COALESCE(b.ATC4_COD,'') else tblmkt.ATC4_Code end + and COALESCE(b.APP1_COD,'') = case when tblmkt.NFC1_Code is null then COALESCE(b.APP1_COD,'') else tblmkt.NFC1_Code end + and COALESCE(b.APP2_COD,'') = case when tblmkt.NFC2_Code is null then COALESCE(b.APP2_COD,'') else tblmkt.NFC2_Code end + and COALESCE(b.app3_cod,'') = case when tblmkt.NFC3_Code is null then COALESCE(b.app3_cod,'') else tblmkt.NFC3_Code end + and COALESCE(b.stgh_des,'') = case when tblmkt.Strength is null then COALESCE(b.stgh_des,'') else tblmkt.Strength end + and COALESCE(b.corp_cod,'') = case when tblmkt.Corporation_Code is null then COALESCE(b.corp_cod,'') else tblmkt.Corporation_Code end + and COALESCE(b.manu_cod,'') = case when tblmkt.Manufacturer_Code is null then COALESCE(b.manu_cod,'') else tblmkt.Manufacturer_Code end + and right(concat('0000000',nvl(b.product_id,0)),7 ) = case when tblmkt.zk_product_id is null then right(concat('0000000',nvl(b.product_id,0) ),7 ) else right(concat('0000000',tblmkt.zk_product_id),7) end + and right(concat('000000000',COALESCE(b.iqvia_prod_code,0)),9) = case when tblmkt.Product_Code is null then right(concat('000000000',COALESCE(b.iqvia_prod_code,0)),9) else right(concat('000000000', tblmkt.Product_Code),9) end + -- and right(concat('00000',COALESCE(b.iqvia_prod_code,0)),5) = case when tblmkt.Product_Code is null then right(concat('00000',COALESCE(b.iqvia_prod_code,0)),5) else right(concat('00000', tblmkt.Product_Code),5) end + and if(COALESCE(b.iqvia_pack_code,0) REGEXP '^[0-9]',right(concat('000000000000',COALESCE(b.iqvia_pack_code,0)),12),COALESCE(b.iqvia_pack_code,0)) = case when tblmkt.Pack_Code is null then if(COALESCE(b.iqvia_pack_code,0) REGEXP '^[0-9]' ,right(concat('000000000000',COALESCE(b.iqvia_pack_code,0)),12),COALESCE(b.iqvia_pack_code,0)) else if( tblmkt.Pack_Code REGEXP '^[0-9]', right(concat('000000000000',tblmkt.Pack_Code),12),tblmkt.Pack_Code) end + -- and right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) = case when tblmkt.Pack_Code is null then right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) else right(concat('0000000',tblmkt.Pack_Code),7) end + and right(concat('000000',COALESCE(b.CMPS_COD,0)),6) = case when tblmkt.Molecule_Code is null then right(concat('000000',COALESCE(b.CMPS_COD,0)),6) else right(concat('000000',tblmkt.Molecule_Code),6) end +-- left join dwd.dwd_gnd_ext_retail_dim_ta c +-- on c.market = tblmkt.Market +where tblmkt.market is not null ; +insert overwrite table tmp.tmp_ec_temp_market_del +select + b.iqvia_lineno , + if( nvl(b.iqvia_pack_code,0) REGEXP '^[0-9]',right(concat('000000000000',nvl(b.iqvia_pack_code,0)),12),nvl(b.iqvia_pack_code,0)) as iqvia_pack_code,-- right(concat('0000000',nvl(b.iqvia_pack_code,0)),7) + right(concat('000000000',nvl(b.iqvia_prod_code,0)),9) as prod_cod ,-- right(concat('00000',nvl(b.iqvia_prod_code,0)),5) + b.iqvia_notes , + b.new_pack_flag , + b.is_exists_chpa , + right(concat('0000000',nvl(b.product_id,0)),7) as product_id, + b.prescription_nature , + b.medicine_type , + b.zk_medicine_tier1 , + b.zk_medicine_tier2 , + b.zk_medicine_tier3 , + b.zk_medicine_tier4 , + b.common_name , + b.dosage_form , + b.user_type , + b.category_name , + b.product_name , + b.brand_name , + b.zk_manu_des , + b.zk_corp_des , + b.zk_pack_des , + b.counting_unit_a , + b.dosage_unit_a , + b.unit_a , + b.app1_cod , + b.app1_des , + b.app1_des_c , + b.app2_cod , + b.app2_des , + b.app2_des_c , + b.app3_cod , + b.app3_des , + b.app3_des_c , + b.atc1_cod , + b.atc1_des , + b.atc1_des_c , + b.atc2_cod , + b.atc2_des , + b.atc2_des_c , + b.atc3_cod , + b.atc3_des , + b.atc3_des_c , + b.atc4_cod , + b.atc4_des , + b.atc4_des_c , + b.bio_desc , + right(concat('000000',nvl(b.cmps_cod,0 )),6) cmps_cod, + b.cmps_des , + b.cmps_des_c , + b.corp_cod , + b.corp_des , + b.corp_des_c , + b.edl_desc , + b.eth_otc_desc , + b.gene_orig_desc , + b.gqce_desc , + b.manu_cod , + b.manu_des , + b.manu_des_c , + b.mnfl_cod , + b.mnfl_des , + b.nrdl_desc , + b.pack_des , + b.stgh_des , + b.pack_lch , + b.paed_desc , + b.prod_des , + b.prod_des_c , + b.tcm_desc , + b.vbp_desc , + b.unit , + b.counting_unit , + b.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, + -- c.ta, + if(b.corp_des_c in ('阿斯利康制药集团'),'Y','N') as is_az +from dwd.dwd_gnd_ext_retail_pack_property as b +left join dwd.dwd_ims_td_pack_additional_attribute mole on b.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,pack_desc,strength,product_code,product_desc,molecule_code,molecule_desc,not_in_flag,extend_market,extend_market_ratio,corporation_code,corporation_desc,manufacturer_code,manufacturer_desc,zk_common_name,zk_product_id,zk_dosage_form + from dwd.dwd_gnd_ec_retail_tblmarket_rule + where Extend_Market is null and NOT_IN_FLAG = '0' +) tblmkt +on COALESCE(b.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then COALESCE(b.ATC1_COD,'') else tblmkt.ATC1_Code end + and COALESCE(b.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then COALESCE(b.ATC2_COD,'') else tblmkt.ATC2_Code end + and COALESCE(b.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then COALESCE(b.ATC3_COD,'') else tblmkt.ATC3_Code end + and COALESCE(b.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then COALESCE(b.ATC4_COD,'') else tblmkt.ATC4_Code end + and COALESCE(b.APP1_COD,'') = case when tblmkt.NFC1_Code is null then COALESCE(b.APP1_COD,'') else tblmkt.NFC1_Code end + and COALESCE(b.APP2_COD,'') = case when tblmkt.NFC2_Code is null then COALESCE(b.APP2_COD,'') else tblmkt.NFC2_Code end + and COALESCE(b.app3_cod,'') = case when tblmkt.NFC3_Code is null then COALESCE(b.app3_cod,'') else tblmkt.NFC3_Code end + and COALESCE(b.stgh_des,'') = case when tblmkt.Strength is null then COALESCE(b.stgh_des,'') else tblmkt.Strength end + and COALESCE(b.corp_cod,'') = case when tblmkt.Corporation_Code is null then COALESCE(b.corp_cod,'') else tblmkt.Corporation_Code end + and COALESCE(b.manu_cod,'') = case when tblmkt.Manufacturer_Code is null then COALESCE(b.manu_cod,'') else tblmkt.Manufacturer_Code end + and right(concat('0000000',nvl(b.product_id,0)),7 ) = case when tblmkt.zk_product_id is null then right(concat('0000000',nvl(b.product_id,0) ),7 ) else right(concat('0000000',tblmkt.zk_product_id),7) end + and right(concat('000000000',COALESCE(b.iqvia_prod_code,0)),9) = case when tblmkt.Product_Code is null then right(concat('000000000',COALESCE(b.iqvia_prod_code,0)),9) else right(concat('000000000', tblmkt.Product_Code),9) end + -- and right(concat('00000',COALESCE(b.iqvia_prod_code,0)),5) = case when tblmkt.Product_Code is null then right(concat('00000',COALESCE(b.iqvia_prod_code,0)),5) else right(concat('00000', tblmkt.Product_Code),5) end + and if(COALESCE(b.iqvia_pack_code,0) REGEXP '^[0-9]',right(concat('000000000000',COALESCE(b.iqvia_pack_code,0)),12),COALESCE(b.iqvia_pack_code,0)) = case when tblmkt.Pack_Code is null then if(COALESCE(b.iqvia_pack_code,0) REGEXP '^[0-9]' ,right(concat('000000000000',COALESCE(b.iqvia_pack_code,0)),12),COALESCE(b.iqvia_pack_code,0)) else if( tblmkt.Pack_Code REGEXP '^[0-9]', right(concat('000000000000',tblmkt.Pack_Code),12),tblmkt.Pack_Code) end + -- and right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) = case when tblmkt.Pack_Code is null then right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) else right(concat('0000000',tblmkt.Pack_Code),7) end + and right(concat('000000',COALESCE(b.CMPS_COD,0)),6) = case when tblmkt.Molecule_Code is null then right(concat('000000',COALESCE(b.CMPS_COD,0)),6) else right(concat('000000',tblmkt.Molecule_Code),6) end +-- left join dwd.dwd_gnd_ext_retail_dim_ta c +-- on c.market = tblmkt.Market +where tblmkt.market is not null ; + +MERGE INTO tmp.tmp_ec_temp_market AS t1 +USING tmp.tmp_ec_temp_market_del AS t2 + on COALESCE(t1.ATC1_COD,'') = COALESCE(t2.ATC1_COD,'') + and COALESCE(t1.ATC2_COD,'') = COALESCE(t2.ATC2_COD,'') + and COALESCE(t1.ATC3_COD,'') = COALESCE(t2.ATC3_COD,'') + and COALESCE(t1.ATC4_COD,'') = COALESCE(t2.ATC4_COD,'') + and COALESCE(t1.APP1_COD,'') = COALESCE(t2.APP1_COD,'') + and COALESCE(t1.APP2_COD,'') = COALESCE(t2.APP2_COD,'') + and COALESCE(t1.APP3_COD,'') = COALESCE(t2.APP3_COD,'') + and COALESCE(t1.CORP_COD,'') = COALESCE(t2.CORP_COD,'') + and COALESCE(t1.MANU_COD,'') = COALESCE(t2.MANU_COD,'') + and COALESCE(t1.PROD_COD,'') = COALESCE(t2.PROD_COD,'') + and COALESCE(t1.iqvia_pack_code,'') = COALESCE(t2.iqvia_pack_code,'') + and COALESCE(t1.STGH_DES,'') = COALESCE(t2.STGH_DES,'') + and COALESCE(t1.CMPS_COD,'') = COALESCE(t2.CMPS_COD,'') + and COALESCE(t1.market,'') = COALESCE(t2.market,'') +WHEN MATCHED THEN DELETE ; + + +-- COMMAND ---------- + +--处理 Extend_Market 有值得数据,用已有市场,定义新的市场,带上系数 +insert into tmp.tmp_ec_temp_market +select +iqvia_lineno,iqvia_pack_code,prod_cod,iqvia_notes,new_pack_flag,is_exists_chpa,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_name,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_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,prod_des,prod_des_c,tcm_desc,vbp_desc,unit,counting_unit,dosage_unit,NRDL_ENTRY_DATE,t2.Market,t2.bu,nvl(t2.extend_market_ratio,1) as extend_market_ratio,is_az +from tmp.tmp_ec_temp_market t1 +left join (select Market,BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ec_retail_tblmarket_rule where Extend_Market is not null )t2 +on t1.Market = t2.Extend_Market +where t2.Market is not null + +-- COMMAND ---------- + +-----------事实表数据处理:获取counting_unit字段,给特殊字段补0,并对数据去重 +insert overwrite table tmp.tmp_ec_source +select + a.time as yyyymm, + right(concat('0000000',a.product_id),7) as pack_id, + if( b.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',b.iqvia_pack_code),12),b.iqvia_pack_code) as iqvia_pack_code, --right(concat('0000000',b.iqvia_pack_code),7) + a.platform, + a.store_name, + a.store_type, + sum(a.sales_amount) as sales_value, + sum(a.sales_qty) as sales_unit, + cast(sum(a.sales_qty*(b.counting_unit/coalesce(unit,1 ))) as decimal(30,10)) as counting_unit +from dwd.dwd_inc_gnd_ext_ec_nationnal_pack_union_all a +left join ( + select DISTINCT product_id,iqvia_pack_code,counting_unit,unit,prod_des_c + from dwd.dwd_gnd_ext_retail_pack_property) b +on right(concat('0000000',a.product_id),7) = right(concat('0000000',b.product_id),7) +group by + a.`time`,right(concat('0000000',a.product_id),7) + ,if( b.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',b.iqvia_pack_code),12),b.iqvia_pack_code) + ,a.platform,a.store_name + ,a.store_type + +-- COMMAND ---------- + +insert overwrite table dws.dws_zk_ec_sales +select + t1.yyyymm,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type, + sum(sales_value) as sales_value, + sum(sales_unit) as sales_unit, + sum(counting_unit) as counting_unit +from tmp.tmp_ec_source t1 +group by + t1.yyyymm,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type + + +-- COMMAND ---------- + +-------------------------处理top_ta_corp数据 +insert overwrite table dws.dws_zk_ec_by_ta_top_corp +select + t1.yyyymm, + t1.ta, + t1.rank, + t1.corp_des, + t1.CORP_COD, + t1.platform, + t1.store_type, + sum(t1.sales_value) sales_value +from ( + select + a.ytd yyyymm, + a.ta, + a.rank, + a.corp_des, + b.CORP_COD, + a.platform, + a.store_type, + replace(a.sales_value,',','') as sales_value + from dwd.dwd_gnd_ec_ta_overview a + left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b + on b.ZK_Corp_C = a.corp_des +) t1 +group by 1,2,3,4,5,6,7 + +-- COMMAND ---------- + +-----加工倒减的by_corp_by_ta_by_total表数据,获取去年数据 +insert overwrite table dws.dws_zk_ec_by_ta_top_corp +select + t1.yyyymm, + t1.ta, + t1.rank, + t1.corp_des, + t1.CORP_COD, + t1.platform, + t1.store_type, + sum(t1.sales_value) sales_value +from( + select + a.ytd yyyymm, + a.ta, + a.rank, + a.corp_des, + b.CORP_COD, + a.platform, + a.store_type, + replace(a.sales_value,',','') as sales_value + from dwd.dwd_gnd_ec_ta_overview a + left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b + on b.ZK_Corp_C = a.corp_des +)t1 +group by 1,2,3,4,5,6,7 + +-- COMMAND ---------- + +----倒减需要用到公司信息以及ta信息,加工配置表挂靠Corp、ta +insert overwrite table tmp.tmp_zk_ec_pack_property_corp +select distinct a.product_id,a.iqvia_pack_code,a.Market,ta.ta + ,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 product_id,iqvia_pack_code,Market,corp_cod,corp_des,corp_des_c,manu_cod,manu_des,manu_des_c,prod_cod from tmp.tmp_ec_temp_market) a +left join dwd.dwd_gnd_ext_retail_dim_ta ta +on a.Market = ta.market +left join (select right(concat('000000000',prod_cod ),9) prod_cod,corp_cod,corp_des,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,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 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 ---------- + +-------------------------------------------------------ec倒减------------------------------------------------------- +--注意事项: +-- 只做了CV、CVRM、TA大数的倒减,其余TA没有做 +--cv倒减:关联加工好的配置表,获取ta信息进行倒减 +insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp +with cv_data as ( + select + t1.yyyymm, + t1.pack_id, + t1.iqvia_pack_code, + t1.platform, + t1.store_type, + t1.store_name, + t1.sales_value, + t1.sales_unit, + t1.counting_unit, + max(t2.ta) ta + from dws.dws_zk_ec_sales t1 + left join (select distinct iqvia_pack_code,ta from tmp.tmp_zk_ec_pack_property_corp) t2 + on t1.iqvia_pack_code = t2.iqvia_pack_code + where t2.ta = 'CV' + group by 1,2,3,4,5,6,7,8,9 +),cv_corp_data as ( +-----------------------cv下的az 数据 + select + A.yyyymm, + A.pack_id, + A.iqvia_pack_code, + A.platform, + A.store_type, + A.store_name, + B.corp_cod, + A.sales_value, + A.sales_unit, + A.counting_unit, + A.ta + from cv_data A + inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B + on A.pack_id = B.product_id + where B.corp_cod = 'A5Z' + union all + -----------------------cv下的az others数据 + select + cv_az.yyyymm, + 'CV_AZ_OTHERS' as pack_id, + 'CV_AZ_OTHERS' as iqvia_pack_code, + cv_az.platform, + cv_az.store_type, + case when cv_az.store_type = '自营旗舰' then 'CV_AZ_OTHERS_SO' when cv_az.store_type = '第三方' then 'CV_AZ_OTHERS_POP' end store_name, + cv_az.corp_cod, + cv_az_total.sales_value - cv_az.sales_value as sales_value, + 0,0, + 'CV_AZ_OTHERS' as ta + from ( + select + A.yyyymm, + B.corp_cod, + A.platform, + case when A.store_type = '平台店' or A.store_type = '品牌店' then '自营旗舰' else A.store_type end store_type, + sum(A.sales_value) sales_value + from cv_data A + inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B + on A.pack_id = B.product_id + where B.corp_cod = 'A5Z' + group by 1,2,3,4 + )cv_az + left join( + select + yyyymm, + CORP_COD, + platform, + case when store_type = '三方' then '第三方' else store_type end store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where ta = 'CV' and CORP_COD = 'A5Z' + group by 1,2,3,4 + )cv_az_total + on cv_az.yyyymm = cv_az_total.yyyymm + and cv_az.corp_cod = cv_az_total.CORP_COD + and cv_az.platform = cv_az_total.platform + and cv_az.store_type = cv_az_total.store_type + union all + ---------------cv下的非az数据 + select + A.yyyymm, + A.pack_id, + A.iqvia_pack_code, + A.platform, + A.store_type, + A.store_name, + B.corp_cod, + A.sales_value, + A.sales_unit, + A.counting_unit, + A.ta + from cv_data A + inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B + on A.pack_id = B.product_id + where nvl(corp_cod,'') <>'A5Z' +) +-----------------------所有cv 数据 +,all_cv_data as ( +select + yyyymm, + pack_id, + iqvia_pack_code, + platform, + store_type, + store_name, + corp_cod, + sales_value, + sales_unit, + counting_unit, + 'CV' flag, + ta +from cv_corp_data +union all +-----------------------倒减出cv_others数据 +select + t1.yyyymm, + 'CV_OTHERS' as pack_id, + 'CV_OTHERS' as iqvia_pack_code, + t1.platform, + t1.store_type, + case when t1.store_type = '自营旗舰' then 'CV_OTHERS_SO' when t1.store_type = '第三方' then 'CV_OTHERS_POP' end store_name, + 'CV_OTHERS' as corp_cod, + t2.sales_value - t1.sales_value as sales_value, + 0,0, + 'CV' as flag, + 'CV_OTHERS' as ta +from( +-----------------------所有的cv数据 + select + yyyymm, + platform, + case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type, + sum(sales_value) sales_value + from cv_corp_data + group by 1,2,3 +)t1 +left join( +-----------------------cv大数 + select + yyyymm, + platform, + case when store_type = '三方' then '第三方' else store_type end store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where ta = 'CV' and lower(rank) = 'total' + group by 1,2,3 +)t2 +on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type +),non_cv_all_data as ( + select + t1.yyyymm, + t1.pack_id, + t1.iqvia_pack_code, + t1.platform, + t1.store_type, + t1.store_name, + t2.corp_cod, + t1.sales_value, + t1.sales_unit, + t1.counting_unit, + case when t2.ta in ('DM','RD') then 'CVRM' else '' end flag, + max(t2.ta) ta + from dws.dws_zk_ec_sales t1 + left join (select distinct iqvia_pack_code,ta,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) t2 + on t1.pack_id = t2.product_id + where nvl(t2.TA,'') <> 'CV' + group by 1,2,3,4,5,6,7,8,9,10,11 +) +select * from all_cv_data +union +select * from non_cv_all_data +-- select * from non_cv_all_data order by sales_value desc + + + +-- COMMAND ---------- + +--cvrm倒减:关联加工好的配置表,获取ta信息进行倒减 +insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp2 +with all_data as ( +select + yyyymm, + pack_id, + iqvia_pack_code, + platform, + store_type, + store_name, + corp_cod, + sales_value, + sales_unit, + counting_unit, + flag +from tmp.tmp_dm_zk_ec_sales_cv_tmp +union all +select + t1.yyyymm, + 'CVRM_AZ_OTHERS' as pack_id, + 'CVRM_AZ_OTHERS' as iqvia_pack_code, + t1.platform, + t1.store_type, + case when t1.store_type = '自营旗舰' then 'CVRM_AZ_OTHERS_SO' when t1.store_type = '第三方' then 'CVRM_AZ_OTHERS_POP' end store_name, + t1.corp_cod, + t2.sales_value - t1.sales_value as sales_value, + 0,0, + 'CVRM' as flag +from( + select + yyyymm, + corp_cod, + platform, + case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type, + sum(sales_value) sales_value + from tmp.tmp_dm_zk_ec_sales_cv_tmp + where corp_cod = 'A5Z' and flag in ('CV','CVRM') + group by 1,2,3,4 +)t1 +left join ( + select + yyyymm, + CORP_COD, + platform, + case when store_type = '三方' then '第三方' else store_type end store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where CORP_COD = 'A5Z' and ta = 'CVRM' + group by 1,2,3,4 +)t2 +on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type +) +select + yyyymm, + pack_id, + iqvia_pack_code, + platform, + store_type, + store_name, + corp_cod, + sales_value, + sales_unit, + counting_unit, + flag +from all_data +union all +select + t1.yyyymm, + 'CVRM_OTHERS' as pack_id, + 'CVRM_OTHERS' as iqvia_pack_code, + t1.platform, + t1.store_type, + case when t1.store_type = '自营旗舰' then 'CVRM_OTHERS_SO' when t1.store_type = '第三方' then 'CVRM_OTHERS_POP' end store_name, + 'CVRM_OTHERS' as corp_cod, + t2.sales_value - t1.sales_value as sales_value, + 0,0, + 'CVRM' flag +from ( + select + yyyymm, + platform, + case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type, + sum(sales_value) sales_value + from all_data + where flag in ('CV','CVRM') + group by 1,2,3 +)t1 +left join( + select + yyyymm, + platform, + case when store_type = '三方' then '第三方' else store_type end store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where ta = 'CVRM' and lower(rank) = 'total' + group by 1,2,3 +)t2 +on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type + + + + + + +-- COMMAND ---------- + +--ta倒减并写入事实表:根据加工好的倒减底表中ta字段信息获取ta总数,进行倒减 +insert overwrite table tmp.tmp_dm_zk_ec_sales +with all_data as ( +select distinct + yyyymm, + pack_id, + iqvia_pack_code, + platform, + store_type, + store_name, + corp_cod, + sales_value, + sales_unit, + counting_unit, + flag +from tmp.tmp_dm_zk_ec_sales_cv_tmp2 +union all +select + t1.yyyymm, + 'OTHERS_AZ_TA' as pack_id, + 'OTHERS_AZ_TA' as iqvia_pack_code, + t1.platform, + t1.store_type, + case when t1.store_type = '自营旗舰' then 'OTHERS_AZ_TA_SO' when t1.store_type = '第三方' then 'OTHERS_AZ_TA_POP' end store_name, + t1.corp_cod, + t2.sales_value - t1.sales_value as sales_value, + 0,0, + 'OTHERS_AZ_TA' as flag +from( + select + yyyymm, + corp_cod, + platform, + case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type, + sum(sales_value) sales_value + from tmp.tmp_dm_zk_ec_sales_cv_tmp2 + where corp_cod = 'A5Z' + group by 1,2,3,4 +)t1 +left join ( + select + yyyymm, + platform, + store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where CORP_COD = 'A5Z' and ta = 'RX Total' + group by 1,2,3 +)t2 +on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type +),result as ( +select + yyyymm, + pack_id, + iqvia_pack_code, + platform, + store_type, + store_name, + corp_cod, + sales_value, + sales_unit, + counting_unit, + flag +from all_data +union all +select + t1.yyyymm, + 'OTHERS_TA' as pack_id, + 'OTHERS_TA' as iqvia_pack_code, + t1.platform, + t1.store_type, + case when t1.store_type = '自营旗舰' then 'OTHERS_TA_SO' when t1.store_type = '第三方' then 'OTHERS_TA_POP' end store_name, + 'OTHERS_TA' as corp_cod, + t2.sales_value - t1.sales_value as sales_value, + 0,0, + 'OTHERS_TA' as flag +from( + select + yyyymm, + platform, + case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type, + sum(sales_value) sales_value + from all_data + group by 1,2,3 +)t1 +left join( + select + yyyymm, + platform, + store_type, + sum(sales_value) sales_value + from dws.dws_zk_ec_by_ta_top_corp + where lower(rank) = 'total' and ta = 'RX Total' + group by 1,2,3 + )t2 +on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type +) +select distinct + yyyymm, + pack_id, + iqvia_pack_code, + corp_cod, + 'ROC' as audit_cod, + platform, + case when store_type = '第三方' then 'POP' when store_type in ('平台店','品牌店','自营旗舰') then 'SO' end store_type, + store_name, + case when iqvia_pack_code like '%OTHERS%' then 0 else 1 end PACK_FLAG, + case when iqvia_pack_code like '%OTHERS%' then 0 else 1 end PROD_FLAG, + flag, + 'EC(Monthly)' DATA_SOURCE, + sum(sales_value) sales_value, + sum(sales_unit) sales_unit, + sum(counting_unit) counting_unit +from result +group by 1,2,3,4,5,6,7,8,9,10,11,12 + + + + + +-- COMMAND ---------- + +insert overwrite table dm.dm_zk_ec_sales +select +yyyymm, +max(pack_id) as pack_id, +iqvia_pack_code, +corp_cod, +audit_cod, +platform, +store_type, +store_name, +max(PACK_FLAG) as PACK_FLAG, +max(PROD_FLAG) as PROD_FLAG, +max(flag) as flag, +DATA_SOURCE, +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 +from +( +select +yyyymm, +pack_id, +iqvia_pack_code, +corp_cod, +audit_cod, +platform, +store_type, +store_name, +PACK_FLAG, +PROD_FLAG, +flag, +DATA_SOURCE, +sales_value, +0 as sales_value_ly, +sales_unit, +0 as sales_unit_ly, +counting_unit, +0 as counting_unit_ly +from tmp.tmp_dm_zk_ec_sales +union all +select +cast(yyyymm + 100 as int) as yyyymm, +null as pack_id, +iqvia_pack_code, +corp_cod, +audit_cod, +platform, +store_type, +store_name, +case when upper(iqvia_pack_code) like '%OTHERS%' then 0 else 1 end as PACK_FLAG, +case when upper(iqvia_pack_code) like '%OTHERS%' then 0 else 1 end as PROD_FLAG, +'' as flag, +DATA_SOURCE, +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 +from tmp.tmp_dm_zk_ec_sales +where cast(yyyymm + 100 as int) <= (select max(yyyymm) from tmp.tmp_dm_zk_ec_sales) +) t +group by yyyymm, +iqvia_pack_code, +corp_cod, +audit_cod, +platform, +store_type, +store_name, +DATA_SOURCE + +-- COMMAND ---------- + +insert overwrite table dws.dws_zk_ec_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_ec_temp_market +union all +select +'' iqvia_lineno +,iqvia_pack_code as iqvia_pack_code +,'' prod_cod +,'' iqvia_notes +,'' new_pack_flag +,'' is_exists_chpa +,iqvia_pack_code as 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_name +,'' 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 as 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 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_ec_sales where iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_ec_temp_market)) + + +-- COMMAND ---------- + +insert overwrite table tmp.tmp_dm_zk_ec_pack_property +select +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 +,a.Market +,a.bu +,a.extend_market_ratio +,a.is_az +from dws.dws_zk_ec_pack_property a +left join (select right(concat('000000000',prod_cod ),9) prod_cod,corp_cod,corp_des,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,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 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 ---------- + +------将事实表倒减之后的维度信息补充到维度表里 +insert overwrite table dm.dm_zk_ec_pack_property +select + 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_lineno +,a.iqvia_pack_code +,a.prod_cod +,a.iqvia_notes +,a.new_pack_flag +,a.is_exists_chpa +,'' Family_Code +,'' Family_Name +,'' BrandType +,'' AZ_MAIN +,'' AZ_Related +,t5.KEY_COMPETITOR +,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 +,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' + WHEN a.corp_des like '%GROUP%' THEN replace(a.corp_des,' GROUP','') + else a.CORP_DES END corp_des +,CASE WHEN a.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' else a.CORP_DES_C END + CORP_DES_C +,a.edl_desc +,a.eth_otc_desc +,a.gene_orig_desc +,a.gqce_desc +,a.manu_cod +,a.manu_des +,a.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.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 +,a.bu +,a.extend_market_ratio +,a.is_az +,nvl(b.class, 'Others') class +,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 c.ta + END TA +from tmp.tmp_dm_zk_ec_pack_property a +left join dwd.dwd_gnd_ext_retail_dim_ta c +on c.market = a.Market +left join dwd.dwd_gnd_tblclass b +on a.Market = case when b.market is null then a.Market else b.market end +and nvl(a.iqvia_pack_code,'') = case when b.pack_code is null then nvl(a.iqvia_pack_code,'') else b.pack_code end +and nvl(a.prod_cod,'') = case when b.product_code is null then nvl(a.prod_cod,'') else b.product_code end +and nvl(a.cmps_cod,'') = case when b.molecule_code is null then nvl(a.cmps_cod,'') else right(concat('000000',b.molecule_code),6) end +and nvl(a.corp_cod,'') = case when b.corporation_code is null then nvl(a.corp_cod,'') else b.corporation_code end +and nvl(a.manu_cod,'') = case when b.manufacturer_code is null then nvl(a.manu_cod,'') else b.manufacturer_code end +and nvl(a.app1_cod,'') = case when b.nfc1_code is null then nvl(a.app1_cod,'') else b.nfc1_code end +and nvl(a.app2_cod,'') = case when b.nfc2_code is null then nvl(a.app2_cod,'') else b.nfc2_code end +and nvl(a.app3_cod,'') = case when b.nfc3_code is null then nvl(a.app3_cod,'') else b.nfc3_code end +and nvl(a.atc1_cod,'') = case when b.atc1_code is null then nvl(a.atc1_cod,'') else b.atc1_code end +and nvl(a.atc2_cod,'') = case when b.atc2_code is null then nvl(a.atc2_cod,'') else b.atc2_code end +and nvl(a.atc3_cod,'') = case when b.atc3_code is null then nvl(a.atc3_cod,'') else b.atc3_code end +and nvl(a.atc4_cod,'') = case when b.atc4_code is null then nvl(a.atc4_cod,'') else b.atc4_code end +and nvl(a.stgh_des,'') = case when b.strength is null then nvl(a.stgh_des,'') else b.strength end +left join (select distinct MARKET,PACK_CODE as PACK_COD,KEY_COMPETITOR from DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING) t5 +on a.market = t5.MARKET +and a.iqvia_pack_code = t5.PACK_COD + + + +-- COMMAND ---------- + +insert overwrite table dm.dm_zk_ec_market_property +select distinct +iqvia_pack_code,market,ta +from dm.dm_zk_ec_pack_property + +-- COMMAND ---------- + +insert overwrite table dm.dm_zk_ec_market_ratio +select distinct + concat(a.Market,'_',a.iqvia_pack_code) as market_pack_key, + a.iqvia_pack_code as pack_cod, + a.prod_des, + a.cmps_des, + a.corp_cod, + a.Market, + a.extend_market_ratio as value_market_ratio, + a.extend_market_ratio as unit_market_ratio, + coalesce( + case when c.ratio is null then a.extend_market_ratio*d.ratio + else a.extend_market_ratio*c.ratio end,1) as countingunit_market_ratio +from tmp.tmp_ec_temp_market a +left join (--pack + select + market, + cmps_cod, + cmps_des, + if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,--right(concat('0000000',pack_cod ),7) + 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' +)c on a.Market = c.market and a.iqvia_pack_code = if( c.pack_cod REGEXP '^[0-9]',right(concat('000000000000',c.pack_cod),12),c.pack_cod)--right(concat('0000000',c.pack_cod),7) +left join(--molecule + select + market, + cmps_cod, + cmps_des, + if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,--right(concat('0000000',pack_cod ),7) + 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' +)d on a.Market = d.market and a.cmps_cod = right(concat('000000',d.cmps_cod ),6) + +-- COMMAND ---------- + +create or replace table dm.dm_zk_ec_geo +using delta as +select + 'ROC' as audit_cod, + '全国' as city_c, + 'national' as city_e, + '全国' as province_c, + 'national' as province_e; + +-- COMMAND ---------- + +---------------------------------------将直取部分数据处理成KPI形式----------------------------------------- +insert overwrite table tmp.tmp_zk_ec_sales_kpi_tmp +select + b.CORP_COD, + '' as yyyymm, + a.ytd , + a.platform, + case when a.store_type = '三方' then '第三方' else a.store_type end store_type , + 'ROC' as geo_key, +'top_yoygr' as KPI_name, +a.yoy_gr as Kpi_val, +c.yoy_gr as Kpi_val_ly, +'' as str_kpi_val, +'' as str_kpi_val_ly, +'' as str_kpi_vol, +'' as str_kpi_vol_ly, +case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag, +'' as ta +from dwd.dwd_gnd_ec_b2c_top10_drives_brand a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp = b.ZK_Corp_C +left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c +on a.corp = c.corp +and a.ytd = c.ytd + 100 +and a.platform = c.platform +and a.store_type = c.store_type +-- where upper(a.rank) <> 'TTL MKT' +union all +select + b.CORP_COD, + '' as yyyymm, + a.ytd , + a.platform, + case when a.store_type = '三方' then '第三方' else a.store_type end store_type , + 'ROC' as geo_key, +'top1_brand_gr' as KPI_name, +a.top1_brand_gr as Kpi_val, +c.top1_brand_gr as Kpi_val_ly, +'' as str_kpi_val, +'' as str_kpi_val_ly, +'' as str_kpi_vol, +'' as str_kpi_vol_ly, +case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag, +'' as ta +from dwd.dwd_gnd_ec_b2c_top10_drives_brand a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp = b.ZK_Corp_C +left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c +on a.corp = c.corp +and a.ytd = c.ytd + 100 +and a.platform = c.platform +and a.store_type = c.store_type +-- where upper(a.rank) <> 'TTL MKT' +union all +select + b.CORP_COD, + '' as yyyymm, + a.ytd , + a.platform, + case when a.store_type = '三方' then '第三方' else a.store_type end store_type, + 'ROC' as geo_key, +'top1_brand_val' as KPI_name, +'' as Kpi_val, +'' as Kpi_val_ly, +a.top1_brand_val as str_kpi_val, +'' as str_kpi_val_ly, +'' as str_kpi_vol, +'' as str_kpi_vol_ly, +case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag, +'' as ta +from dwd.dwd_gnd_ec_b2c_top10_drives_brand a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp = b.ZK_Corp_C +-- where upper(a.rank) <> 'TTL MKT' +union all +select + b.CORP_COD, + '' as yyyymm, + a.ytd , + a.platform, + case when a.store_type = '三方' then '第三方' else a.store_type end store_type, + 'ROC' as geo_key, + 'incremental_brand' as KPI_name, + '' as Kpi_val, + '' as Kpi_val_ly, + a.growth_driver_brand_val as str_kpi_val, + '' as str_kpi_val_ly, + '' as str_kpi_vol, + '' as str_kpi_vol_ly, + case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag, + '' as ta +from dwd.dwd_gnd_ec_b2c_top10_drives_brand a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp = b.ZK_Corp_C +-- where upper(a.rank) <> 'TTL MKT' +union all +select + b.CORP_COD, + '' as yyyymm, + a.ytd , + a.platform, + case when a.store_type = '三方' then '第三方' else a.store_type end store_type, + 'ROC' as geo_key, + 'incremental_brand_gr' as KPI_name, + a.growth_driver_brand_gr as Kpi_val, + c.growth_driver_brand_gr as Kpi_val_ly, + '' as str_kpi_val, + '' as str_kpi_val_ly, + '' as str_kpi_vol, + '' as str_kpi_vol_ly, + case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag, + '' as ta +from dwd.dwd_gnd_ec_b2c_top10_drives_brand a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp = b.ZK_Corp_C +left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c +on a.corp = c.corp +and a.ytd = c.ytd + 100 +and a.platform = c.platform +and a.store_type = c.store_type +-- where upper(a.rank) <> 'TTL MKT' +union all +select + b.CORP_COD, + a.ytd yyyymm, + '' as ytd, + a.platform, + a.store_type, + 'ROC' as geo_key, + 'top_corp_sales' as KPI_name, + replace(a.sales_value,',','' ) as Kpi_val, + replace(c.sales_value,',','' ) as Kpi_val_ly, + '' as str_kpi_val, + '' as str_kpi_val_ly, + '' as str_kpi_vol, + '' as str_kpi_vol_ly, + case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag, + a.ta +from dwd.dwd_gnd_ec_ta_overview a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp_des = b.ZK_Corp_C +left join dwd.dwd_gnd_ec_ta_overview c +on a.ytd = c.ytd + 100 +and a.corp_des = c.corp_des +and a.platform = c.platform +and a.store_type = c.store_type +and a.ta = c.ta +-- where lower(a.rank) <> 'total' +union all +select distinct + b.CORP_COD, + '' yyyymm, + a.ytd as ytd, + a.platform, + a.store_type, + 'ROC' as geo_key, + 'top_rank' as KPI_name, + a.rank as Kpi_val, + '' as Kpi_val_ly, + '' as str_kpi_val, + '' as str_kpi_val_ly, + '' as str_kpi_vol, + '' as str_kpi_vol_ly, + case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag, + a.ta +from dwd.dwd_gnd_ec_ta_overview a +left join (select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total where (ZK_Corp_C = '东阳光' and ZK_Prod_C is null) or ZK_Corp_C != '东阳光') b +on a.corp_des = b.ZK_Corp_C +-- where lower(a.rank) <> 'total' + + +-- COMMAND ---------- + +insert overwrite table dm.dm_zk_ec_sales_kpi +select + case when total_flag = 'Y' then 'TTL MKT' else nvl(CORP_COD,'') end CORP_COD , + if(yyyymm <> '', nvl(yyyymm,''),nvl(ytd,'')) yyyymm, + if(ytd <> '', 'Y', 'N') ytd, + nvl(platform,'') as platform, + case when store_type = '自营旗舰' then 'SO' + when store_type = '第三方' then 'POP' else nvl(store_type,'') end store_type, + nvl(geo_key,'') as geo_key, + nvl(KPI_name,'') as KPI_name, + nvl(cast(Kpi_val as double),'') Kpi_val, + nvl(cast(Kpi_val_ly as double),'') Kpi_val_ly, + nvl(str_kpi_val,'') as str_kpi_val, + nvl(str_kpi_val_ly,'') as str_kpi_val_ly, + nvl(str_kpi_vol,'') as str_kpi_vol, + nvl(str_kpi_vol_ly,'') as str_kpi_vol_ly, + nvl(total_flag,'') as total_flag, + case when ta = 'NIAD' then 'DM' when ta = 'RX Total' then '' else nvl(ta,'') end ta +from tmp.tmp_zk_ec_sales_kpi_tmp + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## NIAD Date + +-- COMMAND ---------- + +-- 计算NIAD的时间是否比其他数据源先来数据 chenwu +CREATE OR REPLACE TABLE tmp.tmp_dm_td_ext_ec_niad_month as +WITH all_ec_data ( + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_hm_jd_2025before + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_hm_jd_2025after + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_hm_tm_2206after + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_hm_tm_2206before + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_gastritis_23after + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_gastritis_23before + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_re + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_dm_statins_xzk + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_dm_23before + UNION ALL + SELECT + MAX(TIME) month, + 'NIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_dm_23after + UNION ALL + SELECT + MAX(TIME) month, + 'NOTNIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_hm_tm_2403after + UNION ALL + SELECT + MAX(TIME) month, + 'NIAD' AS DATATYPE + FROM + dwd.dwd_gnd_ec_zkb2c_dm_26after +) +SELECT + MAX(t1.month) as NIAD_MONTH, + max(t2.month) OTHERS_MONTH +FROM + all_ec_data t1 + LEFT JOIN ( + SELECT + MAX(month) as month + FROM + all_ec_data + WHERE + datatype = 'NOTNIAD' + ) t2 +WHERE + t1.datatype = 'NIAD' + +-- COMMAND ---------- + +select * from tmp.tmp_dm_td_ext_ec_niad_month \ No newline at end of file diff --git a/EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql b/EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql new file mode 100644 index 0000000..f8f7276 --- /dev/null +++ b/EC/04 DM_TD_EXT_EC_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_PACK_PROPERTY +-- ( +-- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- CLASS STRING, +-- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_EC_PACK_PROPERTY +SELECT + MARKET_PACK_KEY, + iqvia_pack_code AS PACK_CODE, + pack_des AS PACK_DESC, + stgh_des AS STGH_DESC, + pack_lch AS PACK_LCH, + Family_Code AS FAMILY_CODE, + Family_Name AS FAMILY_NAME, + prod_cod AS PROD_CODE, + prod_des AS PROD_DESC, + prod_des_c AS PROD_DESC_C, + cmps_cod AS CMPS_CODE, + cmps_des AS CMPS_DESC, + cmps_des_c AS CMPS_DESC_C, + atc1_cod AS ATC1_CODE, + atc2_cod AS ATC2_CODE, + atc3_cod AS ATC3_CODE, + atc4_cod AS ATC4_CODE, + app1_cod AS APP1_CODE, + app2_cod AS APP2_CODE, + app3_cod AS APP3_CODE, + bio_desc AS BIO_DESC, + gene_orig_desc AS GENE_ORIG_DESC, + eth_otc_desc AS ETH_OTC_DESC, + nrdl_desc AS NRDL_DESC, + NRDL_ENTRY_DATE, + edl_desc AS EDL_DESC, + tcm_desc AS TCM_DESC, + paed_desc AS PAED_DESC, + gqce_desc AS GQCE_DESC, + NULL AS VBP_DESC_V, + vbp_desc AS VBP_DESC, + manu_cod AS MANU_CODE, + manu_des AS MANU_DESC, + manu_des_c AS MANU_DESC_C, + mnfl_cod AS MNFL_CODE, + mnfl_des AS MNFL_DESC, + corp_cod AS CORP_CODE, + corp_des AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BrandType AS BRANDTYPE, + market AS MARKET, + KEY_COMPETITOR, + is_az AS IS_AZ, + AZ_MAIN, + AZ_Related AS AZ_RELATED, + atc1_des AS ATC1_DESC, + atc1_des_c AS ATC1_DESC_C, + atc2_des AS ATC2_DESC, + atc2_des_c AS ATC2_DESC_C, + atc3_des AS ATC3_DESC, + atc3_des_c AS ATC3_DESC_C, + atc4_des AS ATC4_DESC, + atc4_des_c AS ATC4_DESC_C, + app1_des AS APP1_DESC, + app1_des_c AS APP1_DESC_C, + app2_des AS APP2_DESC, + app2_des_c AS APP2_DESC_C, + app3_des AS APP3_DESC, + app3_des_c AS APP3_DESC_C, + class AS CLASS, + extend_market_ratio AS MARKET_RATIO, + counting_unit AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_ZK_EC_PACK_PROPERTY; \ No newline at end of file diff --git a/EC/05 DM_TF_EXT_EC_SALES.sql b/EC/05 DM_TF_EXT_EC_SALES.sql new file mode 100644 index 0000000..01f4827 --- /dev/null +++ b/EC/05 DM_TF_EXT_EC_SALES.sql @@ -0,0 +1,173 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_EC_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_ec_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_ec_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW EC_SALES +AS + SELECT + A.YYYYMM, + A.iqvia_pack_code AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'EC(Monthly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + A.PLATFORM AS PLATFORM_TYPE, + A.STORE_NAME, + A.STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_zk_ec_sales A + where + A.YYYYMM >= '202001' + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.PLATFORM, + A.STORE_NAME, + A.STORE_TYPE, + A.PACK_FLAG, + A.PROD_FLAG + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_EC_SALES +( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) +SELECT + YYYYMM, + NVL ( + NULLIF(PACK_CODE, ''), + CONCAT ('PACK_CODE_', DATA_SOURCE) + ) AS PACK_CODE, + NVL (NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + EC_SALES +; \ No newline at end of file diff --git a/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql b/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql new file mode 100644 index 0000000..fcfd57a --- /dev/null +++ b/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql @@ -0,0 +1,208 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack2market'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_EC_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; \ No newline at end of file diff --git a/EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql b/EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql new file mode 100644 index 0000000..6f846db --- /dev/null +++ b/EC/07 DM_TD_EXT_EC_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_EC_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql b/EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..aec4613 --- /dev/null +++ b/EC/08 DM_TD_EXT_EC_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_EC_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql b/EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..1ee3ce6 --- /dev/null +++ b/EC/09 DM_TD_EXT_EC_MARKET_PACK_MAPPING.sql @@ -0,0 +1,62 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_EC_MARKET_PACK_MAPPING +SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T1.CLASS, + T1.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT + FROM +DM.DM_TD_EXT_EC_PACK_PROPERTY T1 +LEFT JOIN DM.DM_TD_EXT_EC_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_CODE +LEFT JOIN DM.DM_TD_EXT_EC_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_CODE +WHERE UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/EC/1 (ec)blob_to_dwd.sql b/EC/1 (ec)blob_to_dwd.sql new file mode 100644 index 0000000..4e9708f --- /dev/null +++ b/EC/1 (ec)blob_to_dwd.sql @@ -0,0 +1,103 @@ +-- Databricks notebook source +-- MAGIC %python +-- MAGIC import datetime +-- MAGIC from pyspark.sql.functions import current_timestamp, expr, date_format +-- MAGIC +-- MAGIC # 计算当前日期 +-- MAGIC current_date_utc = datetime.datetime.utcnow() +-- MAGIC offset = datetime.timedelta(hours=8) +-- MAGIC current_date = current_date_utc + offset +-- MAGIC +-- MAGIC today_path = "{:04d}/{:02d}/{:02d}/".format( +-- MAGIC current_date.year, +-- MAGIC current_date.month, +-- MAGIC current_date.day, +-- MAGIC ) +-- MAGIC # 基础路径 +-- MAGIC # 测试环境 +-- MAGIC base_path_0 = f"abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +-- MAGIC # 生产环境 +-- MAGIC # base_path_0 = f"abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +-- MAGIC base_path = base_path_0 + today_path +-- MAGIC print(base_path) +-- MAGIC +-- MAGIC # 检查基础路径是否存在 +-- MAGIC def check_path_exists(path): +-- MAGIC try: +-- MAGIC dbutils.fs.ls(path) +-- MAGIC return True +-- MAGIC except Exception as e: +-- MAGIC return False +-- MAGIC +-- MAGIC if check_path_exists(base_path): +-- MAGIC # 列出所有批次路径 +-- MAGIC batch_paths = dbutils.fs.ls(base_path) +-- MAGIC +-- MAGIC # 从已存在的配置表中读取数据 +-- MAGIC config_df = spark.table("dwd.dwd_gnd_ec_config_table") +-- MAGIC +-- MAGIC # 逐批处理 +-- MAGIC for batch in batch_paths: +-- MAGIC current_batch_number = int(batch.name.strip('/')) +-- MAGIC # print(f"Checking batch {current_batch_number} at {batch.path}") +-- MAGIC +-- MAGIC files_in_batch = dbutils.fs.ls(batch.path) +-- MAGIC +-- MAGIC print("该批次中的文件:") +-- MAGIC for file in files_in_batch: +-- MAGIC print(file.name) +-- MAGIC +-- MAGIC for row in config_df.collect(): +-- MAGIC file_name = row['file_name'].strip().lower() +-- MAGIC table_name = row['table_name'] +-- MAGIC +-- MAGIC # 检查文件是否匹配 +-- MAGIC matching_files = [f for f in files_in_batch if f.name.strip().lower() == file_name] +-- MAGIC +-- MAGIC for match in matching_files: +-- MAGIC csv_file_path = batch.path + match.name +-- MAGIC print(f"找到匹配的文件: {csv_file_path}") +-- MAGIC +-- MAGIC # 读取 CSV 文件 +-- MAGIC df = spark.read.format("csv").option("header", "true").option("charset", "GBK").load(csv_file_path) +-- MAGIC +-- MAGIC # 对列进行重命名(假设所有文件的列名相同) +-- MAGIC df = df.withColumnRenamed('时间(月度)', 'time') +-- MAGIC df = df.withColumnRenamed('平台', 'platform') +-- MAGIC df = df.withColumnRenamed('店铺名称', 'store_name') +-- MAGIC df = df.withColumnRenamed('店铺类型', 'store_type') +-- MAGIC df = df.withColumnRenamed('产品ID', 'product_id') +-- MAGIC df = df.withColumnRenamed('品牌', 'brand_name') +-- MAGIC df = df.withColumnRenamed('品名', 'category_name') +-- MAGIC df = df.withColumnRenamed('商品名', 'product_name') +-- MAGIC df = df.withColumnRenamed('通用名', 'common_name') +-- MAGIC df = df.withColumnRenamed('厂家', 'factory') +-- MAGIC df = df.withColumnRenamed('集团权益', 'group_interest') +-- MAGIC df = df.withColumnRenamed('规格', 'specification') +-- MAGIC df = df.withColumnRenamed('单件包装盒数', 'pcs_per_box') +-- MAGIC df = df.withColumnRenamed('剂型', 'dosage') +-- MAGIC df = df.withColumnRenamed('细分一', 'des1') +-- MAGIC df = df.withColumnRenamed('细分二', 'des2') +-- MAGIC df = df.withColumnRenamed('细分三', 'des3') +-- MAGIC df = df.withColumnRenamed('细分四', 'des4') +-- MAGIC df = df.withColumnRenamed('销售额', 'sales_amount') +-- MAGIC df = df.withColumnRenamed('成交件数', 'sold_pcs') +-- MAGIC df = df.withColumnRenamed('平均单价(元/件)', 'aup_pices') +-- MAGIC df = df.withColumnRenamed('销售量(盒)', 'sales_qty') +-- MAGIC df = df.withColumnRenamed('平均单价(元/盒)', 'aup_box') +-- MAGIC df = df.withColumnRenamed('PROD_COD', 'PROD_COD') +-- MAGIC df = df.withColumnRenamed('PACK_COD', 'PACK_COD') +-- MAGIC df = df.withColumnRenamed('APP3_COD', 'APP3_COD') +-- MAGIC df = df.withColumnRenamed('ATC4_COD', 'ATC4_COD') +-- MAGIC +-- MAGIC # 添加 'etl_insert_dt' 列,包含当前时间并加上 8 小时的时差 +-- MAGIC df = df.withColumn('etl_insert_dt', date_format(expr("current_timestamp() + INTERVAL 8 HOURS"), 'yyyy-MM-dd HH:mm:ss')) +-- MAGIC +-- MAGIC # 将数据保存到目标表 +-- MAGIC df.write.mode("overwrite").saveAsTable(table_name) +-- MAGIC +-- MAGIC print(f"数据已写入表 {table_name}") +-- MAGIC else: +-- MAGIC print("未找到批次或路径不存在。") +-- MAGIC +-- MAGIC \ No newline at end of file diff --git a/EC/2 dwd_inc_gnd_ext_ec_nationnal_pack_union_all.py b/EC/2 dwd_inc_gnd_ext_ec_nationnal_pack_union_all.py new file mode 100644 index 0000000..1e6f75c --- /dev/null +++ b/EC/2 dwd_inc_gnd_ext_ec_nationnal_pack_union_all.py @@ -0,0 +1,74 @@ +# Databricks notebook source +from pyspark.sql.functions import lit +from pyspark.sql.utils import AnalysisException + +# pack数据自动接入 整合 +#获取配置表信息(表名、brand_flag +df = spark.sql(""" +SELECT DISTINCT table_name tab ,file_name brand_flag FROM dwd.dwd_gnd_ec_config_table +where type_name ='PACK' +""").collect() +# print(df) +def get_union_pack_data(df): + #初始化结果集 + union_query = None + # niad_pdot_unit需特殊赋值对应表名:tmp.tmp_inc_gnd_ext_retail_nataional_niad + # niad_pdot_unit_flag = 'tmp.tmp_inc_gnd_ext_retail_nataional_niad' + for table in df: + # 选择当前表名 + table_name = table['tab'] + if not table_name: + print("由于table_name为空,故跳过查询") + continue + # 获取对应brand表维度对应得 market 名称 + # brand_flag = str(table.brand_flag) + sql = f""" + select + t1.time, + t1.platform, + t1.store_name, + t1.store_type, + t1.product_id, + t1.brand_name, + t1.category_name, + t1.product_name, + t1.common_name, + t1.factory, + t1.group_interest, + t1.specification, + t1.pcs_per_box, + t1.dosage, + t1.des1, + t1.des2, + t1.des3, + t1.des4, + t1.sales_amount, + t1.sold_pcs, + t1.aup_pices, + t1.sales_qty, + t1.aup_box, + t1.PROD_COD, + t1.PACK_COD, + t1.APP3_COD, + t1.ATC4_COD, + t1.etl_insert_dt + from {table_name} t1 + """ + # 尝试读取数据,只有在表名非空时执行 + try: + current_query = spark.sql(sql) + except AnalysisException as e: + print(f"Error querying table {table_name}: {e}") + continue # 如果查询发生错误,跳过当前循环迭代 + #union 数据 + if union_query ==None: + union_query=current_query + else: + union_query = union_query.union(current_query) + #返回数据集 + return union_query +pack_result = get_union_pack_data(df) +if pack_result is not None: + pack_result.write.mode("overwrite").saveAsTable("dwd.dwd_inc_gnd_ext_ec_nationnal_pack_union_all") +else: + print("没有数据写入这张表里") diff --git a/Merged_Data/Merged_Data_Config_table_bkp.sql b/Merged_Data/Merged_Data_Config_table_bkp.sql new file mode 100644 index 0000000..8c2c1af --- /dev/null +++ b/Merged_Data/Merged_Data_Config_table_bkp.sql @@ -0,0 +1,228 @@ +-- Databricks notebook source +create or replace temporary view brand_province_config -- brand配置表 +as +select upper(`brand`) as brand, `province` as province, datasource as data_source from dwd.dwd_gnd_merge_data_brand_province + +-- COMMAND ---------- + +create or replace temporary view market_province_config --market 配置表 +as +select market, province, datasource as data_source from dwd.dwd_gnd_merge_data_brand_market + +-- COMMAND ---------- + +insert overwrite dws.dws_external_merge_data_config_special +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWS/dws_external_merge_data_config_special' --prd +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_external_merge_data_config_special' --test +with pack_and_brand ( --brand 转 pack + select + upper(brandnamee) brand_name + ,ims_pack_cod PACK_COD --取所有code带出market + from dwd.dwd_td_imscode_azcode + where ims_pack_cod is not null and startswith(ims_pack_cod,'0') + and upper(brandnamee) in (select brand from brand_province_config group by 1 )--取出在配置表中的pack + group by 1,2 + ) +,pack_to_market ( + select + a.PACK_COD + ,MARKET + from dm.dm_td_external_market_pack_mapping a + inner join pack_and_brand b on a.PACK_COD = b.pack_cod --取出配置表中的brand对应的 market + where DATA_SOURCE in ( 'AIA(Monthly)')--只取 AIA中的市场,chpa的市场太多 + and lower(a.MARKET) not like '%all market%' + and market not in ( + 'RE Extended Market' + ,'RE Market' + ,'RE Market (Global)' + ,'Pulmicort VBP Benchmark Market' + ,'Respules Market' + ) + group by 1,2 +) +,market_to_pack ( -- 获取上述market中所有的pack + select + market + ,pack_cod + from dm.dm_td_external_market_pack_mapping a + where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)')--AIA和chpa的市场 + and market in (select market from pack_to_market group by 1) + group by 1,2 +) +,province_to_audit ( + select + PROVINCE_C + ,AUDIT_COD + ,DATA_SOURCE + ,CASE WHEN DATA_SOURCE = 'AIA(Monthly)' THEN 'AIA' + WHEN DATA_SOURCE = 'IQVIA-CHPA(Monthly)' THEN 'CHPA' + ELSE NULL + END AS SOURCENAME + from dm.dm_td_external_geo + where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)') + group by 1,2,3 +) +,not_selected_datasource (--因为pack2market2pack 会导致部分大市场包含所有的pack,故用配置表再删除一些不需要配置数据源的 + select + a.ims_pack_cod PACK_COD --取所有code + ,b.province + from dwd.dwd_td_imscode_azcode a + inner join ( + select + UPPER(brand) as brand + ,province + from brand_province_config + where data_source = '/' + group by 1,2 + ) b + on upper(a.brandnamee) = upper(b.brand ) + where a.ims_pack_cod is not null and startswith(a.ims_pack_cod,'0') + group by 1,2 + union + select + pack_cod, + '天津' + from market_to_pack + where market= 'EGFR TKI Market' + group by 1 +) +select DATA_SOURCE,PACK_COD,AUDIT_COD +from not_selected_datasource a +left join province_to_audit b on a.province = b.province_c +group by 1,2,3 + +-- COMMAND ---------- + +INSERT OVERWRITE dws.dws_external_merge_data_config +-- create or replace table dws.dws_external_merge_data_config +/* +1通过brand找到pack,通过pack找到市场以市场下的所有pack +2通过province找到对应的省份或者机构,从而获取到audit_code +*/ +----pack +with pack_and_brand ( --brand 转 pack + select + upper(brandnamee) brand_name + ,ims_pack_cod PACK_COD --取所有code带出market + from dwd.dwd_td_imscode_azcode + where ims_pack_cod is not null and startswith(ims_pack_cod,'0') + and upper(brandnamee) in (select brand from brand_province_config group by 1 )--取出在配置表中的pack + group by 1,2 + ) + +,pack_to_market ( + select + a.PACK_COD + ,MARKET + from dm.dm_td_external_market_pack_mapping a + inner join pack_and_brand b on a.PACK_COD = b.pack_cod --取出配置表中的brand对应的 market + where DATA_SOURCE in ( 'AIA(Monthly)')--只取 AIA中的市场,chpa的市场太多 + and lower(a.MARKET) not like '%all market%' + and market not in ( + 'RE Extended Market' + ,'RE Market' + ,'RE Market (Global)' + ,'Pulmicort VBP Benchmark Market' + ,'Respules Market' + ) + group by 1,2 +) +,market_to_pack ( -- 获取上述market中所有的pack + select + market + ,pack_cod + from dm.dm_td_external_market_pack_mapping a + where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)')--AIA和chpa的市场 + and market in (select market from pack_to_market group by 1) + group by 1,2 +) +,province_to_audit ( + select + PROVINCE_C + ,AUDIT_COD + ,DATA_SOURCE + ,CASE WHEN DATA_SOURCE = 'AIA(Monthly)' THEN 'AIA' + WHEN DATA_SOURCE = 'IQVIA-CHPA(Monthly)' THEN 'CHPA' + ELSE NULL + END AS SOURCENAME + from dm.dm_td_external_geo + where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)') + group by 1,2,3 +) + +,pack_result as ( + select + D.pack_cod + ,E.audit_cod + ,A.province + ,A.data_source as SOURCENAME + ,E.data_source + from brand_province_config A + inner join pack_and_brand B on A.brand = B.brand_name + inner join pack_to_market C on B.pack_cod = C.pack_cod + inner join market_to_pack D on C.market = D.market + inner join province_to_audit E on A.province = E.province_c AND A.data_source = E.SOURCENAME + where A.data_source <> '/' + group by 1,2,3,4,5 + ) + + +----market +,config_market ( + select + market + from market_province_config + group by 1 +) +,market_to_pack_dtp ( + select + PACK_COD,MARKET + from dm.dm_td_external_market_pack_mapping + where DATA_SOURCE = 'DTP(Quarterly)' and PACK_COD in ( + select + PACK_COD + from dm.dm_tf_external_sales + where DTP_FLAG =1 + group by 1) +) +,final_market_to_pack (--获取需要转换market成pack的部分 +select PACK_COD,a.MARKET from market_to_pack a inner join config_market b on a.market = b.market +union +select PACK_COD,a.MARKET from market_to_pack_dtp a inner join config_market b on a.market = b.market +) + +----market +,market_result as ( + select + B.pack_cod + ,C.AUDIT_COD + ,A.province + ,A.data_source as SOURCENAME + ,C.DATA_SOURCE + from market_province_config a + left join final_market_to_pack B on A.market = B.market + left join province_to_audit C on A.province = C.province_c AND A.data_source = C.SOURCENAME + where a.data_source <> '/' AND C.AUDIT_COD IS not NULL + group by 1,2,3,4,5) +,need_to_be_changed( --算出不在pack 中的pack code,替换成 market中的pack code 的配置信息 + select + pack_cod,AUDIT_COD,DATA_SOURCE,sourcename + from market_result + where pack_cod in (select pack_cod from pack_result group by 1) +) + +--最终写入表 + +select + pack_cod,AUDIT_COD,DATA_SOURCE,sourcename, 'pack' CONFIG_DATASOURCE +from pack_result +union ALL + +select + pack_cod,AUDIT_COD,DATA_SOURCE,sourcename, 'market' CONFIG_DATASOURCE +from pack_result +where pack_cod not in (select pack_cod from need_to_be_changed group by 1) +union all +select + pack_cod,AUDIT_COD,DATA_SOURCE,sourcename, 'market' CONFIG_DATASOURCE +from need_to_be_changed diff --git a/Merged_Data/Merged_Data_Config_table_bymonth.sql b/Merged_Data/Merged_Data_Config_table_bymonth.sql new file mode 100644 index 0000000..cb2d080 --- /dev/null +++ b/Merged_Data/Merged_Data_Config_table_bymonth.sql @@ -0,0 +1,213 @@ +-- Databricks notebook source +-- create or replace table dws.dws_td_ext_merge_data_config +-- ( +-- market string, +-- audit_cod string, +-- province string, +-- sourcename string, +-- data_source string +-- ) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dws_td_ext_merge_data_config'; +-- -- 上面是生产环境location,下面是测试环境location +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dws_td_ext_merge_data_config'; + +-- COMMAND ---------- + +create or replace temporary view brand_province_config -- brand配置表 +as +select upper(`brand`) as brand, `province` as province, datasource as data_source from dwd.dwd_gnd_merge_data_brand_province + +-- COMMAND ---------- + +create or replace temporary view market_province_config --market 配置表 +as +select market, province, datasource as data_source from dwd.dwd_gnd_merge_data_brand_market + +-- COMMAND ---------- + +-- -- insert overwrite dws.dws_td_ext_merge_data_config_special +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWS/dws_external_merge_data_config_special' --prd +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_external_merge_data_config_special' --test +-- with pack_and_brand ( --brand 转 pack +-- select +-- upper(brandnamee) brand_name +-- ,ims_pack_cod PACK_COD --取所有code带出market +-- from dwd.dwd_td_imscode_azcode +-- where ims_pack_cod is not null and startswith(ims_pack_cod,'0') +-- and upper(brandnamee) in (select brand from brand_province_config group by 1 )--取出在配置表中的pack +-- group by 1,2 +-- ) +-- ,pack_to_market ( +-- select +-- a.PACK_CODE +-- ,MARKET +-- from dm.dm_td_ext_unionall_market_pack_mapping a +-- inner join pack_and_brand b on a.PACK_CODE = b.pack_cod --取出配置表中的brand对应的 market +-- where a.DATASOURCE in ( 'AIA(Monthly)')--只取 AIA中的市场,chpa的市场太多 +-- and lower(a.MARKET) not like '%all market%' +-- and market not in ( +-- 'RE Extended Market' +-- ,'RE Market' +-- ,'RE Market (Global)' +-- ,'Pulmicort VBP Benchmark Market' +-- ,'Respules Market' +-- ) +-- group by 1,2 +-- ) +-- -- ,market_to_pack ( -- 获取上述market中所有的pack +-- -- select +-- -- market +-- -- ,pack_cod +-- -- from dm.dm_td_external_market_pack_mapping a +-- -- where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)')--AIA和chpa的市场 +-- -- and market in (select market from pack_to_market group by 1) +-- -- group by 1,2 +-- -- ) +-- ,province_to_audit ( +-- select +-- PROVINCE_C +-- ,AUDIT_COD +-- ,DATA_SOURCE +-- ,CASE WHEN DATA_SOURCE = 'AIA(Monthly)' THEN 'AIA' +-- WHEN DATA_SOURCE = 'IQVIA-CHPA(Monthly)' THEN 'CHPA' +-- ELSE NULL +-- END AS SOURCENAME +-- from dm.dm_td_external_geo +-- where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)') +-- group by 1,2,3 +-- ) +-- ,not_selected_datasource (--因为pack2market2pack 会导致部分大市场包含所有的pack,故用配置表再删除一些不需要配置数据源的 +-- select +-- a.ims_pack_cod PACK_COD --取所有code +-- ,b.province +-- from dwd.dwd_td_imscode_azcode a +-- inner join ( +-- select +-- UPPER(brand) as brand +-- ,province +-- from brand_province_config +-- where data_source = '/' +-- group by 1,2 +-- ) b +-- on upper(a.brandnamee) = upper(b.brand ) +-- where a.ims_pack_cod is not null and startswith(a.ims_pack_cod,'0') +-- group by 1,2 +-- union +-- select +-- pack_cod, +-- '天津' +-- from market_to_pack +-- where market= 'EGFR TKI Market' +-- group by 1 +-- ) +-- select DATA_SOURCE,PACK_COD,AUDIT_COD +-- from not_selected_datasource a +-- left join province_to_audit b on a.province = b.province_c +-- group by 1,2,3 + +-- COMMAND ---------- + +INSERT OVERWRITE dws.dws_td_ext_merge_data_config +-- create or replace table dws.dws_td_ext_merge_data_config +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_td_ext_merge_data_config' --test +/* +1通过brand找到pack,通过pack找到市场以市场下的所有pack +2通过province找到对应的省份或者机构,从而获取到audit_code +*/ +----pack +with pack_and_brand ( --brand 转 pack + select + upper(brandnamee) brand_name + ,ims_pack_cod PACK_COD --取所有code带出market + from dwd.dwd_td_imscode_azcode + where ims_pack_cod is not null and startswith(ims_pack_cod,'0') + and upper(brandnamee) in (select brand from brand_province_config group by 1 )--取出在配置表中的pack + group by 1,2 + ) + +,pack_to_market ( + select + a.PACK_CODE, + MARKET + from dm.dm_td_ext_unionall_market_pack_mapping a + inner join pack_and_brand b on a.PACK_CODE = b.pack_cod --取出配置表中的brand对应的 market + where a.DATASOURCE in ( 'AIA(Monthly)')--只取 AIA中的市场,chpa的市场太多 + and lower(a.MARKET) not like '%all market%' + and market not in ( + 'RE Extended Market' + ,'RE Market' + ,'RE Market (Global)' + ,'Pulmicort VBP Benchmark Market' + ,'Respules Market' + ) + group by 1,2 +) +,province_to_audit ( + select + PROVINCE_C + ,AUDIT_COD + ,DATA_SOURCE + ,CASE WHEN DATA_SOURCE = 'AIA(Monthly)' THEN 'AIA' + WHEN DATA_SOURCE = 'IQVIA-CHPA(Monthly)' THEN 'CHPA' + ELSE NULL + END AS SOURCENAME + from dm.dm_td_external_geo + where DATA_SOURCE in ( 'AIA(Monthly)','IQVIA-CHPA(Monthly)') + group by 1,2,3 +) + +,pack_result as ( + select + C.market + ,E.audit_cod + ,A.province + ,A.data_source as SOURCENAME + ,E.data_source + from brand_province_config A + inner join pack_and_brand B on A.brand = B.brand_name + inner join pack_to_market C on B.pack_cod = C.pack_code + -- inner join market_to_pack D on C.market = D.market + inner join province_to_audit E on A.province = E.province_c AND A.data_source = E.SOURCENAME + where A.data_source <> '/' + group by 1,2,3,4,5 + ) + +---- MARKET PART + +,market_result as ( + select + A.MARKET + ,C.AUDIT_COD + ,A.province + ,A.data_source as SOURCENAME + ,C.DATA_SOURCE + from market_province_config a + -- left join final_market_to_pack B on A.market = B.market + left join province_to_audit C on A.province = C.province_c AND A.data_source = C.SOURCENAME + where a.data_source <> '/' AND C.AUDIT_COD IS not NULL + group by 1,2,3,4,5) + + +----最终结果 +select +market, +audit_cod, +province, +sourcename, +data_source + FROM pack_result + where market NOT in ( + select + market + from market_province_config + group by 1 +) +union all +select +market, +audit_cod, +province, +sourcename, +data_source + FROM market_result diff --git a/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bkp.sql b/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bkp.sql new file mode 100644 index 0000000..7bc0611 --- /dev/null +++ b/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bkp.sql @@ -0,0 +1,124 @@ +-- Databricks notebook source +-- create or replace table dm.dm_tf_exteranl_sales_merged_data_dtp_others +insert overwrite table dm.dm_tf_exteranl_sales_merged_data_dtp_others +with all_egfr_pack as ( + select * from DM.dm_td_external_market_pack_mapping + where DATA_SOURCE = 'DTP(Quarterly)' and MARKET = 'EGFR TKI Market' +) +,4brand as ( + select * from all_egfr_pack + where PROD_DES_C in ('阿美乐','泰瑞沙','凯美纳','艾弗沙') +) +,otherbrand as ( + select PACK_COD from all_egfr_pack + where PACK_COD not in ( select PACK_COD from `4brand` group by 1) + group by 1 +) + + +-- -- 直取表 cu - dtp4brand 的 cu = otherbrand 的cu +,dirct_cu as ( + select + yyyymm + ,replace(audit_key,'DTP(Quarterly)','') audit_cod + ,cast(pdot_counting_unit as decimal ) pdot_counting_unit + ,cast(pdot_counting_unit_ly as decimal ) pdot_counting_unit_ly + from dm.dm_tf_external_retail_special a + where yyyymm >=202401 +) + --先 4个brand 的 cu 和 value +,fact_sales_dtp_4brand( +select +YYYYMM,AUDIT_COD +,sum(cast( CONUTING_UNIT*PDOT_MARKET_RATIO as decimal)) CONUTING_UNIT +,sum(cast( CONUTING_UNIT_LY*PDOT_MARKET_RATIO as decimal)) CONUTING_UNIT_LY +from dm.dm_tf_external_sales t1 +inner join 4brand t2 on t1.PACK_COD = t2.PACK_COD +where t1.DATA_SOURCE = 'DTP(Quarterly)' +and DTP_FLAG = 1 +and YYYYMM >=202401 +group by +YYYYMM,AUDIT_COD ) + +-- 其他产品 的 cu 和 value +,fact_sales_dtp_other( +select +YYYYMM +,"DTPOTHERS" PACK_COD +,"DTPOTHERS" CORP_COD +,AUDIT_COD +,'' as PLATFORM_TYPE +,'' as STORE_NAME +,'' as STORE_TYPE +,'' as REGION_TYPE +,1 as PACK_FLAG +,2 as PROD_FLAG +,1 as DTP_FLAG +,sum(SALES_UNIT_CAL) SALES_UNIT_CAL +,sum(SALES_UNIT_CAL_LY) SALES_UNIT_CAL_LY +,sum(SALES_VALUE_CAL) SALES_VALUE_CAL +,sum(SALES_VALUE_CAL_LY) SALES_VALUE_CAL_LY +,sum(CONUTING_UNIT) CONUTING_UNIT +,sum(CONUTING_UNIT_LY) CONUTING_UNIT_LY +,'DTP(Quarterly)' as DATA_SOURCE +,'' as inst_code +,'' as cmps_flag +,'' as dept_name +,'' as prescription +,'' as prescription_ly +,'' as new_code +,'' as area +,'' as h_level +,'' as reimburse +,'' as reimburse_type +,'' as prescription_source +from dm.dm_tf_external_sales +where DTP_FLAG = 1 +and PACK_COD in (select PACK_COD from otherbrand) --其他部分 +and DATA_SOURCE = 'DTP(Quarterly)' +and YYYYMM >=202401 +group by +YYYYMM,AUDIT_COD) + +select +T0.YYYYMM +,t0.PACK_COD +,t0.CORP_COD +,t0.AUDIT_COD +,t0.PLATFORM_TYPE +,t0.STORE_NAME +,t0.STORE_TYPE +,t0.REGION_TYPE +,t0.PACK_FLAG +,t0.PROD_FLAG +,t0.DTP_FLAG +,t0.SALES_UNIT_CAL +,t0.SALES_UNIT_CAL_LY +,t0.SALES_VALUE_CAL +,t0.SALES_VALUE_CAL_LY +,t1.CONUTING_UNIT +,t1.CONUTING_UNIT_LY +,t0.DATA_SOURCE +,t0.inst_code +,t0.cmps_flag +,t0.dept_name +,t0.prescription +,t0.prescription_ly +,t0.new_code +,t0.area +,t0.h_level +,t0.reimburse +,t0.reimburse_type +,t0.prescription_source +from fact_sales_dtp_other t0 +left join ( +select +t1.yyyymm +,t1.audit_cod +,t1.pdot_counting_unit - t2.conuting_unit as CONUTING_UNIT +,t1.pdot_counting_unit_ly - t2.conuting_unit_ly as CONUTING_UNIT_LY +from dirct_cu t1 +left join fact_sales_dtp_4brand t2 on t1.yyyymm = t2.yyyymm and t1.audit_cod = t2.audit_cod +) t1 +on t0.audit_cod = t1.audit_cod and t0.yyyymm = t1.yyyymm +-- select * from fact_sales_dtp_4brand \ No newline at end of file diff --git a/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bymonth_bkp.sql b/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bymonth_bkp.sql new file mode 100644 index 0000000..28771e8 --- /dev/null +++ b/Merged_Data/dm_tf_exteranl_sales_merged_data_dtp_others_bymonth_bkp.sql @@ -0,0 +1,289 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE dm.DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_COD STRING, +-- CORP_COD STRING, +-- AUDIT_COD STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(21,0), +-- CONUTING_UNIT_LY DECIMAL(21,0), +-- PDOT DECIMAL(21,0), +-- PDOT_LY DECIMAL(21,0), +-- DATA_SOURCE STRING, +-- inst_code STRING, +-- cmps_flag STRING, +-- dept_name STRING, +-- prescription STRING, +-- prescription_ly STRING, +-- new_code STRING, +-- area STRING, +-- h_level STRING, +-- reimburse STRING, +-- reimburse_type STRING, +-- prescription_source STRING) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth'; +-- -- 上面是生产环境location,下面是测试环境location +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth'; + + +-- COMMAND ---------- + +-- 这个jupyter核心逻辑是 +-- 直接 cu - 4brand cu = other cu +-- 其中 维度部分,通过DM.DM_TF_EXT_UNIONALL_SALES innerjoin other +-- 其中 度量部分,通过 直接cu - 4brand cu + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RETAIL_DTP +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'DTP(Quarterly)' and t1.DTP_FLAG=1 +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- 所有的pack_code +create or replace temporary view all_egfr_pack +as +select MARKET,PACK_CODE from DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +where MARKET = 'EGFR TKI Market' +group by MARKET,PACK_CODE + + +-- COMMAND ---------- + +-- 4brand pack_code +create or replace temporary view 4brand +as +select + MARKET, + PACK_CODE +from + all_egfr_pack +where + pack_code IN + ( + SELECT + PACK_CODE + FROM + dm.dm_td_ext_retail_DTP_pack_property + WHERE + PROD_DESC_C in ('阿美乐','泰瑞沙','凯美纳','艾弗沙') + group BY + PACK_CODE + ) + + +-- COMMAND ---------- + +create or replace temporary view otherbrand +as +select + PACK_CODE +from + all_egfr_pack +where + PACK_CODE not in ( select PACK_CODE from `4brand` group by PACK_CODE) +group by + PACK_CODE + + +-- COMMAND ---------- + +-- 这里是 直接 cu +create or replace temporary view dirct_cu +as + select + yyyymm, + replace(audit_key,'DTP(Quarterly)','') audit_cod, + cast(pdot_counting_unit as decimal ) pdot_counting_unit, + cast(pdot_counting_unit_ly as decimal ) pdot_counting_unit_ly + from dm.dm_tf_external_retail_special a + where yyyymm >=202401 + +-- COMMAND ---------- + +-- 这里是获取 4brand 的度量值部分 +create or replace temporary view fact_sales_dtp_4brand +as +select +YYYYMM, +AUDIT_CODE AS AUDIT_COD +,sum(PDOT) CONUTING_UNIT +,sum(PDOT_LY) CONUTING_UNIT_LY +,MAX(t2.MARKET) as MARKET +from RETAIL_DTP t1 +inner join 4brand t2 on t1.PACK_CODE = t2.PACK_CODE +where t1.DATA_SOURCE = 'DTP(Quarterly)' +and t1.MARKET = 'EGFR TKI Market' +and DTP_FLAG = 1 +and YYYYMM >=202401 +group by +YYYYMM,AUDIT_COD + + +-- COMMAND ---------- + +-- 这里是获取 other 的维度值部分 +create or replace temporary view fact_sales_dtp_other +as +select +YYYYMM +,"DTPOTHERS" PACK_COD +,"DTPOTHERS" CORP_COD +,AUDIT_CODE AS AUDIT_COD +,'' as PLATFORM_TYPE +,'' as STORE_NAME +,'' as STORE_TYPE +,'' as REGION_TYPE +,1 as PACK_FLAG +,2 as PROD_FLAG +,1 as DTP_FLAG +,sum(SALES_UNIT_CAL) SALES_UNIT_CAL +,sum(SALES_UNIT_CAL_LY) SALES_UNIT_CAL_LY +,sum(SALES_VALUE_CAL) SALES_VALUE_CAL +,sum(SALES_VALUE_CAL_LY) SALES_VALUE_CAL_LY +,sum(CONUTING_UNIT) CONUTING_UNIT +,sum(CONUTING_UNIT_LY) CONUTING_UNIT_LY +,'DTP(Quarterly)' as DATA_SOURCE +,'' as inst_code +,'' as cmps_flag +,'' as dept_name +,'' as prescription +,'' as prescription_ly +,'' as new_code +,'' as area +,'' as h_level +,'' as reimburse +,'' as reimburse_type +,'' as prescription_source +from DM.DM_TF_EXT_UNIONALL_SALES +where DTP_FLAG = 1 +and PACK_CODE in (select PACK_CODe from otherbrand) --其他部分 +and DATA_SOURCE = 'DTP(Quarterly)' +and YYYYMM >=202401 +group by +YYYYMM,AUDIT_CODE + + +-- COMMAND ---------- + +-- create or replace table dm.DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth +insert overwrite table dm.DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth +select +t1.MARKET +,'OTHERS' as KEY_COMPETITOR +,'Others' as CLASS +,T0.YYYYMM +,t0.PACK_COD +,t0.CORP_COD +,t0.AUDIT_COD +,t0.PLATFORM_TYPE +,t0.STORE_NAME +,t0.STORE_TYPE +,t0.REGION_TYPE +,t0.PACK_FLAG +,t0.PROD_FLAG +,t0.DTP_FLAG +,t0.SALES_UNIT_CAL +,t0.SALES_UNIT_CAL_LY +,t0.SALES_VALUE_CAL +,t0.SALES_VALUE_CAL_LY +,t1.CONUTING_UNIT +,t1.CONUTING_UNIT_LY +,t1.CONUTING_UNIT as pdot +,t1.CONUTING_UNIT_LY as pdot_ly +,t0.DATA_SOURCE +,t0.inst_code +,t0.cmps_flag +,t0.dept_name +,t0.prescription +,t0.prescription_ly +,t0.new_code +,t0.area +,t0.h_level +,t0.reimburse +,t0.reimburse_type +,t0.prescription_source +from fact_sales_dtp_other t0 +left join ( +select +t1.yyyymm +,t1.audit_cod +,t1.pdot_counting_unit - t2.conuting_unit as CONUTING_UNIT +,t1.pdot_counting_unit_ly - t2.conuting_unit_ly as CONUTING_UNIT_LY +,t2.market +from dirct_cu t1 +left join fact_sales_dtp_4brand t2 on t1.yyyymm = t2.yyyymm and t1.audit_cod = t2.audit_cod +) t1 +on t0.audit_cod = t1.audit_cod and t0.yyyymm = t1.yyyymm +-- select * from fact_sales_dtp_4brand \ No newline at end of file diff --git a/ORG/DM_TD_EXT_AIA_ORG.sql b/ORG/DM_TD_EXT_AIA_ORG.sql new file mode 100644 index 0000000..9ff38c1 --- /dev/null +++ b/ORG/DM_TD_EXT_AIA_ORG.sql @@ -0,0 +1,1154 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_org'; + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- ============================================================================= +-- CELL 1: 临时视图 dm_td_org_temp +-- 背景: 202601 起 EC BU 整体迁移至 Retail,需对历史字段做统一转换, +-- 避免下游 CTE 中重复写 CASE WHEN。 +-- 修改时间: 20260130 +-- ============================================================================= +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW dm_td_org_temp AS +SELECT + org_key, + mr_trty_tag, + district_code, + district_name, + rc_name, + region_name, + REGION_CODE, + rc_code, + bu_category, + rsm_kcode, + rsm_name, + rsd_kcode, + rsd_name, + mr_kcode, + mr_name, + dsm_kcode, + dsm_name, + dsm_trty_code, + rsm_trty_code, + rsd_trty_code, + mr_trty_code, + yyyymm, + + -- ---------------------------------------------------------------- + -- EC → Retail 字段映射(202601 起生效) + -- ---------------------------------------------------------------- + CASE WHEN yyyymm >= '202601' AND bu_code = 'PC12' THEN 'PC09' ELSE bu_code END AS bu_code, + CASE WHEN yyyymm >= '202601' AND bu_report = 'EC' THEN 'Retail' ELSE bu_report END AS bu_report, + CASE WHEN yyyymm >= '202601' AND sub_bu_code = 'NA27' THEN 'NA06' ELSE sub_bu_code END AS sub_bu_code, + CASE WHEN yyyymm >= '202601' AND sub_bu_name = 'EC' THEN 'Retail' ELSE sub_bu_name END AS sub_bu_name, + CASE WHEN yyyymm >= '202601' AND sub_bu_name_en = 'EC' THEN 'Retail' ELSE sub_bu_name_en END AS sub_bu_name_en, + CASE WHEN yyyymm >= '202601' AND bu_name = 'EC' THEN 'Retail' ELSE bu_name END AS bu_name, + CASE WHEN yyyymm >= '202601' AND bu_name_en = 'EC' THEN 'Retail' ELSE bu_name_en END AS bu_name_en, + CASE WHEN yyyymm >= '202601' AND nsd_kcode = 'ND_EC0001_V' THEN 'KSGX559' ELSE nsd_kcode END AS nsd_kcode, + CASE WHEN yyyymm >= '202601' AND bu_name = 'EC' + AND nsd_name = 'Vacant' THEN '李白杨' ELSE nsd_name END AS nsd_name, + CASE WHEN yyyymm >= '202601' AND nsd_trty_code = 'ND_EC0001' THEN 'ND_RT0001' ELSE nsd_trty_code END AS nsd_trty_code, + CASE WHEN yyyymm >= '202601' AND bsd_kcode = 'VP_EC0001_V' THEN 'VP_RT0001_V' ELSE bsd_kcode END AS bsd_kcode, + CASE WHEN yyyymm >= '202601' AND bsd_trty_code = 'VP_EC0001' THEN 'VP_RT0001' ELSE bsd_trty_code END AS bsd_trty_code + +FROM DM.dm_td_org + +-- COMMAND ---------- + +-- --------------------------------------------------------------------------------------- +-- --修改时间:20241105 +-- --修改人:Fanxujia +-- --修改内容: +-- --for AIA Dashboard,新增NSD、RSD、RSM、DSM、MR、TEAM等信息 +-- --仅AIA渠道的数据增加值,其他渠道都为空 +-- --------------------------------------------------------------------------------------- +-- ---------------------------------------------------AIA------------------------------------------------------------------------------ +-- --AIA参考CHPA +-- ------所有BU能看AIA + +-- --从销量表取到全部的机构、市场组合 +-- with ALL_AUDIT_Market as ( +-- select distinct NVL(t1.AUDIT_COD,'ROC') AUDIT_COD, +-- NVL(t2.market,'ALL Market') market +-- from dm.dm_ext_aia_sales t1 +-- left join dm.dm_td_ext_aia_market_pack_mapping t2 +-- on t1.pack_cod = t2.PACK_CODE +-- ) +-- ,pack_market as ( +-- select distinct PACK_CODE AS PACK_COD,market +-- from dm.dm_td_ext_aia_market_pack_mapping +-- ) + +-- --获取城市与大区中心的mapping +-- ,EXTERNAL_GEO as ( +-- select distinct +-- concat(city_c, '市') as city_c, +-- REGION_CENTER +-- from DM.DM_TD_EXTERNAL_GEO_TEMP +-- where DATA_SOURCE = 'AIA(Monthly)' +-- ) +-- --CVH架构月 +-- ,CVH_YM as ( +-- select key_value as yyyymm +-- from dm.dm_td_date_config +-- where key_code = 'pfmc_cvh' +-- ) +-- --org表 +-- ,org as ( +-- select distinct +-- t1.yyyymm, +-- t1.bu_category, +-- t1.bu_code, +-- t1.bu_name_en, +-- t1.sub_bu_code, +-- t1.sub_bu_name, +-- t1.REGION_CODE, +-- t1.region_name, +-- t1.rc_code, +-- t1.rc_name, +-- t1.district_name as team, +-- t1.mr_trty_code, +-- t1.nsd_kcode, +-- case when t1.nsd_name = 'Vacant' then t1.nsd_kcode else t1.nsd_name end as nsd_name, +-- t1.rsd_kcode, +-- case when t1.rsd_name = 'Vacant' then t1.rsd_kcode else t1.rsd_name end as rsd_name, +-- t1.rsm_kcode, +-- case when t1.rsm_name = 'Vacant' then t1.rsm_kcode else t1.rsm_name end as rsm_name, +-- t1.dsm_kcode, +-- case when t1.dsm_name = 'Vacant' then t1.dsm_kcode else t1.dsm_name end as dsm_name, +-- t1.mr_kcode, +-- case when t1.mr_name = 'Vacant' then t1.mr_kcode else t1.mr_name end as mr_name +-- from dm_td_org_temp t1 +-- inner join CVH_YM t2 +-- on t1.yyyymm = t2.yyyymm +-- ) +-- --territory表 +-- ,territory as ( +-- select distinct +-- t1.yyyymm, +-- t1.trty_code, +-- t1.inst_code, +-- t1.family_code +-- from dm.dm_td_sd_territory_indication t1 +-- inner join CVH_YM t2 +-- on t1.yyyymm = t2.yyyymm +-- where t1.bu not in ('CUBE','KA') +-- and ((t1.key_hp in (2) and t1.bu <> 'Retail' and t1.trty_code <>'Eagle') or t1.key_hp = 1)--chenwu 20250904 排除双考影响 +-- ) +-- --将内部的Family_code转为外部的pack_cod +-- ,inst_pack_previous as ( +-- select distinct +-- t1.yyyymm, +-- t1.trty_code, +-- t1.inst_code, +-- t2.city_name, +-- t5.market, +-- case when t2.area_code = 'SOUTH' then 'South' +-- when t2.area_code = 'WEST' then 'West' +-- when t2.area_code = 'CENTRAL' then 'Central' +-- when t2.area_code = 'NORTH' then 'North' +-- when t2.area_code = 'EAST' then 'East' +-- end as REGION_CENTER +-- from territory t1 +-- left join dwd.dwd_td_institution t2 +-- on t1.inst_code = t2.inst_code +-- left join cdw_dwd_dim_product_wide t3 +-- on t1.family_code = t3.prd_family_cd +-- left join dwd.dwd_td_imscode_azcode t4 +-- on t3.prd_brand_cd = t4.brandcode +-- left join pack_market t5 +-- on t4.ims_pack_cod = t5.PACK_COD +-- ) +-- /* +-- 20251207 Chenwu 把可定的架构复制到立普妥上,直接替换市场 'Atorvastatin Market' = 'Rosuvastatin Market' +-- */ +-- ,inst_pack as ( +-- select +-- yyyymm, +-- trty_code, +-- inst_code, +-- city_name, +-- market, +-- REGION_CENTER +-- from inst_pack_previous +-- union all +-- select +-- yyyymm, +-- trty_code, +-- inst_code, +-- city_name, +-- 'Atorvastatin Market' market, +-- REGION_CENTER +-- from inst_pack_previous +-- where market = 'Rosuvastatin Market' +-- ) + +-- --------------------------------------------------------------------------------------- +-- --修改时间:20250220 +-- --修改人:Zhu chenwu +-- --修改内容: +-- --原本存在部分Eagel的机构和市场没有挂上架构,针对于没有挂上的部分,用dws.dws_td_eg_cityterritory中的city 和family的关系对应到市场挂上架构。 +-- ----------------------------------------------m----------------------------------------- +-- ,eagle_trty as +-- (---eagle的city 和 family 对应的 trtycode取数据时,如果city和family对应的trtycode 有多个,以p12,p11,p11为准,取第一个。 +-- select SP_TRTY_CD,CITY_CD,FAMILY_CD from ( +-- select * +-- ,row_number() over (partition by CITY_CD,FAMILY_CD order by PROJECT_CD desc) as num +-- from ( +-- select SP_TRTY_CD,CITY_CD,FAMILY_CD,PROJECT_CD from dws.dws_td_eg_cityterritory t1 +-- inner join CVH_YM t2 +-- on t1.YM = t2.yyyymm +-- where SP_TRTY_CD not in (select distinct trty_code from dm.dm_td_sd_territory_indication where bu = 'Eagle') +-- and PROJECT_CD in (select distinct project_code from DWS.dws_td_eg_project_instype WHERE ins_type='医院') +-- and cast(nvl(SALES_RATE,0) as decimal(20,6))<>'0.000000' +-- group by 1,2,3,4 +-- ) +-- ) where num = 1 +-- ) +-- ,family_mapping as (--family和brand的mapping +-- select prd_family_cd,prd_brand_cd from cdw_dwd_dim_product_wide +-- group by 1,2 +-- ) +-- ,packcode_mapping as (--pack 和 brand的mapping +-- select brandcode,ims_pack_cod from dwd.dwd_td_imscode_azcode +-- group by 1,2 +-- ) +-- ,geo_mapping as (--city的中文 +-- select city_code,city_name from dm.dm_td_geography +-- group by 1,2 +-- ) +-- ,eagle_mapping (--eagle表中city和family所对应的 岗位编码 +-- select SP_TRTY_CD,city_name,market from ( +-- select +-- t1.SP_TRTY_CD +-- -- ,t1.FAMILY_CD +-- -- ,t3.prd_brand_cd +-- ,t4.ims_pack_cod +-- ,t5.city_name +-- from eagle_trty t1 +-- left join family_mapping t3 +-- on t1.FAMILY_CD = t3.prd_family_cd --转换family 成 brand +-- left join packcode_mapping t4 +-- on t3.prd_brand_cd = t4.brandcode +-- left join geo_mapping t5 +-- on t1.CITY_CD = t5.city_code) A +-- inner join pack_market B on A.ims_pack_cod = B.PACK_COD +-- group by 1,2,3 +-- ) + +-- ,audit_geo as (--audit的城市信息 +-- select AUDIT_COD,max(CITY_C) as city_c from DM.DM_TD_EXTERNAL_GEO +-- where DATA_SOURCE = 'AIA(Monthly)' +-- group by 1) + +-- ,eagle_trty_with_city as ( --eagle中 挂上 部分机构归不到eagle的,按eagle的城市+品牌挂上 +-- select +-- t0.AUDIT_COD,t0.market +-- ,t10.city_c +-- ,eagle_mapping.SP_TRTY_CD from ALL_AUDIT_Market t0 +-- left join audit_geo t10 on t0.AUDIT_COD = t10.AUDIT_COD +-- left join eagle_mapping on eagle_mapping.city_name = t10.city_c and eagle_mapping.market = t0.market +-- where eagle_mapping.SP_TRTY_CD is not null +-- group by 1,2,3,4) + +-- insert overwrite dm.DM_TD_EXT_AIA_ORG ( +-- REGION_CODE, +-- region_name_en, +-- rc_code, +-- rc_name_en, +-- RegionCenter, +-- AUDIT_COD, +-- MARKET, +-- bu_category, +-- bu_name_en, +-- sub_bu_name, +-- sub_bu_code_auth, +-- bu_code_auth, +-- DATA_SOURCE, +-- REGION_RATIO, +-- RSM_Name, +-- RC_Name, +-- TEAM, +-- MR_TRTY_CODE, +-- NSD_KCODE, +-- NSD_NAME, +-- RSD_KCODE, +-- RSD_NAME, +-- RSM_KCODE, +-- DSM_KCODE, +-- DSM_NAME, +-- MR_KCODE, +-- MR_NAME +-- ) + +-- SELECT distinct +-- COALESCE(t2.REGION_CODE,t6.REGION_CODE,'ROC') as REGION_CODE, +-- COALESCE(t2.region_name,t6.region_name,'ROC') as region_name_en, +-- COALESCE(t2.rc_code,t6.rc_code,'ROC') as rc_code, +-- COALESCE(t2.rc_name,t6.rc_name,'ROC') as rc_name_en, +-- COALESCE(t1.REGION_CENTER,t4.REGION_CENTER,t7.REGION_CENTER,'') as RegionCenter, +-- t0.AUDIT_COD, +-- t0.MARKET, +-- COALESCE(t2.bu_category,t6.bu_category,'') as bu_category, +-- COALESCE(t2.bu_name_en,t6.bu_name_en,'') as bu_name_en, +-- COALESCE(t2.sub_bu_name,t6.sub_bu_name,'') as sub_bu_name, +-- COALESCE(t2.sub_bu_code,t6.sub_bu_code,'') as sub_bu_code_auth, +-- concat(COALESCE(t2.bu_code,t6.bu_code,''),'AIA(Monthly)') as bu_code_auth, +-- 'AIA(Monthly)' as DATA_SOURCE, +-- 1 REGION_RATIO, +-- COALESCE(t2.rsm_name,t6.rsm_name,'Vacant') as rsm_name, +-- COALESCE(t2.rsd_name,t6.rsd_name,'Vacant') as RC_Name, +-- COALESCE(t2.team,t6.team,'ROC') as team, +-- COALESCE(t2.mr_trty_code,t6.mr_trty_code,'Vacant') as mr_trty_code, +-- COALESCE(t2.nsd_kcode,t6.nsd_kcode,'Vacant') as nsd_kcode, +-- COALESCE(t2.nsd_name,t6.nsd_name,'Vacant') as nsd_name, +-- COALESCE(t2.rsd_kcode,t6.rsd_kcode,'Vacant') as rsd_kcode, +-- COALESCE(t2.rsd_name,t6.rsd_name,'Vacant') as rsd_name, +-- COALESCE(t2.rsm_kcode,t6.rsm_kcode,'Vacant') as rsm_kcode, +-- COALESCE(t2.dsm_kcode,t6.dsm_kcode,'Vacant') as dsm_kcode, +-- COALESCE(t2.dsm_name,t6.dsm_name,'Vacant') as dsm_name, +-- COALESCE(t2.mr_kcode,t6.mr_kcode,'Vacant') as mr_kcode, +-- COALESCE(t2.mr_name,t6.mr_name,'Vacant') as mr_name +-- -- ,t5.SP_TRTY_CD +-- from ALL_AUDIT_Market t0 +-- left join inst_pack t1 +-- on t0.AUDIT_COD = t1.inst_code +-- and t0.market = t1.market +-- left join org t2 +-- on t1.trty_code = t2.mr_trty_code +-- and t1.yyyymm = t2.yyyymm +-- left join EXTERNAL_GEO t4 +-- on t1.city_name = t4.city_c + +-- left join eagle_trty_with_city t5 +-- on t0.AUDIT_COD = t5.AUDIT_COD +-- and t0.market = t5.market and t1.inst_code is null +-- left join org t6 +-- on t5.SP_TRTY_CD = t6.mr_trty_code +-- left join EXTERNAL_GEO t7 +-- on t5.city_c = t7.city_c + +-- COMMAND ---------- + +WITH + +-- ---------------------------------------------------------------------------- +-- [基础配置] CVH 考核月份白名单 +-- ---------------------------------------------------------------------------- +cvh_ym AS ( + SELECT key_value AS yyyymm + FROM dm.dm_td_date_config + WHERE key_code = 'pfmc_cvh' +), + +-- ---------------------------------------------------------------------------- +-- [输入数据] 事实表中所有有效的 机构×市场 组合(作为主驱动集合) +-- ---------------------------------------------------------------------------- +all_audit_market AS ( + SELECT DISTINCT + NVL(s.AUDIT_COD, 'ROC') AS audit_cod, + NVL(m.market, 'ALL Market') AS market + FROM dm.dm_ext_aia_sales s + LEFT JOIN dm.dm_td_ext_aia_market_pack_mapping m + ON s.pack_cod = m.PACK_CODE +), + +-- ---------------------------------------------------------------------------- +-- [参照表] Pack → Market 映射 +-- ---------------------------------------------------------------------------- +pack_market AS ( + SELECT DISTINCT + PACK_CODE AS pack_cod, + market + FROM dm.dm_td_ext_aia_market_pack_mapping +), + +-- ---------------------------------------------------------------------------- +-- [参照表] 城市 → 大区中心映射(AIA 渠道) +-- ---------------------------------------------------------------------------- +external_geo AS ( + SELECT DISTINCT + CONCAT(city_c, '市') AS city_c, + REGION_CENTER + FROM DM.DM_TD_EXTERNAL_GEO_TEMP + WHERE DATA_SOURCE = 'AIA(Monthly)' +), + +-- ---------------------------------------------------------------------------- +-- [内部组织] CVH 月份范围内的 org 层级数据 +-- Vacant 岗位用 kcode 替代,便于前端展示 +-- ---------------------------------------------------------------------------- +org AS ( + SELECT DISTINCT + o.yyyymm, + o.bu_category, + o.bu_code, + o.bu_name_en, + o.sub_bu_code, + o.sub_bu_name, + o.REGION_CODE, + o.region_name, + o.rc_code, + o.rc_name, + o.district_name AS team, + o.mr_trty_code, + o.nsd_kcode, + CASE WHEN o.nsd_name = 'Vacant' THEN o.nsd_kcode ELSE o.nsd_name END AS nsd_name, + o.rsd_kcode, + CASE WHEN o.rsd_name = 'Vacant' THEN o.rsd_kcode ELSE o.rsd_name END AS rsd_name, + o.rsm_kcode, + CASE WHEN o.rsm_name = 'Vacant' THEN o.rsm_kcode ELSE o.rsm_name END AS rsm_name, + o.dsm_kcode, + CASE WHEN o.dsm_name = 'Vacant' THEN o.dsm_kcode ELSE o.dsm_name END AS dsm_name, + o.mr_kcode, + CASE WHEN o.mr_name = 'Vacant' THEN o.mr_kcode ELSE o.mr_name END AS mr_name + FROM dm_td_org_temp o + INNER JOIN cvh_ym c ON o.yyyymm = c.yyyymm +), + +-- ---------------------------------------------------------------------------- +-- [正常路径 1/3] CVH 月份范围内的 Territory 指示表 +-- 排除 CUBE、KA;双考场景仅保留 key_hp=1 或非 Eagle 的 key_hp=2 记录 +-- 修改: chenwu 20250904 +-- ---------------------------------------------------------------------------- +territory AS ( + SELECT DISTINCT + t.yyyymm, + t.trty_code, + t.inst_code, + t.family_code + FROM dm.dm_td_sd_territory_indication t + INNER JOIN cvh_ym c ON t.yyyymm = c.yyyymm + WHERE t.bu NOT IN ('CUBE', 'KA') + AND ( + (t.key_hp = 2 AND t.bu <> 'Retail' AND t.trty_code <> 'Eagle') + OR t.key_hp = 1 + ) +), + +-- ---------------------------------------------------------------------------- +-- [正常路径 2/3] Territory → 机构 → 城市 → 市场 映射 +-- family_code 经 product_wide → imscode_azcode → pack_market 三跳转换 +-- ---------------------------------------------------------------------------- +inst_pack_base AS ( + SELECT DISTINCT + t.yyyymm, + t.trty_code, + t.inst_code, + i.city_name, + pm.market, + CASE i.area_code + WHEN 'SOUTH' THEN 'South' + WHEN 'WEST' THEN 'West' + WHEN 'CENTRAL' THEN 'Central' + WHEN 'NORTH' THEN 'North' + WHEN 'EAST' THEN 'East' + END AS region_center + FROM territory t + LEFT JOIN dwd.dwd_td_institution i ON t.inst_code = i.inst_code + LEFT JOIN cdw_dwd_dim_product_wide p ON t.family_code = p.prd_family_cd + LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode + LEFT JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod +), + +-- [正常路径 3/3] 可定架构(Rosuvastatin Market)复制到立普妥(Atorvastatin Market) +-- 修改: Chenwu 20251207 +inst_pack AS ( + SELECT * FROM inst_pack_base + UNION ALL + SELECT yyyymm, trty_code, inst_code, city_name, + 'Atorvastatin Market' AS market, + region_center + FROM inst_pack_base + WHERE market = 'Rosuvastatin Market' +), + +-- ============================================================================ +-- [Eagle 回退路径] 部分机构未能通过正常 territory 路径挂上架构, +-- 改用 城市+品牌 关系匹配 Eagle territory code +-- 修改: Chenwu 20250220 +-- ============================================================================ + +-- Eagle: city × family → territory code(多个时取 PROJECT_CD 最大者) +eagle_trty AS ( + SELECT SP_TRTY_CD, CITY_CD, FAMILY_CD + FROM ( + SELECT + SP_TRTY_CD, CITY_CD, FAMILY_CD, + ROW_NUMBER() OVER (PARTITION BY CITY_CD, FAMILY_CD ORDER BY PROJECT_CD DESC) AS rn + FROM ( + SELECT eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD + FROM dws.dws_td_eg_cityterritory eg + INNER JOIN cvh_ym c ON eg.YM = c.yyyymm + -- 仅保留非 Eagle BU 已覆盖的 territory(Anti-Join,性能优于 NOT IN 子查询) + LEFT JOIN ( + SELECT DISTINCT trty_code + FROM dm.dm_td_sd_territory_indication + WHERE bu = 'Eagle' + ) ex ON eg.SP_TRTY_CD = ex.trty_code + -- 仅医院类项目 + INNER JOIN ( + SELECT DISTINCT project_code + FROM DWS.dws_td_eg_project_instype + WHERE ins_type = '医院' + ) pi ON eg.PROJECT_CD = pi.project_code + WHERE ex.trty_code IS NULL -- Anti-Join 条件 + AND NVL(eg.SALES_RATE, 0) <> 0 -- 排除零销售比例(原逻辑:cast <> '0.000000') + GROUP BY eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD + ) base + ) deduped + WHERE rn = 1 +), + +-- Eagle territory → 市场 映射(family → brand → pack → market,city code → city name) +eagle_mapping AS ( + SELECT + et.SP_TRTY_CD, + g.city_name, + pm.market + FROM eagle_trty et + LEFT JOIN cdw_dwd_dim_product_wide p ON et.FAMILY_CD = p.prd_family_cd + LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode + LEFT JOIN dm.dm_td_geography g ON et.CITY_CD = g.city_code + INNER JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod + GROUP BY et.SP_TRTY_CD, g.city_name, pm.market +), + +-- Audit 机构 → 城市 映射 +audit_geo AS ( + SELECT AUDIT_COD, MAX(CITY_C) AS city_c + FROM DM.DM_TD_EXTERNAL_GEO + WHERE DATA_SOURCE = 'AIA(Monthly)' + GROUP BY AUDIT_COD +), + +-- 汇总:对 all_audit_market 中无法通过 inst_pack 匹配的记录, +-- 尝试用 Eagle 城市+市场 回退挂上 territory code +eagle_trty_with_city AS ( + SELECT + am.AUDIT_COD, + am.market, + ag.city_c, + em.SP_TRTY_CD + FROM all_audit_market am + LEFT JOIN audit_geo ag ON am.AUDIT_COD = ag.AUDIT_COD + LEFT JOIN eagle_mapping em ON em.city_name = ag.city_c + AND em.market = am.market + WHERE em.SP_TRTY_CD IS NOT NULL -- 仅保留能匹配到 Eagle territory 的行 + GROUP BY am.AUDIT_COD, am.market, ag.city_c, em.SP_TRTY_CD +) + +-- ---------------------------------------------------------------------------- +-- 主写入:覆盖写目标表 +-- 优先级: t2(正常路径 org)> t6(Eagle 回退 org)> 硬编码默认值 +-- ---------------------------------------------------------------------------- +INSERT OVERWRITE dm.DM_TD_EXT_AIA_ORG ( + REGION_CODE, region_name_en, + rc_code, rc_name_en, + RegionCenter, + AUDIT_COD, MARKET, + bu_category, bu_name_en, + sub_bu_name, sub_bu_code_auth, bu_code_auth, + DATA_SOURCE, REGION_RATIO, + RSM_Name, RC_Name, TEAM, + MR_TRTY_CODE, + NSD_KCODE, NSD_NAME, + RSD_KCODE, RSD_NAME, + RSM_KCODE, + DSM_KCODE, DSM_NAME, + MR_KCODE, MR_NAME +) +SELECT DISTINCT + COALESCE(t2.REGION_CODE, t6.REGION_CODE, 'ROC') AS REGION_CODE, + COALESCE(t2.region_name, t6.region_name, 'ROC') AS region_name_en, + COALESCE(t2.rc_code, t6.rc_code, 'ROC') AS rc_code, + COALESCE(t2.rc_name, t6.rc_name, 'ROC') AS rc_name_en, + COALESCE(t1.region_center, t4.REGION_CENTER, t7.REGION_CENTER, '') AS RegionCenter, + t0.audit_cod, + t0.market, + COALESCE(t2.bu_category, t6.bu_category, '') AS bu_category, + COALESCE(t2.bu_name_en, t6.bu_name_en, '') AS bu_name_en, + COALESCE(t2.sub_bu_name, t6.sub_bu_name, '') AS sub_bu_name, + COALESCE(t2.sub_bu_code, t6.sub_bu_code, '') AS sub_bu_code_auth, + CONCAT(COALESCE(t2.bu_code, t6.bu_code, ''), 'AIA(Monthly)') AS bu_code_auth, + 'AIA(Monthly)' AS DATA_SOURCE, + 1 AS REGION_RATIO, + COALESCE(t2.rsm_name, t6.rsm_name, 'Vacant') AS RSM_Name, + COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RC_Name, + COALESCE(t2.team, t6.team, 'ROC') AS TEAM, + COALESCE(t2.mr_trty_code, t6.mr_trty_code, 'Vacant') AS MR_TRTY_CODE, + COALESCE(t2.nsd_kcode, t6.nsd_kcode, 'Vacant') AS NSD_KCODE, + COALESCE(t2.nsd_name, t6.nsd_name, 'Vacant') AS NSD_NAME, + COALESCE(t2.rsd_kcode, t6.rsd_kcode, 'Vacant') AS RSD_KCODE, + COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RSD_NAME, + COALESCE(t2.rsm_kcode, t6.rsm_kcode, 'Vacant') AS RSM_KCODE, + COALESCE(t2.dsm_kcode, t6.dsm_kcode, 'Vacant') AS DSM_KCODE, + COALESCE(t2.dsm_name, t6.dsm_name, 'Vacant') AS DSM_NAME, + COALESCE(t2.mr_kcode, t6.mr_kcode, 'Vacant') AS MR_KCODE, + COALESCE(t2.mr_name, t6.mr_name, 'Vacant') AS MR_NAME +FROM all_audit_market t0 +-- ── 正常路径 ────────────────────────────────────────────────────────────── +LEFT JOIN inst_pack t1 ON t0.audit_cod = t1.inst_code + AND t0.market = t1.market +LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code + AND t1.yyyymm = t2.yyyymm +LEFT JOIN external_geo t4 ON t1.city_name = t4.city_c +-- ── Eagle 回退路径(仅当正常路径未能匹配机构时) ────────────────────────── +LEFT JOIN eagle_trty_with_city t5 ON t0.audit_cod = t5.AUDIT_COD + AND t0.market = t5.market + AND t1.inst_code IS NULL -- 正常路径未命中 +LEFT JOIN org t6 ON t5.SP_TRTY_CD = t6.mr_trty_code +LEFT JOIN external_geo t7 ON t5.city_c = t7.city_c + +-- COMMAND ---------- + +-- --修改时间:20240808 +-- --修改人:FanXuJia +-- --修改背景: +-- --事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +-- --因此需要从事实表补全这部分audit_cod +-- with sales as ( +-- select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +-- union +-- select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +-- ) +-- ,market_pack as ( +-- select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +-- ) +-- ,org as ( +-- select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_AIA_ORG +-- ) +-- ,tmp_org as ( +-- select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +-- from sales a +-- left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +-- left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +-- where C.AUDIT_COD IS NULL +-- ) +-- insert into table dm.DM_TD_EXT_AIA_ORG +-- ( +-- REGION_CODE, +-- region_name_en, +-- RSM_Name, +-- rc_code, +-- rc_name_en, +-- RC_Name, +-- RegionCenter, +-- AUDIT_COD, +-- MARKET, +-- bu_category, +-- bu_name_en, +-- sub_bu_name, +-- sub_bu_code_auth, +-- bu_code_auth, +-- DATA_SOURCE, +-- REGION_RATIO, +-- TEAM, +-- MR_TRTY_CODE, +-- NSD_KCODE, +-- NSD_NAME, +-- RSD_KCODE, +-- RSD_NAME, +-- RSM_KCODE, +-- DSM_KCODE, +-- DSM_NAME, +-- MR_KCODE, +-- MR_NAME +-- ) +-- select +-- 'ROC' as REGION_CODE, +-- 'ROC' as region_name_en, +-- 'Vacant' as RSM_Name, +-- 'ROC' as rc_code, +-- 'ROC' as rc_name_en, +-- 'Vacant' as RC_Name, +-- null as RegionCenter, +-- AUDIT_COD, +-- MARKET, +-- null as bu_category, +-- null as bu_name_en, +-- null as sub_bu_name, +-- null as sub_bu_code_auth, +-- DATA_SOURCE as bu_code_auth, +-- DATA_SOURCE, +-- 1 as REGION_RATIO, +-- 'ROC' as TEAM, +-- 'Vacant' as MR_TRTY_CODE, +-- 'Vacant' as NSD_KCODE, +-- 'Vacant' as NSD_NAME, +-- 'Vacant' as RSD_KCODE, +-- 'Vacant' as RSD_NAME, +-- 'Vacant' as RSM_KCODE, +-- 'Vacant' as DSM_KCODE, +-- 'Vacant' as DSM_NAME, +-- 'Vacant' as MR_KCODE, +-- 'Vacant' as MR_NAME +-- from tmp_org +-- where DATA_SOURCE = 'AIA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,add +-- ============================================================================= +-- CELL 3: INSERT INTO —— 补全缺失机构(Backfill) +-- +-- 背景: 事实表(dm_tf_external_sales / _thc)与维度表来自不同手工文件, +-- 部分 audit_cod 有销量但维度表中缺失,导致前端漏数。 +-- 此步骤找出差集并以默认值兜底写入。 +-- 修改时间: 20240808 修改人: FanXuJia +-- ============================================================================= +-- COMMAND ---------- + +WITH +-- 提前过滤 AIA 渠道,减少后续 JOIN 数据量 +aia_sales AS ( + SELECT PACK_CODE, AUDIT_CODE + FROM dm.dm_tf_ext_aia_sales +), +pack_market_ref AS ( + SELECT DISTINCT PACK_CODE, MARKET + FROM dm.dm_td_ext_aia_market_pack_mapping + -- WHERE DATA_SOURCE = 'AIA(Monthly)' +), +existing_org AS ( + SELECT DISTINCT AUDIT_COD, MARKET + FROM dm.DM_TD_EXT_AIA_ORG + WHERE DATA_SOURCE = 'AIA(Monthly)' +), +-- 找出:有销量 但 维度表中没有的 audit_cod × market 组合 +missing_org AS ( + SELECT DISTINCT + s.AUDIT_CODE, + m.MARKET + FROM aia_sales s + LEFT JOIN pack_market_ref m ON s.PACK_CODE = m.PACK_CODE + LEFT JOIN existing_org e ON s.AUDIT_CODE = e.AUDIT_COD + AND m.MARKET = e.MARKET + WHERE e.AUDIT_COD IS NULL -- Anti-Join: 维度表中不存在 + AND m.MARKET IS NOT NULL -- 排除无法映射到市场的包装 +) + +INSERT INTO TABLE dm.DM_TD_EXT_AIA_ORG ( + REGION_CODE, region_name_en, + RSM_Name, rc_code, rc_name_en, RC_Name, RegionCenter, + AUDIT_COD, MARKET, + bu_category, bu_name_en, sub_bu_name, sub_bu_code_auth, bu_code_auth, + DATA_SOURCE, REGION_RATIO, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, NSD_NAME, + RSD_KCODE, RSD_NAME, + RSM_KCODE, + DSM_KCODE, DSM_NAME, + MR_KCODE, MR_NAME +) +SELECT + 'ROC' AS REGION_CODE, + 'ROC' AS region_name_en, + 'Vacant' AS RSM_Name, + 'ROC' AS rc_code, + 'ROC' AS rc_name_en, + 'Vacant' AS RC_Name, + NULL AS RegionCenter, + AUDIT_CODE, + MARKET, + NULL AS bu_category, + NULL AS bu_name_en, + NULL AS sub_bu_name, + NULL AS sub_bu_code_auth, + 'AIA(Monthly)' AS bu_code_auth, + 'AIA(Monthly)' AS DATA_SOURCE, + 1 AS REGION_RATIO, + 'ROC' AS TEAM, + 'Vacant' AS MR_TRTY_CODE, + 'Vacant' AS NSD_KCODE, + 'Vacant' AS NSD_NAME, + 'Vacant' AS RSD_KCODE, + 'Vacant' AS RSD_NAME, + 'Vacant' AS RSM_KCODE, + 'Vacant' AS DSM_KCODE, + 'Vacant' AS DSM_NAME, + 'Vacant' AS MR_KCODE, + 'Vacant' AS MR_NAME +FROM missing_org + + +-- COMMAND ---------- + +-- ----------------------------------------------------------- +-- --修改时间:20241118 +-- --修改人:Fanxujia +-- --修改内容: +-- --使用手工文件排除掉每个渠道的不需要显示的市场 +-- ----------------------------------------------------------- +-- with hidden_market as ( +-- select distinct +-- case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' +-- when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' +-- when upper(data_source) = 'EC' then 'EC(Monthly)' +-- when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' +-- when upper(data_source) = 'CHC' then 'CHC(Quarterly)' +-- when upper(data_source) = 'AIA' then 'AIA(Monthly)' +-- when upper(data_source) = 'THC' then 'THC(Quarterly)' +-- when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' +-- else data_source +-- end as data_source, +-- upper(hidden_market) as hidden_market +-- from dwd.dwd_gnd_ims_hidden_market +-- union all +-- select +-- 'AIA(Monthly)' as data_source, +-- 'AIA ALL Market' +-- ) + + +-- MERGE into dm.DM_TD_EXT_AIA_ORG as t1 +-- USING hidden_market t2 +-- on t1.data_source = t2.data_source +-- and upper(t1.MARKET) = upper(t2.hidden_market) +-- WHEN MATCHED THEN +-- DELETE + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +-- ============================================================================= +-- CELL 4: MERGE DELETE —— 按隐藏市场规则清理不展示的行 +-- +-- 背景: 通过手工文件 dwd_gnd_ims_hidden_market 维护各渠道不需展示的市场列表, +-- 同时硬编码排除 'AIA ALL Market' 聚合行。 +-- 修改时间: 20241118 修改人: Fanxujia +-- ============================================================================= +-- COMMAND ---------- + +WITH hidden_market AS ( + SELECT DISTINCT + -- 将手工文件中的简写 data_source 标准化为系统内的完整名称 + CASE UPPER(data_source) + WHEN 'CHPA' THEN 'IQVIA-CHPA(Monthly)' + WHEN '科室市场' THEN 'XH Data(Quarterly)' + WHEN 'EC' THEN 'EC(Monthly)' + WHEN 'RETAIL' THEN 'Retail(Quarterly)' + WHEN 'CHC' THEN 'CHC(Quarterly)' + WHEN 'AIA' THEN 'AIA(Monthly)' + WHEN 'THC' THEN 'THC(Quarterly)' + WHEN 'COUNTY' THEN 'IQVIA-COUNTY(Quarterly)' + ELSE data_source + END AS data_source, + UPPER(hidden_market) AS hidden_market + FROM dwd.dwd_gnd_ims_hidden_market + + UNION ALL + + -- 固定排除 AIA 的全市场聚合行 + SELECT 'AIA(Monthly)' AS data_source, 'ALL MARKET' AS hidden_market +) + +MERGE INTO dm.DM_TD_EXT_AIA_ORG AS t1 +USING hidden_market AS t2 + ON t1.DATA_SOURCE = t2.data_source + AND UPPER(t1.MARKET) = t2.hidden_market -- hidden_market 已在 CTE 中 UPPER 化,减少重复计算 +WHEN MATCHED THEN DELETE; + +-- COMMAND ---------- + +-- WITH + +-- -- ---------------------------------------------------------------------------- +-- -- [基础配置] CVH 考核月份白名单 +-- -- ---------------------------------------------------------------------------- +-- cvh_ym AS ( +-- SELECT key_value AS yyyymm +-- FROM dm.dm_td_date_config +-- WHERE key_code = 'pfmc_cvh' +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [输入数据] 事实表中所有有效的 机构×市场 组合(作为主驱动集合) +-- -- ---------------------------------------------------------------------------- +-- all_audit_market AS ( +-- SELECT DISTINCT +-- NVL(s.AUDIT_COD, 'ROC') AS audit_cod, +-- NVL(m.market, 'ALL Market') AS market +-- FROM dm.dm_ext_aia_sales s +-- LEFT JOIN dm.dm_td_ext_aia_market_pack_mapping m +-- ON s.pack_cod = m.PACK_CODE +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [参照表] Pack → Market 映射 +-- -- ---------------------------------------------------------------------------- +-- pack_market AS ( +-- SELECT DISTINCT +-- PACK_CODE AS pack_cod, +-- market +-- FROM dm.dm_td_ext_aia_market_pack_mapping +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [参照表] 城市 → 大区中心映射(AIA 渠道) +-- -- ---------------------------------------------------------------------------- +-- external_geo AS ( +-- SELECT DISTINCT +-- CONCAT(city_c, '市') AS city_c, +-- REGION_CENTER +-- FROM DM.DM_TD_EXTERNAL_GEO_TEMP +-- WHERE DATA_SOURCE = 'AIA(Monthly)' +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [内部组织] CVH 月份范围内的 org 层级数据 +-- -- Vacant 岗位用 kcode 替代,便于前端展示 +-- -- ---------------------------------------------------------------------------- +-- org AS ( +-- SELECT DISTINCT +-- o.yyyymm, +-- o.bu_category, +-- o.bu_code, +-- o.bu_name_en, +-- o.sub_bu_code, +-- o.sub_bu_name, +-- o.REGION_CODE, +-- o.region_name, +-- o.rc_code, +-- o.rc_name, +-- o.district_name AS team, +-- o.mr_trty_code, +-- o.nsd_kcode, +-- CASE WHEN o.nsd_name = 'Vacant' THEN o.nsd_kcode ELSE o.nsd_name END AS nsd_name, +-- o.rsd_kcode, +-- CASE WHEN o.rsd_name = 'Vacant' THEN o.rsd_kcode ELSE o.rsd_name END AS rsd_name, +-- o.rsm_kcode, +-- CASE WHEN o.rsm_name = 'Vacant' THEN o.rsm_kcode ELSE o.rsm_name END AS rsm_name, +-- o.dsm_kcode, +-- CASE WHEN o.dsm_name = 'Vacant' THEN o.dsm_kcode ELSE o.dsm_name END AS dsm_name, +-- o.mr_kcode, +-- CASE WHEN o.mr_name = 'Vacant' THEN o.mr_kcode ELSE o.mr_name END AS mr_name +-- FROM dm_td_org_temp o +-- INNER JOIN cvh_ym c ON o.yyyymm = c.yyyymm +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [正常路径 1/3] CVH 月份范围内的 Territory 指示表 +-- -- 排除 CUBE、KA;双考场景仅保留 key_hp=1 或非 Eagle 的 key_hp=2 记录 +-- -- 修改: chenwu 20250904 +-- -- ---------------------------------------------------------------------------- +-- territory AS ( +-- SELECT DISTINCT +-- t.yyyymm, +-- t.trty_code, +-- t.inst_code, +-- t.family_code +-- FROM dm.dm_td_sd_territory_indication t +-- INNER JOIN cvh_ym c ON t.yyyymm = c.yyyymm +-- WHERE t.bu NOT IN ('CUBE', 'KA') +-- AND ( +-- (t.key_hp = 2 AND t.bu <> 'Retail' AND t.trty_code <> 'Eagle') +-- OR t.key_hp = 1 +-- ) +-- ), + +-- -- ---------------------------------------------------------------------------- +-- -- [正常路径 2/3] Territory → 机构 → 城市 → 市场 映射 +-- -- family_code 经 product_wide → imscode_azcode → pack_market 三跳转换 +-- -- ---------------------------------------------------------------------------- +-- inst_pack_base AS ( +-- SELECT DISTINCT +-- t.yyyymm, +-- t.trty_code, +-- t.inst_code, +-- i.city_name, +-- pm.market, +-- CASE i.area_code +-- WHEN 'SOUTH' THEN 'South' +-- WHEN 'WEST' THEN 'West' +-- WHEN 'CENTRAL' THEN 'Central' +-- WHEN 'NORTH' THEN 'North' +-- WHEN 'EAST' THEN 'East' +-- END AS region_center +-- FROM territory t +-- LEFT JOIN dwd.dwd_td_institution i ON t.inst_code = i.inst_code +-- LEFT JOIN cdw_dwd_dim_product_wide p ON t.family_code = p.prd_family_cd +-- LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode +-- LEFT JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod +-- ), + +-- -- [正常路径 3/3] 可定架构(Rosuvastatin Market)复制到立普妥(Atorvastatin Market) +-- -- 修改: Chenwu 20251207 +-- inst_pack AS ( +-- SELECT * FROM inst_pack_base +-- UNION ALL +-- SELECT yyyymm, trty_code, inst_code, city_name, +-- 'Atorvastatin Market' AS market, +-- region_center +-- FROM inst_pack_base +-- WHERE market = 'Rosuvastatin Market' +-- ), + +-- -- ============================================================================ +-- -- [Eagle 回退路径] 部分机构未能通过正常 territory 路径挂上架构, +-- -- 改用 城市+品牌 关系匹配 Eagle territory code +-- -- 修改: Chenwu 20250220 +-- -- ============================================================================ + +-- -- Eagle: city × family → territory code(多个时取 PROJECT_CD 最大者) +-- eagle_trty AS ( +-- SELECT SP_TRTY_CD, CITY_CD, FAMILY_CD +-- FROM ( +-- SELECT +-- SP_TRTY_CD, CITY_CD, FAMILY_CD, +-- ROW_NUMBER() OVER (PARTITION BY CITY_CD, FAMILY_CD ORDER BY PROJECT_CD DESC) AS rn +-- FROM ( +-- SELECT eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD +-- FROM dws.dws_td_eg_cityterritory eg +-- INNER JOIN cvh_ym c ON eg.YM = c.yyyymm +-- -- 仅保留非 Eagle BU 已覆盖的 territory(Anti-Join,性能优于 NOT IN 子查询) +-- LEFT JOIN ( +-- SELECT DISTINCT trty_code +-- FROM dm.dm_td_sd_territory_indication +-- WHERE bu = 'Eagle' +-- ) ex ON eg.SP_TRTY_CD = ex.trty_code +-- -- 仅医院类项目 +-- INNER JOIN ( +-- SELECT DISTINCT project_code +-- FROM DWS.dws_td_eg_project_instype +-- WHERE ins_type = '医院' +-- ) pi ON eg.PROJECT_CD = pi.project_code +-- WHERE ex.trty_code IS NULL -- Anti-Join 条件 +-- AND NVL(eg.SALES_RATE, 0) <> 0 -- 排除零销售比例(原逻辑:cast <> '0.000000') +-- GROUP BY eg.SP_TRTY_CD, eg.CITY_CD, eg.FAMILY_CD, eg.PROJECT_CD +-- ) base +-- ) deduped +-- WHERE rn = 1 +-- ), + +-- -- Eagle territory → 市场 映射(family → brand → pack → market,city code → city name) +-- eagle_mapping AS ( +-- SELECT +-- et.SP_TRTY_CD, +-- g.city_name, +-- pm.market +-- FROM eagle_trty et +-- LEFT JOIN cdw_dwd_dim_product_wide p ON et.FAMILY_CD = p.prd_family_cd +-- LEFT JOIN dwd.dwd_td_imscode_azcode az ON p.prd_brand_cd = az.brandcode +-- LEFT JOIN dm.dm_td_geography g ON et.CITY_CD = g.city_code +-- INNER JOIN pack_market pm ON az.ims_pack_cod = pm.pack_cod +-- GROUP BY et.SP_TRTY_CD, g.city_name, pm.market +-- ), + +-- -- Audit 机构 → 城市 映射 +-- audit_geo AS ( +-- SELECT AUDIT_COD, MAX(CITY_C) AS city_c +-- FROM DM.DM_TD_EXTERNAL_GEO +-- WHERE DATA_SOURCE = 'AIA(Monthly)' +-- GROUP BY AUDIT_COD +-- ), + +-- -- 汇总:对 all_audit_market 中无法通过 inst_pack 匹配的记录, +-- -- 尝试用 Eagle 城市+市场 回退挂上 territory code +-- eagle_trty_with_city AS ( +-- SELECT +-- am.AUDIT_COD, +-- am.market, +-- ag.city_c, +-- em.SP_TRTY_CD +-- FROM all_audit_market am +-- LEFT JOIN audit_geo ag ON am.AUDIT_COD = ag.AUDIT_COD +-- LEFT JOIN eagle_mapping em ON em.city_name = ag.city_c +-- AND em.market = am.market +-- WHERE em.SP_TRTY_CD IS NOT NULL -- 仅保留能匹配到 Eagle territory 的行 +-- GROUP BY am.AUDIT_COD, am.market, ag.city_c, em.SP_TRTY_CD +-- ) + +-- -- ---------------------------------------------------------------------------- +-- -- 主写入:覆盖写目标表 +-- -- 优先级: t2(正常路径 org)> t6(Eagle 回退 org)> 硬编码默认值 +-- -- ---------------------------------------------------------------------------- + +-- -- SELECT DISTINCT +-- -- COALESCE(t2.REGION_CODE, t6.REGION_CODE, 'ROC') AS REGION_CODE, +-- -- COALESCE(t2.region_name, t6.region_name, 'ROC') AS region_name_en, +-- -- COALESCE(t2.rc_code, t6.rc_code, 'ROC') AS rc_code, +-- -- COALESCE(t2.rc_name, t6.rc_name, 'ROC') AS rc_name_en, +-- -- COALESCE(t1.region_center, t4.REGION_CENTER, t7.REGION_CENTER, '') AS RegionCenter, +-- -- t0.audit_cod, +-- -- t0.market, +-- -- COALESCE(t2.bu_category, t6.bu_category, '') AS bu_category, +-- -- COALESCE(t2.bu_name_en, t6.bu_name_en, '') AS bu_name_en, +-- -- COALESCE(t2.sub_bu_name, t6.sub_bu_name, '') AS sub_bu_name, +-- -- COALESCE(t2.sub_bu_code, t6.sub_bu_code, '') AS sub_bu_code_auth, +-- -- CONCAT(COALESCE(t2.bu_code, t6.bu_code, ''), 'AIA(Monthly)') AS bu_code_auth, +-- -- 'AIA(Monthly)' AS DATA_SOURCE, +-- -- 1 AS REGION_RATIO, +-- -- COALESCE(t2.rsm_name, t6.rsm_name, 'Vacant') AS RSM_Name, +-- -- COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RC_Name, +-- -- COALESCE(t2.team, t6.team, 'ROC') AS TEAM, +-- -- COALESCE(t2.mr_trty_code, t6.mr_trty_code, 'Vacant') AS MR_TRTY_CODE, +-- -- COALESCE(t2.nsd_kcode, t6.nsd_kcode, 'Vacant') AS NSD_KCODE, +-- -- COALESCE(t2.nsd_name, t6.nsd_name, 'Vacant') AS NSD_NAME, +-- -- COALESCE(t2.rsd_kcode, t6.rsd_kcode, 'Vacant') AS RSD_KCODE, +-- -- COALESCE(t2.rsd_name, t6.rsd_name, 'Vacant') AS RSD_NAME, +-- -- COALESCE(t2.rsm_kcode, t6.rsm_kcode, 'Vacant') AS RSM_KCODE, +-- -- COALESCE(t2.dsm_kcode, t6.dsm_kcode, 'Vacant') AS DSM_KCODE, +-- -- COALESCE(t2.dsm_name, t6.dsm_name, 'Vacant') AS DSM_NAME, +-- -- COALESCE(t2.mr_kcode, t6.mr_kcode, 'Vacant') AS MR_KCODE, +-- -- COALESCE(t2.mr_name, t6.mr_name, 'Vacant') AS MR_NAME +-- -- FROM all_audit_market t0 +-- -- -- ── 正常路径 ────────────────────────────────────────────────────────────── +-- -- LEFT JOIN inst_pack t1 ON t0.audit_cod = t1.inst_code +-- -- AND t0.market = t1.market +-- -- LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code +-- -- AND t1.yyyymm = t2.yyyymm +-- -- LEFT JOIN external_geo t4 ON t1.city_name = t4.city_c +-- -- -- ── Eagle 回退路径(仅当正常路径未能匹配机构时) ────────────────────────── +-- -- LEFT JOIN eagle_trty_with_city t5 ON t0.audit_cod = t5.AUDIT_COD +-- -- AND t0.market = t5.market +-- -- AND t1.inst_code IS NULL -- 正常路径未命中 +-- -- LEFT JOIN org t6 ON t5.SP_TRTY_CD = t6.mr_trty_code +-- -- LEFT JOIN external_geo t7 ON t5.city_c = t7.city_c +-- select * from inst_pack t1 +-- LEFT JOIN org t2 ON t1.trty_code = t2.mr_trty_code +-- AND t1.yyyymm = t2.yyyymm +-- where t1.inst_code = 'ZJTZ006H' + +-- and t1.market = 'Oral lipid-lowering Market(Excl Potent Statin)' diff --git a/ORG/DM_TD_EXT_CHC_ORG.sql b/ORG/DM_TD_EXT_CHC_ORG.sql new file mode 100644 index 0000000..d18b78d --- /dev/null +++ b/ORG/DM_TD_EXT_CHC_ORG.sql @@ -0,0 +1,235 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_org'; + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +----------------------------------------------------CHC------------------------------------------------------------------------------ +-----------只有chc的人能看chc +insert overwrite dm.DM_TD_EXT_CHC_ORG +(REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +SELECT DISTINCT T1.REGION_CODE,T1.region_name,T1.rc_code,T1.rc_name,T4.REGION_CENTER RegionCenter,T4.AUDIT_COD,T3.MARKET,T1.bu_category,T1.bu_name_en,T1.sub_bu_name,T1.sub_bu_code sub_bu_code_auth,concat(T1.bu_code,'CHC(Quarterly)') bu_code_auth,T4.DATA_SOURCE,1 REGION_RATIO,t1.RSM_Name,t1.rsd_name, +'' as TEAM, +'' as MR_TRTY_CODE, +'' as NSD_KCODE, +'' as NSD_NAME, +'' as RSD_KCODE, +'' as RSD_NAME, +'' as RSM_KCODE, +'' as DSM_KCODE, +'' as DSM_NAME, +'' as MR_KCODE, +'' as MR_NAME +from dm_td_org_temp t1 +left join( + select distinct + t1.yyyymm, + t1.trty_code, + t2.city_name, + t4.ims_prod_cod, + t4.ims_pack_cod + from dm.dm_td_sd_territory_indication t1 + left join dwd.dwd_td_institution t2 on t1.inst_code=t2.inst_code + left join cdw_dwd_dim_product_wide t3 on t3.prd_family_cd=t1.family_code + left join dwd.dwd_td_imscode_azcode t4 on t3.prd_brand_cd=t4.brandcode + where t1.bu not in ('CUBE','KA') + and t1.key_hp<>3 --chenwu 20250904 排除双考影响 +)t2 on t2.trty_code= t1.mr_trty_code and t2.yyyymm=t1.yyyymm +left join dws.dws_ims_td_market t3 on t2.ims_pack_cod=t3.pack_cod +left join DM.dm_td_external_geo_temp T4 on t2.city_name=concat(t4.city_c,'市') AND T4.DATA_SOURCE = 'CHC(Quarterly)' +--使用和performance cvh 的org架构 +where t1.yyyymm in( + select key_value from dm.dm_td_date_config where key_code='pfmc_cvh') + and t3.market is not null and t4.audit_cod is not null and t1.bu_name_en = 'CHC' + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_CHC_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.DM_TD_EXT_CHC_ORG +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'CHC(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +) + + +MERGE into dm.DM_TD_EXT_CHC_ORG as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/ORG/DM_TD_EXT_CHPA_ORG.sql b/ORG/DM_TD_EXT_CHPA_ORG.sql new file mode 100644 index 0000000..1532eb1 --- /dev/null +++ b/ORG/DM_TD_EXT_CHPA_ORG.sql @@ -0,0 +1,233 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_org'; + +-- COMMAND ---------- + +----------------------------------------------------chpa------------------------------------------------------------------------------ +------所有BU能看CHPA +insert overwrite DM.DM_TD_EXT_CHPA_ORG ( + REGION_CODE, + region_name_en, + rc_code, + rc_name_en, + RegionCenter, + AUDIT_COD, + MARKET, + bu_category, + bu_name_en, + sub_bu_name, + sub_bu_code_auth, + bu_code_auth, + DATA_SOURCE, + REGION_RATIO, + RSM_Name, + RC_Name, + TEAM, + MR_TRTY_CODE, + NSD_KCODE, + NSD_NAME, + RSD_KCODE, + RSD_NAME, + RSM_KCODE, + DSM_KCODE, + DSM_NAME, + MR_KCODE, + MR_NAME + ) +SELECT DISTINCT +CASE WHEN bu_category IN ('All Channel','EC') then 'ROC' + when REGION_CODE IN ('Other Low Tiers', 'Non AZ Region') THEN 'ROC' + ELSE REGION_CODE + END REGION_CODE, +CASE WHEN bu_category IN ('All Channel','EC') then 'ROC' + when region_name IN ('Other Low Tiers', 'Non AZ Region') THEN 'ROC' + ELSE region_name + END region_name, +CASE WHEN bu_category IN ('All Channel','EC') then 'ROC' + when rc_code IN ('Other Low Tiers', 'Non AZ Region') THEN 'ROC' + ELSE rc_code + END rc_code, +CASE WHEN bu_category IN ('All Channel','EC') then 'ROC' + when rc_name IN ('Other Low Tiers', 'Non AZ Region') THEN 'ROC' + ELSE rc_name + END rc_name, + RegionCenter, + AUDIT_COD, + MARKET, + bu_category, + bu_name_en, + sub_bu_name, + sub_bu_code_auth, + concat(bu_code_auth, 'IQVIA-CHPA(Monthly)') bu_code_auth, + 'IQVIA-CHPA(Monthly)' DATA_SOURCE, + 1 REGION_RATIO, + rsm_name, + rsd_name, + '' as TEAM, +'' as MR_TRTY_CODE, +'' as NSD_KCODE, +'' as NSD_NAME, +'' as RSD_KCODE, +'' as RSD_NAME, +'' as RSM_KCODE, +'' as DSM_KCODE, +'' as DSM_NAME, +'' as MR_KCODE, +'' as MR_NAME +FROM + DM.DM_ims_TD_ORG +WHERE + MARKET <> 'IMS ALL Market' + and AUDIT_COD is not null + and ORG_KEY is not null +--AND bu_category NOT IN ('All Channel','EC') + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_CHPA_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.DM_TD_EXT_CHPA_ORG +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +) + + +MERGE into dm.DM_TD_EXT_CHPA_ORG as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/ORG/DM_TD_EXT_COUNTY_ORG.sql b/ORG/DM_TD_EXT_COUNTY_ORG.sql new file mode 100644 index 0000000..34aa704 --- /dev/null +++ b/ORG/DM_TD_EXT_COUNTY_ORG.sql @@ -0,0 +1,220 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_org'; + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +----------------------------------------------------county------------------------------------------------------------------------------ +-----------------------除了Eagle、CHC、Retail、EC的人都能看 +insert overwrite table DM.DM_TD_EXT_COUNTY_ORG +(REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +SELECT DISTINCT '' REGION_CODE,'' region_name_en,'' rc_code,'' rc_name_en,'' RegionCenter,A.AUDIT_COD,B.MARKET,C.bu_category,C.bu_name_en,C.sub_bu_name,C.sub_bu_code sub_bu_code_auth,concat(c.bu_code,'IQVIA-COUNTY(Quarterly)') bu_code_auth,A.DATA_SOURCE,1 REGION_RATIO,'','', +'' as TEAM, +'' as MR_TRTY_CODE, +'' as NSD_KCODE, +'' as NSD_NAME, +'' as RSD_KCODE, +'' as RSD_NAME, +'' as RSM_KCODE, +'' as DSM_KCODE, +'' as DSM_NAME, +'' as MR_KCODE, +'' as MR_NAME +FROM DM.dm_tf_external_sales A +INNER JOIN DM.dm_td_external_market_pack_mapping B ON A.PACK_COD = B.PACK_COD +AND A.DATA_SOURCE = B.DATA_SOURCE +INNER JOIN +( + SELECT DISTINCT '' bu_code,'' sub_bu_code,'' sub_bu_name,'' bu_category,'' bu_name_en -----------目前权限控制到BU,因此需要BU有值。 + FROM dm_td_org_temp C + WHERE C.yyyymm = (select key_value from dm.dm_td_date_config where key_code='pfmc_cvh') + AND C.BU_NAME_EN NOT IN ('Eagle','CHC','EC','Retail') +) C +WHERE A.DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_COUNTY_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.DM_TD_EXT_COUNTY_ORG +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,DM_TD_EXT_CHPA_ORG +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +union all +select +'AIA(Monthly)' as data_source, +'AIA ALL Market' +) + + +MERGE into dm.DM_TD_EXT_COUNTY_ORG as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/ORG/DM_TD_EXT_EC_ORG.sql b/ORG/DM_TD_EXT_EC_ORG.sql new file mode 100644 index 0000000..aa37223 --- /dev/null +++ b/ORG/DM_TD_EXT_EC_ORG.sql @@ -0,0 +1,219 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_org'; + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +----------------------------------------------------------EC---------------------------------------------------------- +insert overwrite dm.DM_TD_EXT_EC_ORG( + REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +SELECT DISTINCT '' REGION_CODE,'' region_name_en,'' rc_code,'' rc_name_en,'' RegionCenter,A.AUDIT_COD,B.MARKET,C.bu_category,C.bu_name_en,C.sub_bu_name,C.sub_bu_code sub_bu_code_auth,concat(c.bu_code,'EC(Monthly)') bu_code_auth,A.DATA_SOURCE,1 REGION_RATIO,'','', +'' as TEAM, +'' as MR_TRTY_CODE, +'' as NSD_KCODE, +'' as NSD_NAME, +'' as RSD_KCODE, +'' as RSD_NAME, +'' as RSM_KCODE, +'' as DSM_KCODE, +'' as DSM_NAME, +'' as MR_KCODE, +'' as MR_NAME +FROM DM.dm_tf_external_sales A +INNER JOIN DM.dm_td_external_market_pack_mapping B ON A.PACK_COD = B.PACK_COD +AND A.DATA_SOURCE = B.DATA_SOURCE +INNER JOIN +( + SELECT DISTINCT '' bu_code,'' sub_bu_code,'' sub_bu_name,'' bu_category,'' bu_name_en + FROM dm_td_org_temp C + WHERE C.yyyymm = (select key_value from dm.dm_td_date_config where key_code='pfmc_cvh') + AND C.BU_NAME_EN = 'Eagle' +) C +WHERE A.DATA_SOURCE = 'EC(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_EC_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.DM_TD_EXT_EC_ORG +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'EC(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +union all +select +'AIA(Monthly)' as data_source, +'AIA ALL Market' +) + + +MERGE into dm.DM_TD_EXT_EC_ORG as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/ORG/DM_TD_EXT_RETAIL_ORG.sql b/ORG/DM_TD_EXT_RETAIL_ORG.sql new file mode 100644 index 0000000..b98ad7a --- /dev/null +++ b/ORG/DM_TD_EXT_RETAIL_ORG.sql @@ -0,0 +1,438 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_org'; + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 +WHERE rc_name NOT LIKE '%B2C%' + +-- COMMAND ---------- + +----------------------------------------------------Retail----------------------------------------------------------------------- +insert overwrite DM.DM_TD_EXT_RETAIL_ORG +(REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +with +market_ta ( + select + MARKET,case when TA = 'ONCO' then 'OBU' else 'Retail' end as subbu + from dm.dm_td_external_market_ta + where DATA_SOURCE = 'Retail(Quarterly)' + group by 1,2 +) + +,pack_market as ( +select distinct a.pack_cod,a.market,b.subbu + from dm.dm_td_external_market_pack_mapping a +left join market_ta b on a.MARKET = b.market +where data_source = 'Retail(Quarterly)' +) +,external_geo as ( +select distinct province_c,audit_cod,REGION_CENTER +from dm.dm_td_external_geo_temp +where DATA_SOURCE = 'Retail(Quarterly)' +) +,YM_CVH as ( +select key_value from dm.dm_td_date_config + where key_code = 'pfmc_cvh' +) +,td_org as ( +select distinct +REGION_CODE, +region_name, +rc_code, +rc_name, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code, +bu_code, +RSM_Name, +rsd_name, +mr_trty_code, +rsm_trty_code +from dm_td_org_temp t1 +inner join YM_CVH t2 +on t1.yyyymm = t2.key_value +) +,territory as ( +select distinct +trty_code, +inst_code, +family_code, +bu +from dm.dm_td_sd_territory_indication t1 +inner join YM_CVH t2 +on t1.yyyymm = t2.key_value +where bu in ('Retail') --20260320 chenwu Retail数据源的架构,去掉OBU,只保留Retail +and t1.key_hp<>3 --chenwu 20250904 排除双考影响 +) +,province_market as ( +select t1.trty_code, +t2.province_name, +t5.market +from territory t1 +left join dwd.dwd_td_institution t2 +on t1.inst_code = t2.inst_code +left join cdw_dwd_dim_product_wide t3 +on t1.family_code = t3.prd_family_cd +left join dwd.dwd_td_imscode_azcode t4 +on t3.prd_brand_cd = t4.brandcode +left join pack_market t5 +on t4.ims_pack_cod = t5.pack_cod +where t1.bu=t5.subbu +) + + +SELECT + DISTINCT t1.REGION_CODE REGION_CODE, + t1.region_name, + t1.rc_code, + t1.rc_name, + t3.REGION_CENTER RegionCenter, + t3.AUDIT_COD, + t2.MARKET, + t1.bu_category, + t1.bu_name_en, + t1.sub_bu_name, + t1.sub_bu_code sub_bu_code_auth, + concat(t1.bu_code, 'Retail(Quarterly)') bu_code_auth, + 'Retail(Quarterly)' as DATA_SOURCE, + 1 REGION_RATIO, + t1.RSM_Name, + t1.rsd_name, + '' as TEAM, + '' as MR_TRTY_CODE, + '' as NSD_KCODE, + '' as NSD_NAME, + '' as RSD_KCODE, + '' as RSD_NAME, + '' as RSM_KCODE, + '' as DSM_KCODE, + '' as DSM_NAME, + '' as MR_KCODE, + '' as MR_NAME +from td_org t1 +inner join province_market t2 +on t1.mr_trty_code = t2.trty_code +inner join external_geo t3 on t2.province_name = t3.province_c +where t2.market is not null + and t3.audit_cod is not null +union all +SELECT DISTINCT + 'ROC' as REGION_CODE, + 'ROC' as region_name_en, + 'ROC' as rc_code, + 'ROC' as rc_name_en, + 'Other Low Tiers' as RegionCenter, + 'ROC' AUDIT_COD, + t2.MARKET, + 'All Channel' as bu_category, + CASE WHEN T2.subbu = 'OBU' THEN 'OBU' ELSE 'Retail' END as bu_name_en, + CASE WHEN T2.subbu = 'OBU' THEN 'OBU' ELSE 'Retail' END as sub_bu_name, + CASE WHEN T2.subbu = 'OBU' THEN 'OBU' ELSE 'Retail' END as sub_bu_code_auth, + 'Retail(Quarterly)' as bu_code_auth, + 'Retail(Quarterly)' as DATA_SOURCE, + 1 as REGION_RATIO, + 'Vacant' as RSM_Name, + 'Vacant' as rsd_name, + '' as TEAM, + '' as MR_TRTY_CODE, + '' as NSD_KCODE, + '' as NSD_NAME, + '' as RSD_KCODE, + '' as RSD_NAME, + '' as RSM_KCODE, + '' as DSM_KCODE, + '' as DSM_NAME, + '' as MR_KCODE, + '' as MR_NAME +FROM pack_market t2 +--特殊处理部分 +union all +SELECT + DISTINCT t1.REGION_CODE REGION_CODE, + t1.region_name, + t1.rc_code, + t1.rc_name, + t3.REGION_CENTER RegionCenter, + t3.AUDIT_COD, + "Atorvastatin Market" as MARKET, + t1.bu_category, + t1.bu_name_en, + t1.sub_bu_name, + t1.sub_bu_code sub_bu_code_auth, + concat(t1.bu_code, 'Retail(Quarterly)') bu_code_auth, + 'Retail(Quarterly)' as DATA_SOURCE, + 1 REGION_RATIO, + t1.RSM_Name, + t1.rsd_name, + '' as TEAM, + '' as MR_TRTY_CODE, + '' as NSD_KCODE, + '' as NSD_NAME, + '' as RSD_KCODE, + '' as RSD_NAME, + '' as RSM_KCODE, + '' as DSM_KCODE, + '' as DSM_NAME, + '' as MR_KCODE, + '' as MR_NAME +from td_org t1 +inner join province_market t2 +on t1.mr_trty_code = t2.trty_code +inner join external_geo t3 on t2.province_name = t3.province_c +where t2.market is not null + and t3.audit_cod is not null + and t2.market = 'Rosuvastatin Market' + +-- COMMAND ---------- + +-- DBTITLE 1,DTP + +insert into DM.DM_TD_EXT_RETAIL_ORG +(REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +WITH +-- ① 市场与子BU映射 +market_ta AS ( + select distinct MARKET,bu as subbu from dwd.dwd_gnd_dtp_tblmarket + -- WHERE UPPER(TA) <> 'ALL' +), + +-- ② 产品包与市场映射 +pack_2_market AS ( + SELECT DISTINCT + a.PACK_CODE, + a.market, + b.subbu + FROM + dm.dm_td_ext_dtp_market_pack_mapping a + LEFT JOIN market_ta b ON a.MARKET = b.market +), +-- FAMILY与market映射 +family_2_markt as (select distinct + t3.prd_family_cd, + -- t4.ims_pack_cod, + t5.market +from + cdw_dwd_dim_product_wide t3 + inner JOIN dwd.dwd_td_imscode_azcode t4 + ON t3.prd_brand_cd = t4.brandcode + inner join pack_2_market t5 + on t4.ims_pack_cod = t5.pack_code +where + t3.prd_family_cd is not null + and t4.ims_pack_cod is not null +), + +-- ③ 外部地理信息 +external_geo AS ( + SELECT DISTINCT + province_c, + audit_cod, + REGION_CENTER + FROM dm.dm_td_external_geo_temp + WHERE DATA_SOURCE = 'DTP(Quarterly)' +), + +-- ④ 当前考核月份 +YM_CVH AS ( + SELECT key_value + FROM dm.dm_td_date_config + WHERE key_code = 'pfmc_cvh' +), + +-- ⑤ 组织架构(取当前考核月份快照) +td_org AS ( + SELECT DISTINCT + REGION_CODE, + region_name, + rc_code, + rc_name, + bu_category, + bu_name_en, + sub_bu_name, + sub_bu_code, + bu_code, + RSM_Name, + rsd_name, + mr_trty_code, + rsm_trty_code + FROM dm_td_org_temp t1 + INNER JOIN YM_CVH t2 ON t1.yyyymm = t2.key_value +), + +-- ⑥ 辖区-指征明细(仅保留 OBU/RIN,排除双考) +territory AS ( + SELECT DISTINCT + trty_code, + inst_code, + family_code, + bu + FROM dm.dm_td_sd_territory_indication t1 + INNER JOIN YM_CVH t2 ON t1.yyyymm = t2.key_value + WHERE t1.bu IN ('OBU', 'RIN') -- 20260320 chenwu DTP数据源只保留 OBU 和 RIN + AND t1.key_hp <> 3 -- 20250904 chenwu 排除双考影响 +), + +-- ⑦ 辖区-省份-市场关联 +province_market AS ( + SELECT + t1.trty_code, + t2.province_name, + t3.market + FROM territory t1 + LEFT JOIN dwd.dwd_td_institution t2 ON t1.inst_code = t2.inst_code + INNER JOIN family_2_markt t3 ON t1.family_code = t3.prd_family_cd +) + +-- ════════════════════════════════════════════ +-- 主查询 Part 1:正常地理覆盖行 +-- ════════════════════════════════════════════ +SELECT DISTINCT + t1.REGION_CODE, + t1.region_name, + t1.rc_code, + t1.rc_name AS rc_name_en, + t3.REGION_CENTER AS RegionCenter, + t3.AUDIT_COD, + t2.MARKET, + t1.bu_category, + t1.bu_name_en, + t1.sub_bu_name, + t1.sub_bu_code AS sub_bu_code_auth, + CONCAT(t1.bu_code, 'DTP(Quarterly)') AS bu_code_auth, + 'DTP(Quarterly)' AS DATA_SOURCE, + 1 AS REGION_RATIO, + t1.RSM_Name, + t1.rsd_name, + '' AS TEAM, + '' AS MR_TRTY_CODE, + '' AS NSD_KCODE, + '' AS NSD_NAME, + '' AS RSD_KCODE, + '' AS RC_Name, + '' AS RSM_KCODE, + '' AS DSM_KCODE, + '' AS DSM_NAME, + '' AS MR_KCODE, + '' AS MR_NAME +FROM td_org t1 +INNER JOIN province_market t2 ON t1.mr_trty_code = t2.trty_code +INNER JOIN external_geo t3 ON t2.province_name = t3.province_c +WHERE t2.market IS NOT NULL + AND t3.audit_cod IS NOT NULL + +UNION ALL + +-- ════════════════════════════════════════════ +-- 主查询 Part 2:ROC 虚拟兜底行 +-- ════════════════════════════════════════════ +SELECT DISTINCT + 'ROC' AS REGION_CODE, + 'ROC' AS region_name, + 'ROC' AS rc_code, + 'ROC' AS rc_name_en, + 'Other Low Tiers' AS RegionCenter, + 'ROC' AS AUDIT_COD, + t2.MARKET, + 'All Channel' AS bu_category, + nvl(subbu,'ONCO') AS bu_name_en, + nvl(subbu,'ONCO') AS sub_bu_name, + nvl(subbu,'ONCO') AS sub_bu_code_auth, + 'DTP(Quarterly)' AS bu_code_auth, + 'DTP(Quarterly)' AS DATA_SOURCE, + 1 AS REGION_RATIO, + 'Vacant' AS RSM_Name, + 'Vacant' AS RC_Name, + '' AS TEAM, + '' AS MR_TRTY_CODE, + '' AS NSD_KCODE, + '' AS NSD_NAME, + '' AS RSD_KCODE, + '' AS RSD_NAME, + '' AS RSM_KCODE, + '' AS DSM_KCODE, + '' AS DSM_NAME, + '' AS MR_KCODE, + '' AS MR_NAME +FROM pack_2_market t2 \ No newline at end of file diff --git a/ORG/DM_TD_EXT_THC_ORG.sql b/ORG/DM_TD_EXT_THC_ORG.sql new file mode 100644 index 0000000..01db2bc --- /dev/null +++ b/ORG/DM_TD_EXT_THC_ORG.sql @@ -0,0 +1,340 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_org'; + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +------------------------------------------------------------------------------------------------------ +--修改时间:20241113 +--修改人:Fanxujia +--修改内容: +--THC增加省份数据,因此增加架构数据。只需要Eagle的架构 +------------------------------------------------------------------------------------------------------ +----------------------------------------------------THC------------------------------------------------------------------------------ +--------只有eagle的人能看THC +insert overwrite dm.DM_TD_EXT_THC_ORG +(REGION_CODE,region_name_en,rc_code,rc_name_en,RegionCenter,AUDIT_COD,MARKET,bu_category,bu_name_en,sub_bu_name,sub_bu_code_auth,bu_code_auth,DATA_SOURCE,REGION_RATIO,RSM_Name,RC_Name, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +with pack_market as ( +select distinct pack_cod,market + from dm.dm_td_external_market_pack_mapping +where data_source = 'THC(Quarterly)' +) +,external_geo as ( +select distinct province_c,audit_cod,REGION_CENTER +from dm.dm_td_external_geo_temp +where DATA_SOURCE = 'THC(Quarterly)' +) +,YM_CVH as ( +select key_value from dm.dm_td_date_config + where key_code = 'pfmc_cvh' +) +,td_org as ( +select distinct +REGION_CODE, +region_name, +rc_code, +rc_name, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code, +bu_code, +RSM_Name, +rsd_name, +mr_trty_code, +rsm_trty_code +from dm_td_org_temp t1 +inner join YM_CVH t2 +on t1.yyyymm = t2.key_value +) +,territory as ( +select distinct +trty_code, +inst_code, +family_code +from dm.dm_td_sd_territory_indication t1 +inner join YM_CVH t2 +on t1.yyyymm = t2.key_value +where bu = 'Eagle' +and t1.key_hp<>3 --chenwu 20250904 排除双考影响 +) +,province_market as ( +select t1.trty_code, +t2.province_name, +t5.market +from territory t1 +left join dwd.dwd_td_institution t2 +on t1.inst_code = t2.inst_code +left join cdw_dwd_dim_product_wide t3 +on t1.family_code = t3.prd_family_cd +left join dwd.dwd_td_imscode_azcode t4 +on t3.prd_brand_cd = t4.brandcode +left join pack_market t5 +on t4.ims_pack_cod = t5.pack_cod +) +,national_sales as ( +select distinct +PACK_COD, +AUDIT_COD +from DM.dm_tf_external_sales_thc +where DATA_SOURCE = 'THC(Quarterly)' +) + +SELECT + DISTINCT t1.REGION_CODE, + t1.region_name, + t1.rc_code, + t1.rc_name, + t3.REGION_CENTER RegionCenter, + t3.AUDIT_COD, + t2.MARKET, + t1.bu_category, + t1.bu_name_en, + t1.sub_bu_name, + t1.sub_bu_code sub_bu_code_auth, + concat(t1.bu_code, 'THC(Quarterly)') bu_code_auth, + 'THC(Quarterly)' as DATA_SOURCE, + 1 REGION_RATIO, + t1.RSM_Name, + t1.rsd_name, + '' as TEAM, + '' as MR_TRTY_CODE, + '' as NSD_KCODE, + '' as NSD_NAME, + '' as RSD_KCODE, + '' as RSD_NAME, + '' as RSM_KCODE, + '' as DSM_KCODE, + '' as DSM_NAME, + '' as MR_KCODE, + '' as MR_NAME +from td_org t1 +inner join province_market t2 +on t1.mr_trty_code = t2.trty_code +inner join external_geo t3 on t2.province_name = t3.province_c +where t2.market is not null + and t3.audit_cod is not null +union all +SELECT DISTINCT + '' as REGION_CODE, + '' as region_name_en, + '' as rc_code, + '' as rc_name_en, + '' as RegionCenter, + t1.AUDIT_COD, + t2.MARKET, + '' as bu_category, + '' as bu_name_en, + '' as sub_bu_name, + '' as sub_bu_code_auth, + 'THC(Quarterly)' as bu_code_auth, + 'THC(Quarterly)' as DATA_SOURCE, + 1 as REGION_RATIO, + '' as RSM_Name, + '' as rsd_name, + '' as TEAM, + '' as MR_TRTY_CODE, + '' as NSD_KCODE, + '' as NSD_NAME, + '' as RSD_KCODE, + '' as RSD_NAME, + '' as RSM_KCODE, + '' as DSM_KCODE, + '' as DSM_NAME, + '' as MR_KCODE, + '' as MR_NAME +FROM national_sales t1 +INNER JOIN pack_market t2 +ON t1.PACK_COD = t2.PACK_COD + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_THC_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.DM_TD_EXT_THC_ORG +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'THC(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +) + + +MERGE into dm.DM_TD_EXT_THC_ORG as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/ORG/DM_TD_EXT_XIEHE_ORG.sql b/ORG/DM_TD_EXT_XIEHE_ORG.sql new file mode 100644 index 0000000..58c021c --- /dev/null +++ b/ORG/DM_TD_EXT_XIEHE_ORG.sql @@ -0,0 +1,279 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_ORG ( +-- REGION_CODE STRING, +-- REGION_NAME_EN STRING, +-- RSM_NAME STRING, +-- RC_CODE STRING, +-- RC_NAME_EN STRING, +-- RC_NAME STRING, +-- REGIONCENTER STRING, +-- AUDIT_COD STRING, +-- MARKET STRING, +-- BU_CATEGORY STRING, +-- BU_NAME_EN STRING, +-- SUB_BU_NAME STRING, +-- SUB_BU_CODE_AUTH STRING, +-- BU_CODE_AUTH STRING, +-- DATA_SOURCE STRING, +-- REGION_RATIO FLOAT, +-- TEAM STRING, +-- MR_TRTY_CODE STRING, +-- NSD_KCODE STRING, +-- NSD_NAME STRING, +-- RSD_KCODE STRING, +-- RSD_NAME STRING, +-- RSM_KCODE STRING, +-- DSM_KCODE STRING, +-- DSM_NAME STRING, +-- MR_KCODE STRING, +-- MR_NAME STRING) +-- USING delta +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_org'; + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +-- 20260130 由于DM.dm_td_org数据需要转换,新增这个CELL。 +create or replace temporary view dm_td_org_temp +as +SELECT org_key,mr_trty_tag,district_code,rsm_name,rc_name,p2.region_name,p2.rsd_kcode,p2.rsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_code = 'PC12' then 'PC09' else p2.bu_code end bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_report = 'EC' THEN 'Retail' ELSE p2.bu_report end bu_report + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_code = 'NA27' then 'NA06' else p2.sub_bu_code end sub_bu_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name = 'EC' then 'Retail' else p2.sub_bu_name end sub_bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.sub_bu_name_en = 'EC' then 'Retail' else p2.sub_bu_name_en end sub_bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC' then 'Retail' else p2.bu_name end bu_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name_en = 'EC' then 'Retail' else p2.bu_name_en end bu_name_en + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_kcode = 'ND_EC0001_V' then 'KSGX559' else p2.nsd_kcode end nsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bu_name = 'EC'and p2.nsd_name = 'Vacant' then '李白杨' else p2.nsd_name end nsd_name + ,CASE WHEN p2.yyyymm >= '202601' and p2.nsd_trty_code = 'ND_EC0001' then 'ND_RT0001' else p2.nsd_trty_code end nsd_trty_code + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_kcode = 'VP_EC0001_V' then 'VP_RT0001_V' else p2.bsd_kcode end bsd_kcode + ,CASE WHEN p2.yyyymm >= '202601' and p2.bsd_trty_code = 'VP_EC0001' then 'VP_RT0001' else p2.bsd_trty_code end bsd_trty_code + ,mr_kcode,dsm_trty_code,rsm_trty_code,dsm_kcode,rsd_trty_code + ,district_name,dsm_name,mr_name,yyyymm,mr_trty_code,REGION_CODE,rc_code,bu_category,rsm_kcode +FROM DM.dm_td_org P2 + +-- COMMAND ---------- + +---------------------------------------------------XIEHE------------------------------------------------------------------------------ +--XIEHE参考CHPA +------所有BU能看XIEHE +insert overwrite dm.dm_td_ext_xiehe_org ( + REGION_CODE, + region_name_en, + rc_code, + rc_name_en, + RegionCenter, + AUDIT_COD, + MARKET, + bu_category, + bu_name_en, + sub_bu_name, + sub_bu_code_auth, + bu_code_auth, + DATA_SOURCE, + REGION_RATIO, + RSM_Name, + RC_Name, + TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME + ) +SELECT + DISTINCT t1.REGION_CODE, + t1.region_name, + t1.rc_code, + t1.rc_name, + t4.REGION_CENTER RegionCenter, + t4.AUDIT_COD, + t3.MARKET, + t1.bu_category, + t1.bu_name_en, + t1.sub_bu_name, + t1.sub_bu_code sub_bu_code_auth, + concat(t1.bu_code, 'XH Data(Quarterly)') bu_code_auth, + 'XH Data(Quarterly)' DATA_SOURCE, + 1 REGION_RATIO, + t1.RSM_Name, + t1.rsd_name, + '' as TEAM, +'' as MR_TRTY_CODE, +'' as NSD_KCODE, +'' as NSD_NAME, +'' as RSD_KCODE, +'' as RSD_NAME, +'' as RSM_KCODE, +'' as DSM_KCODE, +'' as DSM_NAME, +'' as MR_KCODE, +'' as MR_NAME +from + dm_td_org_temp t1 + left join( + select + distinct A.yyyymm, + A.trty_code, + B.city_name, + D.ims_prod_cod, + D.ims_pack_cod + from + dm.dm_td_sd_territory_indication A + left join dwd.dwd_td_institution B on A.inst_code = B.inst_code + left join cdw_dwd_dim_product_wide C on C.prd_family_cd = A.family_code + left join dwd.dwd_td_imscode_azcode D on C.prd_brand_cd = D.brandcode + where A.bu not in ('CUBE','KA') + and A.key_hp<>3 --chenwu 20250904 排除双考影响 + ) t2 on t2.trty_code = t1.mr_trty_code + and t2.yyyymm = t1.yyyymm + left join dws.dws_ims_td_market t3 on t2.ims_pack_cod = t3.pack_cod + left join DM.DM_TD_EXTERNAL_GEO_TEMP t4 on t2.city_name = concat(t4.city_c, '市') + AND t4.DATA_SOURCE = 'XH Data(Quarterly)' +--使用和performance cvh 的org架构 +where + t1.yyyymm in( + select + key_value + from + dm.dm_td_date_config + where + key_code = 'pfmc_cvh' + ) + and t3.market is not null + and t4.audit_cod is not null + +-- COMMAND ---------- + +-- DBTITLE 1,add +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 +--因此需要从事实表补全这部分audit_cod +with sales as ( +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales +union +select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.dm_tf_external_sales_thc +) +,market_pack as ( +select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping +) +,org as ( +select distinct AUDIT_COD,MARKET,DATA_SOURCE from dm.DM_TD_EXT_XIEHE_ORG +) +,tmp_org as ( +select distinct a.AUDIT_COD,b.MARKET,a.DATA_SOURCE +from sales a +left join market_pack b on a.PACK_COD = b.PACK_COD and a.DATA_SOURCE = b.DATA_SOURCE +left join org c on a.DATA_SOURCE = c.DATA_SOURCE and a.AUDIT_COD = c.AUDIT_COD and b.MARKET = c.MARKET +where C.AUDIT_COD IS NULL +) + +insert into table dm.dm_td_ext_xiehe_org +( +REGION_CODE, +region_name_en, +RSM_Name, +rc_code, +rc_name_en, +RC_Name, +RegionCenter, +AUDIT_COD, +MARKET, +bu_category, +bu_name_en, +sub_bu_name, +sub_bu_code_auth, +bu_code_auth, +DATA_SOURCE, +REGION_RATIO, +TEAM, +MR_TRTY_CODE, +NSD_KCODE, +NSD_NAME, +RSD_KCODE, +RSD_NAME, +RSM_KCODE, +DSM_KCODE, +DSM_NAME, +MR_KCODE, +MR_NAME +) +select +'ROC' as REGION_CODE, +'ROC' as region_name_en, +'Vacant' as RSM_Name, +'ROC' as rc_code, +'ROC' as rc_name_en, +'Vacant' as RC_Name, +null as RegionCenter, +AUDIT_COD, +MARKET, +null as bu_category, +null as bu_name_en, +null as sub_bu_name, +null as sub_bu_code_auth, +DATA_SOURCE as bu_code_auth, +DATA_SOURCE, +1 as REGION_RATIO, +'ROC' as TEAM, +'Vacant' as MR_TRTY_CODE, +'Vacant' as NSD_KCODE, +'Vacant' as NSD_NAME, +'Vacant' as RSD_KCODE, +'Vacant' as RSD_NAME, +'Vacant' as RSM_KCODE, +'Vacant' as DSM_KCODE, +'Vacant' as DSM_NAME, +'Vacant' as MR_KCODE, +'Vacant' as MR_NAME +from tmp_org +where DATA_SOURCE = 'XH Data(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,hidden_market +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +) + + +MERGE into dm.dm_td_ext_xiehe_org as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE \ No newline at end of file diff --git a/OTHERS/01 dm_td_report_url.sql b/OTHERS/01 dm_td_report_url.sql new file mode 100644 index 0000000..1768417 --- /dev/null +++ b/OTHERS/01 dm_td_report_url.sql @@ -0,0 +1,11 @@ +-- Databricks notebook source +---------------------------------------------------------- +--修改时间:20241213 +--修改人:Fanxujia +--修改内容: +--新增配置表,里面是MA报告以及AIA报告的url链接,用于PBI上做跳转的链接 +---------------------------------------------------------- +insert overwrite table dm.dm_td_report_url +(ReportName,URL) +select reportname,url +from dwd.dwd_gnd_ims_ma_aia_redirection diff --git a/OTHERS/02 dws_ext_email_warning.sql b/OTHERS/02 dws_ext_email_warning.sql new file mode 100644 index 0000000..31909d3 --- /dev/null +++ b/OTHERS/02 dws_ext_email_warning.sql @@ -0,0 +1,110 @@ +-- Databricks notebook source +-- DBTITLE 1,DDL语句定义表 +-- CREATE OR REPLACE TABLE dwd.dwd_ext_email_warning ( +-- data_source STRING COMMENT '数据源名称', +-- max_data STRING COMMENT '数据源最新的日期,YYYYMM格式', +-- record_date STRING COMMENT '记录数据的日期', +-- etl_timestamp TIMESTAMP COMMENT 'ETL运行时间') +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWD/dwd_ext_email_warning' +-- ; +-- CREATE OR REPLACE TABLE dws.dws_ext_email_warning ( +-- data_source STRING COMMENT '数据源名称', +-- max_data STRING COMMENT '数据源最新的日期,YYYYMM格式', +-- if_update INT COMMENT '0代表没有更新,1代表更新过数据源', +-- etl_timestamp TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWS/dws_ext_email_warning' + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### dwd层 + +-- COMMAND ---------- + +-- DBTITLE 1,删除今天的数据并插入最新数据 +delete from dwd.dwd_ext_email_warning +where record_date = date_format( from_utc_timestamp( current_timestamp,'UTC+8'),'yyyy-MM-dd');--删除今天的输入记录 + +insert into dwd.dwd_ext_email_warning +select + data_source + ,max(yyyymm) max_data --数据源最大日期 + ,date_format( from_utc_timestamp( current_timestamp,'UTC+8'),'yyyy-MM-dd') record_date + ,from_utc_timestamp( current_timestamp,'UTC+8') etl_timestamp +from dm.dm_tf_ext_unionall_sales +group by DATA_SOURCE + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### dws层 + +-- COMMAND ---------- + +-- DBTITLE 1,计算出各数据是否更新了数据 +create or replace temporary view temp_datasource_update_info as +/* +1 获取今天日期的各数据源的记录情况 +2 获取今天之前的上一个周期记录情况 +3 今天日期的数据源最新数据月份 与 上一个周期的数据源最新数据月份 是否相等 +*/ +with +today_record_date ( + select + data_source + ,max_data + ,record_date + from dwd.dwd_ext_email_warning + where record_date = date_format( from_utc_timestamp( current_timestamp,'UTC+8'),'yyyy-MM-dd') --取今天的数据 +) +,previous_record_date ( + select + data_source + ,max_data + ,record_date + from + ( + select + data_source + ,max_data + ,record_date + ,row_number() over( partition by data_source order by record_date desc ) num + from dwd.dwd_ext_email_warning + where record_date <> date_format( from_utc_timestamp( current_timestamp,'UTC+8'),'yyyy-MM-dd') + ) + where num = 1 +) +select + t1.data_source + ,t1.max_data + ,case when t1.max_data = t2.max_data then 0 else 1 end as if_update + ,from_utc_timestamp( current_timestamp,'UTC+8') etl_timestamp +from today_record_date t1 +inner join previous_record_date t2 on t1.data_source = t2.data_source + + +-- COMMAND ---------- + +-- DBTITLE 1,写入dws层 +INSERT OVERWRITE dws.dws_ext_email_warning +select + data_source + ,max_data + ,if_update + ,etl_timestamp +from temp_datasource_update_info + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### ads层 + +-- COMMAND ---------- + +-- select +-- data_source +-- ,max_data +-- ,if_update +-- from dws.dws_ext_email_warning \ No newline at end of file diff --git a/OTHERS/external_triggered_email.py b/OTHERS/external_triggered_email.py new file mode 100644 index 0000000..65fb817 --- /dev/null +++ b/OTHERS/external_triggered_email.py @@ -0,0 +1,42 @@ +# Databricks notebook source +import base64 +import time +import urllib.parse +import requests +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +# === 配置区 === +# Spring Boot 服务端的密钥(Base64编码) +SECRET_KEY_BASE64 = "qkLkLHPnqNfJ5d3X6DgLpw==" +# 接口地址 +# https://mdcuat.astrazeneca.cn/earth/app/mail/task/ma/check +# https://mdc.astrazeneca.cn/earth/app/mail/task/ma/check +API_URL = "https://mdc.astrazeneca.cn/earth/app/mail/task/ma/check" + +# === AES 加密函数 === +def generate_aes_token(secret_key_base64: str) -> str: + # Hutool 的 SecureUtil.aes() 默认是 AES/ECB/PKCS5Padding + secret_key = base64.b64decode(secret_key_base64) + cipher = AES.new(secret_key, AES.MODE_ECB) + + # 加密当前时间戳(毫秒) + timestamp = str(int(time.time() * 1000)) + encrypted = cipher.encrypt(pad(timestamp.encode("utf-8"), AES.block_size)) + + # 输出 Base64 编码的 token + return base64.b64encode(encrypted).decode("utf-8") + +# === 调用接口 === +def call_check_api(): + token = generate_aes_token(SECRET_KEY_BASE64) + encoded_token = urllib.parse.quote(token) + url = f"{API_URL}?token={encoded_token}" + + print(f"请求URL: {url}") + response = requests.get(url) + print("响应状态码:", response.status_code) + print("响应内容:", response.text) + +if __name__ == "__main__": + call_check_api() \ No newline at end of file diff --git a/Retail/01 load_tmp_data.py b/Retail/01 load_tmp_data.py new file mode 100644 index 0000000..4b9817a --- /dev/null +++ b/Retail/01 load_tmp_data.py @@ -0,0 +1,617 @@ +# Databricks notebook source +### constant +LEVEL_TA_CV = 'CV' +LEVLE_TA_RE = 'RE' +LEVEL_TA_RE2 = 'RE2' +LEVEL_TA_GI = 'GI' +LEVEL_TA_DM = 'DM' +LEVEL_TA_RD = 'RD' + +LEVEL_MARKET_HTN = '高血压用药' +LEVEL_MARKET_STATIN_XZK = '他汀类+血脂康' +LEVEL_MARKET_BRILINTA = 'Brilinta Market' +LEVEL_MARKET_COPD = '小儿咳喘' +LEVEL_MARKET_AAGSA_PPI_ORAL = '慢性胃炎、胃溃疡' +LEVEL_MARKET_ATOMIZER = '慢性阻塞性肺疾病' +LEVEL_MARKET_NIAD = 'NIAD' +LEVEL_MARKET_RD = 'RD Market' + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: load rawdata to tmp table + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: load rawdata to tmp table + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.1 load brand data to tmp.tmp_retail_brand_rawdata +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_brand_rawdata +# MAGIC +# MAGIC select +# MAGIC type, +# MAGIC ta, +# MAGIC market, +# MAGIC zk_brand_category, +# MAGIC zk_common_name, +# MAGIC zk_manu_des, +# MAGIC rc_name_en, +# MAGIC province_city, +# MAGIC quarter, +# MAGIC ytd, +# MAGIC '', +# MAGIC sales_value * 1000000, +# MAGIC sales_volume * 1000000 +# MAGIC from dwd.dwd_gnd_ext_zk_brand +# MAGIC where ranked_by = 'value' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.1 load from dwd.dwd_gnd_ext_retail_htn (pack-CV-高血压-化学药-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'CV', +# MAGIC '高血压用药', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_htn +# MAGIC --------------------------------- *hard_code* --------------------------------------- +# MAGIC -- 多达一、天一宁、others、氨氯地平阿托伐他汀钙 数据在 高血压和他汀血脂康里面重复, +# MAGIC -- 只需要取一份,优先取有拆分比例的 +# MAGIC -- 对应的product_id 分别是:'-356','5258049','5852881','9167744','9526959','9167556','9279325','8533952' +# MAGIC -- 或者使用条件:zk_common_name <> '氨氯地平阿托伐他汀钙' +# MAGIC where zk_common_name <> '氨氯地平阿托伐他汀钙' +# MAGIC --------------------------------- *hard_code* --------------------------------------- + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.2 load from dwd.dwd_gnd_ext_retail_statin_xzk (pack-CV-他汀类+血脂康-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'CV', +# MAGIC '他汀类+血脂康', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_statin_xzk + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.3 load from dwd.dwd_gnd_ext_retail_nataional_oap (pack-CV-抗血栓2通用名-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'CV', +# MAGIC 'Brilinta Market', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_nataional_oap + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.4 load from dwd.dwd_gnd_ext_retail_anti_asthma_copd (pack-RE-慢阻肺-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC --------------2024----------- +# MAGIC --'RE', +# MAGIC --'慢性阻塞性肺疾病', +# MAGIC --------------2025----------- +# MAGIC 'RE2', +# MAGIC '小儿咳喘', +# MAGIC ----------------------------- +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_anti_asthma_copd + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.5 load from dwd.dwd_gnd_ext_retail_aagsa_ppi_oral (pack-GI-慢性胃炎胃溃疡-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null as pack_code, +# MAGIC null as molecule_code, +# MAGIC null as molecule_desc, +# MAGIC null as product_code, +# MAGIC null as product_desc, +# MAGIC 'GI' as level_ta, +# MAGIC '慢性胃炎、胃溃疡' as level_market, +# MAGIC null as level_molecule, +# MAGIC null as level_brand, +# MAGIC null as ratio_val, +# MAGIC null as ratio_vol, +# MAGIC 0 as data_flag, +# MAGIC null as brand_flag +# MAGIC from dwd.dwd_gnd_ext_retail_aagsa_ppi_oral + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.6 load from dwd.dwd_gnd_ext_retail_atomizer (pack-雾化器-全国&县域数据.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'RE', +# MAGIC '慢性阻塞性肺疾病', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_atomizer +# MAGIC ------------------------------ *hard_code* ------------------------------------------ +# MAGIC -- 24年关于 RE-慢性阻塞性肺疾病的PACK数据,额外买了“雾化器”的24省数据 +# MAGIC -- 所以这里只取24省明细数据,全国的数已经在“pack-GI-慢性胃炎胃溃疡-全国.xlsx”中取过了 +# MAGIC -- 25年就直接取全部数据 +# MAGIC -- where zk_region <> '全国' +# MAGIC ------------------------------ *hard_code* ------------------------------------------ + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.7 load from dwd.dwd_gnd_ext_retail_nataional_niad (pack-DM-口服降糖化学药.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'DM', +# MAGIC 'NIAD', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_nataional_niad + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.8 load from dwd.dwd_gnd_ext_retail_nataional_rd (pack-RD-肾科-全国.xlsx) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC ------------------------------ *hard_code* ------------------------------------------ +# MAGIC -- 剔除利尿剂数据 +# MAGIC with tmp_exclusion as ( +# MAGIC select distinct product_id +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC where lower(atc2_cod) = 'c03' +# MAGIC ) +# MAGIC ------------------------------ *hard_code* ------------------------------------------ +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'RD', +# MAGIC 'RD Market', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_nataional_rd a +# MAGIC where not exists ( +# MAGIC select * from tmp_exclusion b +# MAGIC where case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end = b.product_id +# MAGIC ) +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# MAGIC -- 1.2.9 load from dwd.dwd_gnd_ext_retail_metoprolol_tartrat (pack-CV-酒石酸美托洛尔.xlsx) +# MAGIC -- 2024年采买了酒石酸美托洛尔的PACK数据,2025年未采买 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC --insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# MAGIC zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC month, +# MAGIC quarter, +# MAGIC replace(price,',','' ), +# MAGIC replace(sales_unit,',','' ), +# MAGIC replace(sales_value,',','' ), +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 'CV', +# MAGIC '高血压用药', +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0, +# MAGIC null +# MAGIC from dwd.dwd_gnd_ext_retail_metoprolol_tartrat a +# MAGIC ------------------------------ *hard_code* ------------------------------------------ +# MAGIC -- 24年关于 CV-高血压的PACK数据,额外买了“酒石酸美托洛尔”的24省数据 +# MAGIC -- 所以这里只取24省明细数据,全国的数已经在“pack-CV-高血压-化学药-全国.xlsx”中取过了 +# MAGIC where zk_region <> '全国' +# MAGIC ------------------------------ *hard_code* ------------------------------------------ + +# COMMAND ---------- + +# %sql +# 20260302 chenwu取消此段运行,小儿咳喘模版暂不使用。Fasenra Market数据由DTP RAW DATA上传 +# ------------------------------------------------------------------------------------- +# -- STEP-1: load rawdata to tmp table +# -- 1.2 load brand data to tmp.tmp_retail_pack_rawdata +# -- 1.2.10 load from dwd.dwd_gnd_ext_retail_asthma (pack-手动补充) +# -- 手动补充的小儿咳喘的数据,这些数据无需拆分 +# ------------------------------------------------------------------------------------- +# insert into table tmp.tmp_retail_pack_rawdata + +# select +# case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as product_id, +# zk_product_id, +# zk_region, +# zk_rx_otc, +# zk_medicine_type, +# zk_medicine_tier1, +# zk_medicine_tier2, +# zk_medicine_tier3, +# zk_medicine_tier4, +# zk_common_name, +# zk_dosage_form, +# zk_user_type, +# zk_category_name, +# zk_product_name, +# zk_brand_name, +# zk_manu_des, +# zk_corp_des, +# zk_pack_des, +# month, +# quarter, +# price, +# sales_unit, +# sales_value, +# digital_spread_rate, +# weighted_spread_rate, +# counting_unit, +# null, +# null, +# null, +# null, +# null, +# 'RE_NO_SPLIT', +# '小儿咳喘', +# null, +# null, +# null, +# null, +# 0, +# null +# from dwd.dwd_gnd_ext_retail_asthma + +# COMMAND ---------- + +############################################################END############################################################## \ No newline at end of file diff --git a/Retail/02 split_brand_data.py b/Retail/02 split_brand_data.py new file mode 100644 index 0000000..beb3ee3 --- /dev/null +++ b/Retail/02 split_brand_data.py @@ -0,0 +1,672 @@ +# Databricks notebook source +### constant +DATA_TYPE_MARKET = 'MARKET' +DATA_TYPE_MOLECULE = 'MOLECULE' +DATA_TYPE_BRAND = 'BRAND' +DATA_TYPE_MULTI_MARKET = 'MULTI_MARKET' +DATA_TYPE_MULTI_MOLECULE = 'MULTI_MOLECULE' +DATA_TYPE_MULTI_BRAND = 'MULTI_BRAND' +DATA_TYPE_DUPLICATE = 'DUPLICATE' +DATA_TYPE_HEDGE_TA = 'HEDGE_TA' +DATA_TYPE_HEDGE_MARKET = 'HEDGE_MARKET' +DATA_TYPE_HEDGE_MOLECULE = 'HEDGE_MOLECULE' +DATA_TYPE_HEDGE_BRAND = 'HEDGE_BRAND' + +DATA_FLAG_RAW = 0 ### final pack_flag = 1 +DATA_FLAG_SUB = 1 ### final pack_flag = 2 +DATA_FLAG_ADD = 2 ### final pack_flag = 2 +DATA_FLAG_RATIO = 3 ### final pack_flag = 2 +DATA_FLAG_AVG = 4 ### final pack_flag = 2 ### The current version is not in use +DATA_FLAG_HEDGE = 5 ### final pack_flag = 2 +BRAND_FLAG_NATIVE = 1 ### final brand_flag = 1 +BRAND_FLAG_CALCULATE = 2 ### final brand_flag = 2 +BRAND_FLAG_NONE = 3 ### final brand_flag = 2 + +DATA_OTHER_TA = 'OTHER_TA' +DATA_OTHER_MARKET = 'OTHER_MARKET' +DATA_OTHER_MOLECULE = 'OTHER_MOLECULE' +DATA_OTHER_BRAND = 'OTHER_BRAND' +DATA_AREA_TYPE_ROC = 'ROC' +DATA_LABEL_AREA_ALL = '全国' + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: load data to tmp table +### STEP-2: substract data from level market to brand +### STEP-3: accumulate data from level brand to market +### STEP-4: calculate brand ratio + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: load data to tmp table + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.1 load LEVEL_MARKET data to tmp.tmp_retail_level_market +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table tmp.tmp_retail_level_market +# MAGIC +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'MARKET' +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.2 load LEVEL_MOLECULE data to tmp.tmp_retail_level_molecule +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_level_molecule +# MAGIC +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC b.level_molecule, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'MOLECULE' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.3 load LEVEL_BRAND(BRAND & MULTI_BRAND) data to tmp.tmp_retail_level_brand +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_level_brand +# MAGIC +# MAGIC with exploded_data as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC ifnull(common_name,'' ) as common_name, +# MAGIC level, +# MAGIC split(level_ta,',') array_ta, +# MAGIC split(level_market,',') array_market, +# MAGIC split(level_molecule,',') array_molecule, +# MAGIC split(level_brand,',') array_brand +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where level like '%MULTI_BRAND%' +# MAGIC ), tmp_config as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC common_name, +# MAGIC level, +# MAGIC array_ta[idx] as level_ta, +# MAGIC array_market[idx] as level_market, +# MAGIC array_molecule[idx] as level_molecule, +# MAGIC array_brand[idx] as level_brand +# MAGIC from exploded_data +# MAGIC lateral view posexplode(array_ta) AS idx, split_ta +# MAGIC ) +# MAGIC ----------------brand data--------------------- +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC b.level_molecule, +# MAGIC b.level_brand, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'BRAND' +# MAGIC +# MAGIC union all +# MAGIC ----------------multi brand data--------------------- +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC b.level_molecule, +# MAGIC b.level_brand, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join tmp_config b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.4 append HEDGE_TA data to every level +# MAGIC -- 1.4.1 append HEDGE_MARKET data to LEVEL_MARKET +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_hedge as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC 0 - sum(a.sales_val) as hedge_val, +# MAGIC 0 - sum(a.sales_vol) as hedge_vol +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level like '%HEDGE_TA%' +# MAGIC group by a.quarter,a.province_city +# MAGIC ) +# MAGIC +# MAGIC insert into tmp.tmp_retail_level_market +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC 'HEDGE_TA', +# MAGIC 'HEDGE_MARKET', +# MAGIC hedge_val, +# MAGIC hedge_vol, +# MAGIC 5 +# MAGIC from tmp_hedge + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.4 append HEDGE_TA data to every level +# MAGIC -- 1.4.2 append HEDGE_MOLECULE data to LEVEL_MOLECULE +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_hedge as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC 0 - sum(a.sales_val) as hedge_val, +# MAGIC 0 - sum(a.sales_vol) as hedge_vol +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level like '%HEDGE_TA%' +# MAGIC group by a.quarter,a.province_city +# MAGIC ) +# MAGIC insert into tmp.tmp_retail_level_molecule +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC 'HEDGE_TA', +# MAGIC 'HEDGE_MARKET', +# MAGIC 'HEDGE_MOLECULE', +# MAGIC hedge_val, +# MAGIC hedge_vol, +# MAGIC 5 +# MAGIC from tmp_hedge + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.4 append HEDGE_TA data to every level +# MAGIC -- 1.4.3 append HEDGE_BRAND data to LEVEL_BRAND +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_hedge as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC 0 - sum(a.sales_val) as hedge_val, +# MAGIC 0 - sum(a.sales_vol) as hedge_vol +# MAGIC from tmp.tmp_retail_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level like '%HEDGE_TA%' +# MAGIC group by a.quarter,a.province_city +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_level_brand +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC 'HEDGE_TA', +# MAGIC 'HEDGE_MARKET', +# MAGIC 'HEDGE_MOLECULE', +# MAGIC 'HEDGE_BRAND', +# MAGIC hedge_val, +# MAGIC hedge_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 5 +# MAGIC from tmp_hedge + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.5 load data from pack, balance level_brand +# MAGIC -- add regional data that is included in the pack but not in the brand +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_pack_to_brand as ( +# MAGIC select distinct a.quarter,a.level_ta,a.level_market, c.cmps_des_c,c.prod_des_c,a.product_id +# MAGIC from tmp.tmp_retail_pack_rawdata a +# MAGIC inner join dwd.dwd_gnd_ext_retail_pack_property c +# MAGIC on a.product_id = c.product_id +# MAGIC where exists ( +# MAGIC select distinct b.level_ta, b.level_market +# MAGIC from dwd.dwd_gnd_retail_split_automatic b +# MAGIC where b.level_ta is not null +# MAGIC and a.level_ta = b.level_ta +# MAGIC and a.level_market = b.level_market +# MAGIC ) and a.data_flag = 0 +# MAGIC and a.zk_regin <> '全国' +# MAGIC order by a.quarter,a.level_ta,a.level_market, c.cmps_des_c,c.prod_des_c +# MAGIC ), tmp_pack_sum as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.zk_regin, +# MAGIC a.level_ta, +# MAGIC a.level_market, +# MAGIC b.cmps_des_c as molecule_desc, +# MAGIC nvl(b.prod_des_c,concat(b.cmps_des_c,'_OTHER_PROD')) as product_desc, +# MAGIC sum(a.sales_value) as sales_val, +# MAGIC round(sum(a.sales_unit * (c.counting_unit/ coalesce(c.unit,1)) ) ,4) as sales_vol +# MAGIC from tmp.tmp_retail_pack_rawdata a +# MAGIC inner join tmp_pack_to_brand b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.level_ta = b.level_ta +# MAGIC and a.level_market = b.level_market +# MAGIC and a.product_id = b.product_id +# MAGIC inner join dwd.dwd_gnd_ext_retail_pack_property c +# MAGIC on a.product_id = c.product_id +# MAGIC where a.data_flag = 0 and zk_regin <> 'ROC' +# MAGIC group by a.quarter, a.zk_regin,a.level_ta,a.level_market,b.cmps_des_c,b.prod_des_c +# MAGIC order by a.quarter,a.zk_regin,a.level_ta +# MAGIC ), tmp_brand as ( +# MAGIC select * from tmp.tmp_retail_level_brand where data_flag = 0 +# MAGIC ),tmp_final as ( +# MAGIC select +# MAGIC a.*, +# MAGIC null as ratio_val, +# MAGIC null as ratio_vol, +# MAGIC null as total_val, +# MAGIC null as total_vol, +# MAGIC 0 as data_flag --从pack聚合出来的brand数据,也是真实的原生数据 +# MAGIC from tmp_pack_sum a +# MAGIC where not exists ( +# MAGIC select 1 from tmp_brand b +# MAGIC where a.quarter = b.quarter +# MAGIC and a.zk_regin = b.province_city +# MAGIC and a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and a.molecule_desc = b.molecule +# MAGIC and a.product_desc = b.brand +# MAGIC ) +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_level_brand +# MAGIC select * from tmp_final + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: substract data from level market to brand + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: substract data from level market to brand +# MAGIC -- 2.1 substract level market data and add 'OTHER_MOLECULE' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_aggregate_market as ( +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_level_molecule +# MAGIC group by quarter, province_city , ta ,market +# MAGIC ),tmp_molecule as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val, +# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol +# MAGIC from tmp.tmp_retail_level_market a +# MAGIC left join tmp_aggregate_market b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC ) +# MAGIC +# MAGIC -------append OTHER_MOLECULE to tmp.tmp_retail_level_molecule +# MAGIC insert into tmp.tmp_retail_level_molecule +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC 'OTHER_MOLECULE', +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 1 +# MAGIC from tmp_molecule +# MAGIC where sales_val > 0 or sales_vol > 0 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: substract data from level market to brand +# MAGIC -- 2.2 substract level molecule data and add 'OTHER_BRAND' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_aggregate_molecule as ( +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_level_brand +# MAGIC group by quarter,province_city ,ta ,market,molecule +# MAGIC ),tmp_brand as ( +# MAGIC select +# MAGIC a.quarter, +# MAGIC a.province_city, +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.molecule, +# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val, +# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol +# MAGIC from tmp.tmp_retail_level_molecule a +# MAGIC left join tmp_aggregate_molecule b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC ) +# MAGIC +# MAGIC -------append OTHER_BRAND to tmp.tmp_retail_level_brand +# MAGIC insert into tmp.tmp_retail_level_brand +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC 'OTHER_BRAND', +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 1 +# MAGIC from tmp_brand +# MAGIC where sales_val > 0 or sales_vol > 0 + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-3: accumulate data from level brand to market + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND' & 'OTHER_MOLECULE' data +# MAGIC -- 3.1.1 accumulate level molecule data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_aggregate_molecule as ( +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_level_brand +# MAGIC group by quarter,province_city ,ta ,market,molecule +# MAGIC ), tmp_append_molecule as ( +# MAGIC select a.* +# MAGIC from tmp_aggregate_molecule a +# MAGIC where not exists ( +# MAGIC select 1 +# MAGIC from tmp.tmp_retail_level_molecule b +# MAGIC where a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC ) +# MAGIC ) +# MAGIC -------append level molecule data accumulate from level brand +# MAGIC insert into tmp.tmp_retail_level_molecule +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 2 +# MAGIC from tmp_append_molecule + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data +# MAGIC -- 3.1.2 balance 'OTHER_MOLECULE' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC merge into tmp.tmp_retail_level_molecule a +# MAGIC using( +# MAGIC select * from tmp.tmp_retail_level_molecule +# MAGIC where data_flag = 2 +# MAGIC ) as b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = 'OTHER_MOLECULE' +# MAGIC and a.data_flag = 1 +# MAGIC when matched then +# MAGIC update set +# MAGIC a.sales_val = a.sales_val - b.sales_val, +# MAGIC a.sales_vol = a.sales_vol - b.sales_vol +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data +# MAGIC -- 3.1.3 balance 'OTHER_BRAND' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC merge into tmp.tmp_retail_level_brand a +# MAGIC using( +# MAGIC select * from tmp.tmp_retail_level_molecule +# MAGIC where data_flag = 2 +# MAGIC ) as b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = 'OTHER_MOLECULE' +# MAGIC and a.brand = 'OTHER_BRAND' +# MAGIC and a.data_flag = 1 +# MAGIC when matched then +# MAGIC update set +# MAGIC a.sales_val = a.sales_val - b.sales_val, +# MAGIC a.sales_vol = a.sales_vol - b.sales_vol + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.2 accumulate level market data and balance 'OTHER_MOLECULE' data +# MAGIC -- 3.2.1 accumulate level market data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_aggregate_market as ( +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_level_molecule +# MAGIC group by quarter,province_city ,ta ,market +# MAGIC ), tmp_append_market as ( +# MAGIC select a.* +# MAGIC from tmp_aggregate_market a +# MAGIC where not exists ( +# MAGIC select 1 +# MAGIC from tmp.tmp_retail_level_market b +# MAGIC where a.quarter = b.quarter +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC ) +# MAGIC ) +# MAGIC -------append level market data accumulate from level molecule +# MAGIC insert into tmp.tmp_retail_level_market +# MAGIC select +# MAGIC quarter, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 2 +# MAGIC from tmp_append_market + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.2 accumulate level market data and balance 'OTHER_MOLECULE' data +# MAGIC -- 3.2.2 balance 'OTHER_MOLECULE' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC ---------not using in this case, beacuse level ta has no data------------------------ +# MAGIC --merge into tmp.tmp_retail_level_market a +# MAGIC --using( +# MAGIC -- select * from tmp.tmp_retail_level_molecule +# MAGIC -- where data_flag = 2 +# MAGIC --) as b +# MAGIC --on a.quarter = b.quarter +# MAGIC --and a.province_city = b.province_city +# MAGIC --and a.ta = b.ta +# MAGIC --and a.market = 'OTHER_MARKET' +# MAGIC --and a.data_flag = 1 +# MAGIC --when matched then +# MAGIC -- update set +# MAGIC -- a.sales_val = a.sales_val - b.sales_val, +# MAGIC -- a.sales_vol = a.sales_vol - b.sales_vol + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-4: calculate brand ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: calculate brand ratio +# MAGIC -- update total_val&total_vol and ratio_val&ratio_vol +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC merge into tmp.tmp_retail_level_brand a +# MAGIC using( +# MAGIC select * from tmp.tmp_retail_level_brand +# MAGIC where province_city = '全国' +# MAGIC ) as b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC and a.brand = b.brand +# MAGIC when matched then +# MAGIC update set +# MAGIC a.total_val = b.sales_val, +# MAGIC a.total_vol = b.sales_vol, +# MAGIC a.ratio_val = round(a.sales_val/b.sales_val,10), +# MAGIC a.ratio_vol = round(a.sales_vol/b.sales_vol,10) + +# COMMAND ---------- + +############################################################END############################################################## \ No newline at end of file diff --git a/Retail/03 split_pack_data.py b/Retail/03 split_pack_data.py new file mode 100644 index 0000000..8471db8 --- /dev/null +++ b/Retail/03 split_pack_data.py @@ -0,0 +1,1200 @@ +# Databricks notebook source +### constant +DATA_TYPE_MARKET = 'MARKET' +DATA_TYPE_MOLECULE = 'MOLECULE' +DATA_TYPE_BRAND = 'BRAND' +DATA_TYPE_MULTI_MARKET = 'MULTI_MARKET' +DATA_TYPE_MULTI_MOLECULE = 'MULTI_MOLECULE' +DATA_TYPE_MULTI_BRAND = 'MULTI_BRAND' +DATA_TYPE_DUPLICATE = 'DUPLICATE' +DATA_TYPE_HEDGE_TA = 'HEDGE_TA' +DATA_TYPE_HEDGE_MARKET = 'HEDGE_MARKET' +DATA_TYPE_HEDGE_MOLECULE = 'HEDGE_MOLECULE' +DATA_TYPE_HEDGE_BRAND = 'HEDGE_BRAND' + +DATA_FLAG_RAW = 0 ### final pack_flag = 1 +DATA_FLAG_SUB = 1 ### final pack_flag = 2 +DATA_FLAG_ADD = 2 ### final pack_flag = 2 +DATA_FLAG_RATIO = 3 ### final pack_flag = 2 +DATA_FLAG_AVG = 4 ### final pack_flag = 2 +DATA_FLAG_HEDGE = 5 ### final pack_flag = 2 +BRAND_FLAG_NATIVE = 1 ### final brand_flag = 1 +BRAND_FLAG_CALCULATE = 2 ### final brand_flag = 2 +BRAND_FLAG_NONE = 3 ### final brand_flag = 2 +BRAND_FLAG_PACK = 4 ### final brand_flag = 1 + +DATA_OTHER_TA = 'OTHER_TA' +DATA_OTHER_MARKET = 'OTHER_MARKET' +DATA_OTHER_MOLECULE = 'OTHER_MOLECULE' +DATA_OTHER_BRAND = 'OTHER_BRAND' +DATA_AREA_TYPE_ROC = 'ROC' +DATA_LABEL_AREA_ALL = '全国' + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: generate product_id&level relationship mapping table +### STEP-2: split regional data by brand ratio when there is no regional data and there is a brand ratio +### STEP-3: substract ROC data + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: generate product_id&level relationship mapping table + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.1 generate mapping table +# MAGIC -- use two dwd table: +# MAGIC -- use dwd.dwd_gnd_ext_retail_pack_property to find the relationship with product_id & brand +# MAGIC -- use dwd.dwd_inc_gnd_retail_b2c_label_total to find the brand with suffix label ,such as 胶囊、颗粒 (可威-胶囊/可威-颗粒) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_pack_property as ( +# MAGIC --------------------------------------------------------------- +# MAGIC -- 以数字开头的iqvia_pack_code调整为12位(以字母开头的不变),不足位数补0 +# MAGIC -- iqvia_prod_code调整为9位,不足位数补0 +# MAGIC select +# MAGIC case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(iqvia_pack_code)),12) else trim(iqvia_pack_code) end as iqvia_pack_code, +# MAGIC case when length(iqvia_prod_code) < 9 then right(concat('000000000',iqvia_prod_code),9) else iqvia_prod_code end as iqvia_prod_code, +# MAGIC product_id, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC corp_cod, +# MAGIC app1_cod, +# MAGIC app2_cod, +# MAGIC app3_cod +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ), tmp_b2c_label_total as ( +# MAGIC select +# MAGIC case when length(IQVIA_PROD_CODE) < 9 then right(concat('000000000',IQVIA_PROD_CODE),9) else IQVIA_PROD_CODE end as IQVIA_PROD_CODE, +# MAGIC ZK_Prod_C, +# MAGIC APP1_COD, +# MAGIC APP2_COD, +# MAGIC APP3_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total +# MAGIC --------------------------------------------------------------- +# MAGIC ), tmp_suffix_brand as ( +# MAGIC select distinct split(brand,'-')[0] +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where brand like '%-%' +# MAGIC ), tmp_mapping as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.product_id as product_id, +# MAGIC a.iqvia_pack_code as pack_code, +# MAGIC a.cmps_des as molecule_code, +# MAGIC a.cmps_des_c as molecule_name, +# MAGIC ifnull(a.prod_des, concat(a.cmps_des,'_OTHER_PROD')) as product_code, +# MAGIC ifnull(a.prod_des_c, concat(a.cmps_des_c,'_OTHER_PROD')) as product_name, +# MAGIC a.corp_cod +# MAGIC from tmp_pack_property a +# MAGIC where a.prod_des_c not in (select * from tmp_suffix_brand) +# MAGIC or a.prod_des_c is null +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC a.product_id as product_id, +# MAGIC a.iqvia_pack_code as pack_code, +# MAGIC a.cmps_des as molecule_code, +# MAGIC a.cmps_des_c as molecule_name, +# MAGIC a.prod_des as product_code, +# MAGIC ifnull(b.ZK_Prod_C, a.prod_des_c) as product_name, +# MAGIC a.corp_cod +# MAGIC from tmp_pack_property a +# MAGIC left join tmp_b2c_label_total b +# MAGIC on a.iqvia_prod_code = b.IQVIA_PROD_CODE +# MAGIC and a.app1_cod = b.APP1_COD +# MAGIC and a.app2_cod = b.APP2_COD +# MAGIC and a.app3_cod = b.APP3_COD +# MAGIC where a.prod_des_c in (select * from tmp_suffix_brand) +# MAGIC ), tmp_pack as ( +# MAGIC select +# MAGIC distinct +# MAGIC product_id, +# MAGIC zk_product_id, +# MAGIC level_ta, +# MAGIC level_market +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC ), tmp_pack_mapping as( +# MAGIC select +# MAGIC p.level_ta, +# MAGIC p.level_market, +# MAGIC p.product_id, +# MAGIC p.zk_product_id, +# MAGIC m.pack_code, +# MAGIC m.molecule_code, +# MAGIC m.molecule_name, +# MAGIC m.product_code, +# MAGIC m.product_name, +# MAGIC m.corp_cod +# MAGIC from tmp_pack p +# MAGIC inner join tmp_mapping m +# MAGIC on p.product_id = m.product_id +# MAGIC ), tmp_level as ( +# MAGIC select +# MAGIC distinct +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC brand +# MAGIC from tmp.tmp_retail_level_brand +# MAGIC order by ta,market,molecule,brand +# MAGIC ), tmp_molecule_brand as ( +# MAGIC -----------------------ta matched & market matched & molecule matched & brand matched -------------- +# MAGIC select +# MAGIC a.*,b.*,1 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and (a.molecule_name = b.molecule or b.molecule <> 'OTHER_MOLECULE') -- 新增自定义非OTHER_MOLECULE +# MAGIC and a.product_name = b.brand +# MAGIC ), tmp_other_brand as ( +# MAGIC -----------------------ta matched & market matched & OTHER_MOLECULE & brand matched----------------- +# MAGIC select +# MAGIC a.*,b.*,1 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and b.molecule = 'OTHER_MOLECULE' +# MAGIC and a.product_name = b.brand +# MAGIC where a.product_id not in ( +# MAGIC select distinct product_id from tmp_molecule_brand +# MAGIC ) +# MAGIC ), tmp_molecule_other as( +# MAGIC -----------------------ta matched & market matched & molecule matched & OTHER_BRAND---------------- +# MAGIC select +# MAGIC a.*,b.*,2 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and a.molecule_name = b.molecule +# MAGIC and b.brand = 'OTHER_BRAND' +# MAGIC where a.product_id not in ( +# MAGIC select distinct product_id from tmp_molecule_brand +# MAGIC union all +# MAGIC select distinct product_id from tmp_other_brand +# MAGIC ) +# MAGIC ), tmp_other_other as ( +# MAGIC -----------------------ta matched & market matched & OTHER_MOLECULE& OTHER_BRAND--------------------- +# MAGIC select +# MAGIC a.*,b.*,2 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and b.molecule = 'OTHER_MOLECULE' +# MAGIC and b.brand = 'OTHER_BRAND' +# MAGIC where a.product_id not in ( +# MAGIC select distinct product_id from tmp_molecule_brand +# MAGIC union all +# MAGIC select distinct product_id from tmp_other_brand +# MAGIC union all +# MAGIC select distinct product_id from tmp_molecule_other +# MAGIC ) +# MAGIC ), tmp_brand_mapping as ( +# MAGIC select * from tmp_molecule_brand +# MAGIC union all +# MAGIC select * from tmp_other_brand +# MAGIC union all +# MAGIC select * from tmp_molecule_other +# MAGIC union all +# MAGIC select * from tmp_other_other +# MAGIC ) +# MAGIC +# MAGIC ------------------------- generate product_id&level relationship mapping table------------------------ +# MAGIC insert overwrite table tmp.tmp_retail_pack_mapping +# MAGIC +# MAGIC select +# MAGIC product_id, +# MAGIC zk_product_id, +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC molecule as level_molecule, +# MAGIC brand as level_brand, +# MAGIC pack_code, +# MAGIC molecule_code, +# MAGIC molecule_name, +# MAGIC product_code, +# MAGIC product_name, +# MAGIC brand_flag, +# MAGIC corp_cod +# MAGIC from tmp_brand_mapping + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.1 generate mapping table +# MAGIC -- 1.1.2 update special case 'GI-慢性胃炎、胃溃疡-其他拉唑类' +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC UPDATE tmp.tmp_retail_pack_mapping +# MAGIC SET level_molecule = '其他拉唑类' +# MAGIC where level_ta = 'GI' +# MAGIC and level_market = '慢性胃炎、胃溃疡' +# MAGIC and level_molecule = 'OTHER_MOLECULE' +# MAGIC and level_brand = 'OTHER_BRAND' +# MAGIC and molecule_desc like '%拉唑%' +# MAGIC --and product_id in ( +# MAGIC -- select product_id +# MAGIC -- from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC -- where cmps_cod IN ('001658','002782','008617','001051','001853','008467') +# MAGIC --) + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.1 generate mapping table +# MAGIC -- 1.1.3 获取market信息,产品重新归属 +# MAGIC -- 1.1.3.1 B2C标签表整合关联tblmarket 表,获取market 信息, 更新tmp.tmp_zk_retail_pack_property +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_pack_property +# MAGIC with tmp_pack_property as ( +# MAGIC select +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & prod_code +# MAGIC case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(iqvia_pack_code)),12) +# MAGIC else trim(iqvia_pack_code) +# MAGIC end as new_iqvia_pack_code, +# MAGIC case when length(iqvia_prod_code) < 9 then right(concat('000000000',iqvia_prod_code),9) else iqvia_prod_code end as new_iqvia_prod_code, +# MAGIC ------------------------------------------------------------------- +# MAGIC * +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ), tmp_pack_additional_attribute as ( +# MAGIC select +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code +# MAGIC case when length(trim(Pack_Code)) < 12 and trim(Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(Pack_Code)),12) +# MAGIC else trim(Pack_Code) +# MAGIC end as new_pack_code, +# MAGIC ------------------------------------------------------------------- +# MAGIC * +# MAGIC from dwd.dwd_ims_td_pack_additional_attribute +# MAGIC ), tmp_tblmarket as ( +# MAGIC select +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & prod_code +# MAGIC case when length(trim(pack_code)) < 12 and trim(pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_code)),12) +# MAGIC else trim(pack_code) +# MAGIC end as new_pack_code, +# MAGIC case when length(Product_Code) < 9 then right(concat('000000000',Product_Code),9) else Product_Code end as new_prod_code, +# MAGIC ------------------------------------------------------------------- +# MAGIC * +# MAGIC from dwd.dwd_gnd_ext_retail_tblmarket +# MAGIC ), tmp1 as ( +# MAGIC +# MAGIC select distinct +# MAGIC prod.iqvia_lineno +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & prod_code +# MAGIC ,prod.new_iqvia_pack_code as iqvia_pack_code +# MAGIC ,prod.new_iqvia_prod_code as PROD_COD +# MAGIC ------------------------------------------------------------------- +# MAGIC ,prod.iqvia_notes +# MAGIC ,prod.new_pack_flag +# MAGIC ,prod.is_exists_chpa +# MAGIC ,prod.product_id +# MAGIC ,prod.prescription_nature +# MAGIC ,prod.medicine_type +# MAGIC ,prod.zk_medicine_tier1 +# MAGIC ,prod.zk_medicine_tier2 +# MAGIC ,prod.zk_medicine_tier3 +# MAGIC ,prod.zk_medicine_tier4 +# MAGIC ,prod.common_name +# MAGIC ,prod.dosage_form +# MAGIC ,prod.user_type +# MAGIC ,prod.category_name +# MAGIC ,prod.product_name +# MAGIC ,prod.brand_name +# MAGIC ,prod.zk_manu_des +# MAGIC ,prod.zk_corp_des +# MAGIC ,prod.zk_pack_des +# MAGIC ,prod.counting_unit_a +# MAGIC ,prod.dosage_unit_a +# MAGIC ,prod.unit_a +# MAGIC ,prod.app1_cod +# MAGIC ,prod.app1_des +# MAGIC ,prod.app1_des_c +# MAGIC ,prod.app2_cod +# MAGIC ,prod.app2_des +# MAGIC ,prod.app2_des_c +# MAGIC ,prod.app3_cod +# MAGIC ,prod.app3_des +# MAGIC ,prod.app3_des_c +# MAGIC ,prod.atc1_cod +# MAGIC ,prod.atc1_des +# MAGIC ,prod.atc1_des_c +# MAGIC ,prod.atc2_cod +# MAGIC ,prod.atc2_des +# MAGIC ,prod.atc2_des_c +# MAGIC ,prod.atc3_cod +# MAGIC ,prod.atc3_des +# MAGIC ,prod.atc3_des_c +# MAGIC ,prod.atc4_cod +# MAGIC ,prod.atc4_des +# MAGIC ,prod.atc4_des_c +# MAGIC ,prod.bio_desc +# MAGIC ,right(concat('000000',nvl(prod.cmps_cod,0 )),6) cmps_cod +# MAGIC ,prod.cmps_des +# MAGIC ,prod.cmps_des_c +# MAGIC ,prod.corp_cod +# MAGIC ,prod.corp_des +# MAGIC ,prod.corp_des_c +# MAGIC ,prod.edl_desc +# MAGIC ,prod.eth_otc_desc +# MAGIC ,prod.gene_orig_desc +# MAGIC ,prod.gqce_desc +# MAGIC ,prod.manu_cod +# MAGIC ,prod.manu_des +# MAGIC ,prod.manu_des_c +# MAGIC ,prod.mnfl_cod +# MAGIC ,prod.mnfl_des +# MAGIC ,prod.nrdl_desc +# MAGIC ,prod.pack_des +# MAGIC ,prod.stgh_des +# MAGIC ,prod.pack_lch +# MAGIC ,prod.paed_desc +# MAGIC ,prod.prod_des +# MAGIC ,prod.prod_des_c +# MAGIC ,prod.tcm_desc +# MAGIC ,prod.vbp_desc +# MAGIC ,prod.unit +# MAGIC ,prod.counting_unit +# MAGIC ,prod.dosage_unit +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,tblmkt.market +# MAGIC ,tblmkt.bu +# MAGIC ,nvl(tblmkt.extend_market_ratio,1) as extend_market_ratio +# MAGIC from tmp_pack_property prod +# MAGIC LEFT JOIN tmp_pack_additional_attribute MOLE +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC ON prod.new_iqvia_pack_code = MOLE.new_pack_code +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC left join ( +# MAGIC select market +# MAGIC ,bu +# MAGIC ,atc1_code +# MAGIC ,atc2_code +# MAGIC ,atc3_code +# MAGIC ,atc4_code +# MAGIC ,nfc1_code +# MAGIC ,nfc2_code +# MAGIC ,nfc3_code +# MAGIC ,Molecule_Code +# MAGIC ,zk_common_name +# MAGIC ,extend_market_ratio +# MAGIC ,zk_product_id +# MAGIC ,zk_dosage_form +# MAGIC ------------------------------------- +# MAGIC ,new_pack_code as pack_code +# MAGIC ,new_prod_code as Product_Code +# MAGIC ------------------------------------- +# MAGIC ,not_in_flag +# MAGIC ,extend_market +# MAGIC from tmp_tblmarket +# MAGIC -- 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)) +# MAGIC where 1=1 +# MAGIC and Extend_Market IS NULL +# MAGIC AND ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' ) +# MAGIC ) tblmkt +# MAGIC on nvl(prod.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then nvl(prod.ATC1_COD,'') else tblmkt.ATC1_Code end +# MAGIC and nvl(prod.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then nvl(prod.ATC2_COD,'') else tblmkt.ATC2_Code end +# MAGIC and nvl(prod.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then nvl(prod.ATC3_COD,'') else tblmkt.ATC3_Code end +# MAGIC and nvl(prod.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then nvl(prod.ATC4_COD,'') else tblmkt.ATC4_Code end +# MAGIC and nvl(prod.APP1_COD,'') = case when tblmkt.NFC1_Code is null then nvl(prod.APP1_COD,'') else tblmkt.NFC1_Code end +# MAGIC and nvl(prod.APP2_COD,'') = case when tblmkt.NFC2_Code is null then nvl(prod.APP2_COD,'') else tblmkt.NFC2_Code end +# MAGIC and nvl(prod.APP3_COD,'') = case when tblmkt.NFC3_Code is null then nvl(prod.APP3_COD,'') else tblmkt.NFC3_Code end +# MAGIC -------------------------------------------------------------------------------------- +# MAGIC and nvl(prod.new_iqvia_prod_code, 0) = case when tblmkt.Product_Code is null then nvl(prod.new_iqvia_prod_code,0 ) else tblmkt.Product_Code end +# MAGIC and nvl(prod.new_iqvia_pack_code, 0) = case when tblmkt.Pack_Code is null then nvl(prod.new_iqvia_pack_code,0 ) else tblmkt.Pack_Code end +# MAGIC -------------------------------------------------------------------------------------- +# MAGIC 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 +# MAGIC where tblmkt.market is not null +# MAGIC ) +# MAGIC , tmp2 as ( +# MAGIC select distinct +# MAGIC prod.iqvia_lineno +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & prod_code +# MAGIC ,prod.new_iqvia_pack_code as iqvia_pack_code +# MAGIC ,prod.new_iqvia_prod_code as PROD_COD +# MAGIC ------------------------------------------------------------------- +# MAGIC ,prod.iqvia_notes +# MAGIC ,prod.new_pack_flag +# MAGIC ,prod.is_exists_chpa +# MAGIC ,prod.product_id +# MAGIC ,prod.prescription_nature +# MAGIC ,prod.medicine_type +# MAGIC ,prod.zk_medicine_tier1 +# MAGIC ,prod.zk_medicine_tier2 +# MAGIC ,prod.zk_medicine_tier3 +# MAGIC ,prod.zk_medicine_tier4 +# MAGIC ,prod.common_name +# MAGIC ,prod.dosage_form +# MAGIC ,prod.user_type +# MAGIC ,prod.category_name +# MAGIC ,prod.product_name +# MAGIC ,prod.brand_name +# MAGIC ,prod.zk_manu_des +# MAGIC ,prod.zk_corp_des +# MAGIC ,prod.zk_pack_des +# MAGIC ,prod.counting_unit_a +# MAGIC ,prod.dosage_unit_a +# MAGIC ,prod.unit_a +# MAGIC ,prod.app1_cod +# MAGIC ,prod.app1_des +# MAGIC ,prod.app1_des_c +# MAGIC ,prod.app2_cod +# MAGIC ,prod.app2_des +# MAGIC ,prod.app2_des_c +# MAGIC ,prod.app3_cod +# MAGIC ,prod.app3_des +# MAGIC ,prod.app3_des_c +# MAGIC ,prod.atc1_cod +# MAGIC ,prod.atc1_des +# MAGIC ,prod.atc1_des_c +# MAGIC ,prod.atc2_cod +# MAGIC ,prod.atc2_des +# MAGIC ,prod.atc2_des_c +# MAGIC ,prod.atc3_cod +# MAGIC ,prod.atc3_des +# MAGIC ,prod.atc3_des_c +# MAGIC ,prod.atc4_cod +# MAGIC ,prod.atc4_des +# MAGIC ,prod.atc4_des_c +# MAGIC ,prod.bio_desc +# MAGIC ,right(concat('000000',nvl(prod.cmps_cod,0 )),6) cmps_cod +# MAGIC ,prod.cmps_des +# MAGIC ,prod.cmps_des_c +# MAGIC ,prod.corp_cod +# MAGIC ,prod.corp_des +# MAGIC ,prod.corp_des_c +# MAGIC ,prod.edl_desc +# MAGIC ,prod.eth_otc_desc +# MAGIC ,prod.gene_orig_desc +# MAGIC ,prod.gqce_desc +# MAGIC ,prod.manu_cod +# MAGIC ,prod.manu_des +# MAGIC ,prod.manu_des_c +# MAGIC ,prod.mnfl_cod +# MAGIC ,prod.mnfl_des +# MAGIC ,prod.nrdl_desc +# MAGIC ,prod.pack_des +# MAGIC ,prod.stgh_des +# MAGIC ,prod.pack_lch +# MAGIC ,prod.paed_desc +# MAGIC ,prod.prod_des +# MAGIC ,prod.prod_des_c +# MAGIC ,prod.tcm_desc +# MAGIC ,prod.vbp_desc +# MAGIC ,prod.unit +# MAGIC ,prod.counting_unit +# MAGIC ,prod.dosage_unit +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,tblmkt.market +# MAGIC ,tblmkt.bu +# MAGIC ,nvl(tblmkt.extend_market_ratio,1) as extend_market_ratio +# MAGIC ,1 as f_flag +# MAGIC from tmp_pack_property prod +# MAGIC LEFT JOIN tmp_pack_additional_attribute MOLE +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC ON prod.new_iqvia_pack_code = MOLE.new_pack_code +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC left join ( +# MAGIC select market +# MAGIC ,bu +# MAGIC ,atc1_code +# MAGIC ,atc2_code +# MAGIC ,atc3_code +# MAGIC ,atc4_code +# MAGIC ,nfc1_code +# MAGIC ,nfc2_code +# MAGIC ,nfc3_code +# MAGIC ,Molecule_Code +# MAGIC ,zk_common_name +# MAGIC ,extend_market_ratio +# MAGIC ,zk_product_id +# MAGIC ,zk_dosage_form +# MAGIC ------------------------------------- +# MAGIC ,new_pack_code as pack_code +# MAGIC ,new_prod_code as Product_Code +# MAGIC ------------------------------------- +# MAGIC ,not_in_flag +# MAGIC ,extend_market +# MAGIC from tmp_tblmarket +# MAGIC -- 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)) +# MAGIC where 1=1 +# MAGIC and Extend_Market IS NULL and NOT_IN_FLAG ='0' +# MAGIC +# MAGIC )tblmkt +# MAGIC on nvl(prod.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then nvl(prod.ATC1_COD,'') else tblmkt.ATC1_Code end +# MAGIC and nvl(prod.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then nvl(prod.ATC2_COD,'') else tblmkt.ATC2_Code end +# MAGIC and nvl(prod.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then nvl(prod.ATC3_COD,'') else tblmkt.ATC3_Code end +# MAGIC and nvl(prod.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then nvl(prod.ATC4_COD,'') else tblmkt.ATC4_Code end +# MAGIC and nvl(prod.APP1_COD,'') = case when tblmkt.NFC1_Code is null then nvl(prod.APP1_COD,'') else tblmkt.NFC1_Code end +# MAGIC and nvl(prod.APP2_COD,'') = case when tblmkt.NFC2_Code is null then nvl(prod.APP2_COD,'') else tblmkt.NFC2_Code end +# MAGIC and nvl(prod.APP3_COD,'') = case when tblmkt.NFC3_Code is null then nvl(prod.APP3_COD,'') else tblmkt.NFC3_Code end +# MAGIC -------------------------------------------------------------------------------------- +# MAGIC and nvl(prod.new_iqvia_prod_code, 0) = case when tblmkt.Product_Code is null then nvl(prod.new_iqvia_prod_code,0 ) else tblmkt.Product_Code end +# MAGIC and nvl(prod.new_iqvia_pack_code, 0) = case when tblmkt.Pack_Code is null then nvl(prod.new_iqvia_pack_code,0 ) else tblmkt.Pack_Code end +# MAGIC -------------------------------------------------------------------------------------- +# MAGIC 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 +# MAGIC where tblmkt.market is not null +# MAGIC +# MAGIC ) +# MAGIC , tmp3 as ( +# MAGIC select distinct +# MAGIC tmp1.iqvia_lineno +# MAGIC ,tmp1.iqvia_pack_code +# MAGIC ,tmp1.PROD_COD +# MAGIC ,tmp1.iqvia_notes +# MAGIC ,tmp1.new_pack_flag +# MAGIC ,tmp1.is_exists_chpa +# MAGIC ,tmp1.product_id +# MAGIC ,tmp1.prescription_nature +# MAGIC ,tmp1.medicine_type +# MAGIC ,tmp1.zk_medicine_tier1 +# MAGIC ,tmp1.zk_medicine_tier2 +# MAGIC ,tmp1.zk_medicine_tier3 +# MAGIC ,tmp1.zk_medicine_tier4 +# MAGIC ,tmp1.common_name +# MAGIC ,tmp1.dosage_form +# MAGIC ,tmp1.user_type +# MAGIC ,tmp1.category_name +# MAGIC ,tmp1.product_name +# MAGIC ,tmp1.brand_name +# MAGIC ,tmp1.zk_manu_des +# MAGIC ,tmp1.zk_corp_des +# MAGIC ,tmp1.zk_pack_des +# MAGIC ,tmp1.counting_unit_a +# MAGIC ,tmp1.dosage_unit_a +# MAGIC ,tmp1.unit_a +# MAGIC ,tmp1.app1_cod +# MAGIC ,tmp1.app1_des +# MAGIC ,tmp1.app1_des_c +# MAGIC ,tmp1.app2_cod +# MAGIC ,tmp1.app2_des +# MAGIC ,tmp1.app2_des_c +# MAGIC ,tmp1.app3_cod +# MAGIC ,tmp1.app3_des +# MAGIC ,tmp1.app3_des_c +# MAGIC ,tmp1.atc1_cod +# MAGIC ,tmp1.atc1_des +# MAGIC ,tmp1.atc1_des_c +# MAGIC ,tmp1.atc2_cod +# MAGIC ,tmp1.atc2_des +# MAGIC ,tmp1.atc2_des_c +# MAGIC ,tmp1.atc3_cod +# MAGIC ,tmp1.atc3_des +# MAGIC ,tmp1.atc3_des_c +# MAGIC ,tmp1.atc4_cod +# MAGIC ,tmp1.atc4_des +# MAGIC ,tmp1.atc4_des_c +# MAGIC ,tmp1.bio_desc +# MAGIC ,tmp1.cmps_cod +# MAGIC ,tmp1.cmps_des +# MAGIC ,tmp1.cmps_des_c +# MAGIC ,tmp1.corp_cod +# MAGIC ,tmp1.corp_des +# MAGIC ,tmp1.corp_des_c +# MAGIC ,tmp1.edl_desc +# MAGIC ,tmp1.eth_otc_desc +# MAGIC ,tmp1.gene_orig_desc +# MAGIC ,tmp1.gqce_desc +# MAGIC ,tmp1.manu_cod +# MAGIC ,tmp1.manu_des +# MAGIC ,tmp1.manu_des_c +# MAGIC ,tmp1.mnfl_cod +# MAGIC ,tmp1.mnfl_des +# MAGIC ,tmp1.nrdl_desc +# MAGIC ,tmp1.pack_des +# MAGIC ,tmp1.stgh_des +# MAGIC ,tmp1.pack_lch +# MAGIC ,tmp1.paed_desc +# MAGIC ,tmp1.prod_des +# MAGIC ,tmp1.prod_des_c +# MAGIC ,tmp1.tcm_desc +# MAGIC ,tmp1.vbp_desc +# MAGIC ,tmp1.unit +# MAGIC ,tmp1.counting_unit +# MAGIC ,tmp1.dosage_unit +# MAGIC ,tmp1.NRDL_ENTRY_DATE +# MAGIC ,tmp1.market +# MAGIC ,nvl(t2.bu,tmp1.bu) as bu +# MAGIC ,tmp1.extend_market_ratio +# MAGIC ,IF(tmp1.corp_des_c in('阿斯利康制药集团') ,'Y','N') is_az +# MAGIC from tmp1 left join tmp2 +# MAGIC on nvl(tmp1.ATC1_COD,'') = nvl(tmp2.ATC1_COD,'') +# MAGIC and nvl(tmp1.ATC2_COD,'') = nvl(tmp2.ATC2_COD,'') +# MAGIC and nvl(tmp1.ATC3_COD,'') = nvl(tmp2.ATC3_COD,'') +# MAGIC and nvl(tmp1.ATC4_COD,'') = nvl(tmp2.ATC4_COD,'') +# MAGIC and nvl(tmp1.APP1_COD,'') = nvl(tmp2.APP1_COD,'') +# MAGIC and nvl(tmp1.APP2_COD,'') = nvl(tmp2.APP2_COD,'') +# MAGIC and nvl(tmp1.APP3_COD,'') = nvl(tmp2.APP3_COD,'') +# MAGIC and nvl(tmp1.PROD_COD,'') = nvl(tmp2.PROD_COD,'') +# MAGIC and nvl(tmp1.iqvia_pack_code,'') = nvl(tmp2.iqvia_pack_code,'') +# MAGIC and nvl(tmp1.common_name ,'') = nvl(tmp2.common_name ,'') +# MAGIC and nvl(tmp1.product_id,'') = nvl(tmp2.product_id,'') +# MAGIC and nvl(tmp1.dosage_form ,'') = nvl(tmp2.dosage_form ,'') +# MAGIC and nvl(tmp1.CMPS_COD,'') = nvl(tmp2.CMPS_COD,'') +# MAGIC and nvl(tmp1.market ,'') = nvl(tmp2.market ,'') +# MAGIC left join (select Market, BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ext_retail_tblmarket +# MAGIC -- where (market not in( 'ZOK Default Market', 'Inhaled Extended Market') and Extend_Market IS NOT NULL +# MAGIC -- )or (case when market in( 'Inhaled Extended Market') then zk_product_id is not null end) +# MAGIC where Extend_Market IS NOT NULL +# MAGIC ) t2 on tmp1.Market=t2.Extend_Market +# MAGIC where NVL(tmp2.f_flag,0) !=1 +# MAGIC +# MAGIC ) +# MAGIC +# MAGIC -- 合并所有市场数据 +# MAGIC select +# MAGIC * +# MAGIC from tmp3 +# MAGIC --没有匹配上的给默认市场:Non AZ Retail Related Market +# MAGIC union all +# MAGIC select +# MAGIC prod.iqvia_lineno +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & prod_code +# MAGIC ,prod.new_iqvia_pack_code as iqvia_pack_code +# MAGIC ,prod.new_iqvia_prod_code as PROD_COD +# MAGIC ------------------------------------------------------------------- +# MAGIC ,prod.iqvia_notes +# MAGIC ,prod.new_pack_flag +# MAGIC ,prod.is_exists_chpa +# MAGIC ,prod.product_id +# MAGIC ,prod.prescription_nature +# MAGIC ,prod.medicine_type +# MAGIC ,prod.zk_medicine_tier1 +# MAGIC ,prod.zk_medicine_tier2 +# MAGIC ,prod.zk_medicine_tier3 +# MAGIC ,prod.zk_medicine_tier4 +# MAGIC ,prod.common_name +# MAGIC ,prod.dosage_form +# MAGIC ,prod.user_type +# MAGIC ,prod.category_name +# MAGIC ,prod.product_name +# MAGIC ,prod.brand_name +# MAGIC ,prod.zk_manu_des +# MAGIC ,prod.zk_corp_des +# MAGIC ,prod.zk_pack_des +# MAGIC ,prod.counting_unit_a +# MAGIC ,prod.dosage_unit_a +# MAGIC ,prod.unit_a +# MAGIC ,prod.app1_cod +# MAGIC ,prod.app1_des +# MAGIC ,prod.app1_des_c +# MAGIC ,prod.app2_cod +# MAGIC ,prod.app2_des +# MAGIC ,prod.app2_des_c +# MAGIC ,prod.app3_cod +# MAGIC ,prod.app3_des +# MAGIC ,prod.app3_des_c +# MAGIC ,prod.atc1_cod +# MAGIC ,prod.atc1_des +# MAGIC ,prod.atc1_des_c +# MAGIC ,prod.atc2_cod +# MAGIC ,prod.atc2_des +# MAGIC ,prod.atc2_des_c +# MAGIC ,prod.atc3_cod +# MAGIC ,prod.atc3_des +# MAGIC ,prod.atc3_des_c +# MAGIC ,prod.atc4_cod +# MAGIC ,prod.atc4_des +# MAGIC ,prod.atc4_des_c +# MAGIC ,prod.bio_desc +# MAGIC ,right(concat('00000',nvl(prod.cmps_cod,0 )),6) cmps_cod +# MAGIC ,prod.cmps_des +# MAGIC ,prod.cmps_des_c +# MAGIC ,prod.corp_cod +# MAGIC ,prod.corp_des +# MAGIC ,prod.corp_des_c +# MAGIC ,prod.edl_desc +# MAGIC ,prod.eth_otc_desc +# MAGIC ,prod.gene_orig_desc +# MAGIC ,prod.gqce_desc +# MAGIC ,prod.manu_cod +# MAGIC ,prod.manu_des +# MAGIC ,prod.manu_des_c +# MAGIC ,prod.mnfl_cod +# MAGIC ,prod.mnfl_des +# MAGIC ,prod.nrdl_desc +# MAGIC ,prod.pack_des +# MAGIC ,prod.stgh_des +# MAGIC ,prod.pack_lch +# MAGIC ,prod.paed_desc +# MAGIC ,prod.prod_des +# MAGIC ,prod.prod_des_c +# MAGIC ,prod.tcm_desc +# MAGIC ,prod.vbp_desc +# MAGIC ,prod.unit +# MAGIC ,prod.counting_unit +# MAGIC ,prod.dosage_unit +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,'Non AZ Retail Related Market' as market +# MAGIC ,tmp3.bu +# MAGIC ,nvl(tmp3.extend_market_ratio,1) as extend_market_ratio +# MAGIC ,IF(PROD.corp_des_c in('阿斯利康制药集团') ,'Y','N') is_az +# MAGIC from tmp_pack_property prod +# MAGIC left join tmp3 on prod.product_id = tmp3.product_id +# MAGIC LEFT JOIN tmp_pack_additional_attribute MOLE +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC ON prod.new_iqvia_pack_code = MOLE.new_pack_code +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC where tmp3.product_id is null + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.1 generate mapping table +# MAGIC -- 1.1.3 获取market信息,产品重新归属 +# MAGIC -- 1.1.3.2 对配置表的pack 对应公司、分子式 根据 dwd_gnd_tbl_corp_change 表进行产品重新归属 +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_pack_property_corp +# MAGIC select distinct a.iqvia_pack_code +# MAGIC ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod +# MAGIC ,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des +# MAGIC ,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c +# MAGIC ,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod +# MAGIC ,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des +# MAGIC ,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c +# MAGIC from ( +# MAGIC select +# MAGIC DISTINCT +# MAGIC iqvia_pack_code, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC right(concat('000000',manu_cod),6 ) manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC prod_cod +# MAGIC from tmp.tmp_zk_retail_pack_property +# MAGIC ) a +# MAGIC left join ( +# MAGIC select +# MAGIC ---------------------------------------------- +# MAGIC -- format prod_cod +# MAGIC case when length(prod_cod) < 9 then right(concat('000000000',prod_cod),9) else prod_cod end as prod_cod, +# MAGIC ---------------------------------------------- +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC right(concat('000000',manu_cod),6 ) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change where pack_cod is null +# MAGIC ) b on a.prod_cod = b.prod_cod +# MAGIC left join ( +# MAGIC select +# MAGIC ---------------------------------------------- +# MAGIC -- format pack_cod +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' then right(concat('000000000000',trim(pack_cod)),12) else trim(pack_cod) end as pack_cod, +# MAGIC ---------------------------------------------- +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC right(concat('000000',manu_cod),6 ) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change +# MAGIC where pack_cod is not null +# MAGIC ) c on a.iqvia_pack_code = c.pack_cod +# MAGIC left join ( +# MAGIC select distinct corp_cod,corp_des_c +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ) d on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod +# MAGIC Left join ( +# MAGIC select distinct right(concat('000000',manu_cod),6 ) manu_cod,manu_des,manu_des_c +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ) e On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.1 generate mapping table +# MAGIC -- 1.1.4 update special case 'CV-其他美托洛尔' +# MAGIC -- “酒石酸美托洛尔”和“琥珀酸美托洛尔”以及部分others分子式标准名都为“美托洛尔” +# MAGIC -- 这里需要根据市场把“酒石酸美托洛尔”以及这部分others区分出来,不能应用“琥珀酸美托洛尔”即level_molecule为“美托洛尔”的拆分比例 +# MAGIC -- 区分方式为取market为非“Metoprolol Succinate Market”即非“酒石酸美托洛尔市场”的pack_code +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC UPDATE tmp.tmp_retail_pack_mapping +# MAGIC SET +# MAGIC level_molecule = '其他美托洛尔', +# MAGIC brand_flag = 3 +# MAGIC where level_ta = 'CV' +# MAGIC and level_market = '高血压用药' +# MAGIC and level_molecule = '美托洛尔' +# MAGIC and pack_code not in ( +# MAGIC select distinct iqvia_pack_code +# MAGIC from tmp.tmp_zk_retail_pack_property +# MAGIC where market = 'Metoprolol Succinate Market' +# MAGIC ) + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.2 update the pack data extra column in tmp.tmp_retail_pack_rawdata when pack data has mapping +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC merge into tmp.tmp_retail_pack_rawdata a +# MAGIC using( +# MAGIC select * from tmp.tmp_retail_pack_mapping +# MAGIC ) as b +# MAGIC on a.product_id = b.product_id +# MAGIC and a.level_ta = b.level_ta +# MAGIC and a.level_market = b.level_market +# MAGIC when matched then +# MAGIC update set +# MAGIC a.pack_code = b.pack_code, +# MAGIC a.molecule_code = b.molecule_code, +# MAGIC a.molecule_desc = b.molecule_desc, +# MAGIC a.product_code = b.product_code, +# MAGIC a.product_desc = b.product_desc, +# MAGIC a.level_molecule = b.level_molecule, +# MAGIC a.level_brand = b.level_brand, +# MAGIC a.brand_flag = b.brand_flag + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.3 update the pack data extra column in tmp.tmp_retail_pack_rawdata when pack data without mapping +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_pack_property as ( +# MAGIC --------------------------------------------------------------- +# MAGIC -- 以数字开头的iqvia_pack_code调整为12位(以字母开头的不变),不足位数补0 +# MAGIC -- iqvia_prod_code调整为9位,不足位数补0 +# MAGIC select +# MAGIC case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(iqvia_pack_code)),12) else trim(iqvia_pack_code) end as iqvia_pack_code, +# MAGIC case when length(iqvia_prod_code) < 9 then right(concat('000000000',iqvia_prod_code),9) else iqvia_prod_code end as iqvia_prod_code, +# MAGIC product_id, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC corp_cod, +# MAGIC app1_cod, +# MAGIC app2_cod, +# MAGIC app3_cod +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ), tmp_b2c_label_total as ( +# MAGIC select +# MAGIC case when length(IQVIA_PROD_CODE) < 9 then right(concat('000000000',IQVIA_PROD_CODE),9) else IQVIA_PROD_CODE end as IQVIA_PROD_CODE, +# MAGIC ZK_Prod_C, +# MAGIC APP1_COD, +# MAGIC APP2_COD, +# MAGIC APP3_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total +# MAGIC --------------------------------------------------------------- +# MAGIC ), tmp_suffix_brand as ( +# MAGIC select distinct split(brand,'-')[0] +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where brand like '%-%' +# MAGIC ), tmp_mapping as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.product_id as product_id, +# MAGIC a.iqvia_pack_code as pack_code, +# MAGIC a.cmps_des as molecule_code, +# MAGIC a.cmps_des_c as molecule_name, +# MAGIC ifnull(a.prod_des, concat(a.cmps_des,'_OTHER_PROD')) as product_code, +# MAGIC ifnull(a.prod_des_c, concat(a.cmps_des_c,'_OTHER_PROD')) as product_name +# MAGIC from tmp_pack_property a +# MAGIC where a.prod_des_c not in (select * from tmp_suffix_brand) +# MAGIC or a.prod_des_c is null +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC a.product_id as product_id, +# MAGIC a.iqvia_pack_code as pack_code, +# MAGIC a.cmps_des as molecule_code, +# MAGIC a.cmps_des_c as molecule_name, +# MAGIC a.prod_des as product_code, +# MAGIC ifnull(b.ZK_Prod_C, a.prod_des_c) as product_name +# MAGIC from tmp_pack_property a +# MAGIC left join tmp_b2c_label_total b +# MAGIC on a.iqvia_prod_code = b.IQVIA_PROD_CODE +# MAGIC and a.app1_cod = b.APP1_COD +# MAGIC and a.app2_cod = b.APP2_COD +# MAGIC and a.app3_cod = b.APP3_COD +# MAGIC where a.prod_des_c in (select * from tmp_suffix_brand) +# MAGIC ) +# MAGIC +# MAGIC merge into tmp.tmp_retail_pack_rawdata a +# MAGIC using( +# MAGIC select * from tmp_mapping +# MAGIC ) as b +# MAGIC on a.product_id = b.product_id +# MAGIC and a.pack_code is null +# MAGIC when matched then +# MAGIC update set +# MAGIC a.pack_code = b.pack_code, +# MAGIC a.molecule_code = b.molecule_code, +# MAGIC a.molecule_desc = b.molecule_name, +# MAGIC a.product_code = b.product_code, +# MAGIC a.product_desc = b.product_name, +# MAGIC a.brand_flag = 3 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.4 update the pack data brand flag to '1' which pack has regional data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC quarter, +# MAGIC product_id, +# MAGIC pack_code +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC where zk_regin <> '全国' +# MAGIC ) +# MAGIC +# MAGIC merge into tmp.tmp_retail_pack_rawdata a +# MAGIC using( +# MAGIC select * from tmp_has_regional_data +# MAGIC ) as b +# MAGIC on a.quarter = b.quarter +# MAGIC and a.product_id = b.product_id +# MAGIC and a.pack_code = b.pack_code +# MAGIC when matched then +# MAGIC update set +# MAGIC a.brand_flag = 1 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: generate product_id&level relationship mapping table +# MAGIC -- 1.5 delete non GI data +# MAGIC -- “TA=GI”的数据,只取market为'Antacid anti GI swelling agent+PPI Oral'的数 +# MAGIC -- 非“TA=GI“的数据,无限制 +# MAGIC -- 此处筛选并移除TA为GI,但并未在此市场出现的数据 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC delete from tmp.tmp_retail_pack_rawdata a +# MAGIC where a.level_ta = 'GI' +# MAGIC and a.pack_code not in ( +# MAGIC select distinct iqvia_pack_code +# MAGIC from tmp.tmp_zk_retail_pack_property +# MAGIC where market = 'Antacid anti GI swelling agent+PPI Oral' +# MAGIC ) + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: split regional data by brand ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: split regional data by brand ratio when there is no regional data and there is a brand ratio +# MAGIC -- only split the pack data with brand ratio and without regional pack data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC quarter, +# MAGIC product_id +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC where zk_regin <> '全国' +# MAGIC ), tmp_has_brand_ratio as ( +# MAGIC select +# MAGIC distinct +# MAGIC b.product_id +# MAGIC from tmp.tmp_retail_level_brand a +# MAGIC inner join tmp.tmp_retail_pack_mapping b +# MAGIC on a.ta = b.level_ta +# MAGIC and a.market = b.level_market +# MAGIC and a.molecule = b.level_molecule +# MAGIC and a.brand = b.level_brand +# MAGIC ), tmp_pack_rawdata as ( +# MAGIC select * +# MAGIC from tmp.tmp_retail_pack_rawdata a +# MAGIC where not exists( +# MAGIC select b.quarter,b.product_id from tmp_has_regional_data b +# MAGIC where a.quarter = b.quarter +# MAGIC and a.product_id = b.product_id +# MAGIC ) and exists( +# MAGIC select c.product_id from tmp_has_brand_ratio c +# MAGIC where a.product_id = c.product_id +# MAGIC ) +# MAGIC ) +# MAGIC ----------------------------- append split regional data ---------------------------- +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC c.product_id, +# MAGIC c.zk_product_id, +# MAGIC a.province_city, +# MAGIC c.zk_rx_otc, +# MAGIC c.zk_medicine_type, +# MAGIC c.zk_medicine_tier1, +# MAGIC c.zk_medicine_tier2, +# MAGIC c.zk_medicine_tier3, +# MAGIC c.zk_medicine_tier4, +# MAGIC c.zk_common_name, +# MAGIC c.zk_dosage_form, +# MAGIC c.zk_user_type, +# MAGIC c.zk_category_name, +# MAGIC c.zk_product_name, +# MAGIC c.zk_brand_name, +# MAGIC c.zk_manu_des, +# MAGIC c.zk_corp_des, +# MAGIC c.zk_pack_des, +# MAGIC c.month, +# MAGIC c.quarter, +# MAGIC c.price, +# MAGIC round(c.sales_unit * a.ratio_vol ,10) as sales_unit, +# MAGIC round(c.sales_value * a.ratio_val ,10) as sales_value, +# MAGIC c.digital_spread_rate, +# MAGIC c.weighted_spread_rate, +# MAGIC c.counting_unit, +# MAGIC c.pack_code, +# MAGIC c.molecule_code, +# MAGIC c.molecule_desc, +# MAGIC c.product_code, +# MAGIC c.product_desc, +# MAGIC c.level_ta, +# MAGIC c.level_market, +# MAGIC c.level_molecule, +# MAGIC c.level_brand, +# MAGIC a.ratio_val, +# MAGIC a.ratio_vol, +# MAGIC 3 as data_flag, +# MAGIC b.brand_flag +# MAGIC from tmp.tmp_retail_level_brand a +# MAGIC inner join tmp.tmp_retail_pack_mapping b +# MAGIC on a.ta = b.level_ta +# MAGIC and a.market = b.level_market +# MAGIC and a.molecule = b.level_molecule +# MAGIC and a.brand = b.level_brand +# MAGIC inner join tmp_pack_rawdata c +# MAGIC on c.product_id = b.product_id +# MAGIC and c.quarter = a.quarter +# MAGIC where a.province_city <> '全国' +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-3: substract ROC data + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: substract ROC data +# MAGIC -- if there is regional pack data or splited regional pack data, ROC = '全国' - 'sum regional data' +# MAGIC -- if there is not regional pack data, ROC = '全国' +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_area_group as ( +# MAGIC select +# MAGIC product_id, +# MAGIC quarter, +# MAGIC month, +# MAGIC sum(sales_unit) as sales_unit, +# MAGIC sum(sales_value) as sales_value +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC where zk_regin <> '全国' +# MAGIC group by product_id,quarter,month +# MAGIC ), tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC quarter, +# MAGIC product_id +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC where zk_regin <> '全国' +# MAGIC and data_flag = 0 +# MAGIC ) +# MAGIC +# MAGIC ----------------------------- append ROC data ------------------------------------------ +# MAGIC insert into table tmp.tmp_retail_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC a.product_id, +# MAGIC a.zk_product_id, +# MAGIC 'ROC', +# MAGIC a.zk_rx_otc, +# MAGIC a.zk_medicine_type, +# MAGIC a.zk_medicine_tier1, +# MAGIC a.zk_medicine_tier2, +# MAGIC a.zk_medicine_tier3, +# MAGIC a.zk_medicine_tier4, +# MAGIC a.zk_common_name, +# MAGIC a.zk_dosage_form, +# MAGIC a.zk_user_type, +# MAGIC a.zk_category_name, +# MAGIC a.zk_product_name, +# MAGIC a.zk_brand_name, +# MAGIC a.zk_manu_des, +# MAGIC a.zk_corp_des, +# MAGIC a.zk_pack_des, +# MAGIC a.month, +# MAGIC a.quarter, +# MAGIC a.price, +# MAGIC a.sales_unit - ifnull(b.sales_unit,0) as sales_unit, +# MAGIC a.sales_value - ifnull(b.sales_value,0) as sales_value, +# MAGIC a.digital_spread_rate, +# MAGIC a.weighted_spread_rate, +# MAGIC a.counting_unit, +# MAGIC a.pack_code, +# MAGIC a.molecule_code, +# MAGIC a.molecule_desc, +# MAGIC a.product_code, +# MAGIC a.product_desc, +# MAGIC a.level_ta, +# MAGIC a.level_market, +# MAGIC a.level_molecule, +# MAGIC a.level_brand, +# MAGIC a.ratio_val, +# MAGIC a.ratio_vol, +# MAGIC ------------------------------------------------------------------------------- +# MAGIC -- 有省份pack的数(包括无品牌数据的数)计算出来的ROC所对应的pack_flag,也需要是1-原始值,不能是2-拆分的值 +# MAGIC -- 所以这里针对这类有省份数据的ROC数据,data_flag赋值为0-原始值,其他的仍为1-倒减值 +# MAGIC case when c.product_id is not null then 0 else 1 end as data_flag, +# MAGIC ------------------------------------------------------------------------------- +# MAGIC a.brand_flag +# MAGIC from tmp.tmp_retail_pack_rawdata a +# MAGIC inner join tmp_area_group b +# MAGIC on a.product_id = b.product_id +# MAGIC and a.quarter = b.quarter +# MAGIC and nvl(a.month,'') = nvl(b.month,'') +# MAGIC left join tmp_has_regional_data c +# MAGIC on a.quarter = c.quarter +# MAGIC and a.product_id = c.product_id +# MAGIC where a.zk_regin = '全国' + +# COMMAND ---------- + +############################################################END############################################################## \ No newline at end of file diff --git a/Retail/04 map_to_dws_table.py b/Retail/04 map_to_dws_table.py new file mode 100644 index 0000000..ee7751a --- /dev/null +++ b/Retail/04 map_to_dws_table.py @@ -0,0 +1,209 @@ +# Databricks notebook source +############################################################START############################################################## +### STEP-1: insert splited pack data into tmp final table: tmp_retail_final_sales + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: insert splited pack data into tmp final table +# MAGIC -- insert into tmp_retail_final_sales +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_pack as ( +# MAGIC select +# MAGIC ------------------------------------------------------ +# MAGIC -- 有月度数据使用月度数据,无月度数据用季度数据去转 +# MAGIC nvl( +# MAGIC a.month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(a.quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(a.quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(a.quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(a.quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(a.quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) as YYYYMM, +# MAGIC ------------------------------------------------------ +# MAGIC a.pack_code as iqvia_pack_code, +# MAGIC a.product_id as zk_product_id, +# MAGIC case when a.product_desc <> 'others' then a.product_desc else null end as prod_des_c, +# MAGIC case when a.product_desc <> 'others' then a.product_desc else concat('Others_', a.molecule_desc) end as PROD_MAPPING, +# MAGIC a.zk_regin as province_city, +# MAGIC a.level_market as market, +# MAGIC a.sales_value, +# MAGIC a.sales_unit, +# MAGIC ------------------------------------------------------ +# MAGIC -- counting_unit取值逻辑: +# MAGIC -- 不能直接取原始pack文件表中的值,改为取pack_property表中counting_unit / unit的值 +# MAGIC a.sales_unit * (b.counting_unit/ coalesce(b.unit,1)) as counting_unit, +# MAGIC ------------------------------------------------------ +# MAGIC case when data_flag = 0 then 1 else 2 end as pack_flag, +# MAGIC case when brand_flag = 1 then 1 else 2 end as brand_flag +# MAGIC from tmp.tmp_retail_pack_rawdata a +# MAGIC left join dwd.dwd_gnd_ext_retail_pack_property b +# MAGIC on a.product_id = b.product_id +# MAGIC ), tmp_has_roc as ( +# MAGIC select +# MAGIC product_id, +# MAGIC quarter, +# MAGIC ------------------------------------------------------ +# MAGIC -- 有月度数据使用月度数据,无月度数据用季度数据去转 +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) as month, +# MAGIC ------------------------------------------------------ +# MAGIC pack_code +# MAGIC from tmp.tmp_retail_pack_rawdata +# MAGIC where zk_regin = 'ROC' +# MAGIC ), tmp_pack_this_year_with_roc as ( +# MAGIC select +# MAGIC * +# MAGIC from tmp_pack a +# MAGIC where exists( +# MAGIC select * from tmp_has_roc b +# MAGIC where a.YYYYMM = b.month +# MAGIC and a.iqvia_pack_code = b.pack_code +# MAGIC and a.zk_product_id = b.product_id +# MAGIC ) and a.province_city <> '全国' +# MAGIC ), tmp_pack_next_year_with_roc as ( +# MAGIC select +# MAGIC cast(YYYYMM + 100 as int) as YYYYMM, +# MAGIC iqvia_pack_code, +# MAGIC zk_product_id, +# MAGIC prod_des_c, +# MAGIC PROD_MAPPING, +# MAGIC province_city, +# MAGIC market, +# MAGIC sales_value as sales_value_ly, +# MAGIC sales_unit as sales_unit_ly, +# MAGIC counting_unit as counting_unit_ly, +# MAGIC pack_flag, +# MAGIC brand_flag +# MAGIC from tmp_pack a +# MAGIC where YYYYMM + 100 <= (select max(YYYYMM) from tmp_pack) +# MAGIC and exists( +# MAGIC select * from tmp_has_roc b +# MAGIC where a.YYYYMM = b.month +# MAGIC and a.iqvia_pack_code = b.pack_code +# MAGIC and a.zk_product_id = b.product_id +# MAGIC ) and a.province_city <> '全国' +# MAGIC +# MAGIC ), tmp_pack_this_year_without_roc as ( +# MAGIC select +# MAGIC * +# MAGIC from tmp_pack a +# MAGIC where not exists( +# MAGIC select * from tmp_has_roc b +# MAGIC where a.YYYYMM = b.month +# MAGIC and a.iqvia_pack_code = b.pack_code +# MAGIC and a.zk_product_id = b.product_id +# MAGIC ) +# MAGIC ), tmp_pack_next_year_without_roc as ( +# MAGIC select +# MAGIC cast(YYYYMM + 100 as int) as YYYYMM, +# MAGIC iqvia_pack_code, +# MAGIC zk_product_id, +# MAGIC prod_des_c, +# MAGIC PROD_MAPPING, +# MAGIC province_city, +# MAGIC market, +# MAGIC sales_value as sales_value_ly, +# MAGIC sales_unit as sales_unit_ly, +# MAGIC counting_unit as counting_unit_ly, +# MAGIC pack_flag, +# MAGIC brand_flag +# MAGIC from tmp_pack a +# MAGIC where YYYYMM + 100 <= (select max(YYYYMM) from tmp_pack) +# MAGIC and not exists( +# MAGIC select * from tmp_has_roc b +# MAGIC where a.YYYYMM = b.month +# MAGIC and a.iqvia_pack_code = b.pack_code +# MAGIC and a.zk_product_id = b.product_id +# MAGIC ) +# MAGIC ), tmp_final_sales as ( +# MAGIC select +# MAGIC ifnull(a.yyyymm, b.yyyymm) as yyyymm, +# MAGIC ifnull(a.iqvia_pack_code, b.iqvia_pack_code) as iqvia_pack_code, +# MAGIC ifnull(a.zk_product_id, b.zk_product_id) as zk_product_id, +# MAGIC ifnull(a.prod_des_c, b.prod_des_c) as prod_des_c, +# MAGIC ifnull(a.PROD_MAPPING, b.PROD_MAPPING) as PROD_MAPPING, +# MAGIC ifnull(a.province_city, b.province_city) as province_city, +# MAGIC ifnull(a.market, b.market) as market, +# MAGIC ifnull(a.sales_value, 0) as sales_value, +# MAGIC ifnull(a.sales_unit, 0) as sales_unit, +# MAGIC ifnull(a.counting_unit, 0) as counting_unit, +# MAGIC ifnull(a.pack_flag, b.pack_flag) as pack_flag, +# MAGIC ifnull(a.brand_flag,b.brand_flag ) as brand_flag, +# MAGIC ifnull(b.sales_value_ly, 0) as sales_value_ly, +# MAGIC ifnull(b.sales_unit_ly, 0) as sales_unit_ly, +# MAGIC ifnull(b.counting_unit_ly, 0) as counting_unit_ly +# MAGIC from tmp_pack_this_year_with_roc a +# MAGIC full outer join tmp_pack_next_year_with_roc b +# MAGIC on a.YYYYMM = b.YYYYMM +# MAGIC and a.iqvia_pack_code = b.iqvia_pack_code +# MAGIC and a.zk_product_id = b.zk_product_id +# MAGIC and a.province_city = b.province_city +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC ifnull(c.yyyymm, d.yyyymm) as yyyymm, +# MAGIC ifnull(c.iqvia_pack_code, d.iqvia_pack_code) as iqvia_pack_code, +# MAGIC ifnull(c.zk_product_id, d.zk_product_id) as zk_product_id, +# MAGIC ifnull(c.prod_des_c, d.prod_des_c) as prod_des_c, +# MAGIC ifnull(c.PROD_MAPPING, d.PROD_MAPPING) as PROD_MAPPING, +# MAGIC 'ROC' as province_city, +# MAGIC ifnull(c.market, d.market) as market, +# MAGIC ifnull(c.sales_value, 0) as sales_value, +# MAGIC ifnull(c.sales_unit, 0) as sales_unit, +# MAGIC ifnull(c.counting_unit, 0) as counting_unit, +# MAGIC --ifnull(c.pack_flag, d.pack_flag) as pack_flag, +# MAGIC 2 as pack_flag, -- 此类没有拆分比例,且pack只有全国的数,pack_flag固定为2 +# MAGIC ifnull(c.brand_flag,d.brand_flag ) as brand_flag, +# MAGIC ifnull(d.sales_value_ly, 0) as sales_value_ly, +# MAGIC ifnull(d.sales_unit_ly, 0) as sales_unit_ly, +# MAGIC ifnull(d.counting_unit_ly, 0) as counting_unit_ly +# MAGIC from tmp_pack_this_year_without_roc c +# MAGIC full outer join tmp_pack_next_year_without_roc d +# MAGIC on c.YYYYMM = d.YYYYMM +# MAGIC and c.iqvia_pack_code = d.iqvia_pack_code +# MAGIC and c.zk_product_id = d.zk_product_id +# MAGIC and c.province_city = d.province_city +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table tmp.tmp_retail_final_sales +# MAGIC +# MAGIC select +# MAGIC yyyymm, +# MAGIC iqvia_pack_code, +# MAGIC zk_product_id, +# MAGIC prod_des_c, +# MAGIC PROD_MAPPING, +# MAGIC province_city, +# MAGIC market, +# MAGIC sales_value, +# MAGIC sales_value_ly, +# MAGIC sales_unit, +# MAGIC sales_unit_ly, +# MAGIC counting_unit, +# MAGIC counting_unit_ly, +# MAGIC pack_flag, +# MAGIC brand_flag +# MAGIC from tmp_final_sales +# MAGIC order by yyyymm + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/05 load_dtp_temp_data.py b/Retail/05 load_dtp_temp_data.py new file mode 100644 index 0000000..a86f8a3 --- /dev/null +++ b/Retail/05 load_dtp_temp_data.py @@ -0,0 +1,158 @@ +# Databricks notebook source +# MAGIC %sql +# MAGIC -- CREATE or REPLACE TABLE tmp.tmp_retail_dtp_pack_rawdata ( +# MAGIC -- -- product_id STRING, +# MAGIC -- iqvia_pack_code string, +# MAGIC -- -- region_type STRING, +# MAGIC -- year STRING, +# MAGIC -- time STRING, +# MAGIC -- -- higher_level_region STRING, +# MAGIC -- region STRING, +# MAGIC -- -- prescription_nature STRING, +# MAGIC -- -- medicine_attribute STRING, +# MAGIC -- -- dosage_form STRING, +# MAGIC -- -- object STRING, +# MAGIC -- -- zk_classify1 STRING, +# MAGIC -- -- zk_classify2 STRING, +# MAGIC -- -- zk_classify3 STRING, +# MAGIC -- target_points STRING, +# MAGIC -- -- common_name STRING, +# MAGIC -- -- brand_name STRING, +# MAGIC -- -- product_name STRING, +# MAGIC -- -- category_name STRING, +# MAGIC -- -- pack_des STRING, +# MAGIC -- counting_unit DECIMAL(20,8), +# MAGIC -- -- factory STRING, +# MAGIC -- -- corp_des STRING, +# MAGIC -- average_price DECIMAL(20,8), +# MAGIC -- sales_amount DECIMAL(20,8), +# MAGIC -- sales_volume DECIMAL(20,8), +# MAGIC -- counting_units_obversion DECIMAL(20,8), +# MAGIC -- pack_code STRING, +# MAGIC -- molecule_code STRING, +# MAGIC -- molecule_desc STRING, +# MAGIC -- product_code STRING, +# MAGIC -- product_desc STRING, +# MAGIC -- level_ta STRING, +# MAGIC -- level_market STRING, +# MAGIC -- level_molecule STRING, +# MAGIC -- level_brand STRING, +# MAGIC -- ratio_val DECIMAL(20,10), +# MAGIC -- ratio_vol DECIMAL(20,10), +# MAGIC -- data_flag INT, +# MAGIC -- brand_flag INT) +# MAGIC -- USING delta +# MAGIC -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_retail_dtp_pack_rawdata' +# MAGIC -- ; + +# COMMAND ---------- + +### constant +LEVEL_TA_ONC = 'ONC' +LEVEL_MARKET_EGFR_TKI = 'EGFR TKI' + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-2: load rawdata to tmp table + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: load rawdata to tmp table + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.1 load brand data to tmp_retail_dtp_brand_rawdata +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_dtp_brand_rawdata +# MAGIC +# MAGIC select +# MAGIC type, +# MAGIC 'ONC' as ta, +# MAGIC market, +# MAGIC zk_brand_category, +# MAGIC zk_common_name, +# MAGIC zk_manu_des, +# MAGIC rc_name_en, +# MAGIC province_city, +# MAGIC yyyymm, +# MAGIC ytd, +# MAGIC sales_value, +# MAGIC sales_volume, +# MAGIC price, +# MAGIC pdot_counting_unit +# MAGIC from dwd.dwd_gnd_ext_dtp_zk_brand +# MAGIC where ranked_by = 'value' +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load rawdata to tmp table +# MAGIC -- 1.2 load brand data to tmp_retail_dtp_pack_rawdata +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_dtp_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC -- dtp_raw_data.product_id, +# MAGIC dtp_pack_data.iqvia_pack_code, +# MAGIC -- dtp_raw_data.region_type, +# MAGIC dtp_raw_data.year, +# MAGIC dtp_raw_data.time, +# MAGIC -- dtp_raw_data.higher_level_region, +# MAGIC dtp_raw_data.region, +# MAGIC -- dtp_raw_data.prescription_nature, +# MAGIC -- dtp_raw_data.medicine_attribute, +# MAGIC -- dtp_raw_data.dosage_form, +# MAGIC -- dtp_raw_data.object, +# MAGIC -- dtp_raw_data.zk_classify1, +# MAGIC -- dtp_raw_data.zk_classify2, +# MAGIC -- dtp_raw_data.zk_classify3, +# MAGIC dtp_raw_data.target_points, +# MAGIC -- dtp_raw_data.common_name, +# MAGIC -- dtp_raw_data.brand_name, +# MAGIC -- dtp_raw_data.product_name, +# MAGIC -- dtp_raw_data.category_name, +# MAGIC -------------------------* hard_code *------------------------- +# MAGIC -- 针对pack_des这个字段,pack原始表使用的是'*',但手工表pack_properity使用的是'x' +# MAGIC -- 而pack_des字段与关联出pack_code有关,缺少此字段会导致关联失败,所以要手动消除差异 +# MAGIC -- replace(dtp_raw_data.pack_des,'*','x'), +# MAGIC -------------------------* hard_code *------------------------- +# MAGIC max(dtp_raw_data.counting_unit) counting_unit, +# MAGIC -- dtp_raw_data.factory, +# MAGIC -- dtp_raw_data.corp_des, +# MAGIC max(dtp_raw_data.average_price) average_price, +# MAGIC sum(dtp_raw_data.sales_amount) sales_amount, +# MAGIC sum(dtp_raw_data.sales_volume) sales_volume, +# MAGIC max(dtp_raw_data.counting_units_obversion) counting_units_obversion, +# MAGIC null as pack_code, +# MAGIC null as molecule_code, +# MAGIC null as molecule_desc, +# MAGIC null as product_code, +# MAGIC null as product_desc, +# MAGIC 'ONC' as level_ta, +# MAGIC null as level_market, --- 此pack原始表文件中存在多个市场,后续通过关联更新 +# MAGIC null as level_molecule, +# MAGIC null as level_brand, +# MAGIC null as ratio_val, +# MAGIC null as ratio_vol, +# MAGIC 0 as data_flag, +# MAGIC null as brand_flag +# MAGIC from dwd.dwd_gnd_ext_retail_dtp_datasource as dtp_raw_data +# MAGIC left join dwd.dwd_gnd_ext_dtp_pack_property as dtp_pack_data +# MAGIC on dtp_raw_data.product_id = dtp_pack_data.product_id +# MAGIC group by +# MAGIC dtp_pack_data.iqvia_pack_code, +# MAGIC dtp_raw_data.year, +# MAGIC dtp_raw_data.time, +# MAGIC dtp_raw_data.region, +# MAGIC dtp_raw_data.target_points + +# COMMAND ---------- + +############################################################END############################################################## \ No newline at end of file diff --git a/Retail/06 split_dtp_brand_data.py b/Retail/06 split_dtp_brand_data.py new file mode 100644 index 0000000..4a7d599 --- /dev/null +++ b/Retail/06 split_dtp_brand_data.py @@ -0,0 +1,421 @@ +# Databricks notebook source +### constant +DATA_TYPE_MARKET = 'MARKET' +DATA_TYPE_MOLECULE = 'MOLECULE' +DATA_TYPE_BRAND = 'BRAND' +DATA_TYPE_MULTI_MARKET = 'MULTI_MARKET' +DATA_TYPE_MULTI_MOLECULE = 'MULTI_MOLECULE' +DATA_TYPE_MULTI_BRAND = 'MULTI_BRAND' +DATA_TYPE_DUPLICATE = 'DUPLICATE' +DATA_TYPE_HEDGE_TA = 'HEDGE_TA' +DATA_TYPE_HEDGE_MARKET = 'HEDGE_MARKET' +DATA_TYPE_HEDGE_MOLECULE = 'HEDGE_MOLECULE' +DATA_TYPE_HEDGE_BRAND = 'HEDGE_BRAND' + +DATA_FLAG_RAW = 0 +DATA_FLAG_SUB = 1 +DATA_FLAG_ADD = 2 +DATA_FLAG_RATIO = 3 +DATA_FLAG_AVG = 4 +DATA_FLAG_HEDGE = 5 + +DATA_OTHER_TA = 'OTHER_TA' +DATA_OTHER_MARKET = 'OTHER_MARKET' +DATA_OTHER_MOLECULE = 'OTHER_MOLECULE' +DATA_OTHER_BRAND = 'OTHER_BRAND' +DATA_AREA_TYPE_ROC = 'ROC' +DATA_LABEL_AREA_ALL = '全国' + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: load data to tmp table +### STEP-2: substract data from level market to brand +### STEP-3: accumulate data from level brand to market + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: load data to tmp table + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.1 load LEVEL_MARKET data to tmp.tmp_retail_dtp_level_market +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_dtp_level_market +# MAGIC +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_dtp_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'MARKET' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.2 load LEVEL_MOLECULE data to tmp.tmp_retail_dtp_level_molecule +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_dtp_level_molecule +# MAGIC +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC b.level_molecule, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_dtp_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'MOLECULE' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: load data to tmp table +# MAGIC -- 1.3 load LEVEL_BRAND data to tmp.tmp_retail_dtp_level_brand +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_retail_dtp_level_brand +# MAGIC +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.province_city, +# MAGIC b.level_ta, +# MAGIC b.level_market, +# MAGIC b.level_molecule, +# MAGIC b.level_brand, +# MAGIC a.sales_val, +# MAGIC a.sales_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 0 +# MAGIC from tmp.tmp_retail_dtp_brand_rawdata a +# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.brand_category = b.brand +# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '') +# MAGIC where b.level = 'BRAND' + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: substract data from level market to brand + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: substract data from level market to brand +# MAGIC -- 2.1 substract level market data and add 'OTHER_MOLECULE' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_aggregate_market as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_molecule +# MAGIC group by yyyymm, province_city , ta ,market +# MAGIC ),tmp_molecule as ( +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.province_city, +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val, +# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_market a +# MAGIC left join tmp_aggregate_market b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC ) +# MAGIC +# MAGIC -------append OTHER_MOLECULE to tmp.tmp_retail_dtp_level_molecule +# MAGIC insert into tmp.tmp_retail_dtp_level_molecule +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC 'OTHER_MOLECULE', +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 1 +# MAGIC from tmp_molecule +# MAGIC where sales_val > 0 or sales_vol > 0 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: substract data from level market to brand +# MAGIC -- 2.2 substract level molecule data and add 'OTHER_BRAND' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_aggregate_molecule as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_brand +# MAGIC group by yyyymm,province_city ,ta ,market,molecule +# MAGIC ),tmp_brand as ( +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.province_city, +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.molecule, +# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val, +# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_molecule a +# MAGIC left join tmp_aggregate_molecule b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC ) +# MAGIC +# MAGIC -------append OTHER_BRAND to tmp.tmp_retail_dtp_level_brand +# MAGIC insert into tmp.tmp_retail_dtp_level_brand +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC 'OTHER_BRAND', +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC null, +# MAGIC 1 +# MAGIC from tmp_brand +# MAGIC where sales_val > 0 or sales_vol > 0 + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-3: accumulate data from level brand to market + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND' & 'OTHER_MOLECULE' data +# MAGIC -- 3.1.1 accumulate level molecule data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_aggregate_molecule as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_brand +# MAGIC group by yyyymm,province_city ,ta ,market,molecule +# MAGIC ), tmp_append_molecule as ( +# MAGIC select a.* +# MAGIC from tmp_aggregate_molecule a +# MAGIC where not exists ( +# MAGIC select 1 +# MAGIC from tmp.tmp_retail_dtp_level_molecule b +# MAGIC where a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC ) +# MAGIC ) +# MAGIC -------append level molecule data accumulate from level brand +# MAGIC insert into tmp.tmp_retail_dtp_level_molecule +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 2 +# MAGIC from tmp_append_molecule + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data +# MAGIC -- 3.1.2 balance 'OTHER_MOLECULE' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC merge into tmp.tmp_retail_dtp_level_molecule a +# MAGIC using( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_molecule +# MAGIC where data_flag = 2 +# MAGIC group by yyyymm,province_city,ta,market +# MAGIC ) as b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = 'OTHER_MOLECULE' +# MAGIC and a.data_flag = 1 +# MAGIC when matched then +# MAGIC update set +# MAGIC a.sales_val = a.sales_val - b.sales_val, +# MAGIC a.sales_vol = a.sales_vol - b.sales_vol +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data +# MAGIC -- 3.1.3 balance 'OTHER_BRAND' data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC merge into tmp.tmp_retail_dtp_level_brand a +# MAGIC using( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_molecule +# MAGIC where data_flag = 2 +# MAGIC group by yyyymm,province_city,ta,market +# MAGIC ) as b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = 'OTHER_MOLECULE' +# MAGIC and a.brand = 'OTHER_BRAND' +# MAGIC and a.data_flag = 1 +# MAGIC when matched then +# MAGIC update set +# MAGIC a.sales_val = a.sales_val - b.sales_val, +# MAGIC a.sales_vol = a.sales_vol - b.sales_vol + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: accumulate data from level brand to market +# MAGIC -- 3.2 accumulate level market data and balance 'OTHER_MOLECULE' data +# MAGIC -- 3.2.1 accumulate level market data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_aggregate_market as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sum(sales_val) as sales_val, +# MAGIC sum(sales_vol) as sales_vol +# MAGIC from tmp.tmp_retail_dtp_level_molecule +# MAGIC group by yyyymm,province_city ,ta ,market +# MAGIC ), tmp_append_market as ( +# MAGIC select a.* +# MAGIC from tmp_aggregate_market a +# MAGIC where not exists ( +# MAGIC select 1 +# MAGIC from tmp.tmp_retail_dtp_level_market b +# MAGIC where a.yyyymm = b.yyyymm +# MAGIC and a.province_city = b.province_city +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC ) +# MAGIC ) +# MAGIC -------append level market data accumulate from level molecule +# MAGIC insert into tmp.tmp_retail_dtp_level_market +# MAGIC select +# MAGIC yyyymm, +# MAGIC province_city, +# MAGIC ta, +# MAGIC market, +# MAGIC sales_val, +# MAGIC sales_vol, +# MAGIC 2 +# MAGIC from tmp_append_market + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-4: calculate brand ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: calculate brand ratio +# MAGIC -- update total_val&total_vol and ratio_val&ratio_vol +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC merge into tmp.tmp_retail_dtp_level_brand a +# MAGIC using( +# MAGIC select * from tmp.tmp_retail_dtp_level_brand +# MAGIC where province_city = '全国' +# MAGIC ) as b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.molecule = b.molecule +# MAGIC and a.brand = b.brand +# MAGIC when matched then +# MAGIC update set +# MAGIC a.total_val = b.sales_val, +# MAGIC a.total_vol = b.sales_vol, +# MAGIC a.ratio_val = round(a.sales_val/b.sales_val,10), +# MAGIC a.ratio_vol = round(a.sales_vol/b.sales_vol,10) + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/07 split_dtp_pack_data.py b/Retail/07 split_dtp_pack_data.py new file mode 100644 index 0000000..9b342e1 --- /dev/null +++ b/Retail/07 split_dtp_pack_data.py @@ -0,0 +1,1107 @@ +# Databricks notebook source +# MAGIC %sql +# MAGIC -- CREATE OR REPLACE TABLE tmp.tmp_zk_retail_dtp_market ( +# MAGIC -- -- product_id STRING, +# MAGIC -- -- region_type STRING, +# MAGIC -- -- higher_level_region STRING, +# MAGIC -- market STRING, +# MAGIC -- iqvia_pack_code STRING, +# MAGIC -- iqvia_prod_code STRING, +# MAGIC -- iqvia_notes STRING, +# MAGIC -- new_pack_flag STRING, +# MAGIC -- is_exists_chpa STRING, +# MAGIC -- -- prescription_nature STRING, +# MAGIC -- -- common_name STRING, +# MAGIC -- -- dosage_form STRING, +# MAGIC -- -- category_name STRING, +# MAGIC -- -- product_name STRING, +# MAGIC -- -- brand_name STRING, +# MAGIC -- -- zk_corp_des STRING, +# MAGIC -- -- zk_pack_des STRING, +# MAGIC -- -- counting_unit_a STRING, +# MAGIC -- app1_cod STRING, +# MAGIC -- app1_des STRING, +# MAGIC -- app1_des_c STRING, +# MAGIC -- app2_cod STRING, +# MAGIC -- app2_des STRING, +# MAGIC -- app2_des_c STRING, +# MAGIC -- app3_cod STRING, +# MAGIC -- app3_des STRING, +# MAGIC -- app3_des_c STRING, +# MAGIC -- atc1_cod STRING, +# MAGIC -- atc1_des STRING, +# MAGIC -- atc1_des_c STRING, +# MAGIC -- atc2_cod STRING, +# MAGIC -- atc2_des STRING, +# MAGIC -- atc2_des_c STRING, +# MAGIC -- atc3_cod STRING, +# MAGIC -- atc3_des STRING, +# MAGIC -- atc3_des_c STRING, +# MAGIC -- atc4_cod STRING, +# MAGIC -- atc4_des STRING, +# MAGIC -- atc4_des_c STRING, +# MAGIC -- bio_desc STRING, +# MAGIC -- cmps_cod STRING, +# MAGIC -- cmps_des STRING, +# MAGIC -- cmps_des_c STRING, +# MAGIC -- corp_cod STRING, +# MAGIC -- corp_des STRING, +# MAGIC -- corp_des_c STRING, +# MAGIC -- edl_desc STRING, +# MAGIC -- eth_otc_desc STRING, +# MAGIC -- gene_orig_desc STRING, +# MAGIC -- gqce_desc STRING, +# MAGIC -- manu_cod STRING, +# MAGIC -- manu_des STRING, +# MAGIC -- manu_des_c STRING, +# MAGIC -- mnfl_cod STRING, +# MAGIC -- mnfl_des STRING, +# MAGIC -- nrdl_desc STRING, +# MAGIC -- pack_des STRING, +# MAGIC -- stgh_des STRING, +# MAGIC -- pack_lch STRING, +# MAGIC -- paed_desc STRING, +# MAGIC -- prod_des STRING, +# MAGIC -- prod_des_c STRING, +# MAGIC -- tcm_desc STRING, +# MAGIC -- vbp_desc STRING, +# MAGIC -- unit STRING, +# MAGIC -- counting_unit STRING, +# MAGIC -- dosage_unit STRING, +# MAGIC -- NRDL_ENTRY_DATE STRING, +# MAGIC -- bu STRING, +# MAGIC -- Market_Ratio STRING) +# MAGIC -- USING delta +# MAGIC -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_zk_retail_dtp_market' +# MAGIC -- ; + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC -- CREATE OR REPLACE TABLE tmp.tmp_zk_retail_dtp_market_del ( +# MAGIC -- -- product_id STRING, +# MAGIC -- -- region_type STRING, +# MAGIC -- -- higher_level_region STRING, +# MAGIC -- market STRING, +# MAGIC -- iqvia_pack_code STRING, +# MAGIC -- iqvia_prod_code STRING, +# MAGIC -- iqvia_notes STRING, +# MAGIC -- new_pack_flag STRING, +# MAGIC -- is_exists_chpa STRING, +# MAGIC -- -- prescription_nature STRING, +# MAGIC -- -- common_name STRING, +# MAGIC -- -- dosage_form STRING, +# MAGIC -- -- category_name STRING, +# MAGIC -- -- product_name STRING, +# MAGIC -- -- brand_name STRING, +# MAGIC -- -- zk_corp_des STRING, +# MAGIC -- -- zk_pack_des STRING, +# MAGIC -- -- counting_unit_a STRING, +# MAGIC -- app1_cod STRING, +# MAGIC -- app1_des STRING, +# MAGIC -- app1_des_c STRING, +# MAGIC -- app2_cod STRING, +# MAGIC -- app2_des STRING, +# MAGIC -- app2_des_c STRING, +# MAGIC -- app3_cod STRING, +# MAGIC -- app3_des STRING, +# MAGIC -- app3_des_c STRING, +# MAGIC -- atc1_cod STRING, +# MAGIC -- atc1_des STRING, +# MAGIC -- atc1_des_c STRING, +# MAGIC -- atc2_cod STRING, +# MAGIC -- atc2_des STRING, +# MAGIC -- atc2_des_c STRING, +# MAGIC -- atc3_cod STRING, +# MAGIC -- atc3_des STRING, +# MAGIC -- atc3_des_c STRING, +# MAGIC -- atc4_cod STRING, +# MAGIC -- atc4_des STRING, +# MAGIC -- atc4_des_c STRING, +# MAGIC -- bio_desc STRING, +# MAGIC -- cmps_cod STRING, +# MAGIC -- cmps_des STRING, +# MAGIC -- cmps_des_c STRING, +# MAGIC -- corp_cod STRING, +# MAGIC -- corp_des STRING, +# MAGIC -- corp_des_c STRING, +# MAGIC -- edl_desc STRING, +# MAGIC -- eth_otc_desc STRING, +# MAGIC -- gene_orig_desc STRING, +# MAGIC -- gqce_desc STRING, +# MAGIC -- manu_cod STRING, +# MAGIC -- manu_des STRING, +# MAGIC -- manu_des_c STRING, +# MAGIC -- mnfl_cod STRING, +# MAGIC -- mnfl_des STRING, +# MAGIC -- nrdl_desc STRING, +# MAGIC -- pack_des STRING, +# MAGIC -- stgh_des STRING, +# MAGIC -- pack_lch STRING, +# MAGIC -- paed_desc STRING, +# MAGIC -- prod_des STRING, +# MAGIC -- prod_des_c STRING, +# MAGIC -- tcm_desc STRING, +# MAGIC -- vbp_desc STRING, +# MAGIC -- unit STRING, +# MAGIC -- counting_unit STRING, +# MAGIC -- dosage_unit STRING, +# MAGIC -- NRDL_ENTRY_DATE STRING, +# MAGIC -- bu STRING, +# MAGIC -- Market_Ratio STRING) +# MAGIC -- USING delta +# MAGIC -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_zk_retail_dtp_market_del' +# MAGIC -- ; + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC -- CREATE OR REPLACE TABLE tmp.tmp_zk_retail_dtp_market_corp ( +# MAGIC -- -- product_id STRING, +# MAGIC -- -- region_type STRING, +# MAGIC -- -- higher_level_region STRING, +# MAGIC -- market STRING, +# MAGIC -- iqvia_pack_code STRING, +# MAGIC -- iqvia_prod_code STRING, +# MAGIC -- iqvia_notes STRING, +# MAGIC -- new_pack_flag STRING, +# MAGIC -- is_exists_chpa STRING, +# MAGIC -- -- prescription_nature STRING, +# MAGIC -- -- common_name STRING, +# MAGIC -- -- dosage_form STRING, +# MAGIC -- -- category_name STRING, +# MAGIC -- -- product_name STRING, +# MAGIC -- -- brand_name STRING, +# MAGIC -- -- zk_corp_des STRING, +# MAGIC -- -- zk_pack_des STRING, +# MAGIC -- -- counting_unit_a STRING, +# MAGIC -- app1_cod STRING, +# MAGIC -- app1_des STRING, +# MAGIC -- app1_des_c STRING, +# MAGIC -- app2_cod STRING, +# MAGIC -- app2_des STRING, +# MAGIC -- app2_des_c STRING, +# MAGIC -- app3_cod STRING, +# MAGIC -- app3_des STRING, +# MAGIC -- app3_des_c STRING, +# MAGIC -- atc1_cod STRING, +# MAGIC -- atc1_des STRING, +# MAGIC -- atc1_des_c STRING, +# MAGIC -- atc2_cod STRING, +# MAGIC -- atc2_des STRING, +# MAGIC -- atc2_des_c STRING, +# MAGIC -- atc3_cod STRING, +# MAGIC -- atc3_des STRING, +# MAGIC -- atc3_des_c STRING, +# MAGIC -- atc4_cod STRING, +# MAGIC -- atc4_des STRING, +# MAGIC -- atc4_des_c STRING, +# MAGIC -- bio_desc STRING, +# MAGIC -- cmps_cod STRING, +# MAGIC -- cmps_des STRING, +# MAGIC -- cmps_des_c STRING, +# MAGIC -- corp_cod STRING, +# MAGIC -- corp_des STRING, +# MAGIC -- corp_des_c STRING, +# MAGIC -- edl_desc STRING, +# MAGIC -- eth_otc_desc STRING, +# MAGIC -- gene_orig_desc STRING, +# MAGIC -- gqce_desc STRING, +# MAGIC -- manu_cod STRING, +# MAGIC -- manu_des STRING, +# MAGIC -- manu_des_c STRING, +# MAGIC -- mnfl_cod STRING, +# MAGIC -- mnfl_des STRING, +# MAGIC -- nrdl_desc STRING, +# MAGIC -- pack_des STRING, +# MAGIC -- stgh_des STRING, +# MAGIC -- pack_lch STRING, +# MAGIC -- paed_desc STRING, +# MAGIC -- prod_des STRING, +# MAGIC -- prod_des_c STRING, +# MAGIC -- tcm_desc STRING, +# MAGIC -- vbp_desc STRING, +# MAGIC -- unit STRING, +# MAGIC -- counting_unit STRING, +# MAGIC -- dosage_unit STRING, +# MAGIC -- NRDL_ENTRY_DATE STRING, +# MAGIC -- bu STRING, +# MAGIC -- Market_Ratio STRING) +# MAGIC -- USING delta +# MAGIC -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_zk_retail_dtp_market_corp' +# MAGIC -- ; + +# COMMAND ---------- + +### constant +DATA_TYPE_MARKET = 'MARKET' +DATA_TYPE_MOLECULE = 'MOLECULE' +DATA_TYPE_BRAND = 'BRAND' +DATA_TYPE_MULTI_MARKET = 'MULTI_MARKET' +DATA_TYPE_MULTI_MOLECULE = 'MULTI_MOLECULE' +DATA_TYPE_MULTI_BRAND = 'MULTI_BRAND' +DATA_TYPE_DUPLICATE = 'DUPLICATE' +DATA_TYPE_HEDGE_TA = 'HEDGE_TA' +DATA_TYPE_HEDGE_MARKET = 'HEDGE_MARKET' +DATA_TYPE_HEDGE_MOLECULE = 'HEDGE_MOLECULE' +DATA_TYPE_HEDGE_BRAND = 'HEDGE_BRAND' + +DATA_FLAG_RAW = 0 ### final pack_flag = 0 +DATA_FLAG_SUB = 1 ### final pack_flag = 1 +DATA_FLAG_ADD = 2 ### final pack_flag = 1 +DATA_FLAG_RATIO = 3 ### final pack_flag = 1 +DATA_FLAG_AVG = 4 ### final pack_flag = 1 +DATA_FLAG_HEDGE = 5 ### final pack_flag = 1 +BRAND_FLAG_NATIVE = 1 ### final brand_flag = 1 +BRAND_FLAG_CALCULATE = 2 ### final brand_flag = 2 +BRAND_FLAG_NONE = 3 ### final brand_flag = 2 + +DATA_OTHER_TA = 'OTHER_TA' +DATA_OTHER_MARKET = 'OTHER_MARKET' +DATA_OTHER_MOLECULE = 'OTHER_MOLECULE' +DATA_OTHER_BRAND = 'OTHER_BRAND' +DATA_AREA_TYPE_ROC = 'ROC' +DATA_LABEL_AREA_ALL = '全国' + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: dtp 维度表处理 + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: dtp 维度表处理 +### STEP-2: update the pack data extra column +### STEP-3: split regional data by brand ratio when there is no regional data and there is a brand ratio +### STEP-4: substract ROC data + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: dtp 维度表处理 +# MAGIC -- 1.1 先处理 Extend_Market 和 NOT_IN_FLAG 都为空的数据,代表有明确定义得市场 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_dtp_market +# MAGIC select +# MAGIC distinct +# MAGIC -- t1.region_type +# MAGIC -- ,t1.higher_level_region +# MAGIC -- t1.product_id, +# MAGIC t2.market +# MAGIC ,case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) else trim(t1.iqvia_pack_code) end as iqvia_pack_code +# MAGIC ,case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end as iqvia_prod_code +# MAGIC ,t1.iqvia_notes +# MAGIC ,t1.new_pack_flag +# MAGIC ,t1.is_exists_chpa +# MAGIC -- ,t1.prescription_nature +# MAGIC -- ,t1.common_name +# MAGIC -- ,t1.dosage_form +# MAGIC -- ,t1.category_name +# MAGIC -- ,t1.product_name +# MAGIC -- ,t1.brand_name +# MAGIC -- ,t1.zk_corp_des +# MAGIC -- ,t1.zk_pack_des +# MAGIC -- ,t1.counting_unit_a +# MAGIC ,t1.app1_cod +# MAGIC ,t1.app1_des +# MAGIC ,t1.app1_des_c +# MAGIC ,t1.app2_cod +# MAGIC ,t1.app2_des +# MAGIC ,t1.app2_des_c +# MAGIC ,t1.app3_cod +# MAGIC ,t1.app3_des +# MAGIC ,t1.app3_des_c +# MAGIC ,t1.atc1_cod +# MAGIC ,t1.atc1_des +# MAGIC ,t1.atc1_des_c +# MAGIC ,t1.atc2_cod +# MAGIC ,t1.atc2_des +# MAGIC ,t1.atc2_des_c +# MAGIC ,t1.atc3_cod +# MAGIC ,t1.atc3_des +# MAGIC ,t1.atc3_des_c +# MAGIC ,t1.atc4_cod +# MAGIC ,t1.atc4_des +# MAGIC ,t1.atc4_des_c +# MAGIC ,t1.bio_desc +# MAGIC , right(concat('000000', t1.CMPS_COD ),6 ) cmps_cod +# MAGIC ,t1.cmps_des +# MAGIC ,t1.cmps_des_c +# MAGIC ,t1.corp_cod +# MAGIC ,t1.corp_des +# MAGIC ,t1.corp_des_c +# MAGIC ,t1.edl_desc +# MAGIC ,t1.eth_otc_desc +# MAGIC ,t1.gene_orig_desc +# MAGIC ,t1.gqce_desc +# MAGIC ,t1.manu_cod +# MAGIC ,t1.manu_des +# MAGIC ,t1.manu_des_c +# MAGIC ,t1.mnfl_cod +# MAGIC ,t1.mnfl_des +# MAGIC ,t1.nrdl_desc +# MAGIC ,t1.pack_des +# MAGIC ,t1.stgh_des +# MAGIC ,t1.pack_lch +# MAGIC ,t1.paed_desc +# MAGIC ,t1.prod_des +# MAGIC ,t1.prod_des_c +# MAGIC ,t1.tcm_desc +# MAGIC ,t1.vbp_desc +# MAGIC ,t1.unit +# MAGIC ,t1.counting_unit +# MAGIC ,t1.dosage_unit +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio +# MAGIC from dwd.dwd_gnd_ext_dtp_pack_property t1 +# MAGIC LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC ON +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC = +# MAGIC case when length(trim(MOLE.Pack_Code)) < 12 and trim(MOLE.Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(MOLE.Pack_Code)),12) +# MAGIC else trim(MOLE.Pack_Code) +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC 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 +# MAGIC -- on t1.cmps_cod=right(concat('000000', Molecule_Code),6 ) +# MAGIC on t1.ATC1_COD = case when t2.ATC1_Code is null then t1.ATC1_COD else t2.ATC1_Code end +# MAGIC and t1.ATC2_COD = case when t2.ATC2_Code is null then t1.ATC2_COD else t2.ATC2_Code end +# MAGIC and t1.ATC3_COD = case when t2.ATC3_Code is null then t1.ATC3_COD else t2.ATC3_Code end +# MAGIC and t1.ATC4_COD = case when t2.ATC4_Code is null then t1.ATC4_COD else t2.ATC4_Code end +# MAGIC and t1.APP1_COD = case when t2.NFC1_Code is null then t1.APP1_COD else t2.NFC1_Code end +# MAGIC and t1.APP2_COD = case when t2.NFC2_Code is null then t1.APP2_COD else t2.NFC2_Code end +# MAGIC and t1.APP3_COD = case when t2.NFC3_Code is null then t1.APP3_COD else t2.NFC3_Code end +# MAGIC and t1.CORP_COD = case when t2.corporation_code is null then t1.CORP_COD else t2.corporation_code end +# MAGIC and t1.MANU_COD = case when t2.Manufacturer_Code is null then t1.MANU_COD else t2.Manufacturer_Code end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_prod_code +# MAGIC and +# MAGIC case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end +# MAGIC = +# MAGIC case when t2.Product_Code is null +# MAGIC then case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end +# MAGIC else case when length(t2.Product_Code) < 9 then right(concat('000000000',t2.Product_Code),9) else t2.Product_Code end +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC and +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC = +# MAGIC case when t2.Pack_Code is null +# MAGIC then +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC else +# MAGIC case when length(trim(t2.Pack_Code)) < 12 and trim(t2.Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t2.Pack_Code)),12) +# MAGIC else trim(t2.Pack_Code) +# MAGIC end +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC and nvl(t1.STGH_DES,'') = case when t2.Strength is null then nvl(t1.STGH_DES,'') else t2.Strength end +# MAGIC 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 +# MAGIC where t2.market is not null +# MAGIC ; +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: dtp 维度表处理 +# MAGIC -- 1.2 反选规则 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_dtp_market_del +# MAGIC select +# MAGIC distinct +# MAGIC -- t1.region_type +# MAGIC -- ,t1.higher_level_region +# MAGIC -- t1.product_id, +# MAGIC t2.market +# MAGIC ,case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) else trim(t1.iqvia_pack_code) end as iqvia_pack_code +# MAGIC ,case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end as iqvia_prod_code +# MAGIC ,t1.iqvia_notes +# MAGIC ,t1.new_pack_flag +# MAGIC ,t1.is_exists_chpa +# MAGIC -- ,t1.prescription_nature +# MAGIC -- ,t1.common_name +# MAGIC -- ,t1.dosage_form +# MAGIC -- ,t1.category_name +# MAGIC -- ,t1.product_name +# MAGIC -- ,t1.brand_name +# MAGIC -- ,t1.zk_corp_des +# MAGIC -- ,t1.zk_pack_des +# MAGIC -- ,t1.counting_unit_a +# MAGIC ,t1.app1_cod +# MAGIC ,t1.app1_des +# MAGIC ,t1.app1_des_c +# MAGIC ,t1.app2_cod +# MAGIC ,t1.app2_des +# MAGIC ,t1.app2_des_c +# MAGIC ,t1.app3_cod +# MAGIC ,t1.app3_des +# MAGIC ,t1.app3_des_c +# MAGIC ,t1.atc1_cod +# MAGIC ,t1.atc1_des +# MAGIC ,t1.atc1_des_c +# MAGIC ,t1.atc2_cod +# MAGIC ,t1.atc2_des +# MAGIC ,t1.atc2_des_c +# MAGIC ,t1.atc3_cod +# MAGIC ,t1.atc3_des +# MAGIC ,t1.atc3_des_c +# MAGIC ,t1.atc4_cod +# MAGIC ,t1.atc4_des +# MAGIC ,t1.atc4_des_c +# MAGIC ,t1.bio_desc +# MAGIC , right(concat('000000', t1.CMPS_COD ),6 ) cmps_cod +# MAGIC ,t1.cmps_des +# MAGIC ,t1.cmps_des_c +# MAGIC ,t1.corp_cod +# MAGIC ,t1.corp_des +# MAGIC ,t1.corp_des_c +# MAGIC ,t1.edl_desc +# MAGIC ,t1.eth_otc_desc +# MAGIC ,t1.gene_orig_desc +# MAGIC ,t1.gqce_desc +# MAGIC ,t1.manu_cod +# MAGIC ,t1.manu_des +# MAGIC ,t1.manu_des_c +# MAGIC ,t1.mnfl_cod +# MAGIC ,t1.mnfl_des +# MAGIC ,t1.nrdl_desc +# MAGIC ,t1.pack_des +# MAGIC ,t1.stgh_des +# MAGIC ,t1.pack_lch +# MAGIC ,t1.paed_desc +# MAGIC ,t1.prod_des +# MAGIC ,t1.prod_des_c +# MAGIC ,t1.tcm_desc +# MAGIC ,t1.vbp_desc +# MAGIC ,t1.unit +# MAGIC ,t1.counting_unit +# MAGIC ,t1.dosage_unit +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio +# MAGIC from dwd.dwd_gnd_ext_dtp_pack_property t1 +# MAGIC LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC ON +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC = +# MAGIC case when length(trim(MOLE.Pack_Code)) < 12 and trim(MOLE.Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(MOLE.Pack_Code)),12) +# MAGIC else trim(MOLE.Pack_Code) +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC left join (select * from dwd.dwd_gnd_dtp_tblmarket WHERE Extend_Market IS NULL AND NOT_IN_FLAG = '0' ) t2 +# MAGIC -- on t1.cmps_cod=right(concat('000000', Molecule_Code),6 ) +# MAGIC on t1.ATC1_COD = case when t2.ATC1_Code is null then t1.ATC1_COD else t2.ATC1_Code end +# MAGIC and t1.ATC2_COD = case when t2.ATC2_Code is null then t1.ATC2_COD else t2.ATC2_Code end +# MAGIC and t1.ATC3_COD = case when t2.ATC3_Code is null then t1.ATC3_COD else t2.ATC3_Code end +# MAGIC and t1.ATC4_COD = case when t2.ATC4_Code is null then t1.ATC4_COD else t2.ATC4_Code end +# MAGIC and t1.APP1_COD = case when t2.NFC1_Code is null then t1.APP1_COD else t2.NFC1_Code end +# MAGIC and t1.APP2_COD = case when t2.NFC2_Code is null then t1.APP2_COD else t2.NFC2_Code end +# MAGIC and t1.APP3_COD = case when t2.NFC3_Code is null then t1.APP3_COD else t2.NFC3_Code end +# MAGIC and t1.CORP_COD = case when t2.corporation_code is null then t1.CORP_COD else t2.corporation_code end +# MAGIC and t1.MANU_COD = case when t2.Manufacturer_Code is null then t1.MANU_COD else t2.Manufacturer_Code end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_prod_code +# MAGIC and +# MAGIC case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end +# MAGIC = +# MAGIC case when t2.Product_Code is null +# MAGIC then case when length(t1.iqvia_prod_code) < 9 then right(concat('000000000',t1.iqvia_prod_code),9) else t1.iqvia_prod_code end +# MAGIC else case when length(t2.Product_Code) < 9 then right(concat('000000000',t2.Product_Code),9) else t2.Product_Code end +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC and +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC = +# MAGIC case when t2.Pack_Code is null +# MAGIC then +# MAGIC case when length(trim(t1.iqvia_pack_code)) < 12 and trim(t1.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t1.iqvia_pack_code)),12) +# MAGIC else trim(t1.iqvia_pack_code) +# MAGIC end +# MAGIC else +# MAGIC case when length(trim(t2.Pack_Code)) < 12 and trim(t2.Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t2.Pack_Code)),12) +# MAGIC else trim(t2.Pack_Code) +# MAGIC end +# MAGIC end +# MAGIC ---------------------------------------------------------------------------------- +# MAGIC and t1.STGH_DES = case when t2.Strength is null then t1.STGH_DES else t2.Strength end +# MAGIC 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 +# MAGIC where t2.market is not null + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: dtp 维度表处理 +# MAGIC -- 1.3 !!!注意此段是反选的规则,故执行的是从已经定义好的TempMKT中删除数据 +# MAGIC -------需要看TempMKT的字段结构,没有值的字段,在Value里面放个空值 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC MERGE INTO tmp.tmp_zk_retail_dtp_market AS t1 +# MAGIC USING tmp.tmp_zk_retail_dtp_market_del AS t2 +# MAGIC on t1.ATC1_COD = t2.ATC1_COD +# MAGIC and t1.ATC2_COD = t2.ATC2_COD +# MAGIC and t1.ATC3_COD = t2.ATC3_COD +# MAGIC and t1.ATC4_COD = t2.ATC4_COD +# MAGIC and t1.APP1_COD = t2.APP1_COD +# MAGIC and t1.APP2_COD = t2.APP2_COD +# MAGIC and t1.APP3_COD = t2.APP3_COD +# MAGIC and t1.CORP_COD = t2.CORP_COD +# MAGIC and t1.MANU_COD = t2.MANU_COD +# MAGIC and t1.iqvia_prod_code = t2.iqvia_prod_code +# MAGIC and t1.iqvia_pack_code = t2.iqvia_pack_code +# MAGIC and t1.STGH_DES = t2.STGH_DES +# MAGIC and t1.CMPS_COD = t2.CMPS_COD +# MAGIC and t1.market = t2.market +# MAGIC WHEN MATCHED THEN DELETE +# MAGIC ; + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: dtp 维度表处理 +# MAGIC -- 1.4 将产品对应的公司重新归属 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_dtp_market_corp +# MAGIC select +# MAGIC -- A.region_type +# MAGIC -- ,A.higher_level_region +# MAGIC -- A.product_id, +# MAGIC A.market +# MAGIC ,A.iqvia_pack_code +# MAGIC ,A.iqvia_prod_code +# MAGIC ,A.iqvia_notes +# MAGIC ,A.new_pack_flag +# MAGIC ,A.is_exists_chpa +# MAGIC -- ,A.prescription_nature +# MAGIC -- ,A.common_name +# MAGIC -- ,A.dosage_form +# MAGIC -- ,A.category_name +# MAGIC -- ,A.product_name +# MAGIC -- ,A.brand_name +# MAGIC -- ,A.zk_corp_des +# MAGIC -- ,A.zk_pack_des +# MAGIC -- ,A.counting_unit_a +# MAGIC ,A.app1_cod +# MAGIC ,A.app1_des +# MAGIC ,A.app1_des_c +# MAGIC ,A.app2_cod +# MAGIC ,A.app2_des +# MAGIC ,A.app2_des_c +# MAGIC ,A.app3_cod +# MAGIC ,A.app3_des +# MAGIC ,A.app3_des_c +# MAGIC ,A.atc1_cod +# MAGIC ,A.atc1_des +# MAGIC ,A.atc1_des_c +# MAGIC ,A.atc2_cod +# MAGIC ,A.atc2_des +# MAGIC ,A.atc2_des_c +# MAGIC ,A.atc3_cod +# MAGIC ,A.atc3_des +# MAGIC ,A.atc3_des_c +# MAGIC ,A.atc4_cod +# MAGIC ,A.atc4_des +# MAGIC ,A.atc4_des_c +# MAGIC ,A.bio_desc +# MAGIC ,A.cmps_cod +# MAGIC ,A.cmps_des +# MAGIC ,A.cmps_des_c +# MAGIC ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod +# MAGIC ,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des +# MAGIC ,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c +# MAGIC ,A.edl_desc +# MAGIC ,A.eth_otc_desc +# MAGIC ,A.gene_orig_desc +# MAGIC ,A.gqce_desc +# MAGIC ,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod +# MAGIC ,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des +# MAGIC ,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c +# MAGIC ,A.mnfl_cod +# MAGIC ,A.mnfl_des +# MAGIC ,A.nrdl_desc +# MAGIC ,A.pack_des +# MAGIC ,A.stgh_des +# MAGIC ,A.pack_lch +# MAGIC ,A.paed_desc +# MAGIC ,A.prod_des +# MAGIC ,A.prod_des_c +# MAGIC ,A.tcm_desc +# MAGIC ,A.vbp_desc +# MAGIC ,A.unit +# MAGIC ,A.counting_unit +# MAGIC ,A.dosage_unit +# MAGIC ,A.NRDL_ENTRY_DATE +# MAGIC ,A.bu +# MAGIC ,A.Market_Ratio +# MAGIC from tmp.tmp_zk_retail_dtp_market a +# MAGIC left join ( +# MAGIC select +# MAGIC DISTINCT +# MAGIC ---------------------------------------------- +# MAGIC -- format prod_cod +# MAGIC case when length(prod_cod) < 9 then right(concat('000000000',prod_cod),9) else prod_cod end as prod_cod, +# MAGIC ---------------------------------------------- +# MAGIC --right(concat('00000',prod_cod ),5) prod_cod, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC right(concat('000000',manu_cod ),6) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change +# MAGIC where pack_cod is null +# MAGIC ) b on a.iqvia_prod_code = b.prod_cod +# MAGIC left join ( +# MAGIC select +# MAGIC DISTINCT +# MAGIC ---------------------------------------------- +# MAGIC -- format pack_cod +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' then right(concat('000000000000',trim(pack_cod)),12) else trim(pack_cod) end as pack_cod, +# MAGIC ---------------------------------------------- +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC right(concat('000000',manu_cod ),6) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change +# MAGIC where pack_cod is not null +# MAGIC ) c on a.iqvia_pack_code = c.pack_cod +# MAGIC left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_dtp_pack_property) d +# MAGIC on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod +# MAGIC 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 +# MAGIC On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: update the pack data extra column + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: update the pack data extra column +# MAGIC -- 2.1 update pack_code, molecule_code, molecule_desc, product_code, product_desc, level_market +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC merge into tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC using( +# MAGIC select +# MAGIC distinct +# MAGIC iqvia_pack_code, +# MAGIC -- common_name, +# MAGIC -- dosage_form, +# MAGIC -- category_name, +# MAGIC -- product_name, +# MAGIC -- brand_name, +# MAGIC -- zk_pack_des, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC collect_list(market) as markets +# MAGIC from tmp.tmp_zk_retail_dtp_market_corp +# MAGIC group by 1,2,3,4,5 +# MAGIC ) as b +# MAGIC on a.iqvia_pack_code = b.iqvia_pack_code +# MAGIC -- on a.common_name = b.common_name +# MAGIC -- and a.dosage_form = b.dosage_form +# MAGIC -- and a.category_name = b.category_name +# MAGIC -- and nvl(a.product_name, '') = nvl(b.product_name, '') +# MAGIC -- and a.brand_name = b.brand_name +# MAGIC -- and a.pack_des = b.zk_pack_des +# MAGIC when matched then +# MAGIC update set +# MAGIC a.pack_code = b.iqvia_pack_code, +# MAGIC a.molecule_code = b.cmps_des, +# MAGIC a.molecule_desc = b.cmps_des_c, +# MAGIC a.product_code = b.prod_des, +# MAGIC a.product_desc = b.prod_des_c, +# MAGIC --------------------* hard_code *----------------------- +# MAGIC -- 手动修正market映射市场 +# MAGIC -- EGFR TKI Market -> EGFR TKI +# MAGIC -- Anti-HER2 mBC Market -> Anti-HER2 mBC +# MAGIC a.level_market = +# MAGIC case +# MAGIC when array_contains(markets, 'EGFR TKI Market') then 'EGFR TKI' +# MAGIC when array_contains(markets, 'Anti-HER2 mBC Market') then 'Anti-HER2 mBC' +# MAGIC else CONCAT_WS(',',markets) +# MAGIC end +# MAGIC --------------------* hard_code *----------------------- + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: update the pack data extra column +# MAGIC -- 2.2 generate tmp.tmp_retail_dtp_pack_mapping +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_pack_mapping as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.level_ta, +# MAGIC a.level_market, +# MAGIC a.pack_code, +# MAGIC a.molecule_code, +# MAGIC a.molecule_desc, +# MAGIC a.product_code, +# MAGIC a.product_desc, +# MAGIC b.corp_cod, +# MAGIC CONCAT_WS(',',collect_set(b.market)) as market_desc +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC inner join tmp.tmp_zk_retail_dtp_market_corp b +# MAGIC on a.pack_code = b.iqvia_pack_code +# MAGIC and a.molecule_code = b.cmps_des +# MAGIC and a.product_desc = b.prod_des_c +# MAGIC group by 1,2,3,4,5,6,7,8 +# MAGIC ), tmp_level as ( +# MAGIC select +# MAGIC distinct +# MAGIC ta, +# MAGIC market, +# MAGIC molecule, +# MAGIC brand +# MAGIC from tmp.tmp_retail_dtp_level_brand +# MAGIC ), tmp_molecule_brand as ( +# MAGIC -----------------------ta matched & market matched & molecule matched & brand matched -------------- +# MAGIC select +# MAGIC a.*,b.*,1 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and a.molecule_desc = b.molecule +# MAGIC and a.product_desc = b.brand +# MAGIC ), tmp_other_brand as ( +# MAGIC -----------------------ta matched & market matched & OTHER_MOLECULE & brand matched----------------- +# MAGIC select +# MAGIC a.*,b.*,1 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and b.molecule = 'OTHER_MOLECULE' +# MAGIC and a.product_desc = b.brand +# MAGIC where a.pack_code not in ( +# MAGIC select distinct pack_code from tmp_molecule_brand +# MAGIC ) +# MAGIC ), tmp_molecule_other as( +# MAGIC -----------------------ta matched & market matched & molecule matched & OTHER_BRAND---------------- +# MAGIC select +# MAGIC a.*,b.*,2 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and a.molecule_desc = b.molecule +# MAGIC and b.brand = 'OTHER_BRAND' +# MAGIC where a.pack_code not in ( +# MAGIC select distinct pack_code from tmp_molecule_brand +# MAGIC union all +# MAGIC select distinct pack_code from tmp_other_brand +# MAGIC ) +# MAGIC ), tmp_other_other as ( +# MAGIC -----------------------ta matched & market matched & OTHER_MOLECULE& OTHER_BRAND--------------------- +# MAGIC select +# MAGIC a.*,b.*,2 as brand_flag +# MAGIC from tmp_pack_mapping a +# MAGIC inner join tmp_level b +# MAGIC on a.level_ta = b.ta +# MAGIC and a.level_market = b.market +# MAGIC and b.molecule = 'OTHER_MOLECULE' +# MAGIC and b.brand = 'OTHER_BRAND' +# MAGIC where a.pack_code not in ( +# MAGIC select distinct pack_code from tmp_molecule_brand +# MAGIC union all +# MAGIC select distinct pack_code from tmp_other_brand +# MAGIC union all +# MAGIC select distinct pack_code from tmp_molecule_other +# MAGIC ) +# MAGIC ), tmp_brand_mapping as ( +# MAGIC select * from tmp_molecule_brand +# MAGIC union all +# MAGIC select * from tmp_other_brand +# MAGIC union all +# MAGIC select * from tmp_molecule_other +# MAGIC union all +# MAGIC select * from tmp_other_other +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table tmp.tmp_retail_dtp_pack_mapping +# MAGIC +# MAGIC select +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC molecule as level_molecule, +# MAGIC brand as level_brand, +# MAGIC pack_code, +# MAGIC molecule_code, +# MAGIC molecule_desc, +# MAGIC product_code, +# MAGIC product_desc, +# MAGIC corp_cod, +# MAGIC market_desc, +# MAGIC brand_flag +# MAGIC from tmp_brand_mapping + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: update the pack data extra column +# MAGIC -- 2.3 update level_molecule, level_brand ,brand_flag +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC merge into tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC using( +# MAGIC select +# MAGIC distinct pack_code,level_molecule,level_brand,brand_flag +# MAGIC from tmp.tmp_retail_dtp_pack_mapping +# MAGIC ) as b +# MAGIC on a.pack_code = b.pack_code +# MAGIC when matched then +# MAGIC update set +# MAGIC a.level_molecule = b.level_molecule, +# MAGIC a.level_brand = b.level_brand, +# MAGIC a.brand_flag = b.brand_flag + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: update the pack data extra column +# MAGIC -- 2.4 update the pack data brand flag to '1' which pack has regional data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC time, +# MAGIC pack_code +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata +# MAGIC where region <> '全国' +# MAGIC and data_flag = 0 +# MAGIC ) +# MAGIC +# MAGIC merge into tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC using( +# MAGIC select * from tmp_has_regional_data +# MAGIC ) as b +# MAGIC on a.time = b.time +# MAGIC and a.pack_code = b.pack_code +# MAGIC when matched then +# MAGIC update set +# MAGIC a.brand_flag = 1 + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-3: split regional data by brand ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: split regional data by brand ratio when there is no regional data and there is a brand ratio +# MAGIC -- only split the pack data with brand ratio and without regional pack data +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC time as yyyymm, +# MAGIC pack_code +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata +# MAGIC where region <> '全国' +# MAGIC ), tmp_has_brand_ratio as ( +# MAGIC select +# MAGIC distinct +# MAGIC b.pack_code +# MAGIC from tmp.tmp_retail_dtp_level_brand a +# MAGIC inner join tmp.tmp_retail_dtp_pack_mapping b +# MAGIC on a.ta = b.level_ta +# MAGIC and a.market = b.level_market +# MAGIC and a.molecule = b.level_molecule +# MAGIC and a.brand = b.level_brand +# MAGIC ), tmp_pack_rawdata as ( +# MAGIC select * +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC where not exists( +# MAGIC select b.yyyymm,b.pack_code from tmp_has_regional_data b +# MAGIC where a.time = b.yyyymm +# MAGIC and a.pack_code = b.pack_code +# MAGIC ) and exists( +# MAGIC select c.pack_code from tmp_has_brand_ratio c +# MAGIC where a.pack_code = c.pack_code +# MAGIC ) +# MAGIC ) +# MAGIC ----------------------------- append split regional data ---------------------------- +# MAGIC insert into table tmp.tmp_retail_dtp_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC -- c.region_type, +# MAGIC c.iqvia_pack_code, +# MAGIC c.year, +# MAGIC c.time, +# MAGIC -- c.higher_level_region, +# MAGIC a.province_city as region, +# MAGIC -- c.prescription_nature, +# MAGIC -- c.medicine_attribute, +# MAGIC -- c.dosage_form, +# MAGIC -- c.object, +# MAGIC -- c.zk_classify1, +# MAGIC -- c.zk_classify2, +# MAGIC -- c.zk_classify3, +# MAGIC c.target_points, +# MAGIC -- c.common_name, +# MAGIC -- c.brand_name, +# MAGIC -- c.product_name, +# MAGIC -- c.category_name, +# MAGIC -- c.pack_des, +# MAGIC c.counting_unit, +# MAGIC -- c.factory, +# MAGIC -- c.corp_des, +# MAGIC c.average_price, +# MAGIC round(c.sales_amount * a.ratio_val ,10) as sales_amount, +# MAGIC round(c.sales_volume * a.ratio_vol ,10) as sales_volume, +# MAGIC c.counting_units_obversion, +# MAGIC c.pack_code, +# MAGIC c.molecule_code, +# MAGIC c.molecule_desc, +# MAGIC c.product_code, +# MAGIC c.product_desc, +# MAGIC c.level_ta, +# MAGIC c.level_market, +# MAGIC c.level_molecule, +# MAGIC c.level_brand, +# MAGIC a.ratio_val, +# MAGIC a.ratio_vol, +# MAGIC 3 as data_flag, +# MAGIC b.brand_flag +# MAGIC from tmp.tmp_retail_dtp_level_brand a +# MAGIC inner join tmp.tmp_retail_dtp_pack_mapping b +# MAGIC on a.ta = b.level_ta +# MAGIC and a.market = b.level_market +# MAGIC and a.molecule = b.level_molecule +# MAGIC and a.brand = b.level_brand +# MAGIC inner join tmp_pack_rawdata c +# MAGIC on c.pack_code = b.pack_code +# MAGIC and c.time = a.yyyymm +# MAGIC where a.province_city <> '全国' +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-4: substract ROC data + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: substract ROC data +# MAGIC -- if there is regional pack data or splited regional pack data, ROC = '全国' - 'sum regional data' +# MAGIC -- if there is not regional pack data, ROC = '全国' +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp_area_group as ( +# MAGIC select +# MAGIC pack_code, +# MAGIC time, +# MAGIC sum(sales_amount) as sales_amount, +# MAGIC sum(sales_volume) as sales_volume +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata +# MAGIC where region <> '全国' +# MAGIC group by pack_code,time +# MAGIC ), tmp_has_regional_data as ( +# MAGIC select +# MAGIC distinct +# MAGIC time, +# MAGIC pack_code +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata +# MAGIC where region <> '全国' +# MAGIC and data_flag = 0 +# MAGIC ) +# MAGIC +# MAGIC ----------------------------- append ROC data ------------------------------------------ +# MAGIC insert into table tmp.tmp_retail_dtp_pack_rawdata +# MAGIC +# MAGIC select +# MAGIC a.iqvia_pack_code, +# MAGIC -- a.region_type, +# MAGIC a.year, +# MAGIC a.time, +# MAGIC -- a.higher_level_region, +# MAGIC 'ROC' as region, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points, +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.category_name, +# MAGIC -- a.pack_des, +# MAGIC a.counting_unit, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des, +# MAGIC a.average_price, +# MAGIC a.sales_amount - ifnull(b.sales_amount,0) as sales_amount, +# MAGIC a.sales_volume - ifnull(b.sales_volume,0) as sales_volume, +# MAGIC a.counting_units_obversion, +# MAGIC a.pack_code, +# MAGIC a.molecule_code, +# MAGIC a.molecule_desc, +# MAGIC a.product_code, +# MAGIC a.product_desc, +# MAGIC a.level_ta, +# MAGIC a.level_market, +# MAGIC a.level_molecule, +# MAGIC a.level_brand, +# MAGIC a.ratio_val, +# MAGIC a.ratio_vol, +# MAGIC ------------------------------------------------------------------------------- +# MAGIC -- 有省份pack的数(包括无品牌数据的数)计算出来的ROC所对应的pack_flag,也需要是1-原始值,不能是2-拆分的值 +# MAGIC -- 所以这里针对这类有省份数据的ROC数据,data_flag赋值为0-原始值,其他的仍为1-倒减值 +# MAGIC case when c.pack_code is not null then 0 else 1 end as data_flag, +# MAGIC ------------------------------------------------------------------------------- +# MAGIC a.brand_flag +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC inner join tmp_area_group b +# MAGIC on a.pack_code = b.pack_code +# MAGIC and a.time = b.time +# MAGIC left join tmp_has_regional_data c +# MAGIC on a.time = c.time +# MAGIC and a.pack_code = c.pack_code +# MAGIC where a.region = '全国' + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/08 map_to_dtp_dws_table.py b/Retail/08 map_to_dtp_dws_table.py new file mode 100644 index 0000000..b818992 --- /dev/null +++ b/Retail/08 map_to_dtp_dws_table.py @@ -0,0 +1,510 @@ +# Databricks notebook source +# MAGIC %sql +# MAGIC -- CREATE or REPLACE TABLE tmp.tmp_retail_dtp_final_sales ( +# MAGIC -- year STRING, +# MAGIC -- yq STRING, +# MAGIC -- yyyymm STRING, +# MAGIC -- iqvia_pack_code STRING, +# MAGIC -- geo_key STRING, +# MAGIC -- count_unit DOUBLE, +# MAGIC -- average_price DOUBLE, +# MAGIC -- sales_value DECIMAL(20,10), +# MAGIC -- sales_unit DECIMAL(20,10), +# MAGIC -- counting_units_obversion DECIMAL(20,10), +# MAGIC -- counting_unit DECIMAL(20,10), +# MAGIC -- sales_value_ly DECIMAL(20,10), +# MAGIC -- sales_unit_ly DECIMAL(20,10), +# MAGIC -- counting_unit_ly DECIMAL(20,10), +# MAGIC -- pack_flag INT, +# MAGIC -- brand_flag INT) +# MAGIC -- USING delta +# MAGIC -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_retail_dtp_final_sales'; + +# COMMAND ---------- + +############################################################START############################################################## +### STEP-1: insert splited pack data into tmp final table: tmp_retail_final_dtp_sales +### STEP-2: calculate OTHERS data + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: insert splited pack data + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: insert splited pack data into tmp final table +# MAGIC -- insert into tmp_retail_dtp_final_sales (dws.dws_retail_dtp_sales) +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_has_roc as ( +# MAGIC select +# MAGIC pack_code, +# MAGIC time +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata +# MAGIC where region = 'ROC' +# MAGIC ), temp_dtp_pack_property as ( +# MAGIC select iqvia_pack_code,max(counting_unit) as counting_unit,max(unit) as unit +# MAGIC from dwd.dwd_gnd_ext_dtp_pack_property +# MAGIC group by iqvia_pack_code +# MAGIC ), tmp_pack as ( +# MAGIC select +# MAGIC a.year, +# MAGIC a.time, +# MAGIC a.pack_code, +# MAGIC a.region, +# MAGIC a.counting_unit, +# MAGIC a.average_price, +# MAGIC a.sales_amount, +# MAGIC a.sales_volume, +# MAGIC a.counting_units_obversion, +# MAGIC ------------------------------------------------------ +# MAGIC -- counting_unit取值逻辑: +# MAGIC -- 不能直接取原始pack文件表中的值,改为取pack_property表中counting_unit / unit的值 +# MAGIC a.sales_volume * (b.counting_unit/ coalesce(b.unit,1)) as counting_unit_property, +# MAGIC ------------------------------------------------------ +# MAGIC a.data_flag, +# MAGIC a.brand_flag, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.pack_des, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des +# MAGIC from tmp.tmp_retail_dtp_pack_rawdata a +# MAGIC left join temp_dtp_pack_property b +# MAGIC ---------------------------------------------------- +# MAGIC -- format iqvia_pack_code from dwd_gnd_ext_dtp_pack_property +# MAGIC -- on a.pack_code = +# MAGIC -- case when length(trim(b.iqvia_pack_code)) < 12 and trim(b.iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC -- then right(concat('000000000000',trim(b.iqvia_pack_code)),12) +# MAGIC -- else trim(b.iqvia_pack_code) +# MAGIC -- end +# MAGIC -- ---------------------------------------------------- +# MAGIC -- and nvl(a.prescription_nature,'') = nvl(b.prescription_nature,'') +# MAGIC -- and nvl(a.medicine_attribute,'') = nvl(b.medicine_attribute,'') +# MAGIC -- and nvl(a.dosage_form,'') = nvl(b.dosage_form,'') +# MAGIC -- and nvl(a.object,'') = nvl(b.object,'') +# MAGIC -- and nvl(a.zk_classify1,'') = nvl(b.zk_classify1,'') +# MAGIC -- and nvl(a.zk_classify2,'') = nvl(b.zk_classify2,'') +# MAGIC -- and nvl(a.zk_classify3,'') = nvl(b.zk_classify3,'') +# MAGIC -- and nvl(a.target_points,'') = nvl(b.target_points,'') +# MAGIC -- and nvl(a.common_name,'') = nvl(b.common_name,'') +# MAGIC -- and nvl(a.brand_name,'') = nvl(b.brand_name,'') +# MAGIC -- and nvl(a.product_name,'') = nvl(b.product_name,'') +# MAGIC -- and nvl(a.pack_des,'') = nvl(b.zk_pack_des,'') +# MAGIC -- and nvl(a.factory,'') = nvl(b.factory,'') +# MAGIC -- and nvl(a.corp_des,'') = nvl(b.zk_corp_des,'') +# MAGIC -- 20260226 不再使用上面的join条件,改为product_id关联 +# MAGIC on a.iqvia_pack_code = b.iqvia_pack_code +# MAGIC ),tmp_pack_this_year_with_roc ( +# MAGIC select +# MAGIC a.year, +# MAGIC concat(a.year, 'Q', CEIL(CAST(RIGHT(a.time,2) AS INT)/3)) as yq, +# MAGIC a.time as yyyymm, +# MAGIC a.pack_code as iqvia_pack_code, +# MAGIC a.region as geo_key, +# MAGIC a.counting_unit as count_unit, +# MAGIC a.average_price, +# MAGIC a.sales_amount as sales_value, +# MAGIC a.sales_volume as sales_unit, +# MAGIC a.counting_units_obversion, +# MAGIC a.counting_unit_property as counting_unit, +# MAGIC case when a.data_flag = 0 then 1 else 2 end as pack_flag, +# MAGIC case when a.brand_flag = 1 then 1 else 2 end as brand_flag, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.pack_des, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des +# MAGIC from tmp_pack a +# MAGIC where exists ( +# MAGIC select * from tmp_has_roc c +# MAGIC where c.pack_code = a.pack_code +# MAGIC and c.time = a.time +# MAGIC ) and a.region <> '全国' +# MAGIC ), tmp_pack_next_year_with_roc ( +# MAGIC select +# MAGIC cast(a.year + 1 as int) as year, +# MAGIC concat(cast(a.year + 1 as int) , 'Q', CEIL(CAST(RIGHT(a.time,2) AS INT)/3)) as yq, +# MAGIC cast(a.time + 100 as int) as yyyymm, +# MAGIC a.pack_code as iqvia_pack_code, +# MAGIC a.region as geo_key, +# MAGIC a.counting_unit as count_unit, +# MAGIC a.average_price, +# MAGIC a.sales_amount as sales_value_ly, +# MAGIC a.sales_volume as sales_unit_ly, +# MAGIC a.counting_unit_property as counting_unit_ly, +# MAGIC a.counting_units_obversion, +# MAGIC case when a.data_flag = 0 then 1 else 2 end as pack_flag, +# MAGIC case when a.brand_flag = 1 then 1 else 2 end as brand_flag, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.pack_des, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des +# MAGIC from tmp_pack a +# MAGIC where a.time + 100 <= (select max(time) from tmp_pack) +# MAGIC and exists ( +# MAGIC select * from tmp_has_roc c +# MAGIC where c.pack_code = a.pack_code +# MAGIC and c.time = a.time +# MAGIC ) and a.region <> '全国' +# MAGIC ), tmp_pack_with_roc as ( +# MAGIC select +# MAGIC ifnull(a.year, b.year) as year, +# MAGIC ifnull(a.yq, b.yq) as yq , +# MAGIC ifnull(a.yyyymm, b.yyyymm) as yyyymm, +# MAGIC ifnull(a.iqvia_pack_code, b.iqvia_pack_code) as iqvia_pack_code, +# MAGIC ifnull(a.geo_key, b.geo_key) as geo_key, +# MAGIC ifnull(a.count_unit, b.count_unit) as count_unit, +# MAGIC ifnull(a.average_price, b.average_price) as average_price, +# MAGIC ifnull(a.sales_value, 0) as sales_value, +# MAGIC ifnull(a.sales_unit, 0) as sales_unit, +# MAGIC ifnull(a.counting_unit, 0) as counting_unit, +# MAGIC ifnull(a.counting_units_obversion, b.counting_units_obversion) as counting_units_obversion, +# MAGIC ifnull(a.pack_flag, b.pack_flag) as pack_flag, +# MAGIC ifnull(a.brand_flag, b.brand_flag) as brand_flag, +# MAGIC ifnull(b.sales_value_ly, 0) as sales_value_ly, +# MAGIC ifnull(b.sales_unit_ly, 0) as sales_unit_ly, +# MAGIC ifnull(b.counting_unit_ly, 0) as counting_unit_ly +# MAGIC from tmp_pack_this_year_with_roc a +# MAGIC full outer join tmp_pack_next_year_with_roc b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.iqvia_pack_code = b.iqvia_pack_code +# MAGIC and a.geo_key = b.geo_key +# MAGIC -- and nvl(a.prescription_nature,'') = nvl(b.prescription_nature,'') +# MAGIC -- and nvl(a.medicine_attribute,'') = nvl(b.medicine_attribute,'') +# MAGIC -- and nvl(a.dosage_form,'') = nvl(b.dosage_form,'') +# MAGIC -- and nvl(a.object,'') = nvl(b.object,'') +# MAGIC -- and nvl(a.zk_classify1,'') = nvl(b.zk_classify1,'') +# MAGIC -- and nvl(a.zk_classify2,'') = nvl(b.zk_classify2,'') +# MAGIC -- and nvl(a.zk_classify3,'') = nvl(b.zk_classify3,'') +# MAGIC and nvl(a.target_points,'') = nvl(b.target_points,'') +# MAGIC -- and nvl(a.common_name,'') = nvl(b.common_name,'') +# MAGIC -- and nvl(a.brand_name,'') = nvl(b.brand_name,'') +# MAGIC -- and nvl(a.product_name,'') = nvl(b.product_name,'') +# MAGIC -- and nvl(a.pack_des,'') = nvl(b.pack_des,'') +# MAGIC -- and nvl(a.factory,'') = nvl(b.factory,'') +# MAGIC -- and nvl(a.corp_des,'') = nvl(b.corp_des,'') +# MAGIC ), tmp_pack_this_year_without_roc ( +# MAGIC select +# MAGIC left(a.time, 4) year, +# MAGIC concat(a.year, 'Q', CEIL(CAST(RIGHT(a.time,2) AS INT)/3)) as yq, +# MAGIC a.time as yyyymm, +# MAGIC a.pack_code as iqvia_pack_code, +# MAGIC 'ROC' as geo_key, +# MAGIC a.counting_unit as count_unit, +# MAGIC a.average_price, +# MAGIC a.sales_amount as sales_value, +# MAGIC a.sales_volume as sales_unit, +# MAGIC a.counting_units_obversion, +# MAGIC a.counting_unit_property as counting_unit, +# MAGIC case when data_flag = 0 then 1 else 2 end as pack_flag, +# MAGIC case when brand_flag = 1 then 1 else 2 end as brand_flag, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.pack_des, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des +# MAGIC from tmp_pack a +# MAGIC where not exists ( +# MAGIC select * from tmp_has_roc c +# MAGIC where c.pack_code = a.pack_code +# MAGIC and c.time = a.time +# MAGIC ) +# MAGIC ), tmp_pack_next_year_without_roc as ( +# MAGIC select +# MAGIC cast(a.year + 1 as int) as year, +# MAGIC concat(cast(a.year + 1 as int) , 'Q', CEIL(CAST(RIGHT(a.time,2) AS INT)/3)) as yq, +# MAGIC cast(a.time + 100 as int) as yyyymm, +# MAGIC a.pack_code as iqvia_pack_code, +# MAGIC 'ROC' as geo_key, +# MAGIC a.counting_unit as count_unit, +# MAGIC a.average_price, +# MAGIC a.sales_amount as sales_value_ly, +# MAGIC a.sales_volume as sales_unit_ly, +# MAGIC a.counting_unit_property as counting_unit_ly, +# MAGIC a.counting_units_obversion, +# MAGIC case when data_flag = 0 then 1 else 2 end as pack_flag, +# MAGIC case when brand_flag = 1 then 1 else 2 end as brand_flag, +# MAGIC -- a.prescription_nature, +# MAGIC -- a.medicine_attribute, +# MAGIC -- a.dosage_form, +# MAGIC -- a.object, +# MAGIC -- a.zk_classify1, +# MAGIC -- a.zk_classify2, +# MAGIC -- a.zk_classify3, +# MAGIC a.target_points +# MAGIC -- a.common_name, +# MAGIC -- a.brand_name, +# MAGIC -- a.product_name, +# MAGIC -- a.pack_des, +# MAGIC -- a.factory, +# MAGIC -- a.corp_des +# MAGIC from tmp_pack a +# MAGIC where a.time + 100 <= (select max(time) from tmp_pack) +# MAGIC and not exists ( +# MAGIC select * from tmp_has_roc c +# MAGIC where c.pack_code = a.pack_code +# MAGIC and c.time = a.time +# MAGIC ) +# MAGIC ),tmp_pack_without_roc as ( +# MAGIC select +# MAGIC ifnull(a.year, b.year) as year, +# MAGIC ifnull(a.yq, b.yq) as yq , +# MAGIC ifnull(a.yyyymm, b.yyyymm) as yyyymm, +# MAGIC ifnull(a.iqvia_pack_code, b.iqvia_pack_code) as iqvia_pack_code, +# MAGIC ifnull(a.geo_key, b.geo_key) as geo_key, +# MAGIC ifnull(a.count_unit, b.count_unit) as count_unit, +# MAGIC ifnull(a.average_price, b.average_price) as average_price, +# MAGIC ifnull(a.sales_value, 0) as sales_value, +# MAGIC ifnull(a.sales_unit, 0) as sales_unit, +# MAGIC ifnull(a.counting_unit, 0) as counting_unit, +# MAGIC ifnull(a.counting_units_obversion, b.counting_units_obversion) as counting_units_obversion, +# MAGIC ifnull(a.pack_flag, b.pack_flag) as pack_flag, +# MAGIC ifnull(a.brand_flag, b.brand_flag) as brand_flag, +# MAGIC ifnull(b.sales_value_ly, 0) as sales_value_ly, +# MAGIC ifnull(b.sales_unit_ly, 0) as sales_unit_ly, +# MAGIC ifnull(b.counting_unit_ly, 0) as counting_unit_ly +# MAGIC from tmp_pack_this_year_without_roc a +# MAGIC full outer join tmp_pack_next_year_without_roc b +# MAGIC on a.yyyymm = b.yyyymm +# MAGIC and a.iqvia_pack_code = b.iqvia_pack_code +# MAGIC and a.geo_key = b.geo_key +# MAGIC -- and nvl(a.prescription_nature,'') = nvl(b.prescription_nature,'') +# MAGIC -- and nvl(a.medicine_attribute,'') = nvl(b.medicine_attribute,'') +# MAGIC -- and nvl(a.dosage_form,'') = nvl(b.dosage_form,'') +# MAGIC -- and nvl(a.object,'') = nvl(b.object,'') +# MAGIC -- and nvl(a.zk_classify1,'') = nvl(b.zk_classify1,'') +# MAGIC -- and nvl(a.zk_classify2,'') = nvl(b.zk_classify2,'') +# MAGIC -- and nvl(a.zk_classify3,'') = nvl(b.zk_classify3,'') +# MAGIC and nvl(a.target_points,'') = nvl(b.target_points,'') +# MAGIC -- and nvl(a.common_name,'') = nvl(b.common_name,'') +# MAGIC -- and nvl(a.brand_name,'') = nvl(b.brand_name,'') +# MAGIC -- and nvl(a.product_name,'') = nvl(b.product_name,'') +# MAGIC -- and nvl(a.pack_des,'') = nvl(b.pack_des,'') +# MAGIC -- and nvl(a.factory,'') = nvl(b.factory,'') +# MAGIC -- and nvl(a.corp_des,'') = nvl(b.corp_des,'') +# MAGIC ), tmp_final_sales as ( +# MAGIC select * from tmp_pack_with_roc +# MAGIC union all +# MAGIC select * from tmp_pack_without_roc +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table tmp.tmp_retail_dtp_final_sales +# MAGIC +# MAGIC select +# MAGIC year, +# MAGIC yq, +# MAGIC yyyymm, +# MAGIC iqvia_pack_code, +# MAGIC geo_key, +# MAGIC count_unit, +# MAGIC average_price, +# MAGIC sales_value, +# MAGIC sales_unit, +# MAGIC counting_units_obversion, +# MAGIC counting_unit, +# MAGIC sales_value_ly, +# MAGIC sales_unit_ly, +# MAGIC counting_unit_ly, +# MAGIC pack_flag, +# MAGIC brand_flag +# MAGIC from tmp_final_sales +# MAGIC order by yyyymm +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: calculate OTHERS data + +# COMMAND ---------- + +# DBTITLE 1,不再计算 +# %sql +# ------------------------------------------------------------------------------------- +# -- STEP-2: calculate OTHERS data +# -- 2.1 calaulate DTP_AZ_OTHERS data +# ------------------------------------------------------------------------------------- +# with tmp_az_total_now as ( +# 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' +# ), tmp_az_total_ly as ( +# select +# cast(yyyymm + 100 as int) as yyyymm, +# corp_name, +# sales_amount as sales_amount_ly, +# CORP_COD +# from tmp_az_total_now +# ), tmp_az_total as ( +# select +# a.*, +# ifnull(b.sales_amount_ly, 0) as sales_amount_ly +# from tmp_az_total_now a +# left join tmp_az_total_ly b +# on a.yyyymm = b.yyyymm +# and a.corp_name = b.corp_name +# and a.CORP_COD = b.CORP_COD +# ),tmp_az_pack_total as ( +# select +# a.year, +# a.yq, +# a.yyyymm, +# sum(a.sales_value) as sales_value, +# sum(a.sales_unit) as sales_unit, +# sum(a.counting_unit) as counting_unit, +# sum(a.sales_value_ly) as sales_value_ly, +# sum(a.sales_unit_ly) as sales_unit_ly, +# sum(a.counting_unit_ly) as counting_unit_ly +# from tmp.tmp_retail_dtp_final_sales a +# where a.iqvia_pack_code in ( +# select distinct iqvia_pack_code +# from tmp.tmp_zk_retail_dtp_market_corp +# where corp_cod = 'A5Z' +# ) +# group by a.year,a.yq,a.yyyymm +# order by a.yyyymm +# ) + +# insert into table tmp.tmp_retail_dtp_final_sales + +# select +# left(a.yyyymm, 4) as year, +# concat(left(a.yyyymm, 4), 'Q', CEIL(CAST(RIGHT(a.yyyymm,2) AS INT)/3)) as yq, +# a.yyyymm, +# 'DTP_AZ_OTHERS' as iqvia_pack_code, +# 'ROC' as geo_key, +# 0 as count_unit, +# 0 as average_price, +# a.sales_amount - nvl(b.sales_value, 0) as sales_value, +# 0 as sales_unit, +# 0 as counting_units_obversion, +# 0 as counting_unit, +# a.sales_amount_ly - nvl(b.sales_value_ly, 0) as sales_value_ly, +# 0 as sales_unit_ly, +# 0 as counting_unit_ly, +# 0 as pack_flag, +# 0 as brand_flag +# from tmp_az_total a +# left join tmp_az_pack_total b +# on a.yyyymm = b.yyyymm +# order by a.yyyymm + +# COMMAND ---------- + +# DBTITLE 1,不再计算 +# %sql +# ------------------------------------------------------------------------------------- +# -- STEP-2: calculate OTHERS data +# -- 2.2 calaulate DTP_OTHERS data +# ------------------------------------------------------------------------------------- + +# with tmp_total_now as ( +# SELECT +# dtp_name, +# sales_quarter as yyyymm, +# sales_amount * 1000000.0 as sales_amount +# FROM dwd.dwd_gnd_ext_retail_dtp_overall_market +# ), tmp_total_ly as ( +# select +# dtp_name, +# cast(yyyymm + 100 as int) as yyyymm, +# sales_amount as sales_amount_ly +# from tmp_total_now +# ), tmp_total as ( +# select +# a.*, +# ifnull(b.sales_amount_ly, 0) as sales_amount_ly +# from tmp_total_now a +# left join tmp_total_ly b +# on a.yyyymm = b.yyyymm +# ),tmp_pack_total as ( +# select +# a.year, +# a.yq, +# a.yyyymm, +# sum(a.sales_value) as sales_value, +# sum(a.sales_unit) as sales_unit, +# sum(a.counting_unit) as counting_unit, +# sum(a.sales_value_ly) as sales_value_ly, +# sum(a.sales_unit_ly) as sales_unit_ly, +# sum(a.counting_unit_ly) as counting_unit_ly +# from tmp.tmp_retail_dtp_final_sales a +# group by a.year,a.yq,a.yyyymm +# order by a.yyyymm +# ) + +# insert into table tmp.tmp_retail_dtp_final_sales + +# select +# left(a.yyyymm, 4) as year, +# concat(left(a.yyyymm, 4), 'Q', CEIL(CAST(RIGHT(a.yyyymm,2) AS INT)/3)) as yq, +# a.yyyymm, +# 'DTP_OTHERS' as iqvia_pack_code, +# 'ROC' as geo_key, +# 0 as count_unit, +# 0 as average_price, +# a.sales_amount - nvl(b.sales_value, 0) as sales_value, +# 0 as sales_unit, +# 0 as counting_units_obversion, +# 0 as counting_unit, +# a.sales_amount_ly - nvl(b.sales_value_ly, 0) as sales_value_ly, +# 0 as sales_unit_ly, +# 0 as counting_unit_ly, +# 0 as pack_flag, +# 0 as brand_flag +# from tmp_total a +# left join tmp_pack_total b +# on a.yyyymm = b.yyyymm +# order by a.yyyymm + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/09 dwd_inc_gnd_ext_retail_nataional.py b/Retail/09 dwd_inc_gnd_ext_retail_nataional.py new file mode 100644 index 0000000..4fcc913 --- /dev/null +++ b/Retail/09 dwd_inc_gnd_ext_retail_nataional.py @@ -0,0 +1,177 @@ +# Databricks notebook source +#当更新pack 或品牌 事实数据时需要运行此代码,否则无需运行。 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_oap' where file_name ='pack-CV-抗血栓2通用名-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_htn' where file_name ='pack-CV-高血压-化学药-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_atomizer' where file_name ='pack-雾化器-全国&县域数据.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_anti_asthma_copd' where file_name ='pack-RE-慢阻肺-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_zk_brand' where file_name ='Brand-品牌数据报表.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_statin_xzk' where file_name ='pack-CV-他汀类+血脂康-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_rd' where file_name ='pack-RD-肾科-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_aagsa_ppi_oral' where file_name ='pack-GI-慢性胃炎胃溃疡-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_niad' where file_name ='pack-DM-口服降糖化学药.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_metoprolol_tartrat' where file_name ='pack-CV-酒石酸美托洛尔.xlsx'; +# MAGIC + +# COMMAND ---------- + + +# brand+ 省份数据自动接入 +#获取配置表信息(表名、brand_flag +dfband = spark.sql(""" +SELECT DISTINCT table_name tab ,file_name brand_flag FROM dwd.dwd_gnd_ext_retail_corresponding_relationship +where type_name ='BRAND' +""").collect() + +def get_union_brand_data(df): + #数据为空 + if df == None: + return None + #初始化结果集 + union_query = None + for table in df: + # 选择当前表名 + T = str(table.tab) + # 获取对应brand表维度对应得 market 名称 + pack_flag = str(table.brand_flag) + sql = f""" + select + cast(left(quarter, 4)*100 + right(quarter,1)*3 as int ) AS YYYYMM + ,cast(left(quarter, 4) as int ) AS year + ,right(quarter, 2) AS quarter + ,quarter AS yq + ,type AS brand_cat_type + ,case when ta = 'NIAD' then 'DM' else ta end AS TA + ,market AS market + ,zk_brand_category AS zk_brand_category + ,zk_common_name AS zk_common_name + ,zk_manu_des AS zk_manu_des + ,rc_name_en AS rc_name_en + ,province_city AS province_city + ,ytd AS ytd + ,cast(sales_value * 1000000 as decimal(30,10)) AS sales_val + ,cast(sales_volume * 1000000 as decimal(30,10)) AS sales_vol + ,cast(price as decimal(30,10)) as price + ,cast(num_dist_rate as decimal(30,10)) as num_dist_rate + ,cast(weig_dist_rate as decimal(30,10)) as weig_dist_rate + ,cast(value_share as decimal(30,10)) as val_share + ,cast(volume_share as decimal(30,10)) as vol_share + ,replace(key_brand_ytd,'-','') as key_brand_ytd + ,cast(replace(key_brand_rank_ytd,'-','0') as int) as key_brand_rank_ytd + ,replace(top_brand_ytd,'-','') as top_brand_ytd + ,cast(replace(top_brand_ms_ytd,'-','0') as decimal(30,10)) as top_brand_ms_ytd + ,cast(replace(top_brand_inc_ms_ytd,'-','0') as decimal(30,10)) as top_brand_inc_ms_ytd + ,cast(replace(top_brand_gr_ytd,'-','0') as decimal(30,10)) as top_brand_gr_ytd + ,replace(key_brand_qtd,'-','') as key_brand_qtd + ,cast(replace(key_brand_rank_qtd,'-','0') as int) as key_brand_rank_qtd + ,replace(top_brand_qtd,'-','') as top_brand_qtd + ,cast(replace(top_brand_ms_qtd,'-','0') as decimal(30,10)) as top_brand_ms_qtd + ,cast(replace(top_brand_inc_ms_qtd,'-','0') as decimal(30,10)) as top_brand_inc_ms_qtd + ,cast(replace(top_brand_gr_qtd,'-','0') as decimal(30,10)) as top_brand_gr_qtd + ,ranked_by as ranked_by + ,'{pack_flag}' as pack_flag + ,from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt + ,from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt + from {T} + """ + # 读取数据 + current_query = spark.sql(sql) + #union 数据 + if union_query == None: + union_query = current_query + else: + union_query = union_query.union(current_query) + #返回数据集 / 写入表也行??? + return union_query +brand_result = get_union_brand_data(dfband) +brand_result.write.mode("overwrite").saveAsTable("dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all") + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ###新逻辑 +# MAGIC - 修改brand数据,先拆分成月维度的数据 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC /* +# MAGIC 修改时间:20250311 +# MAGIC 修改人:chenwu +# MAGIC 修改内容:brand来数频率为 季度来数, 但是 pack 为 月度来数据,需要用季度的数据/3得到月度的 +# MAGIC */ +# MAGIC insert overwrite table dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC with quarterly_table as ( +# MAGIC select +# MAGIC * +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC where market not in ('NIAD','Inhaled Extended Market','布地奈德雾化溶液') +# MAGIC -- 范围内只能是 季度来数据的,如果有月度来数据的需要排除掉 +# MAGIC ) +# MAGIC +# MAGIC ,month_table as (--转化成月度数据 +# MAGIC SELECT +# MAGIC SUBSTR(q.yq, 1, 4)*100 + -- 提取年份 +# MAGIC LPAD(m.month_num, 2, '0') -- 补零月份 +# MAGIC AS YYYYMM -- 月份首日 +# MAGIC ,`year` +# MAGIC ,`quarter` +# MAGIC ,yq +# MAGIC ,brand_cat_type +# MAGIC ,TA +# MAGIC ,market +# MAGIC ,zk_brand_category +# MAGIC ,zk_common_name +# MAGIC ,zk_manu_des +# MAGIC ,rc_name_en +# MAGIC ,province_city +# MAGIC ,ytd +# MAGIC ,sales_val /3 --除3 +# MAGIC ,sales_vol /3 --除3 +# MAGIC ,price +# MAGIC ,num_dist_rate +# MAGIC ,weig_dist_rate +# MAGIC ,val_share +# MAGIC ,vol_share +# MAGIC ,key_brand_ytd +# MAGIC ,key_brand_rank_ytd +# MAGIC ,top_brand_ytd +# MAGIC ,top_brand_ms_ytd +# MAGIC ,top_brand_inc_ms_ytd +# MAGIC ,top_brand_gr_ytd +# MAGIC ,key_brand_qtd +# MAGIC ,key_brand_rank_qtd +# MAGIC ,top_brand_qtd +# MAGIC ,top_brand_ms_qtd +# MAGIC ,top_brand_inc_ms_qtd +# MAGIC ,top_brand_gr_qtd +# MAGIC ,ranked_by +# MAGIC ,pack_flag +# MAGIC ,etl_insert_dt +# MAGIC ,etl_update_dt +# MAGIC FROM +# MAGIC quarterly_table q +# MAGIC LATERAL VIEW EXPLODE( -- 为每季度生成三个月 +# MAGIC CASE +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q1' THEN ARRAY(1, 2, 3) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q2' THEN ARRAY(4, 5, 6) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q3' THEN ARRAY(7, 8, 9) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q4' THEN ARRAY(10, 11, 12) +# MAGIC END +# MAGIC ) m AS month_num +# MAGIC ) +# MAGIC +# MAGIC ,other_not_quarterly_table ( +# MAGIC select +# MAGIC * +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC where market in ('NIAD','Inhaled Extended Market','布地奈德雾化溶液') +# MAGIC -- 范围内只能是 月度来数据的 +# MAGIC ) +# MAGIC +# MAGIC select * from month_table +# MAGIC union all +# MAGIC select * from other_not_quarterly_table \ No newline at end of file diff --git a/Retail/10 map_to_retail_dm_table.py b/Retail/10 map_to_retail_dm_table.py new file mode 100644 index 0000000..32d3f21 --- /dev/null +++ b/Retail/10 map_to_retail_dm_table.py @@ -0,0 +1,4917 @@ +# Databricks notebook source +############################################################START############################################################## +### STEP-1: map to dm.dm_zk_retail_geo +### STEP-2: map to dm.dm_ext_rc_ratio +### STEP-3: map to dm.dm_zk_retail_sales +### STEP-4: map to dm.dm_zk_retail_pack_property +### STEP-5: map to dm.dm_zk_retail_market_property +### STEP-6: map to dm.dm_zk_retail_dtp_pack_property +### STEP-7: map to dm.dm_zk_retail_dtp_sales +### STEP-8: map to dm.dm_zk_retail_sales_kpi +### STEP-9: map to dm.dm_zk_retail_market_ratio + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-1: map to dm.dm_zk_retail_geo + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-1: map to dm.dm_zk_retail_geo +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with all_province_city as ( +# MAGIC select distinct province_city from tmp.tmp_retail_brand_rawdata +# MAGIC union +# MAGIC select distinct zk_regin from tmp.tmp_retail_pack_rawdata +# MAGIC union +# MAGIC select distinct province_city from dwd.dwd_gnd_ext_dtp_zk_brand +# MAGIC union +# MAGIC select distinct region from dwd.dwd_gnd_ext_retail_dtp_datasource +# MAGIC ), tmp as ( +# MAGIC ----------------按照retail 逻辑划分福厦泉、全国,并从chpa的geo中提取其他维度信息--------------------- +# MAGIC select distinct +# MAGIC case when t1.province_city = '全国' then 'CHT' +# MAGIC when t1.province_city = '福厦泉' then 'FXQ' +# MAGIC else +# MAGIC nvl(t2.geo_key, t3.geo_key) +# MAGIC end geo_key, +# MAGIC t4.AZ_City_tier +# MAGIC ,t4.city_tier, +# MAGIC province_city, +# MAGIC t3.city_name, +# MAGIC t3.city_code, +# MAGIC t3.city_name_en, +# MAGIC case when t1.province_city = '福厦泉' then '福建' +# MAGIC when t1.province_city = '全国' then '全国' +# MAGIC else +# MAGIC nvl(t3.province_name,t2.province_name) +# MAGIC end province_name, +# MAGIC case when t1.province_city = '福厦泉' then 'FJ' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.province_code,t2.province_code) +# MAGIC end province_code, +# MAGIC case when t1.province_city = '福厦泉' then 'Fujian' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.province_name_en,t2.province_name_en) +# MAGIC end province_name_en, +# MAGIC case when t1.province_city = '福厦泉' then 'SOUTH' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.area_code,t2.area_code) +# MAGIC end area_code, +# MAGIC case when t1.province_city = '福厦泉' then '南部地区' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.area_name,t2.area_name) +# MAGIC end area_name, +# MAGIC case when t1.province_city = '福厦泉' then 'South China' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.area_name_en,t2.area_name_en) +# MAGIC end area_name_en, +# MAGIC case when t1.province_city = '福厦泉' then 'SOUTH' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.rc_code,t2.rc_code) +# MAGIC end rc_code, +# MAGIC case when t1.province_city = '福厦泉' then '南部地区' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.rc_name,t2.rc_name) +# MAGIC end rc_name, +# MAGIC case when t1.province_city = '福厦泉' then 'South China' +# MAGIC when t1.province_city = '全国' then 'National' +# MAGIC else +# MAGIC nvl(t3.rc_name_en,t2.rc_name_en) +# MAGIC end rc_name_en +# MAGIC from all_province_city t1 +# MAGIC left join dm.dm_td_geography t2 +# MAGIC on t1.province_city = t2.province_name and t2.geo_key = t2.province_code +# MAGIC left join dm.dm_td_geography t3 +# MAGIC on t1.province_city = replace(t3.city_name,'市','') and t3.geo_key = t3.city_code +# MAGIC left join dws.dws_ims_td_geo t4 +# MAGIC on t1.province_city = replace(t4.AUDIT_DES_C,'市','') +# MAGIC where t1.province_city <> 'ROC' +# MAGIC ) +# MAGIC +# MAGIC -------------------省份、自治区等处理----------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_geo +# MAGIC SELECT +# MAGIC geo_key +# MAGIC ,city_name_en +# MAGIC ,replace(city_name,'市') city_c +# MAGIC ,case when city_code is not null then 'City' else 'Province' END city_type +# MAGIC ,city_tier +# MAGIC ,AZ_City_tier +# MAGIC ,province_name_en +# MAGIC ,province_name +# MAGIC ,province_code +# MAGIC ,city_name city_map +# MAGIC ,case when province_code in ('TJ','CQ','BJ','SH') then concat(province_name,'市') +# MAGIC 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,'省') +# MAGIC when province_code ='GX' THEN concat(province_name,'壮族自治区') +# MAGIC when province_code ='IM' THEN concat(province_name,'自治区') +# MAGIC ELSE province_name +# MAGIC end province_map +# MAGIC ,city_code +# MAGIC ,province_city +# MAGIC ,area_code +# MAGIC ,area_name +# MAGIC ,area_name_en +# MAGIC ,rc_code +# MAGIC ,rc_name +# MAGIC ,rc_name_en +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from tmp +# MAGIC +# MAGIC UNION ALL +# MAGIC +# MAGIC SELECT +# MAGIC 'ROC' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'City' +# MAGIC , 1 +# MAGIC , 1 +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC , null +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,'Other Low Tiers' +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-2: map to dm.dm_ext_rc_ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: map to dm.dm_ext_rc_ratio +# MAGIC -- 2.1 rc 拆分逻辑处理 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dws.dws_ext_rc_ratio +# MAGIC select +# MAGIC a.sub_bu +# MAGIC ,a.mkt +# MAGIC ,a.region_code +# MAGIC ,nvl(b.PROVINCE_CODE,c.PROVINCE_CODE ) PROVINCE_CODE +# MAGIC ,nvl(b.AUDIT_COD,c.PROVINCE_CODE) city_code +# MAGIC ,a.ratio +# MAGIC ,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_insert_dt +# MAGIC ,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_update_dt +# MAGIC from dwd.dwd_gnd_ext_rc_ratio a +# MAGIC left join dm.dm_ims_td_geo b on a.city = b.CITY_C +# MAGIC left join ( +# MAGIC select province_code,province_name +# MAGIC from dm.dm_td_geography group by province_name,province_code +# MAGIC ) c on a.city = c.province_name + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-2: map to dm.dm_ext_rc_ratio +# MAGIC -- 2.2 rc 拆分逻辑处理 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dm.dm_ext_rc_ratio +# MAGIC select +# MAGIC sub_bu +# MAGIC ,mkt +# MAGIC ,region_code +# MAGIC ,PROVINCE_CODE +# MAGIC ,city_code +# MAGIC ,ratio +# MAGIC ,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_insert_dt +# MAGIC ,From_utc_timestamp(CURRENT_TIMESTAMP(), 'UTC+8') etl_update_dt +# MAGIC from dws.dws_ext_rc_ratio + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-3: map to dm.dm_zk_retail_sales + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 3.1 将数据写入最终表的临时表 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.2 write pack data from tmp.tmp_retail_final_sales to tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_source as ( +# MAGIC select +# MAGIC distinct +# MAGIC yyyymm, +# MAGIC iqvia_pack_code, +# MAGIC province_city, +# MAGIC collect_list(distinct market) as source +# MAGIC from tmp.tmp_retail_final_sales +# MAGIC group by yyyymm,iqvia_pack_code,province_city +# MAGIC ), tmp_pack as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC iqvia_pack_code, +# MAGIC province_city, +# MAGIC market, +# MAGIC pack_flag, +# MAGIC brand_flag, +# MAGIC sum(sales_unit) as sales_unit, +# MAGIC sum(sales_unit_ly) as sales_unit_ly, +# MAGIC sum(sales_value) as sales_value, +# MAGIC sum(sales_value_ly) as sales_value_ly, +# MAGIC sum(counting_unit) as counting_unit, +# MAGIC sum(counting_unit_ly) as counting_unit_ly +# MAGIC from tmp.tmp_retail_final_sales +# MAGIC group by yyyymm,iqvia_pack_code,province_city,market,pack_flag,brand_flag +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC select +# MAGIC a.yyyymm, +# MAGIC a.iqvia_pack_code, +# MAGIC CASE WHEN a.province_city ='ROC' then 'ROC' ELSE b.geo_key END as AUDIT_COD, +# MAGIC a.province_city, +# MAGIC c.corp_cod, +# MAGIC a.sales_unit, +# MAGIC a.sales_unit_ly, +# MAGIC a.sales_value, +# MAGIC a.sales_value_ly, +# MAGIC a.counting_unit, +# MAGIC a.counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC d.source, +# MAGIC a.pack_flag, +# MAGIC a.brand_flag, +# MAGIC case +# MAGIC when a.market in ('他汀类+血脂康','高血压用药','Brilinta Market') then 'CV' +# MAGIC when a.market in ('NIAD','RD Market') then 'CVRM' +# MAGIC ELSE '' +# MAGIC END as FLAG +# MAGIC from tmp_pack a +# MAGIC left join dm.dm_zk_retail_geo b +# MAGIC on a.province_city = b.province_city +# MAGIC left join tmp.tmp_zk_retail_pack_property_corp c +# MAGIC on a.iqvia_pack_code = c.iqvia_pack_code +# MAGIC left join tmp_source d +# MAGIC on a.yyyymm = d.yyyymm +# MAGIC and a.iqvia_pack_code = d.iqvia_pack_code +# MAGIC and a.province_city = d.province_city + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 3.2 计算OTHERS数据 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3 calculate OTHERS DATA +# MAGIC -- 3.3.1 将数据处理到dws +# MAGIC -- 3.3.1.1 维度信息计算 +# MAGIC -- STEP1: nataional_top_corp +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC --直接写入旧的文件对应的表,这样后面的代码都不用改动。 +# MAGIC --新文件《全国-集团排名》筛选:TA=Retail Total,Rx/OTC= Rx,Top/Top Incre. = Top Sales,对应了旧文件:《全国-Rx-TOP集团》 +# MAGIC insert overwrite table dwd.dwd_gnd_ext_retail_nataional_top_corp +# MAGIC ( +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC corp_type, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC ytd_gr, +# MAGIC ytd_ms, +# MAGIC ytd_delta_ms, +# MAGIC builtinarchivedate, +# MAGIC source_file_path, +# MAGIC source_file_name, +# MAGIC etl_insert_dt +# MAGIC ) +# MAGIC select +# MAGIC trim(rank1) as rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC `type` as corp_type, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC null as ytd_gr, +# MAGIC null as ytd_ms, +# MAGIC null as ytd_delta_ms, +# MAGIC builtinarchivedate, +# MAGIC source_file_path, +# MAGIC source_file_name, +# MAGIC etl_insert_dt +# MAGIC from dwd.dwd_gnd_retail_national_corp_rank +# MAGIC where upper(ta) = 'RETAIL TOTAL' +# MAGIC and upper(rx_otc) = 'RX' +# MAGIC and upper(top_top_incre) = 'TOP SALES' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3 calculate OTHERS DATA +# MAGIC -- 3.3.1 将数据处理到dws +# MAGIC -- 3.3.1.1 维度信息计算 +# MAGIC -- STEP2: nataional_ta_top_corp +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC --直接写入旧的文件对应的表,这样后面的代码都不用改动。 +# MAGIC --新文件《全国-集团排名》筛选:TA <> Retail Total,Top/Top Incre. = Top Sales,对应了旧文件:《全国-分TA-TOP集团》 +# MAGIC insert overwrite table dwd.dwd_gnd_ext_retail_nataional_ta_top_corp +# MAGIC ( +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corp_name, +# MAGIC corp_type, +# MAGIC source_name, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC ytd_gr, +# MAGIC ytd_ms, +# MAGIC ytd_delta_ms, +# MAGIC builtinarchivedate, +# MAGIC source_file_path, +# MAGIC source_file_name, +# MAGIC etl_insert_dt +# MAGIC ) +# MAGIC select +# MAGIC trim(rank1) as rank1, +# MAGIC corp_desc, +# MAGIC corporation as corp_name, +# MAGIC `type` as corp_type, +# MAGIC case when ta = 'GI' then concat(ta,'-',rx_otc) +# MAGIC when ta = 'NIAD-excl. GLP1' then 'DM' +# MAGIC else ta end as source_name, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC null as ytd_gr, +# MAGIC null as ytd_ms, +# MAGIC null as ytd_delta_ms, +# MAGIC builtinarchivedate, +# MAGIC source_file_path, +# MAGIC source_file_name, +# MAGIC etl_insert_dt +# MAGIC from dwd.dwd_gnd_retail_national_corp_rank +# MAGIC where upper(ta) <> 'RETAIL TOTAL' +# MAGIC and upper(top_top_incre) = 'TOP SALES' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3 calculate OTHERS DATA +# MAGIC -- 3.3.1 将数据处理到dws +# MAGIC -- 3.3.1.2 将 top_corp 的数据处理到dws +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC --------------------获取 全国total 本同期数据------------------------ +# MAGIC insert overwrite table dws.dws_zk_retail_top_corp +# MAGIC SELECT +# MAGIC yyyymm, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC -- source_name, +# MAGIC sum(sales_amount) as sales_amount, +# MAGIC sum(sales_amount_ly) as sales_amount_ly +# MAGIC FROM +# MAGIC ( +# MAGIC SELECT +# MAGIC nvl(rank1,'' ) as rank1 , +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC corp_type, +# MAGIC -- source_name, +# MAGIC CAST(sales_quarter AS int ) as yyyymm, +# MAGIC sales_amount * 1000000 AS sales_amount, +# MAGIC 0 AS sales_amount_ly +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_top_corp +# MAGIC UNION ALL +# MAGIC SELECT +# MAGIC nvl(rank1,'' ) rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC corp_type, +# MAGIC -- source_name, +# MAGIC CAST(sales_quarter + 100 AS int ) as yyyymm, +# MAGIC 0 AS sales_amount, +# MAGIC sales_amount * 1000000 AS sales_amount_ly +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_top_corp +# MAGIC WHERE CAST(sales_quarter + 100 AS int ) +# MAGIC <=(SELECT +# MAGIC max(CAST(sales_quarter AS int )) +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_top_corp ) ) +# MAGIC GROUP BY +# MAGIC yyyymm, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation +# MAGIC -- source_name + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3 calculate OTHERS DATA +# MAGIC -- 3.3.1 将数据处理到dws +# MAGIC -- 3.3.1.3 将 ta_top_corp 的数据处理到dws +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC --------------------获取 ta total 本同期数据,用于后续取 total 及 az 值 +# MAGIC insert overwrite table dws.dws_zk_retail_ta_top_corp +# MAGIC SELECT +# MAGIC source_name, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC CORP_COD, +# MAGIC yyyymm, +# MAGIC sum(sales_amount) sales_amount, +# MAGIC sum(sales_amount_ly) sales_amount_ly +# MAGIC FROM +# MAGIC ( +# MAGIC SELECT +# MAGIC a.rank1, +# MAGIC source_name, +# MAGIC A.corp_desc, +# MAGIC B.CORP_COD, --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code +# MAGIC CAST(sales_quarter AS int ) yyyymm , +# MAGIC sales_amount * 1000000 AS sales_amount, +# MAGIC 0 AS sales_amount_ly +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a +# MAGIC LEFT JOIN (SELECT DISTINCT ZK_Corp_C,CORP_COD FROM dwd.dwd_inc_gnd_retail_b2c_label_total) b +# MAGIC ON a.corp_desc = b.ZK_Corp_C +# MAGIC UNION ALL +# MAGIC SELECT +# MAGIC a.rank1, +# MAGIC source_name, +# MAGIC A.corp_desc, +# MAGIC B.CORP_COD, --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code +# MAGIC CAST(sales_quarter + 100 AS int ) yyyymm , +# MAGIC 0 AS sales_amount, +# MAGIC sales_amount * 1000000 AS sales_amount_ly +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a +# MAGIC LEFT JOIN (SELECT DISTINCT ZK_Corp_C,CORP_COD FROM dwd.dwd_inc_gnd_retail_b2c_label_total) b +# MAGIC ON a.corp_desc = b.ZK_Corp_C +# MAGIC WHERE +# MAGIC CAST(sales_quarter + 100 AS int ) +# MAGIC <=( SELECT max(CAST(sales_quarter AS int )) +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp ) +# MAGIC ) +# MAGIC GROUP BY +# MAGIC 1,2,3,4,5 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3.2 calculate TA OTHERS +# MAGIC -- 3.3.2.1 calculate CV_AZ_OTHERS +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_az_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_ta_top_corp +# MAGIC where source_name='CV' +# MAGIC AND CORP_COD ='A5Z' +# MAGIC ), tmp_az_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC a.corp_cod, +# MAGIC sum(a.sales_value) as sales_value , +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC where nvl(a.corp_cod,'') ='A5Z' +# MAGIC and FLAG = 'CV' +# MAGIC group by a.YYYYMM,a.corp_cod +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'CV_AZ_OTHERS' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC a.corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC -- 25年没有TA大数,此类数据直接赋值0 +# MAGIC 0, --case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC 0, --case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'CV' as FLAG +# MAGIC from tmp_az_pack_total a +# MAGIC left join tmp_az_total b +# MAGIC on a.YYYYMM = b.yyyymm + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3.2 calculate TA OTHERS +# MAGIC -- 3.3.2.2 calculate CV_OTHERS +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_ta_top_corp +# MAGIC where source_name='CV' +# MAGIC AND rank1 = 'Total' +# MAGIC ), tmp_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC sum(a.sales_value) as sales_value, +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC where FLAG = 'CV' +# MAGIC group by a.YYYYMM +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'CV_OTHERS' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC 'CV_OTHERS' as corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC -- 25年没有TA大数,此类数据直接赋值0 +# MAGIC 0, --case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC 0, --case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'CV' as FLAG +# MAGIC from tmp_pack_total a +# MAGIC left join tmp_total b +# MAGIC on a.YYYYMM = b.yyyymm + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.3.2 calculate TA OTHERS +# MAGIC -- 3.3.2.3 calculate CVRM_AZ_OTHERS (TODO) +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_az_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_ta_top_corp +# MAGIC where source_name='CVRM' +# MAGIC AND CORP_COD ='A5Z' +# MAGIC ), tmp_az_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC a.corp_cod, +# MAGIC sum(a.sales_value) as sales_value , +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC where nvl(a.corp_cod,'') ='A5Z' +# MAGIC and FLAG = 'CVRM' +# MAGIC group by a.YYYYMM,a.corp_cod +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'CVRM_AZ_OTHERS' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC a.corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC -- 25年没有TA大数,此类数据直接赋值0 +# MAGIC 0, --case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC 0, --case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'CVRM' as FLAG +# MAGIC from tmp_az_pack_total a +# MAGIC left join tmp_az_total b +# MAGIC on a.YYYYMM = b.yyyymm + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 5.3.2 calculate TA OTHERS +# MAGIC -- 5.3.2.4 calculate CVRM_OTHERS (TODO) +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_ta_top_corp +# MAGIC where source_name='CVRM' +# MAGIC AND rank1 = 'Total' +# MAGIC ), tmp_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC sum(a.sales_value) as sales_value, +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC where FLAG = 'CVRM' +# MAGIC group by a.YYYYMM +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'CVRM_OTHERS' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC 'CV_OTHERS' as corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC -- 25年没有TA大数,此类数据直接赋值0 +# MAGIC 0, --case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC 0, --case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC -------------------------* hard_code * ------------------------- +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'CVRM' as FLAG +# MAGIC from tmp_pack_total a +# MAGIC left join tmp_total b +# MAGIC on a.YYYYMM = b.yyyymm + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 5.3.3 calculate OTHERS +# MAGIC -- 5.3.3.1 calculate OTHERS_AZ_TA +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_az_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_top_corp +# MAGIC where corp_desc = '阿斯利康' +# MAGIC ), tmp_az_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC a.corp_cod, +# MAGIC sum(a.sales_value) as sales_value , +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC where nvl(a.corp_cod,'') ='A5Z' +# MAGIC group by a.YYYYMM,a.corp_cod +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'OTHERS_AZ_TA' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC a.corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'TA_AZ' as FLAG +# MAGIC from tmp_az_pack_total a +# MAGIC left join tmp_az_total b +# MAGIC on a.YYYYMM = b.yyyymm +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_sales +# MAGIC -- 5.3.3 calculate OTHERS +# MAGIC -- 5.3.3.2 calculate OTHERS_TA +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_total as ( +# MAGIC select +# MAGIC yyyymm, +# MAGIC sales_amount, +# MAGIC sales_amount_ly +# MAGIC from dws.dws_zk_retail_top_corp +# MAGIC where rank1 = 'Total' +# MAGIC ), tmp_pack_total as ( +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC sum(a.sales_value) as sales_value, +# MAGIC sum(a.sales_value_ly) as sales_value_ly +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final a +# MAGIC group by a.YYYYMM +# MAGIC ) +# MAGIC +# MAGIC insert into table tmp.tmp_retail_dm_zk_retail_sales_final +# MAGIC +# MAGIC select +# MAGIC a.YYYYMM, +# MAGIC 'OTHERS_TA' as iqvia_pack_code, +# MAGIC 'ROC' as AUDIT_COD, +# MAGIC 'ROC' as province_city, +# MAGIC 'OTHERS_TA' as corp_cod, +# MAGIC 0 as sales_unit, +# MAGIC 0 as sales_unit_ly, +# MAGIC case when b.sales_amount is not null then b.sales_amount - a.sales_value else 0 end as sales_value, +# MAGIC case when b.sales_amount_ly is not null then b.sales_amount_ly - a.sales_value_ly else 0 end as sales_value_ly, +# MAGIC 0 as counting_unit, +# MAGIC 0 as counting_unit_ly, +# MAGIC 'Retail(Quarterly)' as DATA_SOURCE, +# MAGIC null as source, +# MAGIC 0 as pack_flag, +# MAGIC 0 as brand_flag, +# MAGIC 'OTHERS_TA' as FLAG +# MAGIC from tmp_pack_total a +# MAGIC left join tmp_total b +# MAGIC on a.YYYYMM = b.yyyymm + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 3.3 映射到DM最终表 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.4 write into final table: dm.dm_zk_retail_sales +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_sales +# MAGIC +# MAGIC select +# MAGIC yyyymm, +# MAGIC iqvia_pack_code, +# MAGIC AUDIT_COD, +# MAGIC province_city, +# MAGIC corp_cod, +# MAGIC sales_unit, +# MAGIC sales_unit_ly, +# MAGIC sales_value, +# MAGIC sales_value_ly, +# MAGIC counting_unit, +# MAGIC counting_unit_ly, +# MAGIC DATA_SOURCE, +# MAGIC source, +# MAGIC pack_flag, +# MAGIC brand_flag, +# MAGIC FLAG, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from tmp.tmp_retail_dm_zk_retail_sales_final + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 3.4 补充新增的OTHERS数据到配置表中 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-3: map to dm.dm_zk_retail_sales +# MAGIC -- 3.5 将倒减的OTHERS数据补充到配置表中 +# MAGIC -- pack_flag :0-倒减的others 1-不拆的 2-拆的 +# MAGIC -- brand_flag :0-倒减的others 1-买了这个品牌 2-没买这个品牌 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_pack_property +# MAGIC ( +# MAGIC iqvia_lineno, +# MAGIC iqvia_pack_code, +# MAGIC PROD_COD, +# MAGIC iqvia_notes, +# MAGIC new_pack_flag, +# MAGIC is_exists_chpa, +# MAGIC product_id, +# MAGIC prescription_nature, +# MAGIC medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC common_name, +# MAGIC dosage_form, +# MAGIC user_type, +# MAGIC category_name, +# MAGIC product_name, +# MAGIC brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC counting_unit_a, +# MAGIC dosage_unit_a, +# MAGIC unit_a, +# MAGIC app1_cod, +# MAGIC app1_des, +# MAGIC app1_des_c, +# MAGIC app2_cod, +# MAGIC app2_des, +# MAGIC app2_des_c, +# MAGIC app3_cod, +# MAGIC app3_des, +# MAGIC app3_des_c, +# MAGIC atc1_cod, +# MAGIC atc1_des, +# MAGIC atc1_des_c, +# MAGIC atc2_cod, +# MAGIC atc2_des, +# MAGIC atc2_des_c, +# MAGIC atc3_cod, +# MAGIC atc3_des, +# MAGIC atc3_des_c, +# MAGIC atc4_cod, +# MAGIC atc4_des, +# MAGIC atc4_des_c, +# MAGIC bio_desc, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC edl_desc, +# MAGIC eth_otc_desc, +# MAGIC gene_orig_desc, +# MAGIC gqce_desc, +# MAGIC manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC mnfl_cod, +# MAGIC mnfl_des, +# MAGIC nrdl_desc, +# MAGIC pack_des, +# MAGIC stgh_des, +# MAGIC pack_lch, +# MAGIC paed_desc, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC tcm_desc, +# MAGIC vbp_desc, +# MAGIC unit, +# MAGIC counting_unit, +# MAGIC dosage_unit, +# MAGIC NRDL_ENTRY_DATE, +# MAGIC market, +# MAGIC bu, +# MAGIC extend_market_ratio, +# MAGIC is_az, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC select +# MAGIC iqvia_lineno, +# MAGIC iqvia_pack_code, +# MAGIC PROD_COD, +# MAGIC iqvia_notes, +# MAGIC new_pack_flag, +# MAGIC is_exists_chpa, +# MAGIC product_id, +# MAGIC prescription_nature, +# MAGIC medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC common_name, +# MAGIC dosage_form, +# MAGIC user_type, +# MAGIC category_name, +# MAGIC product_name, +# MAGIC brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC counting_unit_a, +# MAGIC dosage_unit_a, +# MAGIC unit_a, +# MAGIC app1_cod, +# MAGIC app1_des, +# MAGIC app1_des_c, +# MAGIC app2_cod, +# MAGIC app2_des, +# MAGIC app2_des_c, +# MAGIC app3_cod, +# MAGIC app3_des, +# MAGIC app3_des_c, +# MAGIC atc1_cod, +# MAGIC atc1_des, +# MAGIC atc1_des_c, +# MAGIC atc2_cod, +# MAGIC atc2_des, +# MAGIC atc2_des_c, +# MAGIC atc3_cod, +# MAGIC atc3_des, +# MAGIC atc3_des_c, +# MAGIC atc4_cod, +# MAGIC atc4_des, +# MAGIC atc4_des_c, +# MAGIC bio_desc, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC edl_desc, +# MAGIC eth_otc_desc, +# MAGIC gene_orig_desc, +# MAGIC gqce_desc, +# MAGIC manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC mnfl_cod, +# MAGIC mnfl_des, +# MAGIC nrdl_desc, +# MAGIC pack_des, +# MAGIC stgh_des, +# MAGIC pack_lch, +# MAGIC paed_desc, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC tcm_desc, +# MAGIC vbp_desc, +# MAGIC unit, +# MAGIC counting_unit, +# MAGIC dosage_unit, +# MAGIC NRDL_ENTRY_DATE, +# MAGIC market, +# MAGIC bu, +# MAGIC extend_market_ratio, +# MAGIC is_az, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from tmp.tmp_zk_retail_pack_property +# MAGIC union all +# MAGIC ------事实表中倒减出来的pack 需要补充到配置表中 +# MAGIC select +# MAGIC '' iqvia_lineno +# MAGIC ,iqvia_pack_code +# MAGIC ,'' prod_cod +# MAGIC ,'' iqvia_notes +# MAGIC ,'' new_pack_flag +# MAGIC ,'' Is_exists_chpa +# MAGIC ,iqvia_pack_code product_id +# MAGIC ,'' prescription_nature +# MAGIC ,'' medicine_type +# MAGIC ,'' zk_medicine_tier1 +# MAGIC ,'' zk_medicine_tier2 +# MAGIC ,'' zk_medicine_tier3 +# MAGIC ,'' zk_medicine_tier4 +# MAGIC ,'' common_name +# MAGIC ,'' dosage_form +# MAGIC ,'' user_type +# MAGIC ,'' category_name +# MAGIC ,'' product_name +# MAGIC ,'' brand_name +# MAGIC ,'' zk_manu_des +# MAGIC ,'' zk_corp_des +# MAGIC ,'' zk_pack_des +# MAGIC ,'' counting_unit_a +# MAGIC ,'' dosage_unit_a +# MAGIC ,'' unit_a +# MAGIC ,'' app1_cod +# MAGIC ,'' app1_des +# MAGIC ,'' app1_des_c +# MAGIC ,'' app2_cod +# MAGIC ,'' app2_des +# MAGIC ,'' app2_des_c +# MAGIC ,'' app3_cod +# MAGIC ,'' app3_des +# MAGIC ,'' app3_des_c +# MAGIC ,'' atc1_cod +# MAGIC ,'' atc1_des +# MAGIC ,'' atc1_des_c +# MAGIC ,'' atc2_cod +# MAGIC ,'' atc2_des +# MAGIC ,'' atc2_des_c +# MAGIC ,'' atc3_cod +# MAGIC +# MAGIC ,'' atc3_des +# MAGIC ,'' atc3_des_c +# MAGIC ,'' atc4_cod +# MAGIC ,'' atc4_des +# MAGIC ,'' atc4_des_c +# MAGIC ,'' bio_desc +# MAGIC ,'' cmps_cod +# MAGIC ,'' cmps_des +# MAGIC ,'' cmps_des_c +# MAGIC ,corp_cod corp_cod +# MAGIC ,'' corp_des +# MAGIC ,'' corp_des_c +# MAGIC ,'' edl_desc +# MAGIC ,'' eth_otc_desc +# MAGIC ,'' gene_orig_desc +# MAGIC ,'' gqce_desc +# MAGIC ,'' manu_cod +# MAGIC ,'' manu_des +# MAGIC ,'' manu_des_c +# MAGIC ,'' mnfl_cod +# MAGIC ,'' mnfl_des +# MAGIC ,'' nrdl_desc +# MAGIC ,'' pack_des +# MAGIC ,'' stgh_des +# MAGIC ,'' pack_lch +# MAGIC ,'' paed_desc +# MAGIC ,'Others' prod_des +# MAGIC ,'Others' prod_des_c +# MAGIC ,'' tcm_desc +# MAGIC ,'' vbp_desc +# MAGIC ,'' unit +# MAGIC ,'' counting_unit +# MAGIC ,'' dosage_unit +# MAGIC ,'' NRDL_ENTRY_DATE +# MAGIC ,'Non AZ Retail Related Market' market +# MAGIC ,'' bu +# MAGIC ,1 extend_market_ratio +# MAGIC ,CASE WHEN iqvia_pack_code LIKE '%AZ%' THEN 'Y' ELSE 'N' END is_az +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from ( +# MAGIC select distinct iqvia_pack_code,corp_cod +# MAGIC from DM.dm_zk_retail_sales +# MAGIC where iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_zk_retail_pack_property) +# MAGIC ) + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-4: map to dm.dm_zk_retail_pack_property + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 4.1 对公司归属从新划分 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: map to dm.dm_zk_retail_pack_property +# MAGIC -- 4.1 对公司归属从新划分 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_dm_zk_retail_pack_property +# MAGIC ( +# MAGIC iqvia_lineno, +# MAGIC iqvia_pack_code, +# MAGIC PROD_COD, +# MAGIC iqvia_notes, +# MAGIC new_pack_flag, +# MAGIC is_exists_chpa, +# MAGIC product_id, +# MAGIC prescription_nature, +# MAGIC medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC common_name, +# MAGIC dosage_form, +# MAGIC user_type, +# MAGIC category_name, +# MAGIC product_name, +# MAGIC brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC counting_unit_a, +# MAGIC dosage_unit_a, +# MAGIC unit_a, +# MAGIC app1_cod, +# MAGIC app1_des, +# MAGIC app1_des_c, +# MAGIC app2_cod, +# MAGIC app2_des, +# MAGIC app2_des_c, +# MAGIC app3_cod, +# MAGIC app3_des, +# MAGIC app3_des_c, +# MAGIC atc1_cod, +# MAGIC atc1_des, +# MAGIC atc1_des_c, +# MAGIC atc2_cod, +# MAGIC atc2_des, +# MAGIC atc2_des_c, +# MAGIC atc3_cod, +# MAGIC atc3_des, +# MAGIC atc3_des_c, +# MAGIC atc4_cod, +# MAGIC atc4_des, +# MAGIC atc4_des_c, +# MAGIC bio_desc, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC edl_desc, +# MAGIC eth_otc_desc, +# MAGIC gene_orig_desc, +# MAGIC gqce_desc, +# MAGIC manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC mnfl_cod, +# MAGIC mnfl_des, +# MAGIC nrdl_desc, +# MAGIC pack_des, +# MAGIC stgh_des, +# MAGIC pack_lch, +# MAGIC paed_desc, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC tcm_desc, +# MAGIC vbp_desc, +# MAGIC unit, +# MAGIC counting_unit, +# MAGIC dosage_unit, +# MAGIC NRDL_ENTRY_DATE, +# MAGIC MARKET, +# MAGIC bu, +# MAGIC extend_market_ratio, +# MAGIC is_az +# MAGIC ) +# MAGIC select distinct +# MAGIC a.iqvia_lineno +# MAGIC ,a.iqvia_pack_code +# MAGIC ,a.PROD_COD +# MAGIC ,a.iqvia_notes +# MAGIC ,a.new_pack_flag +# MAGIC ,a.is_exists_chpa +# MAGIC ,a.product_id +# MAGIC ,a.prescription_nature +# MAGIC ,a.medicine_type +# MAGIC ,a.zk_medicine_tier1 +# MAGIC ,a.zk_medicine_tier2 +# MAGIC ,a.zk_medicine_tier3 +# MAGIC ,a.zk_medicine_tier4 +# MAGIC ,a.common_name +# MAGIC ,a.dosage_form +# MAGIC ,a.user_type +# MAGIC ,a.category_name +# MAGIC ,a.product_name +# MAGIC ,a.brand_name +# MAGIC ,a.zk_manu_des +# MAGIC ,a.zk_corp_des +# MAGIC ,a.zk_pack_des +# MAGIC ,a.counting_unit_a +# MAGIC ,a.dosage_unit_a +# MAGIC ,a.unit_a +# MAGIC ,a.app1_cod +# MAGIC ,a.app1_des +# MAGIC ,a.app1_des_c +# MAGIC ,a.app2_cod +# MAGIC ,a.app2_des +# MAGIC ,a.app2_des_c +# MAGIC ,a.app3_cod +# MAGIC ,a.app3_des +# MAGIC ,a.app3_des_c +# MAGIC ,a.atc1_cod +# MAGIC ,a.atc1_des +# MAGIC ,a.atc1_des_c +# MAGIC ,a.atc2_cod +# MAGIC ,a.atc2_des +# MAGIC ,a.atc2_des_c +# MAGIC ,a.atc3_cod +# MAGIC ,a.atc3_des +# MAGIC ,a.atc3_des_c +# MAGIC ,a.atc4_cod +# MAGIC ,a.atc4_des +# MAGIC ,a.atc4_des_c +# MAGIC ,a.bio_desc +# MAGIC ,a.cmps_cod +# MAGIC ,a.cmps_des +# MAGIC ,a.cmps_des_c +# MAGIC ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod +# MAGIC ,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des +# MAGIC ,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c +# MAGIC ,a.edl_desc +# MAGIC ,a.eth_otc_desc +# MAGIC ,a.gene_orig_desc +# MAGIC ,a.gqce_desc +# MAGIC ,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod +# MAGIC ,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des +# MAGIC ,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c +# MAGIC ,a.mnfl_cod +# MAGIC ,a.mnfl_des +# MAGIC ,a.nrdl_desc +# MAGIC ,a.pack_des +# MAGIC ,a.stgh_des +# MAGIC ,a.pack_lch +# MAGIC ,a.paed_desc +# MAGIC ,a.prod_des +# MAGIC ,a.prod_des_c +# MAGIC ,a.tcm_desc +# MAGIC ,a.vbp_desc +# MAGIC ,a.unit +# MAGIC ,a.counting_unit +# MAGIC ,a.dosage_unit +# MAGIC ,a.NRDL_ENTRY_DATE +# MAGIC ,A.MARKET +# MAGIC ,a.bu +# MAGIC ,a.extend_market_ratio +# MAGIC ,a.is_az +# MAGIC from dws.dws_zk_retail_pack_property a +# MAGIC left join ( +# MAGIC select +# MAGIC ---------------------------------------------- +# MAGIC -- format prod_cod +# MAGIC case when length(prod_cod) < 9 then right(concat('000000000',prod_cod),9) else prod_cod end as prod_cod, +# MAGIC ---------------------------------------------- +# MAGIC corp_cod,corp_des, +# MAGIC right(concat('000000',manu_cod ),6) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change +# MAGIC where pack_cod is null +# MAGIC ) b on a.prod_cod = b.prod_cod +# MAGIC left join ( +# MAGIC select +# MAGIC ---------------------------------------------- +# MAGIC -- format pack_cod +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' then right(concat('000000000000',trim(pack_cod)),12) else trim(pack_cod) end as pack_cod, +# MAGIC ---------------------------------------------- +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC right(concat('000000',manu_cod ),6) manu_cod, +# MAGIC manu_des +# MAGIC from dwd.dwd_gnd_tbl_corp_change +# MAGIC where pack_cod is not null +# MAGIC ) c on a.iqvia_pack_code = c.pack_cod +# MAGIC left join ( +# MAGIC select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ) d on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod +# MAGIC Left join ( +# MAGIC select +# MAGIC distinct +# MAGIC right(concat('000000',manu_cod ),6) manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ) e On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 4.2 获取pack market的对应关系 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: map to dm.dm_zk_retail_pack_property +# MAGIC -- 4.2 获取pack market的对应关系 +# MAGIC -- 4.2.1 从底表获取market 与ta 对应关系 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dws.dws_ext_retail_td_ta +# MAGIC select +# MAGIC market, +# MAGIC ta, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dwd.dwd_gnd_ext_retail_dim_ta; + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-4: map to dm.dm_zk_retail_pack_property +# MAGIC -- 4.2 获取pack market的对应关系 +# MAGIC -- 4.2.2 获取pack market的对应关系, 映射到dm +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC INSERT OVERWRITE table dm.dm_zk_retail_pack_property +# MAGIC SELECT +# MAGIC MARKET_PACK_KEY +# MAGIC ,iqvia_pack_code iqvia_pack_code +# MAGIC ,MAX(pack_des) pack_des +# MAGIC ,MAX(stgh_des) stgh_des +# MAGIC ,MAX(pack_lch) pack_lch +# MAGIC ,MAX(Family_Code) Family_Code +# MAGIC ,MAX(Family_Name) Family_Name +# MAGIC ,MAX(iqvia_prod_code) iqvia_prod_code +# MAGIC ,MAX(prod_des) prod_des +# MAGIC ,MAX(prod_des_c) prod_des_c +# MAGIC ,MAX(cmps_cod) cmps_cod +# MAGIC ,MAX(CMPS_DES) CMPS_DES +# MAGIC ,MAX(cmps_des_c) cmps_des_c +# MAGIC ,MAX(atc1_cod) atc1_cod +# MAGIC ,MAX(atc2_cod) atc2_cod +# MAGIC ,MAX(atc3_cod) atc3_cod +# MAGIC ,MAX(atc4_cod) atc4_cod +# MAGIC ,MAX(APP1_COD) APP1_COD +# MAGIC ,MAX(APP2_COD) APP2_COD +# MAGIC ,MAX(APP3_COD) APP3_COD +# MAGIC ,MAX(BIO_DESC) BIO_DESC +# MAGIC ,MAX(gene_orig_desc) gene_orig_desc +# MAGIC ,MAX(ETH_OTC_DESC) ETH_OTC_DESC +# MAGIC ,MAX(nrdl_desc) nrdl_desc +# MAGIC ,MAX(NRDL_ENTRY_DATE) NRDL_ENTRY_DATE +# MAGIC ,MAX(edl_desc) edl_desc +# MAGIC ,MAX(TCM_DESC) TCM_DESC +# MAGIC ,MAX(PAED_DESC) PAED_DESC +# MAGIC ,MAX(GQCE_DESC) GQCE_DESC +# MAGIC ,MAX(VBP_DESC) VBP_DESC +# MAGIC ,MAX(MANU_COD) MANU_COD +# MAGIC ,MAX(MANU_DES) MANU_DES +# MAGIC ,MAX(MANU_DES_C) MANU_DES_C +# MAGIC ,MAX(MNFL_COD) MNFL_COD +# MAGIC ,MAX(MNFL_DES) MNFL_DES +# MAGIC ,MAX(corp_cod) corp_cod +# MAGIC ,MAX(corp_des) corp_des +# MAGIC ,MAX(CORP_DES_C) CORP_DES_C +# MAGIC ,MAX(BrandType) BrandType +# MAGIC ,MAX(market) market +# MAGIC ,MAX(KEY_COMPETITOR) KEY_COMPETITOR +# MAGIC ,MAX(is_az) is_az +# MAGIC ,MAX(AZ_MAIN) AZ_MAIN +# MAGIC ,MAX(AZ_Related) AZ_Related +# MAGIC ,MAX(atc1_des) atc1_des +# MAGIC ,MAX(atc1_des_c) atc1_des_c +# MAGIC ,MAX(atc2_des) atc2_des +# MAGIC ,MAX(atc2_des_c) atc2_des_c +# MAGIC ,MAX(atc3_des) atc3_des +# MAGIC ,MAX(atc3_des_c) atc3_des_c +# MAGIC ,MAX(atc4_des) atc4_des +# MAGIC ,MAX(atc4_des_c) atc4_des_c +# MAGIC ,MAX(app1_des) app1_des +# MAGIC ,MAX(app1_des_c) app1_des_c +# MAGIC ,MAX(app2_des) app2_des +# MAGIC ,MAX(app2_des_c) app2_des_c +# MAGIC ,MAX(app3_des) app3_des +# MAGIC ,MAX(app3_des_c) app3_des_c +# MAGIC ,MAX(class) class +# MAGIC ,MAX(TA) TA +# MAGIC FROM ( +# MAGIC select +# MAGIC distinct +# MAGIC CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market' +# MAGIC WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market' +# MAGIC WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market' +# MAGIC ELSE a.market +# MAGIC END ||'_'||a.iqvia_pack_code MARKET_PACK_KEY +# MAGIC ,a.iqvia_pack_code +# MAGIC ,c.pack_des +# MAGIC ,c.stgh_des +# MAGIC ,c.pack_lch +# MAGIC ,'' Family_Code +# MAGIC ,'' Family_Name +# MAGIC ,c.iqvia_prod_code +# MAGIC ,case when c.iqvia_pack_code like '%O%' THEN 'Others' else c.prod_des end prod_des +# MAGIC ,case when c.iqvia_pack_code like '%O%' THEN 'Others' else c.prod_des_c end prod_des_c +# MAGIC ,c.cmps_cod +# MAGIC ,c.CMPS_DES +# MAGIC ,c.cmps_des_c +# MAGIC ,c.atc1_cod +# MAGIC ,c.atc2_cod +# MAGIC ,c.atc3_cod +# MAGIC ,c.atc4_cod +# MAGIC ,c.APP1_COD +# MAGIC ,c.APP2_COD +# MAGIC ,c.APP3_COD +# MAGIC ,c.BIO_DESC +# MAGIC ,c.gene_orig_desc +# MAGIC ,c.ETH_OTC_DESC +# MAGIC ,c.nrdl_desc +# MAGIC ,nvl(MOLE.NRDL_Entry_Date,'') AS NRDL_ENTRY_DATE +# MAGIC ,c.edl_desc +# MAGIC ,c.TCM_DESC +# MAGIC ,c.PAED_DESC +# MAGIC ,c.GQCE_DESC +# MAGIC ,c.VBP_DESC +# MAGIC ,a.MANU_COD +# MAGIC ,a.MANU_DES +# MAGIC ,a.MANU_DES_C +# MAGIC ,c.MNFL_COD +# MAGIC ,c.MNFL_DES +# MAGIC ,CASE WHEN A.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' else a.CORP_COD END as corp_cod +# MAGIC ,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 as corp_des +# MAGIC ,CASE WHEN A.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' else a.CORP_DES_C END CORP_DES_C +# MAGIC ,'' BrandType +# MAGIC ,CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market' +# MAGIC WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market' +# MAGIC WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market' +# MAGIC ELSE a.market +# MAGIC END market +# MAGIC ,t5.KEY_COMPETITOR +# MAGIC ,IF(a.corp_des_c in('阿斯利康制药集团') or A.iqvia_pack_code LIKE '%AZ%' ,'Y','N') is_az +# MAGIC ,'' AZ_MAIN +# MAGIC ,'' AZ_Related +# MAGIC ,c.atc1_des +# MAGIC ,c.atc1_des_c +# MAGIC ,c.atc2_des +# MAGIC ,c.atc2_des_c +# MAGIC ,c.atc3_des +# MAGIC ,c.atc3_des_c +# MAGIC ,c.atc4_des +# MAGIC ,c.atc4_des_c +# MAGIC ,c.app1_des +# MAGIC ,c.app1_des_c +# MAGIC ,c.app2_des +# MAGIC ,c.app2_des_c +# MAGIC ,c.app3_des +# MAGIC ,c.app3_des_c +# MAGIC ,nvl(t3.class,'Others') class +# MAGIC ,case when a.market ='Antacid anti GI swelling agent+PPI Oral' then 'GI' +# MAGIC when a.MARKET ='RD Market' then 'RD' +# MAGIC ELSE +# MAGIC CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM' +# MAGIC WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV' +# MAGIC ELSE t2.ta END +# MAGIC END TA +# MAGIC from tmp.tmp_dm_zk_retail_pack_property a +# MAGIC left join dwd.dwd_gnd_ext_retail_pack_property c on a.product_id = c.product_id +# MAGIC LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute MOLE +# MAGIC -------------------------------------------------------------------- +# MAGIC -- format pack_code from dwd_ims_td_pack_additional_attribute +# MAGIC ON a.iqvia_pack_code = +# MAGIC case when length(trim(MOLE.Pack_Code)) < 12 and trim(MOLE.Pack_Code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(MOLE.Pack_Code)),12) +# MAGIC else trim(MOLE.Pack_Code) +# MAGIC end +# MAGIC -------------------------------------------------------------------- +# MAGIC left join dws.dws_ext_retail_td_ta t2 on a.market = t2.market +# MAGIC left join dwd.dwd_gnd_tblclass t3 on a.MARKET = case when t3.market is null then a.market else t3.market end +# MAGIC ----------------------------------------------------------------------------- +# MAGIC -- format pack_code from dwd_gnd_tblclass +# MAGIC and nvl(a.iqvia_pack_code,'') = +# MAGIC case when t3.pack_code is null +# MAGIC then nvl(a.iqvia_pack_code,'') +# MAGIC else +# MAGIC case when length(trim(t3.pack_code)) < 12 and trim(t3.pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(t3.pack_code)),12) +# MAGIC else trim(t3.pack_code) +# MAGIC end +# MAGIC end +# MAGIC ----------------------------------------------------------------------------- +# MAGIC -- format product_code from dwd_gnd_tblclass +# MAGIC and nvl(a.PROD_COD,'') = +# MAGIC case when t3.product_code is null +# MAGIC then nvl(a.PROD_COD,'') +# MAGIC else case when length(t3.product_code) < 9 then right(concat('000000000',t3.product_code),9) else t3.product_code end +# MAGIC end +# MAGIC ----------------------------------------------------------------------------- +# MAGIC 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 +# MAGIC and nvl(a.corp_cod,'') = case when t3.Corporation_code is null then nvl(a.corp_cod ,'') else t3.Corporation_code end +# MAGIC and nvl(a.manu_cod,'')=case when t3.Manufacturer_Code is null then nvl(a.manu_cod,'') else t3.Manufacturer_Code end +# MAGIC and nvl(c.atc1_cod,'') = case when t3.ATC1_Code is null then nvl(c.atc1_cod ,'') else t3.ATC1_Code end +# MAGIC and nvl(c.ATC2_COD,'') = case when t3.ATC2_Code is null then nvl(c.ATC2_COD ,'') else t3.ATC2_Code end +# MAGIC and nvl(c.ATC3_COD,'') = case when t3.ATC3_Code is null then nvl(c.ATC3_COD ,'') else t3.ATC3_Code end +# MAGIC and nvl(c.ATC4_COD,'') = case when t3.ATC4_Code is null then nvl(c.ATC4_COD ,'') else t3.ATC4_Code end +# MAGIC and nvl(c.app1_cod,'') = case when t3.NFC1_Code is null then nvl(c.app1_cod ,'') else t3.NFC1_Code end +# MAGIC and nvl(c.APP2_COD,'') = case when t3.NFC2_Code is null then nvl(c.APP2_COD ,'') else t3.NFC2_Code end +# MAGIC and nvl(c.APP3_COD,'') = case when t3.NFC3_Code is null then nvl(c.APP3_COD ,'') else t3.NFC3_Code end +# MAGIC and nvl(c.stgh_des,'') = case when t3.Strength is null then nvl(c.stgh_des ,'') else t3.Strength end +# MAGIC left join (select distinct MARKET,PACK_CODE as pack_cod,KEY_COMPETITOR from DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING) t5 +# MAGIC on a.market = t5.MARKET +# MAGIC and a.iqvia_pack_code = t5.PACK_COD +# MAGIC ) +# MAGIC group by MARKET_PACK_KEY ,iqvia_pack_code + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-5: map to dm.dm_zk_retail_market_property + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-5: map to dm.dm_zk_retail_market_property +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_market_property +# MAGIC select +# MAGIC distinct +# MAGIC iqvia_pack_code, +# MAGIC market, +# MAGIC ta +# MAGIC from dm.dm_zk_retail_pack_property + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-6: map to dm.dm_zk_retail_dtp_pack_property + +# COMMAND ---------- + +# DBTITLE 1,overwrite dws.dws_zk_retail_dtp_market +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-6: map to dm.dm_zk_retail_dtp_pack_property +# MAGIC -- 6.1 dtp 部分生成dws +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dws.dws_zk_retail_dtp_market +# MAGIC ( +# MAGIC region_type, +# MAGIC higher_level_region, +# MAGIC market, +# MAGIC iqvia_pack_code, +# MAGIC iqvia_prod_code, +# MAGIC iqvia_notes, +# MAGIC new_pack_flag, +# MAGIC is_exists_chpa, +# MAGIC prescription_nature, +# MAGIC common_name, +# MAGIC dosage_form, +# MAGIC category_name, +# MAGIC product_name, +# MAGIC brand_name, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC counting_unit_a, +# MAGIC app1_cod, +# MAGIC app1_des, +# MAGIC app1_des_c, +# MAGIC app2_cod, +# MAGIC app2_des, +# MAGIC app2_des_c, +# MAGIC app3_cod, +# MAGIC app3_des, +# MAGIC app3_des_c, +# MAGIC atc1_cod, +# MAGIC atc1_des, +# MAGIC atc1_des_c, +# MAGIC atc2_cod, +# MAGIC atc2_des, +# MAGIC atc2_des_c, +# MAGIC atc3_cod, +# MAGIC atc3_des, +# MAGIC atc3_des_c, +# MAGIC atc4_cod, +# MAGIC atc4_des, +# MAGIC atc4_des_c, +# MAGIC bio_desc, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC edl_desc, +# MAGIC eth_otc_desc, +# MAGIC gene_orig_desc, +# MAGIC gqce_desc, +# MAGIC manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC mnfl_cod, +# MAGIC mnfl_des, +# MAGIC nrdl_desc, +# MAGIC pack_des, +# MAGIC stgh_des, +# MAGIC pack_lch, +# MAGIC paed_desc, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC tcm_desc, +# MAGIC vbp_desc, +# MAGIC unit, +# MAGIC counting_unit, +# MAGIC dosage_unit, +# MAGIC NRDL_ENTRY_DATE, +# MAGIC bu, +# MAGIC Market_Ratio +# MAGIC ) +# MAGIC select +# MAGIC distinct +# MAGIC NULL AS region_type, +# MAGIC NULL AS higher_level_region, +# MAGIC market, +# MAGIC iqvia_pack_code, +# MAGIC iqvia_prod_code, +# MAGIC iqvia_notes, +# MAGIC new_pack_flag, +# MAGIC is_exists_chpa, +# MAGIC NULL AS prescription_nature, +# MAGIC NULL AS common_name, +# MAGIC NULL AS dosage_form, +# MAGIC NULL AS category_name, +# MAGIC NULL AS product_name, +# MAGIC NULL AS brand_name, +# MAGIC NULL AS zk_corp_des, +# MAGIC NULL AS zk_pack_des, +# MAGIC NULL AS counting_unit_a, +# MAGIC app1_cod, +# MAGIC app1_des, +# MAGIC app1_des_c, +# MAGIC app2_cod, +# MAGIC app2_des, +# MAGIC app2_des_c, +# MAGIC app3_cod, +# MAGIC app3_des, +# MAGIC app3_des_c, +# MAGIC atc1_cod, +# MAGIC atc1_des, +# MAGIC atc1_des_c, +# MAGIC atc2_cod, +# MAGIC atc2_des, +# MAGIC atc2_des_c, +# MAGIC atc3_cod, +# MAGIC atc3_des, +# MAGIC atc3_des_c, +# MAGIC atc4_cod, +# MAGIC atc4_des, +# MAGIC atc4_des_c, +# MAGIC bio_desc, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC cmps_des_c, +# MAGIC corp_cod, +# MAGIC corp_des, +# MAGIC corp_des_c, +# MAGIC edl_desc, +# MAGIC eth_otc_desc, +# MAGIC gene_orig_desc, +# MAGIC gqce_desc, +# MAGIC manu_cod, +# MAGIC manu_des, +# MAGIC manu_des_c, +# MAGIC mnfl_cod, +# MAGIC mnfl_des, +# MAGIC nrdl_desc, +# MAGIC pack_des, +# MAGIC stgh_des, +# MAGIC pack_lch, +# MAGIC paed_desc, +# MAGIC prod_des, +# MAGIC prod_des_c, +# MAGIC tcm_desc, +# MAGIC vbp_desc, +# MAGIC unit, +# MAGIC counting_unit, +# MAGIC dosage_unit, +# MAGIC NRDL_ENTRY_DATE, +# MAGIC bu, +# MAGIC Market_Ratio +# MAGIC from tmp.tmp_zk_retail_dtp_market_corp t1 +# MAGIC union +# MAGIC select +# MAGIC distinct +# MAGIC '' region_type +# MAGIC ,'' higher_level_region +# MAGIC ,'DTP_OTHER Market' market +# MAGIC ,iqvia_pack_code +# MAGIC ,'' iqvia_prod_code +# MAGIC ,'' iqvia_notes +# MAGIC ,'' new_pack_flag +# MAGIC ,'' is_exists_chpa +# MAGIC ,'' prescription_nature +# MAGIC ,'' common_name +# MAGIC ,'' dosage_form +# MAGIC ,'' category_name +# MAGIC ,'' product_name +# MAGIC ,'' brand_name +# MAGIC ,'' zk_corp_des +# MAGIC ,'' zk_pack_des +# MAGIC ,'' counting_unit_a +# MAGIC ,'' app1_cod +# MAGIC ,'' app1_des +# MAGIC ,'' app1_des_c +# MAGIC ,'' app2_cod +# MAGIC ,'' app2_des +# MAGIC ,'' app2_des_c +# MAGIC ,'' app3_cod +# MAGIC ,'' app3_des +# MAGIC ,'' app3_des_c +# MAGIC ,'' atc1_cod +# MAGIC ,'' atc1_des +# MAGIC ,'' atc1_des_c +# MAGIC ,'' atc2_cod +# MAGIC ,'' atc2_des +# MAGIC ,'' atc2_des_c +# MAGIC ,'' atc3_cod +# MAGIC ,'' atc3_des +# MAGIC ,'' atc3_des_c +# MAGIC ,'' atc4_cod +# MAGIC ,'' atc4_des +# MAGIC ,'' atc4_des_c +# MAGIC ,'' bio_desc +# MAGIC ,'' cmps_cod +# MAGIC ,'' cmps_des +# MAGIC ,'' cmps_des_c +# MAGIC ,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' ELSE '' END corp_cod +# MAGIC ,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN 'ASTRAZENECA' ELSE '' END corp_des +# MAGIC ,CASE WHEN t1.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' ELSE '' END corp_des_c +# MAGIC ,'' edl_desc +# MAGIC ,'' eth_otc_desc +# MAGIC ,'' gene_orig_desc +# MAGIC ,'' gqce_desc +# MAGIC ,'' manu_cod +# MAGIC ,'' manu_des +# MAGIC ,'' manu_des_c +# MAGIC ,'' mnfl_cod +# MAGIC ,'' mnfl_des +# MAGIC ,'' nrdl_desc +# MAGIC ,'' pack_des +# MAGIC ,'' stgh_des +# MAGIC ,'' pack_lch +# MAGIC ,'' paed_desc +# MAGIC ,'' prod_des +# MAGIC ,'' prod_des_c +# MAGIC ,'' tcm_desc +# MAGIC ,'' vbp_desc +# MAGIC ,'' unit +# MAGIC ,'' counting_unit +# MAGIC ,'' dosage_unit +# MAGIC ,null NRDL_ENTRY_DATE +# MAGIC ,null +# MAGIC ,'1' Market_Ratio +# MAGIC from tmp.tmp_retail_dtp_final_sales t1 +# MAGIC where iqvia_pack_code LIKE '%OTHERS' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-6: map to dm.dm_zk_retail_dtp_pack_property +# MAGIC -- 6.2 dtp 部分生成 dm +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_tblclass as ( +# MAGIC select +# MAGIC ------------------------------------------------------------------- +# MAGIC -- format pack_code & product_code +# MAGIC case when length(trim(pack_code)) < 12 and trim(pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_code)),12) +# MAGIC else trim(pack_code) +# MAGIC end as new_pack_code, +# MAGIC case when length(product_code) < 9 then right(concat('000000000',product_code),9) else product_code end as new_product_code, +# MAGIC ------------------------------------------------------------------- +# MAGIC * +# MAGIC from dwd.dwd_gnd_tblclass +# MAGIC ) +# MAGIC +# MAGIC ------------获取对应class 及其他维度------- +# MAGIC insert overwrite table dm.dm_zk_retail_dtp_pack_property +# MAGIC select distinct +# MAGIC A.market ||'_'|| A.iqvia_pack_code MARKET_PACK_KEY +# MAGIC ,A.iqvia_pack_code +# MAGIC ,A.pack_des +# MAGIC ,A.stgh_des +# MAGIC ,A.pack_lch +# MAGIC ,'' Family_cod +# MAGIC ,'' Family_Name +# MAGIC ,A.iqvia_prod_code PROD_COD +# MAGIC ,A.prod_des +# MAGIC ,A.prod_des_c +# MAGIC ,A.cmps_cod +# MAGIC ,A.cmps_des +# MAGIC ,A.cmps_des_c +# MAGIC ,A.atc1_cod +# MAGIC ,A.atc2_cod +# MAGIC ,A.atc3_cod +# MAGIC ,A.atc4_cod +# MAGIC ,A.app1_cod +# MAGIC ,A.app2_cod +# MAGIC ,A.app3_cod +# MAGIC ,A.BIO_DESC +# MAGIC ,A.gene_orig_desc +# MAGIC ,A.eth_otc_desc +# MAGIC ,A.nrdl_desc +# MAGIC ,A.NRDL_ENTRY_DATE +# MAGIC ,A.edl_desc +# MAGIC ,A.TCM_DESC +# MAGIC ,A.PAED_DESC +# MAGIC ,A.GQCE_DESC +# MAGIC ,A.VBP_DESC +# MAGIC ,A.MANU_COD +# MAGIC ,A.MANU_DES +# MAGIC ,A.MANU_DES_C +# MAGIC ,A.MNFL_COD +# MAGIC ,A.MNFL_DES +# MAGIC ,A.CORP_COD +# MAGIC ,CASE WHEN A.corp_des LIKE '% GROUP%' THEN replace(A.corp_des,' GROUP','' ) ELSE A.corp_des END corp_des +# MAGIC ,CORP_DES_C +# MAGIC ,'' BrandType +# MAGIC ,A.MARKET +# MAGIC ,t5.KEY_COMPETITOR +# MAGIC ,CASE WHEN CORP_COD ='A5Z' THEN 'Y' ELSE 'N' END IS_AZ +# MAGIC ,'' AZ_MAIN +# MAGIC ,case when dmt.TA is null then 'Others MKT' else 'AZ Related MKT' end as AZ_Related +# MAGIC ,atc1_des +# MAGIC ,atc1_des_c +# MAGIC ,atc2_des +# MAGIC ,atc2_des_c +# MAGIC ,atc3_des +# MAGIC ,atc3_des_c +# MAGIC ,atc4_des +# MAGIC ,atc4_des_c +# MAGIC ,app1_des +# MAGIC ,app1_des_c +# MAGIC ,app2_des +# MAGIC ,app2_des_c +# MAGIC ,app3_des +# MAGIC ,app3_des_c +# MAGIC ,ifnull(t3.class,'Others') as Class +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dws.dws_zk_retail_dtp_market A +# MAGIC left join dwd.dwd_gnd_ims_tblmarket_ta_map dmt on dmt.Market = A.Market +# MAGIC left join tmp_tblclass t3 +# MAGIC on A.market = ifnull(t3.market , A.market ) +# MAGIC -------------------------------------------------------------- +# MAGIC -- format +# MAGIC and A.iqvia_pack_code = ifnull(t3.new_pack_code, A.iqvia_pack_code) +# MAGIC and A.iqvia_prod_code = ifnull(t3.new_product_code, A.iqvia_prod_code) +# MAGIC -------------------------------------------------------------- +# MAGIC and A.cmps_cod = ifnull(right(concat('000000',t3.molecule_code ), 6) , A.cmps_cod) +# MAGIC and A.corp_cod = ifnull(t3.Corporation_code , A.corp_cod) +# MAGIC and A.manu_cod = ifnull(t3.Manufacturer_Code , A.manu_cod) +# MAGIC and A.ATC1_COD = ifnull(t3.ATC1_Code , A.ATC1_COD) +# MAGIC and A.ATC2_COD = ifnull(t3.ATC2_Code , A.ATC2_COD) +# MAGIC and A.ATC3_COD = ifnull(t3.ATC3_Code , A.ATC3_COD) +# MAGIC and A.ATC4_COD = ifnull(t3.ATC4_Code , A.ATC4_COD) +# MAGIC and A.APP1_COD = ifnull(t3.NFC1_Code , A.APP1_COD) +# MAGIC and A.APP2_COD = ifnull(t3.NFC2_Code , A.APP2_COD) +# MAGIC and A.APP3_COD = ifnull(t3.NFC3_Code , A.APP3_COD) +# MAGIC and ifnull(A.STGH_DES, '') = ifnull(t3.Strength, ifnull(A.STGH_DES, '')) +# MAGIC left join (select distinct MARKET,PACK_CODE as PACK_COD,KEY_COMPETITOR from DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING) t5 +# MAGIC on A.market = t5.MARKET +# MAGIC and A.iqvia_pack_code = t5.PACK_COD +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-7: map to dm.dm_zk_retail_dtp_sales + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-7: map to dm.dm_zk_retail_dtp_sales +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_dtp_sales +# MAGIC select +# MAGIC a.year, +# MAGIC a.yq, +# MAGIC a.yyyymm, +# MAGIC a.iqvia_pack_code, +# MAGIC nvl(b.geo_key, a.geo_key) as AUDIT_COD, +# MAGIC a.sales_value, +# MAGIC a.sales_unit, +# MAGIC a.counting_unit, +# MAGIC a.sales_value_ly, +# MAGIC a.sales_unit_ly, +# MAGIC a.counting_unit_ly, +# MAGIC ------------------------------------------------------------- +# MAGIC -- dtp相关的数据的pack_flag 除计算的OTHERS外(0),其余(1,2) 均为1 +# MAGIC case when a.pack_flag = 0 then 0 else 1 end as pack_flag, +# MAGIC ------------------------------------------------------------- +# MAGIC a.brand_flag +# MAGIC from tmp.tmp_retail_dtp_final_sales a +# MAGIC left join dm.dm_zk_retail_geo b +# MAGIC on a.geo_key = b.province_city +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-8: map to dm.dm_zk_retail_sales_kpi + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-1:品牌数据报告(13个) +# MAGIC - share +# MAGIC - key_brand_ytd +# MAGIC - key_brand_rank_ytd +# MAGIC - top_brand_ytd +# MAGIC - top_brand_ms_ytd +# MAGIC - top_brand_gr_ytd +# MAGIC - top_brand_inc_ms_ytd +# MAGIC - key_brand_qtd +# MAGIC - key_brand_rank_qtd +# MAGIC - top_brand_qtd +# MAGIC - top_brand_ms_qtd +# MAGIC - top_brand_inc_ms_qtd +# MAGIC - top_brand_gr_qtd + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.1 kpi: share +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with exploded_data as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC ifnull(common_name,'' ) as common_name, +# MAGIC level, +# MAGIC split(level_ta,',') array_ta, +# MAGIC split(level_market,',') array_market, +# MAGIC split(level_molecule,',') array_molecule, +# MAGIC split(level_brand,',') array_brand +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where level like '%MULTI_BRAND%' +# MAGIC ), tmp_config as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC common_name, +# MAGIC level, +# MAGIC array_ta[idx] as level_ta, +# MAGIC array_market[idx] as level_market, +# MAGIC array_molecule[idx] as level_molecule, +# MAGIC array_brand[idx] as level_brand +# MAGIC from exploded_data +# MAGIC lateral view posexplode(array_ta) AS idx, split_ta +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC common_name, +# MAGIC level, +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC level_molecule, +# MAGIC level_brand +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where level = 'BRAND' +# MAGIC ),max_pack_mapping as ( +# MAGIC select +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC level_molecule, +# MAGIC level_brand, +# MAGIC molecule_desc, +# MAGIC product_desc, +# MAGIC corp_cod, +# MAGIC max(pack_code) as pack_code +# MAGIC from tmp.tmp_retail_pack_mapping +# MAGIC group by level_ta,level_market,level_molecule,level_brand,molecule_desc,product_desc,corp_cod +# MAGIC ), tmp_brand_kpi as ( +# MAGIC select +# MAGIC distinct +# MAGIC c.pack_code, +# MAGIC c.corp_cod, +# MAGIC a.YYYYMM, +# MAGIC null as ytd, +# MAGIC d.geo_key, +# MAGIC a.val_share as kpi_val, +# MAGIC a.vol_share as kpi_vol, +# MAGIC a.ta, +# MAGIC a.key_brand_ytd, +# MAGIC a.key_brand_rank_ytd, +# MAGIC a.top_brand_ytd, +# MAGIC a.top_brand_ms_ytd, +# MAGIC a.top_brand_inc_ms_ytd, +# MAGIC a.top_brand_gr_ytd, +# MAGIC a.key_brand_qtd, +# MAGIC a.key_brand_rank_qtd, +# MAGIC a.top_brand_qtd, +# MAGIC a.top_brand_ms_qtd, +# MAGIC a.top_brand_inc_ms_qtd, +# MAGIC a.top_brand_gr_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC inner join tmp_config b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.zk_brand_category = b.brand +# MAGIC and a.zk_common_name = b.common_name +# MAGIC inner join max_pack_mapping c +# MAGIC on c.level_ta = b.level_ta +# MAGIC and c.level_market = b.level_market +# MAGIC and c.level_molecule = b.level_molecule +# MAGIC and c.level_brand = b.level_brand +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC ), tmp_brand_kpi_ly as ( +# MAGIC select +# MAGIC pack_code, +# MAGIC corp_cod, +# MAGIC cast(YYYYMM + 100 as int ) as YYYYMM, +# MAGIC ytd, +# MAGIC geo_key, +# MAGIC kpi_val as kpi_val_ly, +# MAGIC kpi_vol as kpi_vol_ly, +# MAGIC ta +# MAGIC from tmp_brand_kpi +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC a.pack_code, +# MAGIC a.corp_cod, +# MAGIC a.yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'share' as KPI_name, +# MAGIC a.kpi_val, +# MAGIC b.kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC a.kpi_vol, +# MAGIC b.kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_brand_kpi a +# MAGIC left join tmp_brand_kpi_ly b +# MAGIC on a.pack_code = b.pack_code +# MAGIC and a.YYYYMM = b.YYYYMM +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.2 kpi: key_brand_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_brand_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.key_brand_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_brand_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.key_brand_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_brand_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC key_brand_ytd +# MAGIC from tmp_brand_ytd_value +# MAGIC ), tmp_brand_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC key_brand_ytd +# MAGIC from tmp_brand_ytd_volume +# MAGIC ), tmp_brand_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.key_brand_ytd, +# MAGIC b.key_brand_ytd as key_brand_ytd_ly +# MAGIC from tmp_brand_ytd_value a +# MAGIC inner join tmp_brand_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_brand_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.key_brand_ytd, +# MAGIC b.key_brand_ytd as key_brand_ytd_ly +# MAGIC from tmp_brand_ytd_volume a +# MAGIC inner join tmp_brand_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'key_brand_ytd' as KPI_name, +# MAGIC null as kpi_val, +# MAGIC null as kpi_val_ly, +# MAGIC a.key_brand_ytd as str_kpi_val, +# MAGIC a.key_brand_ytd_ly as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC b.key_brand_ytd as str_kpi_vol, +# MAGIC b.key_brand_ytd_ly as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_brand_ytd_value_all a +# MAGIC inner join tmp_brand_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.3 kpi: key_brand_rank_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.key_brand_rank_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.key_brand_rank_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC key_brand_rank_ytd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC key_brand_rank_ytd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.key_brand_rank_ytd, +# MAGIC b.key_brand_rank_ytd as key_brand_rank_ytd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.key_brand_rank_ytd, +# MAGIC b.key_brand_rank_ytd as key_brand_rank_ytd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'key_brand_rank_ytd' as KPI_name, +# MAGIC a.key_brand_rank_ytd as kpi_val, +# MAGIC a.key_brand_rank_ytd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.key_brand_rank_ytd as kpi_vol, +# MAGIC b.key_brand_rank_ytd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.4 kpi: top_brand_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_ytd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_ytd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ytd, +# MAGIC b.top_brand_ytd as top_brand_ytd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ytd, +# MAGIC b.top_brand_ytd as top_brand_ytd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_ytd' as KPI_name, +# MAGIC null as kpi_val, +# MAGIC null as kpi_val_ly, +# MAGIC a.top_brand_ytd as str_kpi_val, +# MAGIC a.top_brand_ytd_ly as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC b.top_brand_ytd as str_kpi_vol, +# MAGIC b.top_brand_ytd_ly as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.5 kpi: top_brand_ms_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ms_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ms_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_ms_ytd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_ms_ytd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ms_ytd, +# MAGIC b.top_brand_ms_ytd as top_brand_ms_ytd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ms_ytd, +# MAGIC b.top_brand_ms_ytd as top_brand_ms_ytd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_ms_ytd' as KPI_name, +# MAGIC a.top_brand_ms_ytd as kpi_val, +# MAGIC a.top_brand_ms_ytd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_ms_ytd as kpi_vol, +# MAGIC b.top_brand_ms_ytd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.6 kpi: top_brand_gr_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_gr_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_gr_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_gr_ytd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_gr_ytd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_gr_ytd, +# MAGIC b.top_brand_gr_ytd as top_brand_gr_ytd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_gr_ytd, +# MAGIC b.top_brand_gr_ytd as top_brand_gr_ytd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_gr_ytd' as KPI_name, +# MAGIC a.top_brand_gr_ytd as kpi_val, +# MAGIC a.top_brand_gr_ytd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_gr_ytd as kpi_vol, +# MAGIC b.top_brand_gr_ytd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.7 kpi: top_brand_inc_ms_ytd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_inc_ms_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC d.geo_key, +# MAGIC a.top_brand_inc_ms_ytd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_inc_ms_ytd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC left(ytd,3) || cast(substr(ytd,4,2)+1 as int) || right( ytd,2 ) as ytd, +# MAGIC geo_key, +# MAGIC top_brand_inc_ms_ytd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_inc_ms_ytd, +# MAGIC b.top_brand_inc_ms_ytd as top_brand_inc_ms_ytd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC a.top_brand_inc_ms_ytd, +# MAGIC b.top_brand_inc_ms_ytd as top_brand_inc_ms_ytd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC null as yyyymm, +# MAGIC a.ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_inc_ms_ytd' as KPI_name, +# MAGIC a.top_brand_inc_ms_ytd as kpi_val, +# MAGIC a.top_brand_inc_ms_ytd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_inc_ms_ytd as kpi_vol, +# MAGIC b.top_brand_inc_ms_ytd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.ytd = b.ytd +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.8 kpi: key_brand_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.key_brand_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.key_brand_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC key_brand_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC key_brand_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.key_brand_qtd, +# MAGIC b.key_brand_qtd as key_brand_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.key_brand_qtd, +# MAGIC b.key_brand_qtd as key_brand_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'key_brand_qtd' as KPI_name, +# MAGIC null as kpi_val, +# MAGIC null as kpi_val_ly, +# MAGIC a.key_brand_qtd as str_kpi_val, +# MAGIC a.key_brand_qtd_ly as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC b.key_brand_qtd as str_kpi_vol, +# MAGIC b.key_brand_qtd_ly as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.9 kpi: key_brand_rank_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.key_brand_rank_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.key_brand_rank_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC key_brand_rank_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC key_brand_rank_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.key_brand_rank_qtd, +# MAGIC b.key_brand_rank_qtd as key_brand_rank_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.key_brand_rank_qtd, +# MAGIC b.key_brand_rank_qtd as key_brand_rank_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'key_brand_rank_qtd' as KPI_name, +# MAGIC a.key_brand_rank_qtd as kpi_val, +# MAGIC a.key_brand_rank_qtd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.key_brand_rank_qtd as kpi_vol, +# MAGIC b.key_brand_rank_qtd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.10 kpi: top_brand_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_qtd, +# MAGIC b.top_brand_qtd as top_brand_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_qtd, +# MAGIC b.top_brand_qtd as top_brand_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_qtd' as KPI_name, +# MAGIC null as kpi_val, +# MAGIC null as kpi_val_ly, +# MAGIC a.top_brand_qtd as str_kpi_val, +# MAGIC a.top_brand_qtd_ly as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC b.top_brand_qtd as str_kpi_vol, +# MAGIC b.top_brand_qtd_ly as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.11 kpi: top_brand_ms_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ms_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_ms_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_ms_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_ms_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ms_qtd, +# MAGIC b.top_brand_ms_qtd as top_brand_ms_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_ms_qtd, +# MAGIC b.top_brand_ms_qtd as top_brand_ms_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_ms_qtd' as KPI_name, +# MAGIC a.top_brand_ms_qtd as kpi_val, +# MAGIC a.top_brand_ms_qtd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_ms_qtd as kpi_vol, +# MAGIC b.top_brand_ms_qtd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.12 kpi: top_brand_inc_ms_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_inc_ms_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_inc_ms_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_inc_ms_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_inc_ms_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_inc_ms_qtd, +# MAGIC b.top_brand_inc_ms_qtd as top_brand_inc_ms_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_inc_ms_qtd, +# MAGIC b.top_brand_inc_ms_qtd as top_brand_inc_ms_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_inc_ms_qtd' as KPI_name, +# MAGIC a.top_brand_inc_ms_qtd as kpi_val, +# MAGIC a.top_brand_inc_ms_qtd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_inc_ms_qtd as kpi_vol, +# MAGIC b.top_brand_inc_ms_qtd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.13 kpi: top_brand_gr_qtd +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_kpi_ytd_value as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_gr_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'value' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_volume as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC d.geo_key, +# MAGIC a.top_brand_gr_qtd +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC where a.ranked_by = 'volume' +# MAGIC and a.ytd is not null +# MAGIC ), tmp_kpi_ytd_value_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_gr_qtd +# MAGIC from tmp_kpi_ytd_value +# MAGIC ), tmp_kpi_ytd_volume_ly as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC cast(yyyymm + 100 as int ) as yyyymm, +# MAGIC geo_key, +# MAGIC top_brand_gr_qtd +# MAGIC from tmp_kpi_ytd_volume +# MAGIC ), tmp_kpi_ytd_value_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_gr_qtd, +# MAGIC b.top_brand_gr_qtd as top_brand_gr_qtd_ly +# MAGIC from tmp_kpi_ytd_value a +# MAGIC inner join tmp_kpi_ytd_value_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ), tmp_kpi_ytd_volume_all as ( +# MAGIC select +# MAGIC a.ta, +# MAGIC a.market, +# MAGIC a.yyyymm, +# MAGIC a.geo_key, +# MAGIC a.top_brand_gr_qtd, +# MAGIC b.top_brand_gr_qtd as top_brand_gr_qtd_ly +# MAGIC from tmp_kpi_ytd_volume a +# MAGIC inner join tmp_kpi_ytd_volume_ly b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select +# MAGIC distinct +# MAGIC '' as pack_code, +# MAGIC '' as corp_cod, +# MAGIC a.yyyymm, +# MAGIC null as ytd, +# MAGIC a.geo_key, +# MAGIC 'top_brand_gr_qtd' as KPI_name, +# MAGIC a.top_brand_gr_qtd as kpi_val, +# MAGIC a.top_brand_gr_qtd_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC b.top_brand_gr_qtd as kpi_vol, +# MAGIC b.top_brand_gr_qtd_ly as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC a.ta +# MAGIC from tmp_kpi_ytd_value_all a +# MAGIC inner join tmp_kpi_ytd_volume_all b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.yyyymm = b.yyyymm +# MAGIC and a.geo_key = b.geo_key + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-2:TOP数据(8个) +# MAGIC - top1_brand_val +# MAGIC - top1_brand_gr +# MAGIC - top2_brand_val +# MAGIC - top2_brand_gr +# MAGIC - top1_incremental_brand +# MAGIC - top1_incremental_gr +# MAGIC - top2_incremental_brand +# MAGIC - top2_incremental_gr + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 将RX市场数据合并并处理数据格式获取code +# MAGIC -- -------关联 corp code +# MAGIC -- -------是否total 数据打标 +# MAGIC -- -------格式处理 +# MAGIC -- -------dm 使用 niad 数据 +# MAGIC -- -------全国数据 地理编码 为 roc +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC insert overwrite table tmp.tmp_zk_retail_rx_ta_and_top_corp +# MAGIC select +# MAGIC distinct +# MAGIC case WHEN right(corporation,3) ='TTL' THEN 'ta_total' else 'ta_corp' end data_type +# MAGIC ,case when replace(a.rx_type,' TTL','') ='NIAD' THEN 'DM' +# MAGIC when replace(a.rx_type,' TTL','') ='GI-Rx+OTC' then 'GI' +# MAGIC ELSE replace(a.rx_type,' TTL','') END ta +# MAGIC ,nvl(b.CORP_COD ,CORP_COD) CORP_COD +# MAGIC ,CASE WHEN right(corporation,3) ='TTL' THEN 'Y' else 'N' end TOTAL_FLAG +# MAGIC ,a.quarter_flag YTD +# MAGIC ,'ROC' GEO_KEY +# MAGIC ,replace(a.top1_brand_val,'-','') top1_brand_val +# MAGIC ,coalesce(cast(a.top1_brand_gr as double ),0 ) top1_brand_gr +# MAGIC ,replace(a.top2_brand_val,'-','') top2_brand_val +# MAGIC ,coalesce(cast(a.top2_brand_gr as double ),0 ) top2_brand_gr +# MAGIC ,replace(a.top1_incremental_brand,'-','') top1_incremental_brand +# MAGIC ,coalesce(cast(a.top1_incremental_gr as double ),0 ) top1_incremental_gr +# MAGIC ,replace(a.top2_incremental_brand,'-','') top2_incremental_brand +# MAGIC ,coalesce(cast(a.top2_incremental_gr as double ),0 ) top2_incremental_gr +# MAGIC from dwd.dwd_gnd_ext_retail_rx_ta_top_corp a +# MAGIC 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 +# MAGIC on a.corporation = b.ZK_Corp_C +# MAGIC WHERE rx_type <>'DM' +# MAGIC UNION ALL +# MAGIC select +# MAGIC distinct +# MAGIC case WHEN right(corporation,3) ='TTL' THEN 'ta_total' else 'ta_corp' end data_type +# MAGIC ,replace(a.rx_type,' TTL','') ta +# MAGIC ,nvl(b.CORP_COD ,CORP_COD) CORP_COD +# MAGIC ,CASE WHEN right(corporation,3) ='TTL' THEN 'Y' else 'N' end TOTAL_FLAG +# MAGIC ,a.quarter_flag YTD +# MAGIC ,'ROC' GEO_KEY +# MAGIC ,replace(a.top1_brand_val,'-','') top1_brand_val +# MAGIC ,coalesce(cast(a.top1_brand_gr as double ) ,0 ) top1_brand_gr +# MAGIC ,replace(a.top2_brand_val,'-','') top2_brand_val +# MAGIC ,coalesce(cast(a.top2_brand_gr as double ) ,0 ) top2_brand_gr +# MAGIC ,replace(a.top1_incremental_brand,'-','') top1_incremental_brand +# MAGIC ,coalesce(cast(a.top1_incremental_gr as double ),0 ) top1_incremental_gr +# MAGIC ,replace(a.top2_incremental_brand,'-','') top2_incremental_brand +# MAGIC ,coalesce(cast(a.top2_incremental_gr as double ) ,0 ) top2_incremental_gr +# MAGIC from dwd.dwd_gnd_ext_retail_rx_ta_top_corp a +# MAGIC 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 +# MAGIC on a.corporation = b.ZK_Corp_C +# MAGIC WHERE rx_type ='NIAD' +# MAGIC union all +# MAGIC select distinct +# MAGIC 'top_corp' data_type +# MAGIC ,NULL ta +# MAGIC ,nvl(b.CORP_COD,a.corporation) CORP_COD +# MAGIC ,'Y' TOTAL_FLAG +# MAGIC ,a.quarter_flag +# MAGIC ,'ROC' GEO_KEY +# MAGIC ,replace(a.top1_brand_val,'-','') top1_brand_val +# MAGIC ,coalesce(cast(a.top1_brand_gr as double ),0 ) top1_brand_gr +# MAGIC ,replace(a.top2_brand_val,'-','') top2_brand_val +# MAGIC ,coalesce(cast(a.top2_brand_gr as double ),0 ) top2_brand_gr +# MAGIC ,replace(a.top1_incremental_brand,'-','') top1_incremental_brand +# MAGIC ,coalesce(cast(a.top1_incremental_gr as double ) ,0 ) top1_incremental_gr +# MAGIC ,replace(a.top2_incremental_brand,'-','') top2_incremental_brand +# MAGIC ,coalesce(cast(a.top2_incremental_gr as double ) ,0 ) top2_incremental_gr +# MAGIC from dwd.dwd_gnd_ext_retail_rx_top_corp a +# MAGIC 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 +# MAGIC on a.corporation = b.ZK_Corp +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.14 top1_brand_val +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top1_brand_val' kpi_name +# MAGIC ,null kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,top1_brand_val str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp +# MAGIC +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.15 top1_brand_gr +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top1_brand_gr' kpi_name +# MAGIC ,top1_brand_gr kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.16 top2_brand_val +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top2_brand_val' kpi_name +# MAGIC ,null kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,top2_brand_val str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.17 top2_brand_gr +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top2_brand_gr' kpi_name +# MAGIC ,top2_brand_gr kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp +# MAGIC + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.18 top1_incremental_brand +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top1_incremental_brand' kpi_name +# MAGIC ,null kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,top1_incremental_brand str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.19 top1_incremental_gr +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top1_incremental_gr' kpi_name +# MAGIC ,top1_incremental_gr kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.20 top2_incremental_brand +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top2_incremental_brand' kpi_name +# MAGIC ,null kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,top2_incremental_brand str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.21 top2_incremental_gr +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC SELECT distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,NULL YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,'top2_incremental_gr' kpi_name +# MAGIC ,top2_incremental_gr kpi_val +# MAGIC ,NULL kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from tmp.tmp_zk_retail_rx_ta_and_top_corp + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-3:增量数据(1个) +# MAGIC - corp_type_sales_amount + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.22 处理增量数据 corp_type_sales_amount +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select distinct +# MAGIC '' pack_code +# MAGIC ,bq.type_name corp_cod +# MAGIC ,cast(bq.sales_quarter as int) yyyymm +# MAGIC ,null ytd +# MAGIC ,'ROC' geo_key +# MAGIC ,'corp_type_sales_amount' kpi_name +# MAGIC ,bq.sales_amount * 1000000 kpi_val +# MAGIC ,tq.sales_amount * 1000000 kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null tr_kpi_vol_ly +# MAGIC ,'Y' TOTAL_FLAG +# MAGIC ,null ta +# MAGIC from dwd.dwd_gnd_ext_retail_rx_market bq +# MAGIC left join dwd.dwd_gnd_ext_retail_rx_market tq +# MAGIC on bq.type_name=tq.type_name +# MAGIC and cast(bq.sales_quarter as int) = cast(tq.sales_quarter + 100 as int) + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-4:top corp及rank(2个) +# MAGIC - top_corp_sales_amount +# MAGIC - top_corp_rank + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.23&24 top_corp_sales_amount & top_corp_rank +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with top_corp_total as ( +# MAGIC ----------------------处理top_corp 大数-------------------- +# MAGIC ---------关联 corp code 特殊:dwd_inc_gnd_retail_b2c_label_total 这个表 az 公司有两个code ,需要取A5Z 那个 +# MAGIC ---------是否total 数据打标 +# MAGIC ---------格式处理 +# MAGIC ---------dm 使用 niad 数据 +# MAGIC ---------全国数据 地理编码 为 roc +# MAGIC select +# MAGIC a.corp_desc, +# MAGIC 'top_corp' data_type +# MAGIC ,b.CORP_COD +# MAGIC ,'Y' TOTAL_FLAG +# MAGIC ,a.sales_quarter +# MAGIC ,cast(a.sales_quarter as int) yyyymm +# MAGIC ,'ROC' geo_key +# MAGIC ,a.sales_amount*1000000 sales_amount +# MAGIC ,c.sales_amount*1000000 sales_amount_ly +# MAGIC ,a.rank1 +# MAGIC ,null ta +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_top_corp a +# MAGIC left join ( +# MAGIC select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C +# MAGIC ) b on a.corp_desc= b.ZK_Corp_C +# MAGIC left join dwd.dwd_gnd_ext_retail_nataional_top_corp c +# MAGIC on a.corp_desc= c.corp_desc +# MAGIC and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) +# MAGIC and cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100 +# MAGIC where a.rank1 is not null +# MAGIC +# MAGIC unioN all +# MAGIC +# MAGIC select +# MAGIC a.corp_desc, +# MAGIC 'top_ta_corp' data_type +# MAGIC ,B.CORP_COD --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code +# MAGIC ,case when A.corp_name is null then 'Y' ELSE 'N' END TOTAL_FLAG +# MAGIC ,a.sales_quarter +# MAGIC ,cast(a.sales_quarter as int) yyyymm +# MAGIC ,'ROC' geo_key +# MAGIC ,a.sales_amount*1000000 sales_amount +# MAGIC ,c.sales_amount*1000000 sales_amount_ly +# MAGIC ,a.rank1 +# MAGIC ,CASE WHEN trim(a.source_name) ='GI-Rx+OTC' THEN 'GI' ELSE trim(a.source_name) END ta +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a +# MAGIC left join ( +# MAGIC select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C +# MAGIC ) b on a.corp_desc= b.ZK_Corp_C +# MAGIC left join dwd.dwd_gnd_ext_retail_nataional_ta_top_corp c +# MAGIC on a.corp_desc= c.corp_desc +# MAGIC and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) +# MAGIC and cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100 +# MAGIC and a.source_name =c.source_name +# MAGIC WHERE trim(a.source_name) <>'DM' +# MAGIC +# MAGIC UNION ALL +# MAGIC +# MAGIC select +# MAGIC CASE WHEN a.corp_desc='NIAD' THEN 'DM' ELSE a.corp_desc END corp_desc, +# MAGIC 'top_ta_corp' data_type +# MAGIC ,B.CORP_COD --A.corp_name as CORP_COD, --自有的corp_name 是 corp_code +# MAGIC ,case when A.corp_name is null then 'Y' ELSE 'N' END TOTAL_FLAG +# MAGIC ,a.sales_quarter +# MAGIC ,cast(a.sales_quarter as int) yyyymm +# MAGIC ,'ROC' geo_key +# MAGIC ,a.sales_amount*1000000 sales_amount +# MAGIC ,c.sales_amount*1000000 sales_amount_ly +# MAGIC ,a.rank1 +# MAGIC ,'DM' ta +# MAGIC FROM dwd.dwd_gnd_ext_retail_nataional_ta_top_corp a +# MAGIC left join ( +# MAGIC select ZK_Corp_C,max(case when CORP_COD ='F+N' then 'A5Z' ELSE CORP_COD END ) CORP_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total group by ZK_Corp_C +# MAGIC ) b on a.corp_desc= b.ZK_Corp_C +# MAGIC left join dwd.dwd_gnd_ext_retail_nataional_ta_top_corp c +# MAGIC on a.corp_desc= c.corp_desc +# MAGIC and nvl(a.corp_type,'' ) = nvl(c.corp_type,'' ) +# MAGIC and cast(a.sales_quarter as int) =cast(c.sales_quarter as int)+100 +# MAGIC and a.source_name =c.source_name +# MAGIC WHERE trim(a.source_name) ='NIAD' +# MAGIC ) +# MAGIC +# MAGIC -- 处理top corp 及 rank 数据 +# MAGIC insert into table dws.dws_zk_retail_sales_kpi +# MAGIC +# MAGIC select DISTINCT +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,yyyymm +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'top_corp_sales_amount' kpi_name +# MAGIC ,sales_amount kpi_val +# MAGIC ,sales_amount_ly kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from top_corp_total +# MAGIC union all +# MAGIC select distinct +# MAGIC '' pack_code +# MAGIC ,corp_cod +# MAGIC ,yyyymm +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'top_corp_rank' kpi_name +# MAGIC ,rank1 kpi_val +# MAGIC ,null kpi_val_ly +# MAGIC ,NULL str_kpi_val +# MAGIC ,NULL str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,ta +# MAGIC from top_corp_total +# MAGIC where lower(rank1) <> 'Total' +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-5:DTP指标(2个) +# MAGIC - top_corp_rank +# MAGIC - top_corp_sales_amount + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.25&26 top_corp_rank & top_corp_sales_amount +# MAGIC -- 将dtp 数据转换成 kpi 格式--- +# MAGIC -- 品牌数据 初始 +# MAGIC -- 关联公司code +# MAGIC -- 处理pack code +# MAGIC -- 处理格式 +# MAGIC -- total flag 打标 +# MAGIC -- dtp 所有数据的ta 均为 ONCO +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with tmp as ( +# MAGIC -------------获取dtp top brand的本同期数据-------------------------- +# MAGIC select +# MAGIC cast(top_corp.sales_quarter as int ) yyyymm +# MAGIC ,top_corp.sales_quarter +# MAGIC ,replace(top_corp.rank1,'-','') rank1 +# MAGIC ,replace(top_corp.corp_name,'-','') crp_name +# MAGIC ,top_corp.brand_name +# MAGIC ,case when top_corp.brand_name ='Others' then 'Others' else zk.IQVIA_PROD_CODE end iqvia_prod_code +# MAGIC ,case when top_corp.brand_name ='Others' then 'Others' else brand.iqvia_pack_code end iqvia_pack_code +# MAGIC ,zk.CORP_COD +# MAGIC -- ,top_corp.source_name +# MAGIC ,top_corp.sales_amount*1000000 sales_amount +# MAGIC ,tq.sales_amount*1000000 sales_amount_ly +# MAGIC ,'Y' TOTAL_FLAG +# MAGIC from dwd.dwd_gnd_ext_retail_dtp_top_brand top_corp +# MAGIC left join dwd.dwd_gnd_ext_retail_dtp_top_brand tq +# MAGIC on cast(top_corp.sales_quarter as int ) = cast(tq.sales_quarter+100 as int ) +# MAGIC and nvl(top_corp.corp_name,'') = nvl(tq.corp_name,'' ) +# MAGIC and tq.rank1 =top_corp.rank1 and nvl(top_corp.brand_name,'' ) =nvl(tq.brand_name,'' ) +# MAGIC left join ( +# MAGIC select +# MAGIC distinct +# MAGIC ZK_Prod_C, +# MAGIC ----------------------------------------------------- +# MAGIC -- format IQVIA_PROD_CODE +# MAGIC case when length(IQVIA_PROD_CODE) < 9 then right(concat('000000000',IQVIA_PROD_CODE),9) else IQVIA_PROD_CODE end as IQVIA_PROD_CODE, +# MAGIC ----------------------------------------------------- +# MAGIC ZK_Corp_C, +# MAGIC CORP_COD +# MAGIC from dwd.dwd_inc_gnd_retail_b2c_label_total +# MAGIC )zk on top_corp.brand_name = zk.ZK_Prod_C AND replace(top_corp.corp_name,'-','')=zk.ZK_Corp_C +# MAGIC left join ( +# MAGIC select PROD_COD IQVIA_PROD_CODE,max(PACK_COD) iqvia_pack_code,CORP_COD +# MAGIC from dm.dm_ims_td_pack_property group by PROD_COD,CORP_COD +# MAGIC ) brand on zk.IQVIA_PROD_CODE = brand.iqvia_prod_code AND replace(zk.CORP_COD,'-','')=brand.corp_cod +# MAGIC +# MAGIC UNION all +# MAGIC +# MAGIC -------获取 dtp top corp的本同期数据------------ +# MAGIC select +# MAGIC cast(top_corp.sales_quarter as int ) yyyymm +# MAGIC ,top_corp.sales_quarter +# MAGIC ,replace(top_corp.rank1,'-','') rank1 +# MAGIC ,replace(top_corp.corp_name,'-','') corp_name +# MAGIC ,'' brand_name +# MAGIC ,''iqvia_prod_code +# MAGIC ,'' iqvia_pack_code +# MAGIC ,case when replace(top_corp.corp_name,'-','') ='Others' then '' else pack.corp_cod end corp_cod +# MAGIC -- ,top_corp.source_name +# MAGIC ,top_corp.sales_amount*1000000 sales_amount +# MAGIC ,tq.sales_amount*1000000 sales_amount_ly +# MAGIC --,case when replace(top_corp.rank1,'-','') ='' then 'Y' ELSE 'N' END TOTAL_FLAG +# MAGIC ,'Y' TOTAL_FLAG +# MAGIC from dwd.dwd_gnd_ext_retail_dtp_top_copd top_corp +# MAGIC left join dwd.dwd_gnd_ext_retail_dtp_top_copd tq +# MAGIC on cast(top_corp.sales_quarter as int ) = cast(tq.sales_quarter+100 as int ) +# MAGIC and nvl(top_corp.corp_name,'') = nvl(tq.corp_name,'' ) +# MAGIC and tq.rank1 =top_corp.rank1 +# MAGIC -- 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 +# MAGIC left join ( +# MAGIC select distinct ZK_Corp_C,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total +# MAGIC ) pack on replace(top_corp.corp_name,'-','') = pack.ZK_Corp_C +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_dtp_sales_kpi +# MAGIC +# MAGIC select distinct +# MAGIC iqvia_prod_code pack_code +# MAGIC ,corp_cod +# MAGIC ,'ONCO' ta +# MAGIC ,yyyymm +# MAGIC ,null ytd +# MAGIC ,'ROC' geo_key +# MAGIC ,'top_corp_rank' kpi_name +# MAGIC ,cast(rank1 as double) kpi_val +# MAGIC ,null kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC -- ,null ta +# MAGIC from tmp where rank1 !='' +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select distinct +# MAGIC iqvia_prod_code pack_code +# MAGIC ,corp_cod +# MAGIC ,'ONCO' ta +# MAGIC ,yyyymm +# MAGIC ,null ytd +# MAGIC ,'ROC' geo_key +# MAGIC ,'top_corp_sales_amount' kpi_name +# MAGIC ,sales_amount kpi_val +# MAGIC ,sales_amount_ly kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC -- ,null ta +# MAGIC from tmp + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-6:自有部分数据(9个) +# MAGIC retail 自有部分数据处理成kpi 形式 +# MAGIC - pack_price_fz +# MAGIC - pack_price_fm +# MAGIC - pack_price_by_counting_unit_fm +# MAGIC - weighted_spread_rate +# MAGIC - digital_spread_rate +# MAGIC - pack_price +# MAGIC - pack_price_by_counting_unit +# MAGIC - num_dist_rate +# MAGIC - weig_dist_rate + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.27 pack_price_fz +# MAGIC -- 在 retail 拆分好的结果表里获取pack 粒度的 price 分子 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select +# MAGIC a.iqvia_pack_code pack_code +# MAGIC ,a.corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null td +# MAGIC ,a.AUDIT_COD geo_key +# MAGIC ,'pack_price_fz' KPI_name +# MAGIC ,sum(sales_value) kpi_val +# MAGIC ,sum(sales_value_ly) kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END ta +# MAGIC ,a.brand_flag +# MAGIC ,a.pack_flag +# MAGIC from dm.dm_zk_retail_sales a +# MAGIC GROUP BY +# MAGIC a.iqvia_pack_code, +# MAGIC a.corp_cod, +# MAGIC YYYYMM , +# MAGIC a.AUDIT_COD, +# MAGIC case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END, +# MAGIC a.brand_flag, +# MAGIC a.pack_flag +# MAGIC having ta is not null and sum(sales_value) > 0 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.28 pack_price_fm +# MAGIC -- 在 retail 拆分好的结果表里获取pack 粒度的 price 分母 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select +# MAGIC a.iqvia_pack_code pack_code +# MAGIC ,a.corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,a.AUDIT_COD geo_key +# MAGIC ,'pack_price_fm' KPI_name +# MAGIC ,sum(a.sales_unit) kpi_val +# MAGIC ,sum(a.sales_unit_ly) kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END ta +# MAGIC ,a.brand_flag +# MAGIC ,a.pack_flag +# MAGIC from dm.dm_zk_retail_sales a +# MAGIC GROUP BY a.iqvia_pack_code ,a.corp_cod,YYYYMM ,a.AUDIT_COD +# MAGIC ,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END +# MAGIC ,a.brand_flag +# MAGIC ,a.pack_flag +# MAGIC having ta is not null and sum(sales_unit)>0 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.29 pack_price_by_counting_unit_fm +# MAGIC -- 在 retail 拆分好的结果表里获取pack 粒度的 by counting unit 的 price 分母 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select +# MAGIC a.iqvia_pack_code pack_code +# MAGIC ,a.corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,a.AUDIT_COD geo_key +# MAGIC ,'pack_price_by_counting_unit_fm' KPI_name +# MAGIC ,sum(a.counting_unit) kpi_val +# MAGIC ,sum(a.counting_unit_ly) kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END ta +# MAGIC ,a.brand_flag +# MAGIC ,a.pack_flag +# MAGIC from dm.dm_zk_retail_sales a +# MAGIC GROUP BY a.iqvia_pack_code ,a.corp_cod,YYYYMM ,a.AUDIT_COD +# MAGIC ,case when a.source[0] = '慢性阻塞性肺疾病' then 'RE' +# MAGIC WHEN A.source[0]= '慢性胃炎、胃溃疡' THEN 'GI' +# MAGIC WHEN A.source[0] = 'NIAD' THEN 'DM' +# MAGIC WHEN A.source[0] IN ('Brilinta Market','他汀类+血脂康','高血压用药','酒石酸美托洛尔') THEN 'CV' +# MAGIC WHEN A.source[0] ='RD Market' THEN 'RD' +# MAGIC END +# MAGIC ,a.brand_flag +# MAGIC ,a.pack_flag +# MAGIC having ta is not null and sum(counting_unit)>0 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 将pack表的 price 数据进行处理 +# MAGIC -- 在 retail 拆分好的结果表里获取pack 粒度的 price 分子 +# MAGIC -- 关联 corp code +# MAGIC -- 获取geo_key 后续的audit key +# MAGIC -- 获取ta 值 +# MAGIC -- 获取pack 文件中计算price 的所有指标 及加权铺货率、数字铺货率 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC with pack_rawdata as ( +# MAGIC select * from tmp.tmp_retail_pack_rawdata where data_flag = 0 +# MAGIC ), tmp_pack_property as ( +# MAGIC ---------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC select +# MAGIC distinct +# MAGIC case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(iqvia_pack_code)),12) +# MAGIC else trim(iqvia_pack_code) +# MAGIC end as iqvia_pack_code, +# MAGIC ---------------------------------------------------------------- +# MAGIC product_id +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ),a as ( +# MAGIC select +# MAGIC df.brand_flag,df.zk_product_id,YYYYMM,pack.iqvia_pack_code,corp.corp_cod,zk_region +# MAGIC ,sum(sales_value) sales_value +# MAGIC ,sum(sales_unit) sales_unit +# MAGIC ,sum(weighted_spread_rate) weighted_spread_rate +# MAGIC ,sum(digital_spread_rate) digital_spread_rate +# MAGIC ,sum(sales_value_ly) sales_value_ly +# MAGIC ,sum(sales_unit_ly) sales_unit_ly +# MAGIC ,sum(weighted_spread_rate_ly) weighted_spread_rate_ly +# MAGIC ,sum(digital_spread_rate_ly) digital_spread_rate_ly +# MAGIC from ( +# MAGIC select +# MAGIC month as YYYYMM, +# MAGIC product_id as zk_product_id, +# MAGIC zk_regin as zk_region +# MAGIC ,sales_value,sales_unit,weighted_spread_rate,digital_spread_rate +# MAGIC ,0 sales_value_ly +# MAGIC ,0 sales_unit_ly +# MAGIC ,0 weighted_spread_rate_ly +# MAGIC ,0 digital_spread_rate_ly +# MAGIC ,brand_flag +# MAGIC from pack_rawdata +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC cast( month + 100 as int ) as yyyymm, +# MAGIC product_id as zk_product_id, +# MAGIC zk_regin as zk_region +# MAGIC ,0 sales_value +# MAGIC ,0 sales_unit +# MAGIC ,0 weighted_spread_rate +# MAGIC ,0 digital_spread_rate +# MAGIC ,sales_value sales_value_ly +# MAGIC ,sales_unit sales_unit_ly +# MAGIC ,weighted_spread_rate weighted_spread_rate_ly +# MAGIC ,digital_spread_rate digital_spread_rate_ly +# MAGIC ,brand_flag +# MAGIC from pack_rawdata +# MAGIC where month + 100 <= (select max(month) FROM pack_rawdata) +# MAGIC ) df +# MAGIC left join tmp_pack_property pack on pack.product_id = df.zk_product_id +# MAGIC left join tmp.tmp_zk_retail_pack_property_corp corp +# MAGIC on pack.iqvia_pack_code = corp.iqvia_pack_code +# MAGIC group by YYYYMM,pack.iqvia_pack_code,corp.corp_cod,zk_region,df.brand_flag,df.zk_product_id +# MAGIC ) +# MAGIC +# MAGIC insert overwrite table tmp.tmp_zk_retail_price +# MAGIC select +# MAGIC distinct +# MAGIC YYYYMM, +# MAGIC zk_product_id, +# MAGIC d.ta, +# MAGIC c.geo_key, +# MAGIC a.iqvia_pack_code, +# MAGIC b.iqvia_prod_code, +# MAGIC b.prod_des_c, +# MAGIC corp_cod, +# MAGIC zk_region, +# MAGIC sales_value, +# MAGIC sales_value_ly, +# MAGIC sales_unit, +# MAGIC sales_unit_ly, +# MAGIC weighted_spread_rate, +# MAGIC weighted_spread_rate_ly, +# MAGIC digital_spread_rate, +# MAGIC digital_spread_rate_ly +# MAGIC from a +# MAGIC left join ( +# MAGIC select distinct iqvia_pack_code ,prod_des_c,prod_des,iqvia_prod_code +# MAGIC from dm.dm_zk_retail_pack_property +# MAGIC ) b on a.iqvia_pack_code=b.iqvia_pack_code +# MAGIC left join ( +# MAGIC select distinct geo_key,province_city from dm.dm_zk_retail_geo +# MAGIC ) c on a.zk_region = c.province_city +# MAGIC left join ( +# MAGIC select distinct iqvia_pack_code,ta from dm.dm_zk_retail_market_property +# MAGIC ) d on a.iqvia_pack_code=d.iqvia_pack_code +# MAGIC where a.iqvia_pack_code in (select distinct iqvia_pack_code from dm.dm_zk_retail_sales) + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.30 weighted_spread_rate +# MAGIC -- 在 retail pack 粒度的文件中获取加权铺货率 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select distinct +# MAGIC iqvia_pack_code pack_code +# MAGIC ,corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'weighted_spread_rate' KPI_name +# MAGIC ,weighted_spread_rate kpi_val +# MAGIC ,weighted_spread_rate_ly kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,ta ta +# MAGIC ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag +# MAGIC ,case when geo_key ='CHT' THEN 2 else 1 END pack_flag +# MAGIC from tmp.tmp_zk_retail_price a +# MAGIC left join ( +# MAGIC SELECT DISTINCT b.prod_des_c +# MAGIC FROM tmp.tmp_retail_pack_rawdata A +# MAGIC LEFT JOIN ( +# MAGIC SELECT DISTINCT iqvia_pack_code,prod_des_c +# MAGIC FROM dm.dm_zk_retail_pack_property +# MAGIC ) b on a.pack_code = b.iqvia_pack_code +# MAGIC where a.brand_flag = 1 +# MAGIC ) prod on a.prod_des_c = prod.prod_des_c + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.31 digital_spread_rate +# MAGIC -- 在 retail pack 粒度的文件中获取数字铺货率 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select distinct +# MAGIC iqvia_pack_code +# MAGIC ,corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'digital_spread_rate' KPI_name +# MAGIC ,digital_spread_rate kpi_val +# MAGIC ,digital_spread_rate_ly kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,ta ta +# MAGIC ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag +# MAGIC ,case when geo_key ='CHT' THEN 2 else 1 END pack_flag +# MAGIC from tmp.tmp_zk_retail_price a +# MAGIC left join ( +# MAGIC SELECT DISTINCT b.prod_des_c +# MAGIC FROM tmp.tmp_retail_pack_rawdata A +# MAGIC LEFT JOIN ( +# MAGIC SELECT DISTINCT iqvia_pack_code,prod_des_c +# MAGIC FROM dm.dm_zk_retail_pack_property +# MAGIC ) b on a.pack_code = b.iqvia_pack_code +# MAGIC where a.brand_flag = 1 +# MAGIC ) prod on a.prod_des_c=prod.prod_des_c + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.32 pack_price +# MAGIC -- 在 retail pack 粒度的文件中获取计算pack 粒度的price +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select distinct +# MAGIC iqvia_pack_code +# MAGIC ,corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'pack_price' KPI_name +# MAGIC ,round(sum(sales_value)/sum(sales_unit),3) kpi_val +# MAGIC ,round(sum(sales_value_ly)/sum(sales_unit_ly),3) kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,ta ta +# MAGIC ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag +# MAGIC ,case when geo_key ='CHT' THEN 2 else 1 END pack_flag +# MAGIC from tmp.tmp_zk_retail_price a +# MAGIC left join ( +# MAGIC SELECT DISTINCT b.prod_des_c +# MAGIC FROM tmp.tmp_retail_pack_rawdata A +# MAGIC LEFT JOIN ( +# MAGIC SELECT DISTINCT iqvia_pack_code,prod_des_c +# MAGIC FROM dm.dm_zk_retail_pack_property +# MAGIC ) b on a.pack_code = b.iqvia_pack_code +# MAGIC where a.brand_flag = 1 +# MAGIC ) prod on a.prod_des_c=prod.prod_des_c +# MAGIC group by +# MAGIC corp_cod, +# MAGIC YYYYMM, +# MAGIC geo_key, +# MAGIC ta, +# MAGIC iqvia_pack_code, +# MAGIC case when prod.prod_des_c is null THEN 2 else 1 END, +# MAGIC case when geo_key ='CHT' THEN 2 else 1 END + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.33 pack_price_by_counting_unit +# MAGIC -- 在 retail pack 粒度的文件中获取计算pack 粒度的price by counting unit +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC with tmp_pack_property as ( +# MAGIC ---------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC select +# MAGIC case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(iqvia_pack_code)),12) +# MAGIC else trim(iqvia_pack_code) +# MAGIC end as iqvia_pack_code, +# MAGIC ---------------------------------------------------------------- +# MAGIC product_id, +# MAGIC counting_unit, +# MAGIC unit +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property +# MAGIC ) +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC select distinct +# MAGIC a.iqvia_pack_code +# MAGIC ,a.corp_cod +# MAGIC ,YYYYMM +# MAGIC ,null ytd +# MAGIC ,geo_key +# MAGIC ,'pack_price_by_counting_unit' KPI_name +# MAGIC ,round(sum(sales_value)/sum(sales_unit*(b.counting_unit/coalesce(b.unit,1 ))),3) kpi_val +# MAGIC ,round(sum(sales_value_ly)/sum(sales_unit_ly*(b.counting_unit/coalesce(b.unit,1 ))),3) kpi_val_ly +# MAGIC ,null str_kpi_val +# MAGIC ,null str_kpi_val_ly +# MAGIC ,null kpi_vol +# MAGIC ,null kpi_vol_ly +# MAGIC ,null str_kpi_vol +# MAGIC ,null str_kpi_vol_ly +# MAGIC ,'N' TOTAL_FLAG +# MAGIC ,ta ta +# MAGIC ,case when prod.prod_des_c is null THEN 2 else 1 END brand_flag +# MAGIC ,case when geo_key ='CHT' THEN 2 else 1 END pack_flag +# MAGIC from tmp.tmp_zk_retail_price a +# MAGIC left join tmp_pack_property b on a.zk_product_id =b.product_id +# MAGIC left join ( +# MAGIC SELECT DISTINCT b.prod_des_c +# MAGIC FROM tmp.tmp_retail_pack_rawdata A +# MAGIC LEFT JOIN ( +# MAGIC SELECT DISTINCT iqvia_pack_code,prod_des_c +# MAGIC FROM dm.dm_zk_retail_pack_property +# MAGIC ) b on a.pack_code = b.iqvia_pack_code +# MAGIC where a.brand_flag = 1 +# MAGIC ) prod on a.prod_des_c=prod.prod_des_c +# MAGIC group by +# MAGIC a.corp_cod, +# MAGIC YYYYMM,geo_key, +# MAGIC ta, +# MAGIC a.iqvia_pack_code, +# MAGIC case when prod.prod_des_c is null THEN 2 else 1 END, +# MAGIC case when geo_key ='CHT' THEN 2 else 1 END + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- 8.34&35 num_dist_rate & weig_dist_rate +# MAGIC -- 在 retail brand 品牌文件中获取数字铺货率 并对re 特殊处理,re相关品牌优先取inhaled market 对应 pack +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert into table dws.dws_zk_retail_sales_own_kpi +# MAGIC +# MAGIC with exploded_data as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC ifnull(common_name,'' ) as common_name, +# MAGIC level, +# MAGIC split(level_ta,',') array_ta, +# MAGIC split(level_market,',') array_market, +# MAGIC split(level_molecule,',') array_molecule, +# MAGIC split(level_brand,',') array_brand +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where level like '%MULTI_BRAND%' +# MAGIC ), tmp_config as ( +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC common_name, +# MAGIC level, +# MAGIC array_ta[idx] as level_ta, +# MAGIC array_market[idx] as level_market, +# MAGIC array_molecule[idx] as level_molecule, +# MAGIC array_brand[idx] as level_brand +# MAGIC from exploded_data +# MAGIC lateral view posexplode(array_ta) AS idx, split_ta +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC ta, +# MAGIC market, +# MAGIC brand, +# MAGIC common_name, +# MAGIC level, +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC level_molecule, +# MAGIC level_brand +# MAGIC from dwd.dwd_gnd_retail_split_automatic +# MAGIC where level = 'BRAND' +# MAGIC ),max_pack_mapping as ( +# MAGIC select +# MAGIC level_ta, +# MAGIC level_market, +# MAGIC level_molecule, +# MAGIC level_brand, +# MAGIC molecule_desc, +# MAGIC product_desc, +# MAGIC corp_cod, +# MAGIC max(pack_code) as pack_code +# MAGIC from tmp.tmp_retail_pack_mapping +# MAGIC group by level_ta,level_market,level_molecule,level_brand,molecule_desc,product_desc,corp_cod +# MAGIC ), tmp_brand_kpi_now as ( +# MAGIC select +# MAGIC distinct +# MAGIC a.ta, +# MAGIC nvl(f.iqvia_pack_code,c.pack_code) as pack_code, +# MAGIC c.corp_cod, +# MAGIC c.product_desc, +# MAGIC a.YYYYMM, +# MAGIC d.geo_key, +# MAGIC a.num_dist_rate, +# MAGIC a.weig_dist_rate +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all a +# MAGIC inner join tmp_config b +# MAGIC on a.ta = b.ta +# MAGIC and a.market = b.market +# MAGIC and a.zk_brand_category = b.brand +# MAGIC and a.zk_common_name = b.common_name +# MAGIC inner join max_pack_mapping c +# MAGIC on c.level_ta = b.level_ta +# MAGIC and c.level_market = b.level_market +# MAGIC and c.level_molecule = b.level_molecule +# MAGIC and c.level_brand = b.level_brand +# MAGIC left join dm.dm_zk_retail_geo d +# MAGIC on a.province_city = d.province_city +# MAGIC left join ( +# MAGIC select distinct iqvia_pack_code ,prod_des_c +# MAGIC from dm.dm_zk_retail_pack_property +# MAGIC ) e on c.pack_code = e.iqvia_pack_code +# MAGIC left join ( +# MAGIC select prod_des_c,max(iqvia_pack_code) iqvia_pack_code +# MAGIC from dm.dm_zk_retail_pack_property +# MAGIC where market='Inhaled Extended Market' +# MAGIC group by prod_des_c +# MAGIC ) f on e.prod_des_c =f.prod_des_c +# MAGIC ), tmp_brand_kpi_ly as ( +# MAGIC select +# MAGIC pack_code, +# MAGIC corp_cod, +# MAGIC cast(YYYYMM + 100 as int ) as YYYYMM, +# MAGIC geo_key, +# MAGIC num_dist_rate, +# MAGIC weig_dist_rate +# MAGIC from tmp_brand_kpi_now +# MAGIC ), tmp_brand_kpi as ( +# MAGIC select +# MAGIC a.*, +# MAGIC b.num_dist_rate as num_dist_rate_ly, +# MAGIC b.weig_dist_rate as weig_dist_rate_ly +# MAGIC from tmp_brand_kpi_now a +# MAGIC left join tmp_brand_kpi_ly b +# MAGIC on a.pack_code = b.pack_code +# MAGIC and a.corp_cod = b.corp_cod +# MAGIC and a.YYYYMM = b.YYYYMM +# MAGIC and a.geo_key = b.geo_key +# MAGIC ) +# MAGIC +# MAGIC select +# MAGIC pack_code, +# MAGIC corp_cod, +# MAGIC yyyymm, +# MAGIC null as ytd, +# MAGIC geo_key, +# MAGIC 'num_dist_rate' as KPI_name, +# MAGIC num_dist_rate as kpi_val, +# MAGIC num_dist_rate_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC ta, +# MAGIC case when product_desc is null THEN 2 else 1 END as brand_flag, +# MAGIC case when geo_key ='CHT' THEN 2 else 1 END as pack_flag +# MAGIC from tmp_brand_kpi +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC pack_code, +# MAGIC corp_cod, +# MAGIC yyyymm, +# MAGIC null as ytd, +# MAGIC geo_key, +# MAGIC 'weig_dist_rate' as KPI_name, +# MAGIC weig_dist_rate as kpi_val, +# MAGIC weig_dist_rate_ly as kpi_val_ly, +# MAGIC null as str_kpi_val, +# MAGIC null as str_kpi_val_ly, +# MAGIC null as kpi_vol, +# MAGIC null as kpi_vol_ly, +# MAGIC null as str_kpi_vol, +# MAGIC null as str_kpi_vol_ly, +# MAGIC 'N' as TOTAL_FLAG, +# MAGIC ta, +# MAGIC case when product_desc is null THEN 2 else 1 END as brand_flag, +# MAGIC case when geo_key ='CHT' THEN 2 else 1 END as pack_flag +# MAGIC from tmp_brand_kpi +# MAGIC +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### PART-7:映射到dm表 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-8: map to dm.dm_zk_retail_sales_kpi +# MAGIC -- PART-7: 映射到dm表 +# MAGIC -- 将所有渠道kpi 数据汇总到dm +# MAGIC -- KPI 表汇总 +# MAGIC -- ytd 为是否ytd flag +# MAGIC -- geo 将cht(全国) 改成 ROC +# MAGIC -- DTP_FLAG: O-非dtp ,1-dtp数据 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dm.dm_zk_retail_sales_kpi +# MAGIC ( pack_code +# MAGIC ,corp_cod +# MAGIC ,ta +# MAGIC ,YYYYMM +# MAGIC ,ytd +# MAGIC ,geo_key +# MAGIC ,KPI_name +# MAGIC ,kpi_val +# MAGIC ,kpi_val_ly +# MAGIC ,str_kpi_val +# MAGIC ,str_kpi_val_ly +# MAGIC ,kpi_vol +# MAGIC ,kpi_vol_ly +# MAGIC ,str_kpi_vol +# MAGIC ,str_kpi_vol_ly +# MAGIC ,TOTAL_FLAG +# MAGIC ,data_source +# MAGIC ,dtp_flag +# MAGIC ,brand_flag +# MAGIC ,pack_flag +# MAGIC ) +# MAGIC --------retail 渠道 kpi +# MAGIC select +# MAGIC nvl(pack_code,'') pack_code +# MAGIC ,nvl(corp_cod,'') corp_cod +# MAGIC ,nvl(ta,'') ta +# MAGIC ,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 +# MAGIC ,if(ytd IS NOT NULL ,'Y' ,'N') YTD +# MAGIC ,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END geo_key +# MAGIC ,nvl(kpi_name,'') as kpi_name +# MAGIC ,nvl(cast(kpi_val as double),0) kpi_val +# MAGIC ,nvl(cast(kpi_val_ly as double),0) kpi_val_ly +# MAGIC ,nvl(str_kpi_val,'') +# MAGIC ,nvl(str_kpi_val_ly,'') +# MAGIC ,nvl(cast(kpi_vol as double),0) kpi_vol +# MAGIC ,nvl(cast(kpi_vol_ly as double),0) kpi_vol_ly +# MAGIC ,nvl(str_kpi_vol,'') +# MAGIC ,nvl(str_kpi_vol_ly,'') +# MAGIC ,nvl(TOTAL_FLAG,'') +# MAGIC ,'Retail(Quarterly)' data_source +# MAGIC ,'0' dtp_flag +# MAGIC , 0 +# MAGIC , 0 +# MAGIC from dws.dws_zk_retail_sales_kpi +# MAGIC WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC') +# MAGIC +# MAGIC union all +# MAGIC ---------------dtp 的kpi +# MAGIC select +# MAGIC nvl(pack_code,'') pack_code +# MAGIC ,nvl(corp_cod,'') corp_cod +# MAGIC ,nvl(ta,'') ta +# MAGIC ,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 +# MAGIC ,if(ytd IS NOT NULL ,'Y' ,'N') YTD +# MAGIC ,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END +# MAGIC ,nvl(kpi_name,'') +# MAGIC ,nvl(kpi_val,0) +# MAGIC ,nvl(kpi_val_ly,0) +# MAGIC ,nvl(str_kpi_val,'') +# MAGIC ,nvl(str_kpi_val_ly,'') +# MAGIC ,nvl(kpi_vol,0) +# MAGIC ,nvl(kpi_vol_ly,0) +# MAGIC ,nvl(str_kpi_vol,'') +# MAGIC ,nvl(str_kpi_vol_ly,'') +# MAGIC ,nvl(TOTAL_FLAG,'') +# MAGIC ,'Retail(Quarterly)' data_source +# MAGIC ,'1' dtp_flag +# MAGIC ,0 +# MAGIC ,0 +# MAGIC from dws.dws_zk_retail_dtp_sales_kpi +# MAGIC WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC') +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC --拼接retail 自有部分kpi +# MAGIC select +# MAGIC nvl(pack_code,'') pack_code +# MAGIC ,nvl(corp_cod,'') corp_cod +# MAGIC ,nvl(ta,'') ta +# MAGIC ,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 +# MAGIC ,if(ytd IS NOT NULL ,'Y' ,'N') YTD +# MAGIC ,case when geo_key ='CHT' THEN 'ROC' ELSE nvl(geo_key,'') END geo_key +# MAGIC ,nvl(kpi_name,'') +# MAGIC ,nvl(cast(kpi_val as double),0) kpi_val +# MAGIC ,nvl(cast(kpi_val_ly as double),0) kpi_val_ly +# MAGIC ,nvl(str_kpi_val,'') +# MAGIC ,nvl(str_kpi_val_ly,'') +# MAGIC ,nvl(cast(kpi_vol as double),0) kpi_vol +# MAGIC ,nvl(cast(kpi_vol_ly as double),0) kpi_vol_ly +# MAGIC ,nvl(str_kpi_vol,'') +# MAGIC ,nvl(str_kpi_vol_ly,'') +# MAGIC ,nvl(TOTAL_FLAG,'') +# MAGIC ,'Retail(Quarterly)' data_source +# MAGIC ,'0' dtp_flag +# MAGIC ,nvl(brand_flag,0) +# MAGIC ,nvl(pack_flag,0) +# MAGIC from dws.dws_zk_retail_sales_own_kpi +# MAGIC WHERE nvl(ta,'' ) NOT IN ('GI-Rx','GI-OTC') + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-9: map to dm.dm_zk_retail_market_ratio + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-9: map to dm.dm_zk_retail_market_ratio +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC /* +# MAGIC 修改人:chenwu +# MAGIC 修改时间:20250319 +# MAGIC 修改内容: +# MAGIC */ +# MAGIC ------------------------生产retail 的ratio 表,该表系数用于计算pdot-------- +# MAGIC insert overwrite table dm.dm_zk_retail_market_ratio +# MAGIC ( +# MAGIC market_pack_key, +# MAGIC pack_cod, +# MAGIC prod_des, +# MAGIC cmps_des, +# MAGIC corp_cod, +# MAGIC market, +# MAGIC value_market_ratio, +# MAGIC unit_market_ratio, +# MAGIC countingunit_market_ratio, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC select distinct +# MAGIC a.market || a.iqvia_pack_code as market_pack_key +# MAGIC ,a.iqvia_pack_code as pack_cod +# MAGIC ,a.prod_des as prod_des +# MAGIC ,a.cmps_des as cmps_des +# MAGIC ,a.corp_cod as corp_cod +# MAGIC ,a.market as market +# MAGIC ,a.extend_market_ratio as value_market_ratio +# MAGIC ,a.extend_market_ratio as unit_market_ratio +# MAGIC ,coalesce(case when t4.ratio is null then t5.ratio*coalesce(a.extend_market_ratio ,1 ) +# MAGIC else t4.ratio*coalesce(a.extend_market_ratio ,1 ) +# MAGIC end ,a.extend_market_ratio ) countingunit_market_ratio --20250319如果tblbrandratio 里面的没有对应的 ratio 则用market_ratio兜底而不是直接1 +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt +# MAGIC from tmp.tmp_dm_zk_retail_pack_property a +# MAGIC left join (--COUNTINGUNIT +# MAGIC select distinct +# MAGIC market, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC -- format pack_cod from dwd_gnd_ims_tblbrandratio +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_cod)),12) +# MAGIC else trim(pack_cod) +# MAGIC end as pack_cod, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC pack_des, +# MAGIC level, +# MAGIC type, +# MAGIC cast(ratio as float) as ratio, +# MAGIC cast(starttime as int) starttime, +# MAGIC cast (endtime as int) endtime +# MAGIC from dwd.dwd_gnd_ims_tblbrandratio +# MAGIC where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK' +# MAGIC )t4 on a.market=t4.market +# MAGIC and a.iqvia_pack_code = t4.PACK_COD +# MAGIC left join (--COUNTINGUNIT +# MAGIC select distinct +# MAGIC market, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC -- format pack_cod from dwd_gnd_ims_tblbrandratio +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_cod)),12) +# MAGIC else trim(pack_cod) +# MAGIC end as pack_cod, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC pack_des, +# MAGIC level, +# MAGIC type, +# MAGIC cast(ratio as float) as ratio, +# MAGIC cast(starttime as int) starttime, +# MAGIC cast (endtime as int) endtime +# MAGIC from dwd.dwd_gnd_ims_tblbrandratio +# MAGIC where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE' +# MAGIC ) t5 on a.market=t5.market +# MAGIC and right(concat('000000',a.CMPS_COD ),6 )= right(concat('000000',t5.CMPS_COD ),6 ) +# MAGIC union all +# MAGIC select distinct +# MAGIC a.market || a.iqvia_pack_code as market_pack_key +# MAGIC ,a.iqvia_pack_code as pack_cod +# MAGIC ,a.prod_des as prod_des +# MAGIC ,a.cmps_des as cmps_des +# MAGIC ,a.corp_cod as corp_cod +# MAGIC ,a.market as market +# MAGIC ,a.Market_Ratio as value_market_ratio +# MAGIC ,a.Market_Ratio as unit_market_ratio +# MAGIC ,coalesce(case when t4.ratio is null then t5.ratio*coalesce(a.Market_Ratio ,1 ) +# MAGIC else t4.ratio*coalesce(a.Market_Ratio ,1 ) +# MAGIC end ,a.Market_Ratio ) countingunit_market_ratio --20250319如果tblbrandratio 里面的没有对应的 ratio 则用market_ratio兜底而不是直接1 +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt +# MAGIC from dws.dws_zk_retail_dtp_market a +# MAGIC left join (--COUNTINGUNIT +# MAGIC select distinct +# MAGIC market, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC -- format pack_cod from dwd_gnd_ims_tblbrandratio +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_cod)),12) +# MAGIC else trim(pack_cod) +# MAGIC end as pack_cod, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC pack_des, +# MAGIC level, +# MAGIC type, +# MAGIC cast(ratio as float) as ratio, +# MAGIC cast(starttime as int) starttime, +# MAGIC cast (endtime as int) endtime +# MAGIC from dwd.dwd_gnd_ims_tblbrandratio +# MAGIC where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK' +# MAGIC )t4 on a.market=t4.market +# MAGIC and a.iqvia_pack_code = t4.PACK_COD +# MAGIC left join (--COUNTINGUNIT +# MAGIC select distinct +# MAGIC market, +# MAGIC cmps_cod, +# MAGIC cmps_des, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC -- format pack_cod from dwd_gnd_ims_tblbrandratio +# MAGIC case when length(trim(pack_cod)) < 12 and trim(pack_cod) REGEXP '^[0-9]' +# MAGIC then right(concat('000000000000',trim(pack_cod)),12) +# MAGIC else trim(pack_cod) +# MAGIC end as pack_cod, +# MAGIC ---------------------------------------------------------------------------- +# MAGIC pack_des, +# MAGIC level, +# MAGIC type, +# MAGIC cast(ratio as float) as ratio, +# MAGIC cast(starttime as int) starttime, +# MAGIC cast (endtime as int) endtime +# MAGIC from dwd.dwd_gnd_ims_tblbrandratio +# MAGIC where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE' +# MAGIC ) t5 on a.market=t5.market +# MAGIC and right(concat('000000',a.CMPS_COD ),6 ) = right(concat('000000',t5.CMPS_COD ),6 ) +# MAGIC + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/11 map_to_overview_dm_table.py b/Retail/11 map_to_overview_dm_table.py new file mode 100644 index 0000000..6f7b991 --- /dev/null +++ b/Retail/11 map_to_overview_dm_table.py @@ -0,0 +1,1000 @@ +# Databricks notebook source +############################################################START############################################################## +### STEP-10: map to dm.dm_zk_retail_overview_data +### STEP-11: map to dm.dm_zk_retail_product_info +### STEP-12: map to dm.dm_zk_retail_brand +### STEP-13: map to dm.dm_zk_retail_export + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-10: map to dm.dm_zk_retail_overview_data + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-10: map to dm.dm_zk_retail_overview_data +# MAGIC -- 10.1 将所有overview 数据整合在同一张表里 +# MAGIC +# MAGIC -- -- 注意事项: +# MAGIC -- --rank1字段:Total行排名设为99,其他行如果数据源是null,则设为98。总之不能为null。 +# MAGIC -- -- 每个数据源文件(file_name)判断是否Total行的方式不尽相同,具体参考代码。 +# MAGIC -- --sales_quarter字段:数据源中有两种格式,24Q1以及2024Q1,因此需要统一成2024Q1这种格式。 +# MAGIC -- -- 有些因为是YTD的值,源文件里sales_quarter是null,需将YTD字段中的时间拆出来作为sales_quarter字段的值 +# MAGIC -- --最终表的source_name字段的内容是各个TA,RC字段是南区、北区等。而数据源文件中都叫source_name,每个源文件需按实际情况拆分成2列 +# MAGIC -- --yyyymm字段:Q1是3月、Q2是6月、Q3是9月、Q4是12月。 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_overview_data +# MAGIC ( +# MAGIC rank1 +# MAGIC ,product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,sales_quarter +# MAGIC ,yyyymm +# MAGIC ,ytd +# MAGIC ,sales_amount +# MAGIC ,sales_amount_ly +# MAGIC ,sales_amount_total +# MAGIC ,sales_amount_ly_total +# MAGIC ,rx_type +# MAGIC ,top1_brand_val +# MAGIC ,top1_brand_gr +# MAGIC ,top2_brand_val +# MAGIC ,top2_brand_gr +# MAGIC ,top1_incremental_brand +# MAGIC ,top1_incremental_gr +# MAGIC ,top2_incremental_brand +# MAGIC ,top2_incremental_gr +# MAGIC ,ytd_gr +# MAGIC ,ytd_ms +# MAGIC ,ytd_delta_ms +# MAGIC ,dtp_name +# MAGIC ,file_name +# MAGIC ,source_name +# MAGIC ,rc +# MAGIC ,rx_otc +# MAGIC ,top_incre +# MAGIC ,etl_insert_dt +# MAGIC ,etl_update_dt +# MAGIC ) +# MAGIC +# MAGIC +# MAGIC with overview as +# MAGIC ( +# MAGIC select +# MAGIC case when replace(upper(corp_name),'-','') = 'DTP TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else replace(rank1,' ','') end as rank1 +# MAGIC ,null as product_desc +# MAGIC ,null as product_type +# MAGIC ,null as common_name +# MAGIC ,null as brand +# MAGIC ,replace(corp_name,'-','') as corp +# MAGIC ,null as corporation +# MAGIC ,null as corp_type +# MAGIC ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +# MAGIC else sales_quarter +# MAGIC end as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,sales_amount +# MAGIC ,null as rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,null as dtp_name +# MAGIC ,'DTP TOP10企业排名' file_name +# MAGIC ,NULL as source_name +# MAGIC ,null rc +# MAGIC ,'Rx' as rx_otc +# MAGIC ,'TOP' as top_incre +# MAGIC from dwd.dwd_gnd_ext_retail_dtp_top_copd ---这个没有ytd 三个字段添加 +# MAGIC union all +# MAGIC select +# MAGIC case when replace(upper(brand_name),'-','') = 'DTP TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else replace(rank1,' ','') end as rank1 +# MAGIC ,null as product_desc +# MAGIC ,null as product_type +# MAGIC ,null as common_name +# MAGIC ,brand_name as brand +# MAGIC ,replace(corp_name,'-','') as corp +# MAGIC ,null as corporation +# MAGIC ,null as corp_type +# MAGIC ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +# MAGIC else sales_quarter +# MAGIC end as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,sales_amount +# MAGIC ,null as rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,null as dtp_name +# MAGIC ,'DTP TOP10品牌排名' file_name +# MAGIC ,NULL as source_name +# MAGIC ,null rc +# MAGIC ,'Rx' as rx_otc +# MAGIC ,'TOP' as top_incre +# MAGIC from dwd.dwd_gnd_ext_retail_dtp_top_brand ---这个没有ytd 三个字段添加 +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else replace(rank1,' ','') end as rank1 +# MAGIC ,null as product_desc +# MAGIC ,null as product_type +# MAGIC ,null as common_name +# MAGIC ,null as brand +# MAGIC ,corp_desc as corp +# MAGIC ,corporation +# MAGIC ,`type` as corp_type +# MAGIC ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +# MAGIC else sales_quarter +# MAGIC end as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,sales_amount +# MAGIC ,null as rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,null as dtp_name +# MAGIC ,'全国-集团排名' file_name +# MAGIC ,case when ta = 'GI' then concat(ta,'-',rx_otc) +# MAGIC when ta = 'NIAD-excl. GLP1' then 'DM' +# MAGIC else ta end as source_name +# MAGIC ,null rc +# MAGIC ,rx_otc +# MAGIC ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +# MAGIC from dwd.dwd_gnd_retail_national_corp_rank +# MAGIC +# MAGIC union all +# MAGIC select +# MAGIC case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else replace(rank1,' ','') end as rank1 +# MAGIC ,prod_desc as product_desc +# MAGIC ,`type` as product_type +# MAGIC ,cmps_desc as common_name +# MAGIC ,brand +# MAGIC ,corp_desc as corp +# MAGIC ,corporation +# MAGIC ,null as corp_type +# MAGIC ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +# MAGIC else sales_quarter +# MAGIC end as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,sales_amount +# MAGIC ,null as rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,null as dtp_name +# MAGIC ,'全国-产品排名' file_name +# MAGIC ,case when ta = 'GI' then concat(ta,'-',rx_otc) +# MAGIC when ta = 'NIAD-excl. GLP1' then 'DM' +# MAGIC else ta end as source_name +# MAGIC ,null rc +# MAGIC ,rx_otc +# MAGIC ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +# MAGIC from dwd.dwd_gnd_retail_national_prd_rank +# MAGIC union all +# MAGIC select +# MAGIC case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else replace(rank1,' ','') end as rank1 +# MAGIC ,null as product_desc +# MAGIC ,null as product_type +# MAGIC ,null as common_name +# MAGIC ,null as brand +# MAGIC ,corp_desc as corp +# MAGIC ,corporation +# MAGIC ,`type` as corp_type +# MAGIC ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +# MAGIC else sales_quarter +# MAGIC end as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,sales_amount +# MAGIC ,null as rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,null as dtp_name +# MAGIC ,'大区-集团排名' file_name +# MAGIC ,case when ta = 'GI' then concat(ta,'-',rx_otc) +# MAGIC when ta = 'NIAD-excl. GLP1' then 'DM' +# MAGIC else ta end as source_name +# MAGIC ,region rc +# MAGIC ,rx_otc +# MAGIC ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +# MAGIC from dwd.dwd_gnd_retail_region_corp_rank +# MAGIC ) +# MAGIC +# MAGIC -- --计算Total值,按文件、季度、TA、rx_otc、top_incre进行合计 +# MAGIC -- --因为数据中本身就包含了Total行,因此直接筛选了rank1 = '99'(即筛选Total行)进行合计 +# MAGIC ,overview_total as ( +# MAGIC select file_name, +# MAGIC source_name, +# MAGIC rx_otc, +# MAGIC top_incre, +# MAGIC sales_quarter, +# MAGIC rc, +# MAGIC sum(sales_amount) sales_amount_total +# MAGIC from overview +# MAGIC where rank1 = '99' +# MAGIC group by file_name,sales_quarter,rx_otc,top_incre,source_name,rc +# MAGIC ) +# MAGIC +# MAGIC -- --取到文件中的最大时间,在获取ly值的时候,用于限定时间范围 +# MAGIC ,overview_maxyq as ( +# MAGIC select max(sales_quarter) max_sales_quarter +# MAGIC from overview +# MAGIC where sales_quarter is not null +# MAGIC ) +# MAGIC +# MAGIC -- --在数据源的基础上,增加yyyymm字段、sales_amount_ly、sales_amount_total、sales_amount_ly_total字段 +# MAGIC select +# MAGIC case when max(rank1) < 10000 then max(rank1) else cast(max(rank1) as int) - 10000 end as rank1 +# MAGIC ,product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,sales_quarter +# MAGIC ,case when right(sales_quarter,1) = '1' then concat(left(sales_quarter,4),'03') +# MAGIC when right(sales_quarter,1) = '2' then concat(left(sales_quarter,4),'06') +# MAGIC when right(sales_quarter,1) = '3' then concat(left(sales_quarter,4),'09') +# MAGIC when right(sales_quarter,1) = '4' then concat(left(sales_quarter,4),'12') +# MAGIC end as yyyymm +# MAGIC ,max(ytd) ytd +# MAGIC ,sum(sales_amount) as sales_amount +# MAGIC ,sum(sales_amount_ly) as sales_amount_ly +# MAGIC ,sum(sales_amount_total) as sales_amount_total +# MAGIC ,sum(sales_amount_ly_total) as sales_amount_ly_total +# MAGIC ,rx_type +# MAGIC ,max(top1_brand_val) top1_brand_val +# MAGIC ,max(top1_brand_gr) top1_brand_gr +# MAGIC ,max(top2_brand_val) top2_brand_val +# MAGIC ,max(top2_brand_gr) top2_brand_gr +# MAGIC ,max(top1_incremental_brand) top1_incremental_brand +# MAGIC ,max(top1_incremental_gr) top1_incremental_gr +# MAGIC ,max(top2_incremental_brand) top2_incremental_brand +# MAGIC ,max(top2_incremental_gr) top2_incremental_gr +# MAGIC ,max(ytd_gr) ytd_gr +# MAGIC ,max(ytd_ms) ytd_ms +# MAGIC ,max(ytd_delta_ms) ytd_delta_ms +# MAGIC ,dtp_name +# MAGIC ,file_name +# MAGIC ,source_name +# MAGIC ,rc +# MAGIC ,rx_otc +# MAGIC ,top_incre +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from +# MAGIC ( +# MAGIC select +# MAGIC cast(rank1 as int) + 10000 rank1 +# MAGIC ,product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,t1.sales_quarter +# MAGIC ,ytd +# MAGIC ,sales_amount +# MAGIC ,0 as sales_amount_ly +# MAGIC ,t2.sales_amount_total +# MAGIC ,0 as sales_amount_ly_total +# MAGIC ,rx_type +# MAGIC ,top1_brand_val +# MAGIC ,top1_brand_gr +# MAGIC ,top2_brand_val +# MAGIC ,top2_brand_gr +# MAGIC ,top1_incremental_brand +# MAGIC ,top1_incremental_gr +# MAGIC ,top2_incremental_brand +# MAGIC ,top2_incremental_gr +# MAGIC ,ytd_gr +# MAGIC ,ytd_ms +# MAGIC ,ytd_delta_ms +# MAGIC ,dtp_name +# MAGIC ,t1.file_name +# MAGIC ,t1.source_name +# MAGIC ,t1.rc +# MAGIC ,t1.rx_otc +# MAGIC ,t1.top_incre +# MAGIC from overview t1 +# MAGIC left join overview_total t2 +# MAGIC on t1.file_name = t2.file_name +# MAGIC and nvl(t1.sales_quarter,'') = nvl(t2.sales_quarter,'') +# MAGIC and t1.rx_otc = t2.rx_otc +# MAGIC and t1.top_incre = t2.top_incre +# MAGIC and NVL(t1.source_name,'') = NVL(t2.source_name,'') +# MAGIC and NVL(t1.rc,'') = NVL(t2.rc,'') +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC select +# MAGIC cast(rank1 as int) rank1 +# MAGIC ,product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,concat(cast(left(t1.sales_quarter,4) as int) + 1,right(t1.sales_quarter,2)) as sales_quarter +# MAGIC ,null as ytd +# MAGIC ,0 as sales_amount +# MAGIC ,sales_amount as sales_amount_ly +# MAGIC ,0 as sales_amount_total +# MAGIC ,t2.sales_amount_total as sales_amount_ly_total +# MAGIC ,rx_type +# MAGIC ,null as top1_brand_val +# MAGIC ,null as top1_brand_gr +# MAGIC ,null as top2_brand_val +# MAGIC ,null as top2_brand_gr +# MAGIC ,null as top1_incremental_brand +# MAGIC ,null as top1_incremental_gr +# MAGIC ,null as top2_incremental_brand +# MAGIC ,null as top2_incremental_gr +# MAGIC ,null as ytd_gr +# MAGIC ,null as ytd_ms +# MAGIC ,null as ytd_delta_ms +# MAGIC ,dtp_name +# MAGIC ,t1.file_name +# MAGIC ,t1.source_name +# MAGIC ,t1.rc +# MAGIC ,t1.rx_otc +# MAGIC ,t1.top_incre +# MAGIC from overview t1 +# MAGIC left join overview_total t2 +# MAGIC on t1.file_name = t2.file_name +# MAGIC and nvl(t1.sales_quarter,'') = nvl(t2.sales_quarter,'') +# MAGIC and t1.rx_otc = t2.rx_otc +# MAGIC and t1.top_incre = t2.top_incre +# MAGIC and NVL(t1.source_name,'') = NVL(t2.source_name,'') +# MAGIC and NVL(t1.rc,'') = NVL(t2.rc,'') +# MAGIC left join overview_maxyq t3 +# MAGIC on 1=1 +# MAGIC where concat(cast(left(t1.sales_quarter,4) as int) + 1,right(t1.sales_quarter,2)) <= t3.max_sales_quarter +# MAGIC ) t +# MAGIC group by +# MAGIC product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,sales_quarter +# MAGIC ,rx_type +# MAGIC ,dtp_name +# MAGIC ,file_name +# MAGIC ,source_name +# MAGIC ,rc +# MAGIC ,rx_otc +# MAGIC ,top_incre + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-10: map to dm.dm_zk_retail_overview_data +# MAGIC -- 10.2 将free report overview 导出的合并文件写入dm +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dm.dm_zk_retail_overview_data( +# MAGIC rank1, +# MAGIC product_desc, +# MAGIC product_type, +# MAGIC common_name, +# MAGIC brand, +# MAGIC corp, +# MAGIC corporation, +# MAGIC corp_type, +# MAGIC sales_quarter, +# MAGIC yyyymm, +# MAGIC ytd, +# MAGIC sales_amount, +# MAGIC sales_amount_ly, +# MAGIC sales_amount_total, +# MAGIC sales_amount_ly_total, +# MAGIC rx_type, +# MAGIC top1_brand_val, +# MAGIC top1_brand_gr, +# MAGIC top2_brand_val, +# MAGIC top2_brand_gr, +# MAGIC top1_incremental_brand, +# MAGIC top1_incremental_gr, +# MAGIC top2_incremental_brand, +# MAGIC top2_incremental_gr, +# MAGIC ytd_gr, +# MAGIC ytd_ms, +# MAGIC ytd_delta_ms, +# MAGIC dtp_name, +# MAGIC file_name, +# MAGIC source_name, +# MAGIC rc, +# MAGIC rx_otc, +# MAGIC top_incre, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC select +# MAGIC trim(rank1) rank1 +# MAGIC ,product_desc +# MAGIC ,product_type +# MAGIC ,common_name +# MAGIC ,brand +# MAGIC ,nvl(corp,'' ) corp +# MAGIC ,corporation +# MAGIC ,corp_type +# MAGIC ,sales_quarter +# MAGIC ,yyyymm +# MAGIC ,case when ytd is null then 'N' ELSE 'Y' END ytd +# MAGIC ,sales_amount +# MAGIC ,sales_amount_ly +# MAGIC ,sales_amount_total +# MAGIC ,sales_amount_ly_total +# MAGIC ,rx_type +# MAGIC ,top1_brand_val +# MAGIC ,cast(top1_brand_gr as double) top1_brand_gr +# MAGIC ,top2_brand_val +# MAGIC ,cast(top2_brand_gr as double) top2_brand_gr +# MAGIC ,top1_incremental_brand +# MAGIC ,cast(top1_incremental_gr as double) top1_incremental_gr +# MAGIC ,top2_incremental_brand +# MAGIC ,cast(top2_incremental_gr as double) top2_incremental_gr +# MAGIC ,cast(ytd_gr as double ) ytd_gr +# MAGIC ,cast(ytd_ms as double) ytd_ms +# MAGIC ,cast(ytd_delta_ms as double) ytd_delta_ms +# MAGIC ,dtp_name +# MAGIC ,file_name +# MAGIC ,trim(source_name) source_name +# MAGIC ,rc +# MAGIC ,rx_otc +# MAGIC ,top_incre +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dws.dws_zk_retail_overview_data + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-11: map to dm.dm_zk_retail_product_info + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-11: map to dm.dm_zk_retail_product_info +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC ------------------------------retail/EC原始维度,从b2c配置表直取----------------------------------------- +# MAGIC insert overwrite table dws.dws_zk_retail_product_info +# MAGIC select distinct +# MAGIC product_id +# MAGIC ------------------------------------------------------------- +# MAGIC -- format iqvia_pack_code +# MAGIC ,case when length(trim(iqvia_pack_code)) < 12 and trim(iqvia_pack_code) REGEXP '^[0-9]' then right(concat('000000000000',trim(iqvia_pack_code)),12) else trim(iqvia_pack_code) end as iqvia_pack_code +# MAGIC ------------------------------------------------------------- +# MAGIC ,prescription_nature +# MAGIC ,medicine_type +# MAGIC ,zk_medicine_tier1 +# MAGIC ,zk_medicine_tier2 +# MAGIC ,zk_medicine_tier3 +# MAGIC ,zk_medicine_tier4 +# MAGIC ,common_name +# MAGIC ,dosage_form +# MAGIC ,user_type +# MAGIC ,category_name +# MAGIC ,product_name +# MAGIC ,brand_name +# MAGIC ,zk_manu_des +# MAGIC ,zk_corp_des +# MAGIC ,zk_pack_des +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dwd.dwd_gnd_ext_retail_pack_property; +# MAGIC ------------------------------retail/EC原始维度,从b2c直取 写入dm----------------------------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_product_info +# MAGIC select distinct +# MAGIC product_id +# MAGIC ,iqvia_pack_code +# MAGIC ,prescription_nature +# MAGIC ,medicine_type +# MAGIC ,zk_medicine_tier1 +# MAGIC ,zk_medicine_tier2 +# MAGIC ,zk_medicine_tier3 +# MAGIC ,zk_medicine_tier4 +# MAGIC ,common_name +# MAGIC ,dosage_form +# MAGIC ,user_type +# MAGIC ,category_name +# MAGIC ,product_name +# MAGIC ,brand_name +# MAGIC ,zk_manu_des +# MAGIC ,zk_corp_des +# MAGIC ,zk_pack_des +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dws.dws_zk_retail_product_info; + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-12: map to dm.dm_zk_retail_brand + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-12: map to dm.dm_zk_retail_brand +# MAGIC -- retail 自有部分需要导出数据,从品牌数据报表直取,无特殊加工 +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC ------------------------------retail 自有部分需要导出数据,从品牌数据报表直取,无特殊加工----------------------------------------- +# MAGIC insert overwrite table dws.dws_zk_retail_brand +# MAGIC with max_yq as ( +# MAGIC select TA,market,rc_name_en,province_city,ranked_by,max(yq) as yq +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC group by TA,market,rc_name_en,province_city,ranked_by +# MAGIC ) +# MAGIC +# MAGIC select distinct +# MAGIC t1.TA, +# MAGIC t1.market, +# MAGIC t1.rc_name_en, +# MAGIC t1.province_city +# MAGIC ,key_brand_ytd +# MAGIC ,key_brand_rank_ytd +# MAGIC ,top_brand_ytd +# MAGIC ,top_brand_ms_ytd +# MAGIC ,top_brand_inc_ms_ytd +# MAGIC ,top_brand_gr_ytd +# MAGIC ,key_brand_qtd +# MAGIC ,key_brand_rank_qtd +# MAGIC ,top_brand_qtd +# MAGIC ,top_brand_ms_qtd +# MAGIC ,top_brand_inc_ms_qtd +# MAGIC ,top_brand_gr_qtd +# MAGIC ,t1.ranked_by +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all t1 +# MAGIC inner join max_yq t2 +# MAGIC on t1.TA = t2.TA +# MAGIC and t1.market = t2.market +# MAGIC and t1.rc_name_en = t2.rc_name_en +# MAGIC and t1.province_city = t2.province_city +# MAGIC and t1.yq = t2.yq +# MAGIC and t1.ranked_by = t2.ranked_by +# MAGIC ; +# MAGIC +# MAGIC -- dm_zk_retail_brand +# MAGIC +# MAGIC ------------------------------retail 自有部分需要导出数据,写入dm----------------------------------------- +# MAGIC insert overwrite table dm.dm_zk_retail_brand +# MAGIC select distinct +# MAGIC TA,market,rc_name_en,province_city +# MAGIC ,key_brand_ytd +# MAGIC ,cast(key_brand_rank_ytd as double) key_brand_rank_ytd +# MAGIC ,top_brand_ytd +# MAGIC ,cast(top_brand_ms_ytd as double) top_brand_ms_ytd +# MAGIC ,cast(top_brand_inc_ms_ytd as double) top_brand_inc_ms_ytd +# MAGIC ,cast(top_brand_gr_ytd as double) top_brand_gr_ytd +# MAGIC ,key_brand_qtd +# MAGIC ,cast(key_brand_rank_qtd as double ) key_brand_rank_qtd +# MAGIC ,top_brand_qtd +# MAGIC ,cast(top_brand_ms_qtd as double ) top_brand_ms_qtd +# MAGIC ,cast(top_brand_inc_ms_qtd as double ) top_brand_inc_ms_qtd +# MAGIC ,cast(top_brand_gr_qtd as double ) top_brand_gr_qtd +# MAGIC ,ranked_by +# MAGIC from dws.dws_zk_retail_brand; +# MAGIC +# MAGIC +# MAGIC +# MAGIC +# MAGIC + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-13: map to dm.dm_zk_retail_export + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC -- STEP-13: map to dm.dm_zk_retail_export +# MAGIC +# MAGIC --修改时间:20240821 +# MAGIC --修改人:FanXujia +# MAGIC --修改内容: +# MAGIC --导出模板整合,由原来的十几个文件改为3个文件 +# MAGIC --《全国-集团排名》:dwd.dwd_gnd_retail_national_corp_rank +# MAGIC --《全国-产品排名》:dwd.dwd_gnd_retail_national_prd_rank +# MAGIC --《大区-集团排名》:dwd.dwd_gnd_retail_region_corp_rank +# MAGIC ------------------------------------------------------------------------------------- +# MAGIC +# MAGIC insert overwrite table dws.dws_zk_retail_export +# MAGIC ( +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC prod_desc, +# MAGIC cmps_desc, +# MAGIC brand, +# MAGIC region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC file_name, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC --《全国-集团排名》 +# MAGIC select distinct +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC case when upper(trim(rank1)) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else trim(rank1) end as rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC null as prod_desc, +# MAGIC null as cmps_desc, +# MAGIC null as brand, +# MAGIC null as region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC '全国-集团排名' as file_name, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +# MAGIC from dwd.dwd_gnd_retail_national_corp_rank +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC --《全国-产品排名》 +# MAGIC select distinct +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC case when upper(trim(rank1)) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else trim(rank1) end as rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC prod_desc, +# MAGIC cmps_desc, +# MAGIC brand, +# MAGIC null as region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC '全国-产品排名' as file_name, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +# MAGIC from dwd.dwd_gnd_retail_national_prd_rank +# MAGIC +# MAGIC union all +# MAGIC +# MAGIC --《大区-集团排名》 +# MAGIC select distinct +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC case when upper(trim(rank1)) = 'TOTAL' then '99' +# MAGIC when rank1 is null then '98' +# MAGIC else trim(rank1) end as rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC null as prod_desc, +# MAGIC null as cmps_desc, +# MAGIC null as brand, +# MAGIC region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC '大区-集团排名' as file_name, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +# MAGIC from dwd.dwd_gnd_retail_region_corp_rank; +# MAGIC +# MAGIC --写入dm表 +# MAGIC insert overwrite table dm.dm_zk_retail_export +# MAGIC ( +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC prod_desc, +# MAGIC cmps_desc, +# MAGIC brand, +# MAGIC region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC file_name, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC select +# MAGIC ta, +# MAGIC rx_otc, +# MAGIC top_top_incre, +# MAGIC rank1, +# MAGIC corp_desc, +# MAGIC corporation, +# MAGIC type, +# MAGIC prod_desc, +# MAGIC cmps_desc, +# MAGIC brand, +# MAGIC region, +# MAGIC sales_quarter, +# MAGIC sales_amount, +# MAGIC file_name, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC from dws.dws_zk_retail_export; + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ## STEP-14: calculate niad date + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC CREATE OR REPLACE TABLE tmp.tmp_dm_td_ext_retail_niad_month as +# MAGIC WITH ALL_RETIAL_DATA ( +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_nataional_niad +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_statin_xzk +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_nataional_oap +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_anti_asthma_copd +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_aagsa_ppi_oral +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_atomizer +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_nataional_rd +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_metoprolol_tartrat +# MAGIC union all +# MAGIC select +# MAGIC max( +# MAGIC nvl( +# MAGIC month, +# MAGIC CONCAT( +# MAGIC SUBSTRING(quarter, 1, 4), -- 提取年份(前4位) +# MAGIC CASE +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '1' THEN '03' -- Q1 → 03月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '2' THEN '06' -- Q2 → 06月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '3' THEN '09' -- Q3 → 09月 +# MAGIC WHEN SUBSTRING(quarter, 6, 1) = '4' THEN '12' -- Q4 → 12月 +# MAGIC END +# MAGIC ) +# MAGIC ) +# MAGIC ) as month, +# MAGIC 'NOTNIAD' as datatype +# MAGIC from +# MAGIC dwd.dwd_gnd_ext_retail_htn +# MAGIC ) +# MAGIC SELECT +# MAGIC MAX(t1.month) as NIAD_MONTH, +# MAGIC max(t2.month) OTHERS_MONTH +# MAGIC FROM +# MAGIC all_retial_data t1 +# MAGIC LEFT JOIN ( +# MAGIC SELECT +# MAGIC MAX(month) as month +# MAGIC FROM +# MAGIC all_retial_data +# MAGIC WHERE +# MAGIC datatype = 'NOTNIAD' +# MAGIC ) t2 +# MAGIC WHERE +# MAGIC t1.datatype = 'NIAD' + +# COMMAND ---------- + +############################################################END################################################################ \ No newline at end of file diff --git a/Retail/12 dws_tf_external_retail_dtp_special.sql b/Retail/12 dws_tf_external_retail_dtp_special.sql new file mode 100644 index 0000000..ff12c73 --- /dev/null +++ b/Retail/12 dws_tf_external_retail_dtp_special.sql @@ -0,0 +1,81 @@ +-- Databricks notebook source +insert overwrite table dws.dws_tf_external_retail_dtp_special +with dim_geo as ( + SELECT + AUDIT_COD + ,REGION_TYPE + ,PROVINCE_C + FROM DM.DM_TD_EXTERNAL_GEO + WHERE DATA_SOURCE = 'DTP(Quarterly)' + GROUP BY 1,2,3 +) +,all_data (--所有DTP BRAND 中的数据聚合 + select + market + ,province_city + ,yyyymm + ,sum(sales_value) as sales_value + ,sum(sales_volume) as sales_volume + ,sum(pdot_counting_unit) as pdot_counting_unit + from dwd.dwd_gnd_ext_dtp_zk_brand --数据来源表 + where type = '品类' + and market = 'EGFR TKI' + and zk_brand_category ='EGFR TKI Market' + and ranked_by = 'value' + group by 1,2,3 +) +,not_quanguo_data as (--计算非全国部分 + select + market + ,yyyymm + ,sum(sales_value) as sales_value + ,sum(sales_volume) as sales_volume + ,sum(pdot_counting_unit) as pdot_counting_unit + from all_data + where province_city <> '全国' + group by 1,2 +) +,roc_data as (--计算 roc部分的值 = 全国- 非全国合计 + select + a.market + ,'ROC' as province_city + ,a.yyyymm + ,a.sales_value-b.sales_value as sales_value + ,a.sales_volume - b.sales_volume as sales_volume + ,a.pdot_counting_unit - b.pdot_counting_unit as pdot_counting_unit + from all_data a + left join not_quanguo_data b on a.market = b.market and a.yyyymm = b.yyyymm + where a.province_city = '全国' +) +,all_data_with_roc as (--合并全部数据 + select + market + ,province_city + ,yyyymm + ,sales_value + ,sales_volume + ,pdot_counting_unit + from all_data where province_city <> '全国' + union all + select + market + ,province_city + ,yyyymm + ,sales_value + ,sales_volume + ,pdot_counting_unit + from roc_data +) + +select + a.market + ,a.province_city + ,concat(b.AUDIT_COD, 'DTP(Quarterly)', b.REGION_TYPE ) as audit_key --pbi dim_rc 关联键 + ,concat(b.AUDIT_COD, 'DTP(Quarterly)' ) audit_source --pbi dim_geo 关联键 + ,concat(left(a.yyyymm,4),'-',right(a.yyyymm,2),'-01') date_key --pbi dim_date 关联键 + ,a.yyyymm + ,a.sales_value + ,a.sales_volume + ,a.pdot_counting_unit +from all_data_with_roc a +left join dim_geo b on a.province_city = b.PROVINCE_C \ No newline at end of file diff --git a/Retail/13 DM_TF_EXT_RETAIL_SALES.sql b/Retail/13 DM_TF_EXT_RETAIL_SALES.sql new file mode 100644 index 0000000..7eeb536 --- /dev/null +++ b/Retail/13 DM_TF_EXT_RETAIL_SALES.sql @@ -0,0 +1,184 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_RETAIL_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RETAIL_SALES +AS +SELECT + A.YYYYMM, + A.iqvia_pack_code AS PACK_CODE, + trim(A.AUDIT_COD) AS AUDIT_CODE, + 'Retail(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) as SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) as SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + A.PACK_FLAG, + A.brand_flag PROD_FLAG, + 0 DTP_FLAG, + case + when + max(lower(C.CMPS_DES)) in ('atorvastatin', 'rosuvastatin', 'esomeprazole', 'omeprazole') + then + 1 + else 0 + end as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 +------------------------------------- +FROM + dm.dm_zk_retail_sales A + LEFT JOIN ( + select DISTINCT + iqvia_pack_code, + CMPS_DES + from + dm.dm_zk_retail_pack_property + ) C + ON A.iqvia_pack_code = C.iqvia_pack_code +where + A.YYYYMM >= '202001' +GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.PACK_FLAG, + A.brand_flag + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_RETAIL_SALES +( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) +SELECT + YYYYMM, + NVL ( + NULLIF(PACK_CODE, ''), + CONCAT ('PACK_CODE_', DATA_SOURCE) + ) AS PACK_CODE, + NVL (NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + RETAIL_SALES +; \ No newline at end of file diff --git a/Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql b/Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql new file mode 100644 index 0000000..b8c6115 --- /dev/null +++ b/Retail/14 DM_TF_EXT_RETAIL_DTP_SALES.sql @@ -0,0 +1,170 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_RETAIL_DTP_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_dtp_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_dtp_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RETAIL_DTP_SALES +AS +SELECT + A.YYYYMM, + A.iqvia_pack_code AS PACK_CODE, + trim(A.AUDIT_COD) AS AUDIT_CODE, + 'DTP(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) as SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) as SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + brand_flag AS PROD_FLAG, + 1 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_zk_retail_dtp_sales A + where + A.YYYYMM >= '201901' + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.brand_flag, + A.pack_flag + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_RETAIL_DTP_SALES +( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) +SELECT + YYYYMM, + NVL ( + NULLIF(PACK_CODE, ''), + CONCAT ('PACK_CODE_', DATA_SOURCE) + ) AS PACK_CODE, + NVL (NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + RETAIL_DTP_SALES +; \ No newline at end of file diff --git a/Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql b/Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql new file mode 100644 index 0000000..090d0f0 --- /dev/null +++ b/Retail/15 DM_TD_EXT_RETAIL_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_PACK_PROPERTY +-- ( +-- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- CLASS STRING, +-- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_PACK_PROPERTY +SELECT + MARKET_PACK_KEY, + IQVIA_PACK_CODE AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + IQVIA_PROD_CODE AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + NULL AS VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + MARKET, + KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + CLASS, + NULL AS MARKET_RATIO, + NULL AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_ZK_RETAIL_PACK_PROPERTY; \ No newline at end of file diff --git a/Retail/16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql b/Retail/16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql new file mode 100644 index 0000000..daaf07d --- /dev/null +++ b/Retail/16 DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY +-- ( +-- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- CLASS STRING, +-- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_dtp_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_dtp_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY +SELECT + MARKET_PACK_KEY, + iqvia_pack_code AS PACK_CODE, + pack_des AS PACK_DESC, + stgh_des AS STGH_DESC, + pack_lch AS PACK_LCH, + Family_cod AS FAMILY_CODE, + Family_Name AS FAMILY_NAME, + PROD_COD AS PROD_CODE, + prod_des AS PROD_DESC, + prod_des_c AS PROD_DESC_C, + cmps_cod AS CMPS_CODE, + cmps_des AS CMPS_DESC, + cmps_des_c AS CMPS_DESC_C, + atc1_cod AS ATC1_CODE, + atc2_cod AS ATC2_CODE, + atc3_cod AS ATC3_CODE, + atc4_cod AS ATC4_CODE, + app1_cod AS APP1_CODE, + app2_cod AS APP2_CODE, + app3_cod AS APP3_CODE, + BIO_DESC, + gene_orig_desc AS GENE_ORIG_DESC, + eth_otc_desc AS ETH_OTC_DESC, + nrdl_desc AS NRDL_DESC, + NRDL_ENTRY_DATE, + edl_desc AS EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + NULL AS VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + corp_des AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BrandType AS BRANDTYPE, + MARKET, + KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + AZ_Related AS AZ_RELATED, + atc1_des AS ATC1_DESC, + atc1_des_c AS ATC1_DESC_C, + atc2_des AS ATC2_DESC, + atc2_des_c AS ATC2_DESC_C, + atc3_des AS ATC3_DESC, + atc3_des_c AS ATC3_DESC_C, + atc4_des AS ATC4_DESC, + atc4_des_c AS ATC4_DESC_C, + app1_des AS APP1_DESC, + app1_des_c AS APP1_DESC_C, + app2_des AS APP2_DESC, + app2_des_c AS APP2_DESC_C, + app3_des AS APP3_DESC, + app3_des_c AS APP3_DESC_C, + Class AS CLASS, + NULL AS MARKET_RATIO, + NULL AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_ZK_RETAIL_DTP_PACK_PROPERTY; \ No newline at end of file diff --git a/Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql b/Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql new file mode 100644 index 0000000..14dfbea --- /dev/null +++ b/Retail/17 DM_TD_EXT_DTP_PACK2MARKET.sql @@ -0,0 +1,248 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_DTP_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_pack2market'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW VIEW_EXT_DTP +AS +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO +FROM DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.dwd_gnd_ext_retail_dtp_tblmarket_bymonth + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO +FROM DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.dwd_gnd_ext_retail_dtp_tblmarket_bymonth + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_DTP_PACK2MARKET +SELECT + MARKET, + PACK_CODE, + PACK_DESC, + STGH_DESC, + PACK_LCH, + PROD_CODE, + CMPS_CODE, + CMPS_DESC, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + APP1_CODE, + APP2_CODE, + APP3_CODE, + BIO_DESC, + GENE_ORIG, + ETH_OTC_D, + NRDL_DESC, + NRDL_ENTR, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC, + MANU_CODE, + MANU_DESC, + MNFL_CODE, + MNFL_DESC, + CORP_CODE, + CORP_DESC, + BRANDTYPE, + BU, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM VIEW_EXT_DTP \ No newline at end of file diff --git a/Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql b/Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql new file mode 100644 index 0000000..70b01e7 --- /dev/null +++ b/Retail/17 DM_TD_EXT_RETAIL_PACK2MARKET.sql @@ -0,0 +1,248 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack2market'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW VIEW_EXT_RETAIL +AS +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO +FROM DM.DM_TD_EXT_RETAIL_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.dwd_gnd_ext_retail_tblmarket_bymonth + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO +FROM DM.DM_TD_EXT_RETAIL_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.dwd_gnd_ext_retail_tblmarket_bymonth + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_PACK2MARKET +SELECT + MARKET, + PACK_CODE, + PACK_DESC, + STGH_DESC, + PACK_LCH, + PROD_CODE, + CMPS_CODE, + CMPS_DESC, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + APP1_CODE, + APP2_CODE, + APP3_CODE, + BIO_DESC, + GENE_ORIG, + ETH_OTC_D, + NRDL_DESC, + NRDL_ENTR, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC, + MANU_CODE, + MANU_DESC, + MNFL_CODE, + MNFL_DESC, + CORP_CODE, + CORP_DESC, + BRANDTYPE, + BU, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM VIEW_EXT_RETAIL \ No newline at end of file diff --git a/Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql b/Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql new file mode 100644 index 0000000..9aadbf4 --- /dev/null +++ b/Retail/18 DM_TD_EXT_DTP_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_DTP_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_DTP_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_DTP_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql b/Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql new file mode 100644 index 0000000..0f5feb3 --- /dev/null +++ b/Retail/18 DM_TD_EXT_RETAIL_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_RETAIL_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/Retail/19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql b/Retail/19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..3876d22 --- /dev/null +++ b/Retail/19 DM_TD_EXT_DTP_MARKET_BRAND_RATIO.sql @@ -0,0 +1,160 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_DTP_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_DTP_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_DTP_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD \ No newline at end of file diff --git a/Retail/19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql b/Retail/19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..c61532a --- /dev/null +++ b/Retail/19 DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_RETAIL_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/Retail/20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql b/Retail/20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..824fd4c --- /dev/null +++ b/Retail/20 DM_TD_EXT_DTP_MARKET_PACK_MAPPING.sql @@ -0,0 +1,88 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_DTP_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_dtp_market_pack_mapping'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DTP_MARKET_PACK_MAPPING +AS +SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T1.CLASS, + T1.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END + FROM +DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY T1 +LEFT JOIN DM.DM_TD_EXT_DTP_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_CODE +LEFT JOIN DM.DM_TD_EXT_DTP_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_CODE +WHERE UPPER(T1.MARKET) NOT LIKE "%ALL%" + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_DTP_MARKET_PACK_MAPPING +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DTP_MARKET_PACK_MAPPING \ No newline at end of file diff --git a/Retail/20 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql b/Retail/20 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..3e49038 --- /dev/null +++ b/Retail/20 DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING.sql @@ -0,0 +1,88 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_pack_mapping'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW RETAIL_MARKET_PACK_MAPPING +AS +SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T1.CLASS, + T1.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END + FROM +DM.DM_TD_EXT_RETAIL_PACK_PROPERTY T1 +LEFT JOIN DM.DM_TD_EXT_RETAIL_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_CODE +LEFT JOIN DM.DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_CODE +WHERE UPPER(T1.MARKET) NOT LIKE "%ALL%" + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM RETAIL_MARKET_PACK_MAPPING \ No newline at end of file diff --git a/Retail/z1 dwd_inc_gnd_ext_retail_nataional_作废.py b/Retail/z1 dwd_inc_gnd_ext_retail_nataional_作废.py new file mode 100644 index 0000000..d827c18 --- /dev/null +++ b/Retail/z1 dwd_inc_gnd_ext_retail_nataional_作废.py @@ -0,0 +1,367 @@ +# Databricks notebook source +# MAGIC %md +# MAGIC ### 原本逻辑 + +# COMMAND ---------- + +#当更新pack 或品牌 事实数据时需要运行此代码,否则无需运行。 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_oap' where file_name ='pack-CV-抗血栓2通用名-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_htn' where file_name ='pack-CV-高血压-化学药-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_atomizer' where file_name ='pack-雾化器-全国&县域数据.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_anti_asthma_copd' where file_name ='pack-RE-慢阻肺-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_zk_brand' where file_name ='Brand-品牌数据报表.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_statin_xzk' where file_name ='pack-CV-他汀类+血脂康-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_rd' where file_name ='pack-RD-肾科-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_aagsa_ppi_oral' where file_name ='pack-GI-慢性胃炎胃溃疡-全国.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_nataional_niad' where file_name ='pack-DM-口服降糖化学药.xlsx'; +# MAGIC update dwd.dwd_gnd_ext_retail_corresponding_relationship set table_name ='dwd.dwd_gnd_ext_retail_metoprolol_tartrat' where file_name ='pack-CV-酒石酸美托洛尔.xlsx'; +# MAGIC + +# COMMAND ---------- + + # pack数据自动接入 整合 +#获取配置表信息(表名、brand_flag +df = spark.sql(""" +SELECT DISTINCT table_name tab ,file_name brand_flag FROM dwd.dwd_gnd_ext_retail_corresponding_relationship +where type_name ='PACK' +""").collect() + +def get_union_pack_data(df): + #初始化结果集 + union_query = None + # niad_pdot_unit需特殊赋值对应表名:tmp.tmp_inc_gnd_ext_retail_nataional_niad + # niad_pdot_unit_flag = 'tmp.tmp_inc_gnd_ext_retail_nataional_niad' + for table in df: + # 选择当前表名 + T = str(table.tab) + # 获取对应brand表维度对应得 market 名称 + brand_flag = str(table.brand_flag) + sql = f""" + select + cast(t1.month as int) AS YYYYMM + ,cast(left(t1.quarter, 4) as int) AS year + ,right(t1.quarter, 2) AS quarter + ,t1.quarter AS yq + ,t1.zk_product_id + ,t1.zk_region + ,t1.zk_rx_otc + ,t1.zk_medicine_type + ,t1.zk_medicine_tier1 + ,t1.zk_medicine_tier2 + ,t1.zk_medicine_tier3 + ,t1.zk_medicine_tier4 + ,t1.zk_common_name + ,t1.zk_dosage_form + ,t1.zk_user_type + ,t1.zk_category_name + ,t1.zk_product_name + ,t1.zk_brand_name + ,t1.zk_manu_des + ,t1.zk_corp_des + ,t1.zk_pack_des + ,t1.price + ,CAST(replace(t1.sales_unit,',','') AS decimal(30,10)) as sales_unit + ,CAST(replace(t1.sales_value,',','') AS decimal(30,10)) as sales_value + ,CAST(replace(t1.digital_spread_rate,',','') AS decimal(30,10)) as digital_spread_rate + ,CAST(replace(t1.weighted_spread_rate,',','') AS decimal(30,10)) as weighted_spread_rate + ,CAST(replace(t1.counting_unit,',','') AS decimal(30,10)) as counting_unit + ,'{brand_flag}' as 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 {T} t1 + left join dws.dws_ext_retail_td_prod t2 + on t1.zk_product_id = t2.zk_product_id + where month is not null + """ + # 读取数据 + current_query = spark.sql(sql) + #union 数据 + if union_query ==None: + union_query=current_query + else: + union_query = union_query.union(current_query) + #返回数据集 / 写入表也行??? + return union_query +pack_result = get_union_pack_data(df) +pack_result.write.mode("overwrite").saveAsTable("dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all") + +# COMMAND ---------- + + +# brand+ 省份数据自动接入 +#获取配置表信息(表名、brand_flag +dfband = spark.sql(""" +SELECT DISTINCT table_name tab ,file_name brand_flag FROM dwd.dwd_gnd_ext_retail_corresponding_relationship +where type_name ='BRAND' +""").collect() + +def get_union_brand_data(df): + #数据为空 + if df == None: + return None + #初始化结果集 + union_query = None + for table in df: + # 选择当前表名 + T = str(table.tab) + # 获取对应brand表维度对应得 market 名称 + pack_flag = str(table.brand_flag) + sql = f""" + select + cast(left(quarter, 4)*100 + right(quarter,1)*3 as int ) AS YYYYMM + ,cast(left(quarter, 4) as int ) AS year + ,right(quarter, 2) AS quarter + ,quarter AS yq + ,type AS brand_cat_type + ,case when ta = 'NIAD' then 'DM' else ta end AS TA + ,market AS market + ,zk_brand_category AS zk_brand_category + ,zk_common_name AS zk_common_name + ,zk_manu_des AS zk_manu_des + ,rc_name_en AS rc_name_en + ,province_city AS province_city + ,ytd AS ytd + ,cast(sales_value * 1000000 as decimal(30,10)) AS sales_val + ,cast(sales_volume * 1000000 as decimal(30,10)) AS sales_vol + ,cast(price as decimal(30,10)) as price + ,cast(num_dist_rate as decimal(30,10)) as num_dist_rate + ,cast(weig_dist_rate as decimal(30,10)) as weig_dist_rate + ,cast(value_share as decimal(30,10)) as val_share + ,cast(volume_share as decimal(30,10)) as vol_share + ,replace(key_brand_ytd,'-','') as key_brand_ytd + ,cast(replace(key_brand_rank_ytd,'-','0') as int) as key_brand_rank_ytd + ,replace(top_brand_ytd,'-','') as top_brand_ytd + ,cast(replace(top_brand_ms_ytd,'-','0') as decimal(30,10)) as top_brand_ms_ytd + ,cast(replace(top_brand_inc_ms_ytd,'-','0') as decimal(30,10)) as top_brand_inc_ms_ytd + ,cast(replace(top_brand_gr_ytd,'-','0') as decimal(30,10)) as top_brand_gr_ytd + ,replace(key_brand_qtd,'-','') as key_brand_qtd + ,cast(replace(key_brand_rank_qtd,'-','0') as int) as key_brand_rank_qtd + ,replace(top_brand_qtd,'-','') as top_brand_qtd + ,cast(replace(top_brand_ms_qtd,'-','0') as decimal(30,10)) as top_brand_ms_qtd + ,cast(replace(top_brand_inc_ms_qtd,'-','0') as decimal(30,10)) as top_brand_inc_ms_qtd + ,cast(replace(top_brand_gr_qtd,'-','0') as decimal(30,10)) as top_brand_gr_qtd + ,ranked_by as ranked_by + ,'{pack_flag}' as pack_flag + ,from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt + ,from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt + from {T} + """ + # 读取数据 + current_query = spark.sql(sql) + #union 数据 + if union_query == None: + union_query = current_query + else: + union_query = union_query.union(current_query) + #返回数据集 / 写入表也行??? + return union_query +brand_result = get_union_brand_data(dfband) +brand_result.write.mode("overwrite").saveAsTable("dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all") + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC ----------------------多达一、天一宁、others、氨氯地平阿托伐他汀钙 数据在 高血压和他汀血脂康里面重复,但该数据在品牌报表里面没有对应的值,会导致后续拆分到pack + 省份时得到的结果不一致,因此需要将高血压或者他汀血脂康数据 根据pack+ 全国数据按省份数平均分配,并汇总到品牌维度,写入品牌数据报表,为后续pack +全国拆分到pack + 省份 提供数据基础 +# MAGIC insert overwrite table dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC with data_pack as ( +# MAGIC ----------底表获取基础数据----pack 汇总到品牌 --并按省份数量平均 +# MAGIC select brand_flag,a.YYYYMM,nvl(b.prod_des_c,'OTHERS' ) prod_des_c ,sum(a.sales_value)/sum(num) sales_value,sum(a.sales_unit)/sum(num) sales_unit ,sum(a.sales_value) sales ,sum(a.sales_unit) saleu +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all a +# MAGIC left join dwd.dwd_gnd_ext_retail_pack_property b on a.zk_product_id = b.product_id +# MAGIC cross join (select count(distinct zk_region) num from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all where zk_region<>'全国') +# MAGIC where a.zk_common_name ='氨氯地平阿托伐他汀钙' and a.brand_flag in ('pack-CV-他汀类+血脂康-全国.xlsx' ,'pack-CV-高血压-化学药-全国.xlsx','pack-CV-抗血栓2通用名-全国.xlsx') +# MAGIC group by 1,2,3 +# MAGIC ),city as ( +# MAGIC ----获取省份及年月头表 +# MAGIC select distinct +# MAGIC YYYYMM +# MAGIC ,year +# MAGIC ,quarter +# MAGIC ,yq +# MAGIC ,province_city +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC where province_city !='全国' and ranked_by ='volume' +# MAGIC ) +# MAGIC , split as ( +# MAGIC ------分别补充全国数据、品牌数据------ +# MAGIC select +# MAGIC city.YYYYMM +# MAGIC ,year +# MAGIC ,quarter +# MAGIC ,yq +# MAGIC ,'品牌' brand_cat_type +# MAGIC ,'CV' TA +# MAGIC ,brand_flag market +# MAGIC ,prod_des_c +# MAGIC ,'' +# MAGIC ,'' +# MAGIC ,'' +# MAGIC ,province_city +# MAGIC ,'' +# MAGIC ,sales_value +# MAGIC ,sales_unit +# MAGIC ,0,0,0,0,0,'' ,0 ,'' ,0,0,0,'',0,'',0,0,0,'volume' ,'' +# MAGIC from data_pack left join city on city.YYYYMM=data_pack.YYYYMM +# MAGIC union all +# MAGIC select +# MAGIC city.YYYYMM +# MAGIC ,year +# MAGIC ,quarter +# MAGIC ,yq +# MAGIC ,'品牌' brand_cat_type +# MAGIC ,'CV' TA +# MAGIC ,brand_flag market +# MAGIC ,prod_des_c +# MAGIC ,'' +# MAGIC ,'' +# MAGIC ,'' +# MAGIC ,'全国' province_city +# MAGIC ,'' +# MAGIC ,sales sales_value +# MAGIC ,saleu sales_unit +# MAGIC ,0,0,0,0,0,'' ,0 ,'' ,0,0,0,'',0,'',0,0,0,'volume' ,'' +# MAGIC from data_pack left join (select distinct year,quarter,yyyymm,yq from city ) city on city.YYYYMM=data_pack.YYYYMM +# MAGIC +# MAGIC ) +# MAGIC select * from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC union all +# MAGIC select * +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_insert_dt +# MAGIC ,from_utc_timestamp(current_timestamp(),'UTC+8') AS etl_update_dt +# MAGIC from split + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC --补位 +# MAGIC with tmp as ( +# MAGIC select +# MAGIC YYYYMM, +# MAGIC year, +# MAGIC quarter, +# MAGIC yq, +# MAGIC case when length(zk_product_id) < 7 then right(concat('0000000',zk_product_id),7) else zk_product_id end as zk_product_id, +# MAGIC zk_region, +# MAGIC zk_rx_otc, +# MAGIC zk_medicine_type, +# MAGIC zk_medicine_tier1, +# MAGIC zk_medicine_tier2, +# MAGIC zk_medicine_tier3, +# MAGIC zk_medicine_tier4, +# MAGIC zk_common_name, +# MAGIC zk_dosage_form, +# MAGIC zk_user_type, +# MAGIC zk_category_name, +# MAGIC zk_product_name, +# MAGIC zk_brand_name, +# MAGIC zk_manu_des, +# MAGIC zk_corp_des, +# MAGIC zk_pack_des, +# MAGIC price, +# MAGIC sales_unit, +# MAGIC sales_value, +# MAGIC digital_spread_rate, +# MAGIC weighted_spread_rate, +# MAGIC counting_unit, +# MAGIC brand_flag, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all +# MAGIC -- pack-CV-酒石酸美托洛尔.xlsx的数据没有了,所以排除 酒石酸美托洛尔 +# MAGIC where brand_flag<>'pack-CV-酒石酸美托洛尔.xlsx' +# MAGIC ) +# MAGIC +# MAGIC insert overwrite dwd.dwd_inc_gnd_ext_retail_nataional_pack_union_all +# MAGIC select * +# MAGIC from tmp; + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 新逻辑 +# MAGIC - 修改brand数据,先拆分成月维度的数据 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC /* +# MAGIC 修改时间:20250311 +# MAGIC 修改人:chenwu +# MAGIC 修改内容:brand来数频率为 季度来数, 但是 pack 为 月度来数据,需要用季度的数据/3得到月度的 +# MAGIC */ +# MAGIC insert overwrite table dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC with quarterly_table as ( +# MAGIC select +# MAGIC * +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC where market not in ('NIAD','Inhaled Extended Market','布地奈德雾化溶液') +# MAGIC -- 范围内只能是 季度来数据的,如果有月度来数据的需要排除掉 +# MAGIC ) +# MAGIC +# MAGIC ,month_table as (--转化成月度数据 +# MAGIC SELECT +# MAGIC SUBSTR(q.yq, 1, 4)*100 + -- 提取年份 +# MAGIC LPAD(m.month_num, 2, '0') -- 补零月份 +# MAGIC AS YYYYMM -- 月份首日 +# MAGIC ,`year` +# MAGIC ,`quarter` +# MAGIC ,yq +# MAGIC ,brand_cat_type +# MAGIC ,TA +# MAGIC ,market +# MAGIC ,zk_brand_category +# MAGIC ,zk_common_name +# MAGIC ,zk_manu_des +# MAGIC ,rc_name_en +# MAGIC ,province_city +# MAGIC ,ytd +# MAGIC ,sales_val /3 --除3 +# MAGIC ,sales_vol /3 --除3 +# MAGIC ,price +# MAGIC ,num_dist_rate +# MAGIC ,weig_dist_rate +# MAGIC ,val_share +# MAGIC ,vol_share +# MAGIC ,key_brand_ytd +# MAGIC ,key_brand_rank_ytd +# MAGIC ,top_brand_ytd +# MAGIC ,top_brand_ms_ytd +# MAGIC ,top_brand_inc_ms_ytd +# MAGIC ,top_brand_gr_ytd +# MAGIC ,key_brand_qtd +# MAGIC ,key_brand_rank_qtd +# MAGIC ,top_brand_qtd +# MAGIC ,top_brand_ms_qtd +# MAGIC ,top_brand_inc_ms_qtd +# MAGIC ,top_brand_gr_qtd +# MAGIC ,ranked_by +# MAGIC ,pack_flag +# MAGIC ,etl_insert_dt +# MAGIC ,etl_update_dt +# MAGIC FROM +# MAGIC quarterly_table q +# MAGIC LATERAL VIEW EXPLODE( -- 为每季度生成三个月 +# MAGIC CASE +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q1' THEN ARRAY(1, 2, 3) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q2' THEN ARRAY(4, 5, 6) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q3' THEN ARRAY(7, 8, 9) +# MAGIC WHEN RIGHT(q.yq, 2) = 'Q4' THEN ARRAY(10, 11, 12) +# MAGIC END +# MAGIC ) m AS month_num +# MAGIC ) +# MAGIC +# MAGIC ,other_not_quarterly_table ( +# MAGIC select +# MAGIC * +# MAGIC from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +# MAGIC where market in ('NIAD','Inhaled Extended Market','布地奈德雾化溶液') +# MAGIC -- 范围内只能是 月度来数据的 +# MAGIC ) +# MAGIC +# MAGIC select * from month_table +# MAGIC union all +# MAGIC select * from other_not_quarterly_table \ No newline at end of file diff --git a/Retail/z2 retail_load_data_作废.sql b/Retail/z2 retail_load_data_作废.sql new file mode 100644 index 0000000..f5142ab --- /dev/null +++ b/Retail/z2 retail_load_data_作废.sql @@ -0,0 +1,6276 @@ +-- 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 ) + \ No newline at end of file diff --git a/Retail/z3 retail_overview_data_作废.sql b/Retail/z3 retail_overview_data_作废.sql new file mode 100644 index 0000000..f378188 --- /dev/null +++ b/Retail/z3 retail_overview_data_作废.sql @@ -0,0 +1,1201 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC 此代码主要加工 free report 中retail 自有部分的 overview 文件 和 b2c配置表维度 及品牌数据报表指标导出 +-- MAGIC * 1.dm_zk_retail_overview_data overview 文件union 表格 +-- MAGIC * 2.dm_zk_retail_product_info B2C 配置表的维度(底表直接抽) +-- MAGIC * 3.dm_zk_retail_brand 品牌数据报表中的指标 +-- MAGIC + +-- COMMAND ---------- + +---------------------------------------------------------------------------------------- +--修改时间:20240821 +--修改人:FanXujia +--修改内容: +--导出模板整合,由原来的十几个文件改为3个文件 +---------------------------------------------------------------------------------------- + +-- COMMAND ---------- + +-- -------------------------------------------将所有overview 数据整合在同一张表里-------------------------------------------------------------- +-- -- 注意事项: +-- --rank1字段:Total行排名设为99,其他行如果数据源是null,则设为98。总之不能为null。 +-- -- 每个数据源文件(file_name)判断是否Total行的方式不尽相同,具体参考代码。 +-- --sales_quarter字段:数据源中有两种格式,24Q1以及2024Q1,因此需要统一成2024Q1这种格式。 +-- -- 有些因为是YTD的值,源文件里sales_quarter是null,需将YTD字段中的时间拆出来作为sales_quarter字段的值 +-- --最终表的source_name字段的内容是各个TA,RC字段是南区、北区等。而数据源文件中都叫source_name,每个源文件需按实际情况拆分成2列 +-- --yyyymm字段:Q1是3月、Q2是6月、Q3是9月、Q4是12月。 +insert overwrite table dws.dws_zk_retail_overview_data +( +rank1 +,product_desc +,product_type +,common_name +,brand +,corp +,corporation +,corp_type +,sales_quarter +,yyyymm +,ytd +,sales_amount +,sales_amount_ly +,sales_amount_total +,sales_amount_ly_total +,rx_type +,top1_brand_val +,top1_brand_gr +,top2_brand_val +,top2_brand_gr +,top1_incremental_brand +,top1_incremental_gr +,top2_incremental_brand +,top2_incremental_gr +,ytd_gr +,ytd_ms +,ytd_delta_ms +,dtp_name +,file_name +,source_name +,rc +,rx_otc +,top_incre +,etl_insert_dt +,etl_update_dt +) +with overview as +( +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,corp_desc as corp +-- ,corporation +-- ,corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-Rx-TOP集团' file_name +-- ,null source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_top_corp +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,product_desc +-- ,product_type +-- ,common_name +-- ,brand +-- ,corp +-- ,corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-Rx-TOP产品' file_name +-- ,null source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_top_product +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,product_desc +-- ,product_type +-- ,common_name +-- ,brand +-- ,corp +-- ,corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-Rx-TOP增量产品' file_name +-- ,null source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_top_incr_product +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,corp_desc corp +-- ,corporation +-- ,corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-Rx+OTC-TOP集团' file_name +-- ,null source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_rx_otc_corp + +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,product_desc +-- ,product_type +-- ,common_name +-- ,brand +-- ,corp +-- ,corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-Rx+OTC-TOP产品' file_name +-- ,null source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_rx_otc_product + + +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,corp_desc as corp +-- ,corp_name +-- ,corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-分TA-TOP集团' file_name +-- ,source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_ta_top_corp + +-- union all + +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,product_desc +-- ,null as product_type +-- ,common_name +-- ,null as brand +-- ,corp +-- ,corp_name corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-分TA-TOP产品' file_name +-- ,source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_ta_top_product +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,product_desc +-- ,null as product_type +-- ,common_name +-- ,null as brand +-- ,corp +-- ,corp_name as corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'全国-分TA-TOP增量产品' file_name +-- ,source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_nataional_ta_incr_product + +-- union all +-- select +-- case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' +-- when rank1 is null then '98' +-- else replace(rank1,' ','') end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,corp_desc as corp +-- ,corporation +-- ,corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,ytd_gr +-- ,ytd_ms +-- ,ytd_delta_ms +-- ,null as dtp_name +-- ,'分大区-Rx-TOP集团' file_name +-- ,null source_name +-- ,source_name rc +-- from dwd.dwd_gnd_ext_retail_area_top_corp + +-- union all +-- select +-- case when upper(type_name) = 'RX' then '99' +-- else '98' end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,null as corp +-- ,null as corporation +-- ,type_name as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,null as ytd_gr +-- ,null as ytd_ms +-- ,null as ytd_delta_ms +-- ,null as dtp_name +-- ,'Rx市场' file_name +-- ,null as source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_rx_market ---这个没有ytd 三个字段添加 + +-- union all +-- select +-- case when upper(corporation) like 'TOTAL %' then '99' +-- else '98' end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,null as corp +-- ,corporation +-- ,null as corp_type +-- ,concat('20',trim(replace(quarter_flag,'YTD','' ))) as sales_quarter +-- ,quarter_flag as ytd +-- ,null as sales_amount +-- ,null as rx_type +-- ,replace(top1_brand_val,'-','') top1_brand_val +-- ,top1_brand_gr top1_brand_gr +-- ,replace(top2_brand_val,'-','') top2_brand_val +-- ,top2_brand_gr top2_brand_gr +-- ,replace(top1_incremental_brand,'-','') top1_incremental_brand +-- ,top1_incremental_gr +-- ,replace(top2_incremental_brand,'-','') top2_incremental_brand +-- ,top2_incremental_gr +-- ,null as ytd_gr +-- ,null as ytd_ms +-- ,null as ytd_delta_ms +-- ,null as dtp_name +-- ,'Rx-TOP集团' file_name +-- ,null as source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_rx_top_corp ---这个没有ytd 三个字段添加 +-- union all + +-- select +-- case when upper(corporation) like '% TTL' then '99' +-- else '98' end as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,null as corp +-- ,corporation +-- ,null as corp_type +-- ,concat('20',trim(replace(quarter_flag,'YTD','' ))) as sales_quarter +-- ,quarter_flag as ytd +-- ,NULL as sales_amount +-- ,rx_type +-- ,replace(top1_brand_val,'-','') as top1_brand_val +-- ,top1_brand_gr +-- ,replace(top2_brand_val,'-','') as top2_brand_val +-- , top2_brand_gr +-- ,replace(top1_incremental_brand,'-','') as top1_incremental_brand +-- , top1_incremental_gr +-- ,replace(top2_incremental_brand,'-','') as top2_incremental_brand +-- ,top2_incremental_gr +-- ,null as ytd_gr +-- ,null as ytd_ms +-- ,null as ytd_delta_ms +-- ,null as dtp_name +-- ,'分TA-TOP集团' file_name +-- ,trim(replace(rx_type,' TTL','' ) ) as source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_rx_ta_top_corp ---这个没有ytd 三个字段添加 +-- union all + +-- select +-- '99' as rank1 +-- ,null as product_desc +-- ,null as product_type +-- ,null as common_name +-- ,null as brand +-- ,null as corp +-- ,null as corporation +-- ,null as corp_type +-- ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) +-- else sales_quarter +-- end as sales_quarter +-- ,null as ytd +-- ,sales_amount +-- ,null as rx_type +-- ,null as top1_brand_val +-- ,null as top1_brand_gr +-- ,null as top2_brand_val +-- ,null as top2_brand_gr +-- ,null as top1_incremental_brand +-- ,null as top1_incremental_gr +-- ,null as top2_incremental_brand +-- ,null as top2_incremental_gr +-- ,null as ytd_gr +-- ,null as ytd_ms +-- ,null as ytd_delta_ms +-- ,dtp_name +-- ,'DTP 整体市场' file_name +-- ,NULL as source_name +-- ,null rc +-- from dwd.dwd_gnd_ext_retail_dtp_overall_market ---这个没有ytd 三个字段添加 rx_type + + +-- union all +select + case when replace(upper(corp_name),'-','') = 'DTP TOTAL' then '99' + when rank1 is null then '98' + else replace(rank1,' ','') end as rank1 + ,null as product_desc + ,null as product_type + ,null as common_name + ,null as brand + ,replace(corp_name,'-','') as corp + ,null as corporation + ,null as corp_type + ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) + else sales_quarter + end as sales_quarter + ,null as ytd + ,sales_amount + ,null as rx_type + ,null as top1_brand_val + ,null as top1_brand_gr + ,null as top2_brand_val + ,null as top2_brand_gr + ,null as top1_incremental_brand + ,null as top1_incremental_gr + ,null as top2_incremental_brand + ,null as top2_incremental_gr + ,null as ytd_gr + ,null as ytd_ms + ,null as ytd_delta_ms + ,null as dtp_name + ,'DTP TOP10企业排名' file_name + ,NULL as source_name + ,null rc + ,'Rx' as rx_otc + ,'TOP' as top_incre +from dwd.dwd_gnd_ext_retail_dtp_top_copd ---这个没有ytd 三个字段添加 +union all +select + case when replace(upper(brand_name),'-','') = 'DTP TOTAL' then '99' + when rank1 is null then '98' + else replace(rank1,' ','') end as rank1 + ,null as product_desc + ,null as product_type + ,null as common_name + ,brand_name as brand + ,replace(corp_name,'-','') as corp + ,null as corporation + ,null as corp_type + ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) + else sales_quarter + end as sales_quarter + ,null as ytd + ,sales_amount + ,null as rx_type + ,null as top1_brand_val + ,null as top1_brand_gr + ,null as top2_brand_val + ,null as top2_brand_gr + ,null as top1_incremental_brand + ,null as top1_incremental_gr + ,null as top2_incremental_brand + ,null as top2_incremental_gr + ,null as ytd_gr + ,null as ytd_ms + ,null as ytd_delta_ms + ,null as dtp_name + ,'DTP TOP10品牌排名' file_name + ,NULL as source_name + ,null rc + ,'Rx' as rx_otc + ,'TOP' as top_incre +from dwd.dwd_gnd_ext_retail_dtp_top_brand ---这个没有ytd 三个字段添加 +union all + +select + case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' + when rank1 is null then '98' + else replace(rank1,' ','') end as rank1 + ,null as product_desc + ,null as product_type + ,null as common_name + ,null as brand + ,corp_desc as corp + ,corporation + ,`type` as corp_type + ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) + else sales_quarter + end as sales_quarter + ,null as ytd + ,sales_amount + ,null as rx_type + ,null as top1_brand_val + ,null as top1_brand_gr + ,null as top2_brand_val + ,null as top2_brand_gr + ,null as top1_incremental_brand + ,null as top1_incremental_gr + ,null as top2_incremental_brand + ,null as top2_incremental_gr + ,null as ytd_gr + ,null as ytd_ms + ,null as ytd_delta_ms + ,null as dtp_name + ,'全国-集团排名' file_name + ,case when ta = 'GI' then concat(ta,'-',rx_otc) + when ta = 'NIAD-excl. GLP1' then 'DM' + else ta end as source_name + ,null rc + ,rx_otc + ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +from dwd.dwd_gnd_retail_national_corp_rank + +union all +select + case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' + when rank1 is null then '98' + else replace(rank1,' ','') end as rank1 + ,prod_desc as product_desc + ,`type` as product_type + ,cmps_desc as common_name + ,brand + ,corp_desc as corp + ,corporation + ,null as corp_type + ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) + else sales_quarter + end as sales_quarter + ,null as ytd + ,sales_amount + ,null as rx_type + ,null as top1_brand_val + ,null as top1_brand_gr + ,null as top2_brand_val + ,null as top2_brand_gr + ,null as top1_incremental_brand + ,null as top1_incremental_gr + ,null as top2_incremental_brand + ,null as top2_incremental_gr + ,null as ytd_gr + ,null as ytd_ms + ,null as ytd_delta_ms + ,null as dtp_name + ,'全国-产品排名' file_name + ,case when ta = 'GI' then concat(ta,'-',rx_otc) + when ta = 'NIAD-excl. GLP1' then 'DM' + else ta end as source_name + ,null rc + ,rx_otc + ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +from dwd.dwd_gnd_retail_national_prd_rank +union all +select + case when upper(replace(rank1,' ','')) = 'TOTAL' then '99' + when rank1 is null then '98' + else replace(rank1,' ','') end as rank1 + ,null as product_desc + ,null as product_type + ,null as common_name + ,null as brand + ,corp_desc as corp + ,corporation + ,`type` as corp_type + ,case when length(sales_quarter) = 4 then concat('20',sales_quarter) + else sales_quarter + end as sales_quarter + ,null as ytd + ,sales_amount + ,null as rx_type + ,null as top1_brand_val + ,null as top1_brand_gr + ,null as top2_brand_val + ,null as top2_brand_gr + ,null as top1_incremental_brand + ,null as top1_incremental_gr + ,null as top2_incremental_brand + ,null as top2_incremental_gr + ,null as ytd_gr + ,null as ytd_ms + ,null as ytd_delta_ms + ,null as dtp_name + ,'大区-集团排名' file_name + ,case when ta = 'GI' then concat(ta,'-',rx_otc) + when ta = 'NIAD-excl. GLP1' then 'DM' + else ta end as source_name + ,region rc + ,rx_otc + ,case when upper(top_top_incre) = 'TOP SALES' then 'TOP' else 'Incre' end as top_incre +from dwd.dwd_gnd_retail_region_corp_rank +) + +-- --计算Total值,按文件、季度、TA、rx_otc、top_incre进行合计 +-- --因为数据中本身就包含了Total行,因此直接筛选了rank1 = '99'(即筛选Total行)进行合计 +,overview_total as ( +select file_name, + source_name, + rx_otc, + top_incre, + sales_quarter, + rc, + sum(sales_amount) sales_amount_total +from overview +where rank1 = '99' +group by file_name,sales_quarter,rx_otc,top_incre,source_name,rc +) + +-- --取到文件中的最大时间,在获取ly值的时候,用于限定时间范围 +,overview_maxyq as ( +select max(sales_quarter) max_sales_quarter + from overview +where sales_quarter is not null +) + +-- --在数据源的基础上,增加yyyymm字段、sales_amount_ly、sales_amount_total、sales_amount_ly_total字段 +select case when max(rank1) < 10000 then max(rank1) else cast(max(rank1) as int) - 10000 end as rank1 +,product_desc +,product_type +,common_name +,brand +,corp +,corporation +,corp_type +,sales_quarter +,case when right(sales_quarter,1) = '1' then concat(left(sales_quarter,4),'03') + when right(sales_quarter,1) = '2' then concat(left(sales_quarter,4),'06') + when right(sales_quarter,1) = '3' then concat(left(sales_quarter,4),'09') + when right(sales_quarter,1) = '4' then concat(left(sales_quarter,4),'12') + end as yyyymm +,max(ytd) ytd +,sum(sales_amount) as sales_amount +,sum(sales_amount_ly) as sales_amount_ly +,sum(sales_amount_total) as sales_amount_total +,sum(sales_amount_ly_total) as sales_amount_ly_total +,rx_type +,max(top1_brand_val) top1_brand_val +,max(top1_brand_gr) top1_brand_gr +,max(top2_brand_val) top2_brand_val +,max(top2_brand_gr) top2_brand_gr +,max(top1_incremental_brand) top1_incremental_brand +,max(top1_incremental_gr) top1_incremental_gr +,max(top2_incremental_brand) top2_incremental_brand +,max(top2_incremental_gr) top2_incremental_gr +,max(ytd_gr) ytd_gr +,max(ytd_ms) ytd_ms +,max(ytd_delta_ms) ytd_delta_ms +,dtp_name +,file_name +,source_name +,rc +,rx_otc +,top_incre +,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt +,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +from +( +select +cast(rank1 as int) + 10000 rank1 +,product_desc +,product_type +,common_name +,brand +,corp +,corporation +,corp_type +,t1.sales_quarter +,ytd +,sales_amount +,0 as sales_amount_ly +,t2.sales_amount_total +,0 as sales_amount_ly_total +,rx_type +,top1_brand_val +,top1_brand_gr +,top2_brand_val +,top2_brand_gr +,top1_incremental_brand +,top1_incremental_gr +,top2_incremental_brand +,top2_incremental_gr +,ytd_gr +,ytd_ms +,ytd_delta_ms +,dtp_name +,t1.file_name +,t1.source_name +,t1.rc +,t1.rx_otc +,t1.top_incre +from overview t1 +left join overview_total t2 +on t1.file_name = t2.file_name +and nvl(t1.sales_quarter,'') = nvl(t2.sales_quarter,'') +and t1.rx_otc = t2.rx_otc +and t1.top_incre = t2.top_incre +and NVL(t1.source_name,'') = NVL(t2.source_name,'') +and NVL(t1.rc,'') = NVL(t2.rc,'') +union all +select +cast(rank1 as int) rank1 +,product_desc +,product_type +,common_name +,brand +,corp +,corporation +,corp_type +,concat(cast(left(t1.sales_quarter,4) as int) + 1,right(t1.sales_quarter,2)) as sales_quarter +,null as ytd +,0 as sales_amount +,sales_amount as sales_amount_ly +,0 as sales_amount_total +,t2.sales_amount_total as sales_amount_ly_total +,rx_type +,null as top1_brand_val +,null as top1_brand_gr +,null as top2_brand_val +,null as top2_brand_gr +,null as top1_incremental_brand +,null as top1_incremental_gr +,null as top2_incremental_brand +,null as top2_incremental_gr +,null as ytd_gr +,null as ytd_ms +,null as ytd_delta_ms +,dtp_name +,t1.file_name +,t1.source_name +,t1.rc +,t1.rx_otc +,t1.top_incre +from overview t1 +left join overview_total t2 +on t1.file_name = t2.file_name +and nvl(t1.sales_quarter,'') = nvl(t2.sales_quarter,'') +and t1.rx_otc = t2.rx_otc +and t1.top_incre = t2.top_incre +and NVL(t1.source_name,'') = NVL(t2.source_name,'') +and NVL(t1.rc,'') = NVL(t2.rc,'') +left join overview_maxyq t3 +on 1=1 +where concat(cast(left(t1.sales_quarter,4) as int) + 1,right(t1.sales_quarter,2)) <= t3.max_sales_quarter +) t +group by +product_desc +,product_type +,common_name +,brand +,corp +,corporation +,corp_type +,sales_quarter +,rx_type +,dtp_name +,file_name +,source_name +,rc +,rx_otc +,top_incre + +-- COMMAND ---------- + +-- --------将free report overview 导出的合并文件写入dm +insert overwrite table dm.dm_zk_retail_overview_data( +rank1, +product_desc, +product_type, +common_name, +brand, +corp, +corporation, +corp_type, +sales_quarter, +yyyymm, +ytd, +sales_amount, +sales_amount_ly, +sales_amount_total, +sales_amount_ly_total, +rx_type, +top1_brand_val, +top1_brand_gr, +top2_brand_val, +top2_brand_gr, +top1_incremental_brand, +top1_incremental_gr, +top2_incremental_brand, +top2_incremental_gr, +ytd_gr, +ytd_ms, +ytd_delta_ms, +dtp_name, +file_name, +source_name, +rc, +rx_otc, +top_incre, +etl_insert_dt, +etl_update_dt +) +select +trim(rank1) rank1 +,product_desc +,product_type +,common_name +,brand +,nvl(corp,'' ) corp +,corporation +,corp_type +,sales_quarter +,yyyymm +,case when ytd is null then 'N' ELSE 'Y' END ytd +,sales_amount +,sales_amount_ly +,sales_amount_total +,sales_amount_ly_total +,rx_type +,top1_brand_val +,cast(top1_brand_gr as double) top1_brand_gr +,top2_brand_val +,cast(top2_brand_gr as double) top2_brand_gr +,top1_incremental_brand +,cast(top1_incremental_gr as double) top1_incremental_gr +,top2_incremental_brand +,cast(top2_incremental_gr as double) top2_incremental_gr +,cast(ytd_gr as double ) ytd_gr +,cast(ytd_ms as double) ytd_ms +,cast(ytd_delta_ms as double) ytd_delta_ms +,dtp_name +,file_name +,trim(source_name) source_name +,rc +,rx_otc +,top_incre + ,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_overview_data + +-- COMMAND ---------- + +------------------------------retail/EC原始维度,从b2c配置表直取----------------------------------------- +insert overwrite table dws.dws_zk_retail_product_info +select distinct + product_id + ,iqvia_pack_code + ,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_name + ,zk_manu_des + ,zk_corp_des + ,zk_pack_des + ,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_pack_property; +------------------------------retail/EC原始维度,从b2c直取 写入dm----------------------------------------- +insert overwrite table dm.dm_zk_retail_product_info +select distinct + product_id + ,iqvia_pack_code + ,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_name + ,zk_manu_des + ,zk_corp_des + ,zk_pack_des + ,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_product_info; + +-- COMMAND ---------- + +------------------------------retail 自有部分需要导出数据,从品牌数据报表直取,无特殊加工----------------------------------------- +--注意事项: +----market 排除数据为:从pack 文件中通过比例拆分写入品牌数据的 品牌数据,包括多达一、天一宁等品牌,这些并非原始文件中的数据,故排除。 +---- (具体拆分代码详见:1 dwd_inc_gnd_ext_retail_nataional +insert overwrite table dws.dws_zk_retail_brand +with max_yq as ( +select TA,market,rc_name_en,province_city,ranked_by,max(yq) as yq +from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all +WHERE market NOT IN ('pack-CV-高血压-化学药-全国.xlsx','pack-CV-他汀类+血脂康-全国.xlsx') +group by TA,market,rc_name_en,province_city,ranked_by +) + +select distinct + t1.TA, + t1.market, + t1.rc_name_en, + t1.province_city + ,key_brand_ytd + ,key_brand_rank_ytd + ,top_brand_ytd + ,top_brand_ms_ytd + ,top_brand_inc_ms_ytd + ,top_brand_gr_ytd + ,key_brand_qtd + ,key_brand_rank_qtd + ,top_brand_qtd + ,top_brand_ms_qtd + ,top_brand_inc_ms_qtd + ,top_brand_gr_qtd + ,t1.ranked_by + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +from dwd.dwd_inc_gnd_ext_retail_nataional_brand_union_all t1 +inner join max_yq t2 +on t1.TA = t2.TA +and t1.market = t2.market +and t1.rc_name_en = t2.rc_name_en +and t1.province_city = t2.province_city +and t1.yq = t2.yq +and t1.ranked_by = t2.ranked_by +; + +-- dm_zk_retail_brand + +------------------------------retail 自有部分需要导出数据,写入dm----------------------------------------- +insert overwrite table dm.dm_zk_retail_brand +select distinct + TA,market,rc_name_en,province_city + ,key_brand_ytd + ,cast(key_brand_rank_ytd as double) key_brand_rank_ytd + ,top_brand_ytd + ,cast(top_brand_ms_ytd as double) top_brand_ms_ytd + ,cast(top_brand_inc_ms_ytd as double) top_brand_inc_ms_ytd + ,cast(top_brand_gr_ytd as double) top_brand_gr_ytd + ,key_brand_qtd + ,cast(key_brand_rank_qtd as double ) key_brand_rank_qtd + ,top_brand_qtd + ,cast(top_brand_ms_qtd as double ) top_brand_ms_qtd + ,cast(top_brand_inc_ms_qtd as double ) top_brand_inc_ms_qtd + ,cast(top_brand_gr_qtd as double ) top_brand_gr_qtd + ,ranked_by +from dws.dws_zk_retail_brand ; + + + + + + +-- COMMAND ---------- + +---------------------------------------------------------------------------------------- +--修改时间:20240821 +--修改人:FanXujia +--修改内容: +--导出模板整合,由原来的十几个文件改为3个文件 +--《全国-集团排名》:dwd.dwd_gnd_retail_national_corp_rank +--《全国-产品排名》:dwd.dwd_gnd_retail_national_prd_rank +--《大区-集团排名》:dwd.dwd_gnd_retail_region_corp_rank +---------------------------------------------------------------------------------------- +insert overwrite table dws.dws_zk_retail_export +( +ta, +rx_otc, +top_top_incre, +rank1, +corp_desc, +corporation, +type, +prod_desc, +cmps_desc, +brand, +region, +sales_quarter, +sales_amount, +file_name, +etl_insert_dt, +etl_update_dt +) +--《全国-集团排名》 +select distinct +ta, +rx_otc, +top_top_incre, +case when upper(trim(rank1)) = 'TOTAL' then '99' + when rank1 is null then '98' + else trim(rank1) end as rank1, +corp_desc, +corporation, +type, +null as prod_desc, +null as cmps_desc, +null as brand, +null as region, +sales_quarter, +sales_amount, +'全国-集团排名' as file_name, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +from dwd.dwd_gnd_retail_national_corp_rank +union all +--《全国-产品排名》 +select distinct +ta, +rx_otc, +top_top_incre, +case when upper(trim(rank1)) = 'TOTAL' then '99' + when rank1 is null then '98' + else trim(rank1) end as rank1, +corp_desc, +corporation, +type, +prod_desc, +cmps_desc, +brand, +null as region, +sales_quarter, +sales_amount, +'全国-产品排名' as file_name, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +from dwd.dwd_gnd_retail_national_prd_rank +union all +--《大区-集团排名》 +select distinct +ta, +rx_otc, +top_top_incre, +case when upper(trim(rank1)) = 'TOTAL' then '99' + when rank1 is null then '98' + else trim(rank1) end as rank1, +corp_desc, +corporation, +type, +null as prod_desc, +null as cmps_desc, +null as brand, +region, +sales_quarter, +sales_amount, +'大区-集团排名' as file_name, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp(),'UTC+8') as etl_update_dt +from dwd.dwd_gnd_retail_region_corp_rank; + + +--写入dm表 +insert overwrite table dm.dm_zk_retail_export +( +ta, +rx_otc, +top_top_incre, +rank1, +corp_desc, +corporation, +type, +prod_desc, +cmps_desc, +brand, +region, +sales_quarter, +sales_amount, +file_name, +etl_insert_dt, +etl_update_dt +) +select +ta, +rx_otc, +top_top_incre, +rank1, +corp_desc, +corporation, +type, +prod_desc, +cmps_desc, +brand, +region, +sales_quarter, +sales_amount, +file_name, +etl_insert_dt, +etl_update_dt +from dws.dws_zk_retail_export; \ No newline at end of file diff --git a/THC/01 dm_thc_pack_property.sql b/THC/01 dm_thc_pack_property.sql new file mode 100644 index 0000000..98678e8 --- /dev/null +++ b/THC/01 dm_thc_pack_property.sql @@ -0,0 +1,231 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE dm.dm_thc_pack_property ( +-- PACK_COD STRING, +-- pack_des STRING, +-- stgh_des STRING, +-- pack_lch STRING, +-- PROD_COD STRING, +-- prod_des STRING, +-- prod_des_c STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- cmps_cod STRING, +-- cmps_des STRING, +-- cmps_des_c STRING, +-- atc1_cod STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_cod STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_cod STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_cod STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_cod STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_cod STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_cod STRING, +-- app3_des STRING, +-- app3_des_c STRING, +-- bio_desc STRING, +-- gene_orig_desc STRING, +-- eth_otc_desc STRING, +-- nrdl_desc STRING, +-- NRDL_Entry_Date STRING, +-- edl_desc STRING, +-- tcm_desc STRING, +-- paed_desc STRING, +-- gqce_desc STRING, +-- vbp_desc STRING, +-- manu_cod STRING, +-- manu_des STRING, +-- manu_des_c STRING, +-- mnfl_cod STRING, +-- mnfl_des STRING, +-- corp_cod STRING, +-- corp_des STRING, +-- corp_des_c STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_Related STRING, +-- countingunit STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_thc_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_thc_pack_property'; + +-- COMMAND ---------- + +update dwd.dwd_gnd_ext_thc_pack_property +set iqvia_pack_code = if( iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',iqvia_pack_code),12),iqvia_pack_code) +,iqvia_prod_code = right(concat('000000000',iqvia_prod_code),9) + +-- COMMAND ---------- + +create or replace temporary view dwd_pack_property +as +select distinct + iqvia_pack_code , + iqvia_prod_code , + pack_cod , + 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_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 , + prod_des , + prod_des_c , + tcm_desc , + vbp_desc , + -- builtinarchivedate , + source_file_path , + source_file_name , + etl_insert_dt , + countingunit +from dwd.dwd_gnd_dept_pack_property + +-- COMMAND ---------- + +-- create or replace table dm.dm_chc_pack_property +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_chc_pack_property' +-- as +-- insert overwrite table dm.dm_thc_pack_property +WITH dedup_l AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY iqvia_pack_code ORDER BY iqvia_pack_code) AS rn + FROM dwd_pack_property + QUALIFY rn = 1 +), +dedup_r AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY PACK_COD ORDER BY PACK_COD) AS rn + FROM tmp.tmp_ext_chpa_pack_propetry + QUALIFY rn = 1 +) +SELECT + l.iqvia_pack_code AS PACK_COD, + + -- Pack / Product 描述 + COALESCE(r.PACK_DES, l.pack_des) AS pack_des, + COALESCE(r.STGH_DES, l.stgh_des) AS stgh_des, + COALESCE(r.PACK_LCH, l.pack_lch) AS pack_lch, + COALESCE(r.PROD_COD, l.iqvia_prod_code) AS PROD_COD, + COALESCE(r.PROD_DES, l.prod_des) AS prod_des, + COALESCE(r.PROD_DES_C, l.prod_des_c) AS prod_des_c, + + -- 右表独有:Family + r.Family_Code, + r.Family_Name, + + -- 成分 + COALESCE(r.CMPS_COD, l.cmps_cod) AS cmps_cod, + COALESCE(r.CMPS_DES, l.cmps_des) AS cmps_des, + COALESCE(r.CMPS_DES_C, l.cmps_des_c) AS cmps_des_c, + + -- ATC + COALESCE(r.ATC1_COD, l.atc1_cod) AS atc1_cod, + COALESCE(r.atc1_des, l.atc1_des) AS atc1_des, + COALESCE(r.atc1_des_c, l.atc1_des_c) AS atc1_des_c, + COALESCE(r.ATC2_COD, l.atc2_cod) AS atc2_cod, + COALESCE(r.atc2_des, l.atc2_des) AS atc2_des, + COALESCE(r.atc2_des_c, l.atc2_des_c) AS atc2_des_c, + COALESCE(r.ATC3_COD, l.atc3_cod) AS atc3_cod, + COALESCE(r.atc3_des, l.atc3_des) AS atc3_des, + COALESCE(r.atc3_des_c, l.atc3_des_c) AS atc3_des_c, + COALESCE(r.ATC4_COD, l.atc4_cod) AS atc4_cod, + COALESCE(r.atc4_des, l.atc4_des) AS atc4_des, + COALESCE(r.atc4_des_c, l.atc4_des_c) AS atc4_des_c, + + -- APP + COALESCE(r.APP1_COD, l.app1_cod) AS app1_cod, + COALESCE(r.app1_des, l.app1_des) AS app1_des, + COALESCE(r.app1_des_c, l.app1_des_c) AS app1_des_c, + COALESCE(r.APP2_COD, l.app2_cod) AS app2_cod, + COALESCE(r.app2_des, l.app2_des) AS app2_des, + COALESCE(r.app2_des_c, l.app2_des_c) AS app2_des_c, + COALESCE(r.APP3_COD, l.app3_cod) AS app3_cod, + COALESCE(r.app3_des, l.app3_des) AS app3_des, + COALESCE(r.app3_des_c, l.app3_des_c) AS app3_des_c, + + -- 标志位 + COALESCE(r.BIO_DESC, l.bio_desc) AS bio_desc, + COALESCE(r.GENE_ORIG_DESC, l.gene_orig_desc) AS gene_orig_desc, + COALESCE(r.ETH_OTC_DESC, l.eth_otc_desc) AS eth_otc_desc, + COALESCE(r.NRDL_DESC, l.nrdl_desc) AS nrdl_desc, + r.NRDL_Entry_Date, + COALESCE(r.EDL_DESC, l.edl_desc) AS edl_desc, + COALESCE(r.TCM_DESC, l.tcm_desc) AS tcm_desc, + COALESCE(r.PAED_DESC, l.paed_desc) AS paed_desc, + COALESCE(r.GQCE_DESC, l.gqce_desc) AS gqce_desc, + COALESCE(r.VBP_DESC, l.vbp_desc) AS vbp_desc, + + -- 厂商 + COALESCE(r.MANU_COD, l.manu_cod) AS manu_cod, + COALESCE(r.MANU_DES, l.manu_des) AS manu_des, + COALESCE(r.MANU_DES_C, l.manu_des_c) AS manu_des_c, + COALESCE(r.MNFL_COD, l.mnfl_cod) AS mnfl_cod, + COALESCE(r.MNFL_DES, l.mnfl_des) AS mnfl_des, + + -- 公司 + COALESCE(r.CORP_COD, l.corp_cod) AS corp_cod, + COALESCE(r.CORP_DES, l.corp_des) AS corp_des, + COALESCE(r.CORP_DES_C, l.corp_des_c) AS corp_des_c, + + -- 右表独有:品牌 / AZ 标志 + r.BrandType, + r.IS_AZ, + r.AZ_MAIN, + r.AZ_Related, + -- 左表独有 + l.countingunit, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT +FROM dedup_l l +LEFT JOIN dedup_r r + ON l.iqvia_pack_code = r.PACK_COD \ No newline at end of file diff --git a/THC/02 dm_ext_thc_sales.sql b/THC/02 dm_ext_thc_sales.sql new file mode 100644 index 0000000..868e7a3 --- /dev/null +++ b/THC/02 dm_ext_thc_sales.sql @@ -0,0 +1,354 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_THC_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_sales'; + +-- COMMAND ---------- + +-------------------------------------------------------------------------- +--修改时间:20241106 +--修改人:Fanxujia +--修改内容: +--THC原本只有全国数据,现在增加14个省份的数据。 +--但是全国数据是半年提供一次,省份数据一个季度提供一次 +--目前需求是将季度数据放入模型,而全国数据单独成一个事实表,供PBI单独展示 +--这里生成的事实表里全国和省份都包含了,在写入模型的时候用where条件筛选 +--------------------------------------------------------------------------- + +-- COMMAND ---------- + +--rawdata年月处理 +CREATE OR REPLACE TEMPORARY VIEW thc_rawdata1 +AS +select case when right(yq,2) = 'Q1' then concat(left(yq,4),'03') + when right(yq,2) = 'Q2' then concat(left(yq,4),'06') + when right(yq,2) = 'Q3' then concat(left(yq,4),'09') + when right(yq,2) = 'Q4' then concat(left(yq,4),'12') + else yq + end as yyyymm, + city_c, + pack_cod, + prod_cod, + value, + totalunit, + countingunit +from dwd.dwd_gnd_ext_thc_rawdata + +-- COMMAND ---------- + +--CHPA渠道对应的公司编码以及名称 +CREATE OR REPLACE TEMPORARY VIEW chpa_corp +AS +select distinct +PACK_COD, +CORP_COD, +CORP_DES +from dm.dm_ims_td_pack_property + +-- COMMAND ---------- + +--从thc渠道的pack_property里取到对应的iqvia_pack_code、countingunit +--然后corp_cod优先取CHPA渠道的 +CREATE OR REPLACE TEMPORARY VIEW thc_corp +AS +select t1.pack_cod, +t1.iqvia_pack_code, +t1.countingunit, +coalesce(t2.CORP_COD, t1.CORP_COD) as CORP_COD , +coalesce(t2.CORP_DES,t1.CORP_DES ) as CORP_DES +from dwd.dwd_gnd_dept_pack_property t1 +left join chpa_corp t2 +on t1.iqvia_pack_code = t2.PACK_COD + +-- COMMAND ---------- + +--编辑thc渠道的audit_cod +--全国数据设置成CHT +--省份数据使用公共的地理维表里的省份编码作为audit_cod +CREATE OR REPLACE TEMPORARY VIEW thc_geo +AS +select +t1.city_c, +t1.city_e, +t1.province_c, +t1.province_e, +case when t1.province_c = '全国' then 'CHT' + when t2.geo_key is null then t1.province_e + else t2.geo_key +end as AUDIT_COD +from dwd.dwd_gnd_ext_thc_geo t1 +left join dm.dm_td_geography t2 +--THC最细到省,用省关联 +on t1.province_c = t2.province_name +and t2.geo_key = t2.province_code + +-- COMMAND ---------- + +--将上面的rawdata、corp、audit信息合到一起 +CREATE OR REPLACE TEMPORARY VIEW thc_rawdata2 +AS +select t1.yyyymm, +t1.city_c, +t1.pack_cod as pack_cod_old, +t2.iqvia_pack_code as pack_cod, +t2.CORP_COD, +t3.AUDIT_COD, +t1.prod_cod, +t1.value, +t1.totalunit, +t1.totalunit * t2.countingunit as countingunit +from thc_rawdata1 t1 +left join thc_corp t2 +on t1.pack_cod = t2.pack_cod +left join thc_geo t3 +on t1.city_c = t3.city_c + +-- COMMAND ---------- + +--最大的月份,计算ly时会需要 +CREATE OR REPLACE TEMPORARY VIEW max_thc_rawdata +AS +select max(cast(yyyymm as int)) as max_ym +from thc_rawdata2 + +-- COMMAND ---------- + +--计算ly +CREATE OR REPLACE TEMPORARY VIEW thc_rawdata3 +AS +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +value, +totalunit, +countingunit, +0 as value_ly, +0 as totalunit_ly, +0 as countingunit_ly +from thc_rawdata2 +union all +select cast(t1.yyyymm as int) + 100 as yyyymm, +t1.AUDIT_COD, +t1.pack_cod, +t1.CORP_COD, +0 as value, +0 as totalunit, +0 as countingunit, +t1.value as value_ly, +t1.totalunit as totalunit_ly, +t1.countingunit as countingunit_ly +from thc_rawdata2 t1 +cross join max_thc_rawdata t2 +where cast(t1.yyyymm as int) + 100 <= t2.max_ym + +-- COMMAND ---------- + +--按年月、audit_cod、pack_cod、Corp_cod汇总 +CREATE OR REPLACE TEMPORARY VIEW thc_rawdata4 +AS +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +sum(value) as SALES_VALUE_CAL, +sum(totalunit) as SALES_UNIT_CAL, +sum(countingunit) as COUNTING_UNIT, +sum(value_ly) as SALES_VALUE_CAL_LY, +sum(totalunit_ly) as SALES_UNIT_CAL_LY, +sum(countingunit_ly) as COUNTING_UNIT_LY +from thc_rawdata3 +group by yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW THC_SALES +AS +SELECT + A.YYYYMM, + A.PACK_COD AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'THC(Quarterly)' DATA_SOURCE, + ------------------------------------- + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + COUNTING_UNIT, + COUNTING_UNIT_LY , + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 + ------------------------------------- +FROM + thc_rawdata4 A +-- 条件后移到 unionall_sales +-- WHERE +-- AUDIT_COD = 'CHT' + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_THC_SALES +( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) +SELECT + YYYYMM, + NVL ( + NULLIF(PACK_CODE, ''), + CONCAT ('PACK_CODE_', DATA_SOURCE) + ) AS PACK_CODE, + NVL (NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + COUNTING_UNIT, + COUNTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP (CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + THC_SALES +; + +-- COMMAND ---------- + +insert overwrite table dm.dm_ext_thc_sales +( +yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +SALES_VALUE_CAL, +SALES_UNIT_CAL, +COUNTING_UNIT, +SALES_VALUE_CAL_LY, +SALES_UNIT_CAL_LY, +COUNTING_UNIT_LY +) +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +SALES_VALUE_CAL, +SALES_UNIT_CAL, +COUNTING_UNIT, +SALES_VALUE_CAL_LY, +SALES_UNIT_CAL_LY, +COUNTING_UNIT_LY +from thc_rawdata4 +--取2018年之后的数 +where yyyymm >= '201801' \ No newline at end of file diff --git a/THC/02 dm_ext_thc_sales_bakup_20260327.sql b/THC/02 dm_ext_thc_sales_bakup_20260327.sql new file mode 100644 index 0000000..a06733f --- /dev/null +++ b/THC/02 dm_ext_thc_sales_bakup_20260327.sql @@ -0,0 +1,178 @@ +-- Databricks notebook source +-- create table dm.dm_ext_thc_sales +-- ( +-- yyyymm STRING, +-- audit_cod STRING, +-- pack_cod STRING, +-- corp_cod STRING, +-- sales_value_cal decimal(38,10), +-- sales_unit_cal decimal(38,10), +-- counting_unit decimal(38,10), +-- sales_value_cal_ly decimal(38,10), +-- sales_unit_cal_ly decimal(38,10), +-- counting_unit_ly decimal(38,10) +-- ) +-- using delta + +-- COMMAND ---------- + +-------------------------------------------------------------------------- +--修改时间:20241106 +--修改人:Fanxujia +--修改内容: +--THC原本只有全国数据,现在增加14个省份的数据。 +--但是全国数据是半年提供一次,省份数据一个季度提供一次 +--目前需求是将季度数据放入模型,而全国数据单独成一个事实表,供PBI单独展示 +--这里生成的事实表里全国和省份都包含了,在写入模型的时候用where条件筛选 +--------------------------------------------------------------------------- +--rawdata年月处理 +with thc_rawdata1 as ( +select case when right(yq,2) = 'Q1' then concat(left(yq,4),'03') + when right(yq,2) = 'Q2' then concat(left(yq,4),'06') + when right(yq,2) = 'Q3' then concat(left(yq,4),'09') + when right(yq,2) = 'Q4' then concat(left(yq,4),'12') + else yq + end as yyyymm, + city_c, + pack_cod, + prod_cod, + value, + totalunit, + countingunit +from dwd.dwd_gnd_ext_thc_rawdata +) +--CHPA渠道对应的公司编码以及名称 +,chpa_corp as ( +select distinct +PACK_COD, +CORP_COD, +CORP_DES +from dm.dm_ims_td_pack_property +) +--从thc渠道的pack_property里取到对应的iqvia_pack_code、countingunit +--然后corp_cod优先取CHPA渠道的 +,thc_corp as ( +select t1.pack_cod, +t1.iqvia_pack_code, +t1.countingunit, +coalesce(t2.CORP_COD, t1.CORP_COD) as CORP_COD , +coalesce(t2.CORP_DES,t1.CORP_DES ) as CORP_DES +from dwd.dwd_gnd_ext_thc_pack_property t1 +left join chpa_corp t2 +on t1.iqvia_pack_code = t2.PACK_COD +) +--编辑thc渠道的audit_cod +--全国数据设置成CHT +--省份数据使用公共的地理维表里的省份编码作为audit_cod +,thc_geo as ( +select +t1.city_c, +t1.city_e, +t1.province_c, +t1.province_e, +case when t1.province_c = '全国' then 'CHT' + when t2.geo_key is null then t1.province_e + else t2.geo_key +end as AUDIT_COD +from dwd.dwd_gnd_ext_thc_geo t1 +left join dm.dm_td_geography t2 +--THC最细到省,用省关联 +on t1.province_c = t2.province_name +and t2.geo_key = t2.province_code +) +--将上面的rawdata、corp、audit信息合到一起 +,thc_rawdata2 as ( +select t1.yyyymm, +t1.city_c, +t1.pack_cod as pack_cod_old, +t2.iqvia_pack_code as pack_cod, +t2.CORP_COD, +t3.AUDIT_COD, +t1.prod_cod, +t1.value, +t1.totalunit, +t1.totalunit * t2.countingunit as countingunit +from thc_rawdata1 t1 +left join thc_corp t2 +on t1.pack_cod = t2.pack_cod +left join thc_geo t3 +on t1.city_c = t3.city_c +) +--最大的月份,计算ly时会需要 +,max_thc_rawdata as ( +select max(cast(yyyymm as int)) as max_ym +from thc_rawdata2 +) +--计算ly +,thc_rawdata3 as ( +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +value, +totalunit, +countingunit, +0 as value_ly, +0 as totalunit_ly, +0 as countingunit_ly +from thc_rawdata2 +union all +select cast(t1.yyyymm as int) + 100 as yyyymm, +t1.AUDIT_COD, +t1.pack_cod, +t1.CORP_COD, +0 as value, +0 as totalunit, +0 as countingunit, +t1.value as value_ly, +t1.totalunit as totalunit_ly, +t1.countingunit as countingunit_ly +from thc_rawdata2 t1 +cross join max_thc_rawdata t2 +where cast(t1.yyyymm as int) + 100 <= t2.max_ym +) +--按年月、audit_cod、pack_cod、Corp_cod汇总 +,thc_rawdata4 as ( +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +sum(value) as SALES_VALUE_CAL, +sum(totalunit) as SALES_UNIT_CAL, +sum(countingunit) as COUNTING_UNIT, +sum(value_ly) as SALES_VALUE_CAL_LY, +sum(totalunit_ly) as SALES_UNIT_CAL_LY, +sum(countingunit_ly) as COUNTING_UNIT_LY +from thc_rawdata3 +group by yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD +) + +insert overwrite table dm.dm_ext_thc_sales +( +yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +SALES_VALUE_CAL, +SALES_UNIT_CAL, +COUNTING_UNIT, +SALES_VALUE_CAL_LY, +SALES_UNIT_CAL_LY, +COUNTING_UNIT_LY +) +select yyyymm, +AUDIT_COD, +pack_cod, +CORP_COD, +SALES_VALUE_CAL, +SALES_UNIT_CAL, +COUNTING_UNIT, +SALES_VALUE_CAL_LY, +SALES_UNIT_CAL_LY, +COUNTING_UNIT_LY +from thc_rawdata4 +--取2018年之后的数 +where yyyymm >= '201801' \ No newline at end of file diff --git a/THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql b/THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql new file mode 100644 index 0000000..ba8bf4f --- /dev/null +++ b/THC/03 DM_TF_EXT_THC_MARKET_SALES_CHT.sql @@ -0,0 +1,109 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_THC_MARKET_SALES_CHT ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- DATA_SOURCE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- INST_CODE STRING COMMENT '内部机构编码', +-- AIA_HP_FLAG STRING, +-- DEPT_NAME STRING COMMENT '科室名称', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_TYPE STRING COMMENT '处方来源', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- VA DOUBLE, +-- UT DOUBLE, +-- CU DOUBLE, +-- PT DOUBLE, +-- SALES_UNIT_CAL DECIMAL(35,6), +-- SALES_UNIT_CAL_LY DECIMAL(35,6), +-- SALES_VALUE_CAL DECIMAL(35,6), +-- SALES_VALUE_CAL_LY DECIMAL(35,6), +-- CONUTING_UNIT DECIMAL(35,6), +-- CONUTING_UNIT_LY DECIMAL(35,6), +-- PDOT DECIMAL(35,6), +-- PDOT_LY DECIMAL(35,6), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_market_sales_cht'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_market_sales_cht'; + +-- COMMAND ---------- + +INSERT OVERWRITE DM.DM_TF_EXT_THC_MARKET_SALES_CHT +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY, +FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, +FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_THC_SALES t1 +LEFT JOIN DM.dm_td_ext_THC_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_THC_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'THC(Quarterly)' +and AUDIT_CODE <> 'CHT' \ No newline at end of file diff --git a/THC/04 dm_tf_external_sales_thc.sql b/THC/04 dm_tf_external_sales_thc.sql new file mode 100644 index 0000000..a63b210 --- /dev/null +++ b/THC/04 dm_tf_external_sales_thc.sql @@ -0,0 +1,115 @@ +-- Databricks notebook source +-- CREATE or replace TABLE spark_catalog.dm.dm_tf_external_sales_thc ( +-- YYYYMM STRING, +-- PACK_COD STRING, +-- CORP_COD STRING, +-- AUDIT_COD STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- inst_code STRING COMMENT '内部机构编码', +-- cmps_flag STRING COMMENT '分子式标签', +-- dept_name STRING COMMENT '科室名称', +-- prescription DECIMAL(38,10) COMMENT '处方张数', +-- prescription_ly DECIMAL(38,10) COMMENT '去年同期处方张数', +-- new_code STRING COMMENT '主数据关联code', +-- area STRING COMMENT '城市', +-- h_level STRING COMMENT '医院类型', +-- reimburse STRING COMMENT '报销情况', +-- reimburse_type STRING COMMENT '报销类型', +-- prescription_source STRING COMMENT '处方来源') +-- USING delta +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_external_sales' +-- TBLPROPERTIES ( +-- 'Type' = 'EXTERNAL', +-- 'delta.deletedFileRetentionDuration' = 'interval 31 days', +-- 'delta.logRetentionDuration' = 'interval 31 days', +-- 'delta.minReaderVersion' = '1', +-- 'delta.minWriterVersion' = '2') + + +-- COMMAND ---------- + +-- DBTITLE 1,待禁用 +-------------------------------------------------------------------------------------- +--修改时间:20241106 +--修改人:Fanxujia +--修改内容: +--THC的全国数据半年给一次,省份数据是一个季度给一次。 +--目前需求是将省份数据写入模型,全国数据单独成一张事实表 +-------------------------------------------------------------------------------------- +insert OVERWRITE table dm.dm_tf_external_sales_thc ( + YYYYMM, + PACK_COD, + CORP_COD, + AUDIT_COD, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + inst_code, + cmps_flag, + dept_name, + prescription, + prescription_ly, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source + ) +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + '' as PLATFORM_TYPE, + '' as STORE_NAME, + '' as STORE_TYPE, + '' as REGION_TYPE, + 'THC(Quarterly)' as DATA_SOURCE, + 1 as PACK_FLAG, + 1 as PROD_FLAG, + 0 as DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + '' as inst_code, + '' as cmps_flag, + '' as dept_name, + null as prescription, + null as prescription_ly, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source +FROM + DM.DM_TF_EXT_THC_SALES +where AUDIT_CODE <> 'CHT' \ No newline at end of file diff --git a/THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql b/THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql new file mode 100644 index 0000000..60592eb --- /dev/null +++ b/THC/05 DM_TD_EXT_THC_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_PACK_PROPERTY +-- ( +-- -- -- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- -- MARKET STRING, +-- -- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- -- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- -- CLASS STRING, +-- -- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_THC_PACK_PROPERTY +SELECT + -- MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + null as VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + -- MARKET, + -- KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + -- AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + -- CLASS, + -- NULL AS MARKET_RATIO, + COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_THC_PACK_PROPERTY; \ No newline at end of file diff --git a/THC/06 DM_TD_EXT_THC_PACK2MARKET.sql b/THC/06 DM_TD_EXT_THC_PACK2MARKET.sql new file mode 100644 index 0000000..747a1bb --- /dev/null +++ b/THC/06 DM_TD_EXT_THC_PACK2MARKET.sql @@ -0,0 +1,326 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_thc_PACK2MARKET_KEYCOMPETITOR ( +-- KEY_COMPETITOR STRING, +-- MARKET STRING, +-- PACK_CODE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market_keycompetitor'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market_keycompetitor'; + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE DM.DM_TD_EXT_thc_PACK2MARKET_CLASS ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CLASS STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market_class'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market_class'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_THC_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_thc_PACK2MARKET_KEYCOMPETITOR +WITH kc AS ( + SELECT + keycompetitor, no, + ROW_NUMBER() OVER (ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 + END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1, + ATC1_Code, ATC2_Code, ATC3_Code, ATC4_Code, + NFC1_Code, NFC2_Code, NFC3_Code, + corporation_code, Manufacturer_Code, + Product_Code, Pack_Code, Strength, Molecule_Code, market + FROM dwd.dwd_gnd_ims_tblkeycompetitor +), +joined AS ( + SELECT + /*+ BROADCAST(kc) */ + COALESCE(kc.keycompetitor, 'OTHERS') AS Key_Competitor, -- ✅ UPDATE 逻辑内联 + t1.market, t1.PACK_CODE + /*bug 调试区 + , + kc.no, + kc.no1, + t1.PROD_COD, t1.CMPS_COD, t1.CMPS_DES, + t1.ATC1_COD, t1.ATC2_COD, t1.ATC3_COD, t1.ATC4_COD, + t1.APP1_COD, t1.APP2_COD, t1.APP3_COD, + t1.BIO_DESC, t1.GENE_ORIG_DESC, t1.ETH_OTC_DESC, + t1.NRDL_DESC, t1.NRDL_Entry_Date, t1.EDL_DESC, t1.TCM_DESC, + t1.PAED_DESC, t1.GQCE_DESC, t1.VBP_DESC, + t1.MANU_COD, t1.MANU_DES, t1.MNFL_COD, t1.MNFL_DES, + t1.CORP_COD, t1.CORP_DES, t1.BrandType, t1.bu, t1.Market_Ratio + */ + ,ROW_NUMBER() OVER ( + PARTITION BY t1.market, t1.PACK_CODE, t1.PROD_CODE + ORDER BY kc.no1 DESC, kc.no DESC + ) AS _rn + FROM DM.DM_TD_EXT_thc_PACK2MARKET t1 + LEFT JOIN kc + ON (kc.ATC1_Code IS NULL OR t1.ATC1_CODE = kc.ATC1_Code) + AND (kc.ATC2_Code IS NULL OR t1.ATC2_CODE = kc.ATC2_Code) + AND (kc.ATC3_Code IS NULL OR t1.ATC3_CODE = kc.ATC3_Code) + AND (kc.ATC4_Code IS NULL OR t1.ATC4_CODE = kc.ATC4_Code) + AND (kc.NFC1_Code IS NULL OR t1.APP1_CODE = kc.NFC1_Code) + AND (kc.NFC2_Code IS NULL OR t1.APP2_CODE = kc.NFC2_Code) + AND (kc.NFC3_Code IS NULL OR t1.APP3_CODE = kc.NFC3_Code) + AND (kc.corporation_code IS NULL OR t1.CORP_CODE = kc.corporation_code) + AND (kc.Manufacturer_Code IS NULL OR t1.MANU_CODE = kc.Manufacturer_Code) + AND (kc.Product_Code IS NULL OR t1.PROD_CODE = kc.Product_Code) + AND (kc.Pack_Code IS NULL OR t1.PACK_CODE = kc.Pack_Code) + AND (kc.Strength IS NULL OR t1.STGH_DESC = kc.Strength) + AND (kc.Molecule_Code IS NULL OR t1.CMPS_CODE = kc.Molecule_Code) + AND (kc.market IS NULL OR t1.market = kc.market) +) +SELECT distinct Key_Competitor,market,pack_code +FROM joined +WHERE _rn = 1; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_thc_PACK2MARKET_CLASS +SELECT + /*+ BROADCAST(T2) */ + DISTINCT + T1.MARKET, + T1.PACK_CODE, + COALESCE( T2.CLASS, 'OTHERS') AS CLASS +FROM DM.DM_TD_EXT_thc_PACK2MARKET T1 +LEFT JOIN DWD.DWD_GND_TBLCLASS T2 + ON (T2.MARKET IS NULL OR T1.MARKET = T2.MARKET) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) \ No newline at end of file diff --git a/THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql b/THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql new file mode 100644 index 0000000..633759a --- /dev/null +++ b/THC/07 DM_TD_EXT_THC_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_THC_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql b/THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..529609d --- /dev/null +++ b/THC/08 DM_TD_EXT_THC_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_THC_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql b/THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..d601386 --- /dev/null +++ b/THC/09 DM_TD_EXT_THC_MARKET_PACK_MAPPING.sql @@ -0,0 +1,71 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_THC_MARKET_PACK_MAPPING + SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T4.CLASS, + T5.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.DM_TD_EXT_THC_PACK2MARKET T1 + LEFT JOIN DM.DM_TD_EXT_THC_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET + AND T1.PACK_CODE = T2.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_THC_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET + AND T1.PACK_CODE = T3.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_THC_PACK2MARKET_CLASS T4 + ON T1.PACK_CODE = T4.PACK_CODE + AND T1.MARKET = T4.MARKET + LEFT JOIN DM.DM_TD_EXT_THC_PACK2MARKET_KEYCOMPETITOR T5 + ON T1.PACK_CODE = T5.PACK_CODE + AND T1.MARKET = T5.MARKET + WHERE + UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/UNIONALL/DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql b/UNIONALL/DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..18623d9 --- /dev/null +++ b/UNIONALL/DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING.sql @@ -0,0 +1,541 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- DATASOURCE STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'AIA(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'IQVIA-CHPA(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'Retail(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'DTP(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_DTP_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'CHC(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'IQVIA-COUNTY(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'XH Data(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'EC(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' + +UNION ALL + +SELECT + PACK_CODE, + MARKET, + CLASS, + KEY_COMPETITOR, + MARKET_RATIO, + STARTTIME, + ENDTIME, + VALUE_BRAND_RATIO, + VALUE_BRAND_RATIO_START, + VALUE_BRAND_RATIO_END, + UNIT_BRAND_RATIO, + UNIT_BRAND_START, + UNIT_BRAND_END, + COUNTINGUNIT_BRAND_RATIO, + COUNTINGUNIT_BRAND_START, + COUNTINGUNIT_BRAND_END, + PDOT_BRAND_RATIO, + PDOT_BRAND_START, + PDOT_BRAND_END, + 'THC(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_MARKET_PACK_MAPPING +WHERE UPPER(MARKET) NOT LIKE '%ALL%' + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market' AS MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'EC(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_EC_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market' AS MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'CHC(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHC_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'Retail(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'DTP(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_DTP_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'THC(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_THC_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'IQVIA-CHPA(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'XH Data(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'AIA(Monthly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +UNION ALL + +SELECT + PACK_CODE, + 'ALL Market'MARKET, + 'Others' AS CLASS, + 'OTHERS' AS KEY_COMPETITOR, + 1 AS MARKET_RATIO, + 200001 AS STARTTIME, + 299912 AS ENDTIME, + 1 AS VALUE_BRAND_RATIO, + 200001 AS VALUE_BRAND_RATIO_START, + 299912 AS VALUE_BRAND_RATIO_END, + 1 AS UNIT_BRAND_RATIO, + 200001 AS UNIT_BRAND_START, + 299912 AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + 1 AS PDOT_BRAND_RATIO, + 200001 AS PDOT_BRAND_START, + 299912 AS PDOT_BRAND_END, + 'IQVIA-COUNTY(Quarterly)' AS DATASOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING +GROUP BY + PACK_CODE + +-- COMMAND ---------- + +update DM.DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING set class = 'Others' where lower(CLASS) = 'others' or CLASS IS null \ No newline at end of file diff --git a/UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql b/UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql new file mode 100644 index 0000000..2e5efcd --- /dev/null +++ b/UNIONALL/DM_TD_EXT_UNIONALL_PACKINFO.sql @@ -0,0 +1,1837 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_PACKINFO ( +-- PACK_CODE STRING COMMENT '包装编码', +-- PACK_DESC STRING COMMENT '包装描述', +-- PACK_LCH STRING COMMENT '包装上市时间,示例"Y2024M05"', +-- PROD_CODE STRING COMMENT '产品编码', +-- PROD_DESC STRING COMMENT '产品描述', +-- PROD_DESC_C STRING COMMENT '产品中文描述', +-- CMPS_CODE STRING COMMENT '成分代码', +-- CMPS_DESC STRING COMMENT '成分描述', +-- CMPS_DESC_C STRING COMMENT '成分中文描述', +-- VBP_BATCH STRING COMMENT '带量采购批次号', +-- VBP_IMPLEMENTING_TIME STRING COMMENT '带量采购实施时间', +-- STGH_DESC STRING COMMENT '储存方式描述', +-- BIO_DESC STRING COMMENT '生物制药描述', +-- ETH_OTC_DESC STRING COMMENT '处方/非处方药描述', +-- NRDL_DESC STRING COMMENT '国家医保目录状态描述', +-- NRDL_ENTRY_DATE STRING COMMENT '国家医保目录纳入日期', +-- EDL_DESC STRING COMMENT '基本药物目录状态描述', +-- TCM_DESC STRING COMMENT '中医药分类描述', +-- PAED_DESC STRING COMMENT '儿童用药标志描述', +-- GQCE_DESC STRING COMMENT '绿色/质量/认证/应急标志描述', +-- MANU_CODE STRING COMMENT '生产企业编码', +-- MANU_DESC STRING COMMENT '生产企业名称描述', +-- MANU_DESC_C STRING COMMENT '生产企业名称中文描述', +-- MNFL_CODE STRING COMMENT '跨国/本地企业标志编码', +-- ATC1_CODE STRING COMMENT '解剖学治疗学化学分类1编码', +-- ATC1_DESC STRING COMMENT '解剖学治疗学化学分类1描述', +-- ATC1_DESC_C STRING COMMENT '解剖学治疗学化学分类1中文描述', +-- ATC2_CODE STRING COMMENT '解剖学治疗学化学分类2编码', +-- ATC2_DESC STRING COMMENT '解剖学治疗学化学分类2描述', +-- ATC2_DESC_C STRING COMMENT '解剖学治疗学化学分类2中文描述', +-- ATC3_CODE STRING COMMENT '解剖学治疗学化学分类3编码', +-- ATC3_DESC STRING COMMENT '解剖学治疗学化学分类3描述', +-- ATC3_DESC_C STRING COMMENT '解剖学治疗学化学分类3中文描述', +-- ATC4_CODE STRING COMMENT '解剖学治疗学化学分类4编码', +-- ATC4_DESC STRING COMMENT '解剖学治疗学化学分类4描述', +-- ATC4_DESC_C STRING COMMENT '解剖学治疗学化学分类4中文描述', +-- APP1_CODE STRING COMMENT '审批/申请分类(3个层级)', +-- APP1_DESC STRING COMMENT '', +-- APP1_DESC_C STRING COMMENT '', +-- APP2_CODE STRING COMMENT '', +-- APP2_DESC STRING COMMENT '', +-- APP2_DESC_C STRING COMMENT '', +-- APP3_CODE STRING COMMENT '', +-- APP3_DESC STRING COMMENT '', +-- APP3_DESC_C STRING COMMENT '', +-- GENE_ORIG_DESC STRING COMMENT '原研/仿制/中药药物来源描述', +-- VBP_DESC STRING COMMENT '带量采购状态(VBP-IN/VBP-OUT/Non VBP)描述', +-- CORP_CODE STRING COMMENT '公司编码', +-- GEN_RN INT COMMENT '原研/仿制排名(1-5)', +-- CORP_DESC STRING COMMENT '公司名称描述', +-- CORP_DESC_C STRING COMMENT '公司名称中文描述', +-- PACK_RN INT COMMENT '包装排名(按销售量)', +-- PROD_RN INT COMMENT '产品排名(按销售量)', +-- CMPS_RN INT COMMENT '成分排名(按销售量)', +-- DATA_SOURCE STRING COMMENT '数据来源渠道', +-- ATC STRING COMMENT 'ATC分类代码', +-- NEW_CODE STRING COMMENT '新编码', +-- COMMON_NAME STRING COMMENT '通用名称', +-- PRODUCT_NAME STRING COMMENT '产品名称', +-- MANU_DES_XIEHE STRING COMMENT '协和渠道生产企业名称', +-- PACK_DES_XIEHE STRING COMMENT '协和渠道包装描述', +-- DRUG_DELIVERY_ROUTE STRING COMMENT '给药途径', +-- NFC STRING COMMENT '国家处方集代码', +-- CORP_TYPE STRING COMMENT '企业类型(本地/跨国)', +-- LAUNCHTIME STRING COMMENT '产品上市时间', +-- VBP_BRAND STRING COMMENT '品牌带量采购状态汇总', +-- REPLENISH_FALG STRING COMMENT '后续补充标志', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_packinfo'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_packinfo'; + +-- COMMAND ---------- + +-- 数据源1 CHPA +CREATE OR REPLACE TEMPORARY VIEW VIEW_CHPA_PACK_INFO +AS +SELECT + PACK_CODE as PACK_CODE, + MAX(PACK_DESC) as PACK_DESC, + MAX(PACK_LCH) as PACK_LCH, + MAX(PROD_CODE) as PROD_CODE, + MAX(PROD_DESC) as PROD_DESC, + MAX(PROD_DESC_C) as PROD_DESC_C, + MAX(CMPS_CODE) as CMPS_CODE, + MAX(CMPS_DESC) as CMPS_DESC, + MAX(CMPS_DESC_C) as CMPS_DESC_C, + NULL as VBP_BATCH, + NULL as VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) as STGH_DESC, + MAX(BIO_DESC) as BIO_DESC, + MAX(ETH_OTC_DESC) as ETH_OTC_DESC, + MAX(NRDL_DESC) as NRDL_DESC, + MAX(NRDL_ENTRY_DATE) as NRDL_ENTRY_DATE, + MAX(EDL_DESC) as EDL_DESC, + MAX(TCM_DESC) as TCM_DESC, + MAX(PAED_DESC) as PAED_DESC, + MAX(GQCE_DESC) as GQCE_DESC, + MAX(MANU_CODE) as MANU_CODE, + MAX(MANU_DESC) as MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) as MNFL_CODE, + MAX(ATC1_CODE) as ATC1_CODE, + MAX(ATC1_DESC) as ATC1_DESC, + MAX(ATC1_DESC_C) as ATC1_DESC_C, + MAX(ATC2_CODE) as ATC2_CODE, + MAX(ATC2_DESC) as ATC2_DESC, + MAX(ATC2_DESC_C) as ATC2_DESC_C, + MAX(ATC3_CODE) as ATC3_CODE, + MAX(ATC3_DESC) as ATC3_DESC, + MAX(ATC3_DESC_C) as ATC3_DESC_C, + MAX(ATC4_CODE) as ATC4_CODE, + MAX(ATC4_DESC) as ATC4_DESC, + MAX(ATC4_DESC_C) as ATC4_DESC_C, + MAX(APP1_CODE) as APP1_CODE, + MAX(APP1_DESC) as APP1_DESC, + MAX(APP1_DESC_C) as APP1_DESC_C, + MAX(APP2_CODE) as APP2_CODE, + MAX(APP2_DESC) as APP2_DESC, + MAX(APP2_DESC_C) as APP2_DESC_C, + MAX(APP3_CODE) as APP3_CODE, + MAX(APP3_DESC) as APP3_DESC, + MAX(APP3_DESC_C) as APP3_DESC_C, + MAX(GENE_ORIG_DESC) as GENE_ORIG_DESC, + CASE + WHEN MAX(VBP_DESC_V) = 'VBP-IN' THEN 'VBP-IN' + WHEN MAX(VBP_DESC_V) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(VBP_DESC_V) IS NOT NULL THEN 'Non VBP' + ELSE NULL END AS VBP_DESC, + MAX(CORP_CODE) as CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END as GEN_RN, + -- 后面数据都还没有,暂时不搞 + NULL as CORP_DESC, + NULL as CORP_DESC_C, + NULL as PACK_RN, + NULL as PROD_RN, + NULL as CMPS_RN, + NULL as DATA_SOURCE, + NULL as ATC, + NULL as NEW_CODE, + NULL as COMMON_NAME, + NULL as PRODUCT_NAME, + NULL as MANU_DES_XIEHE, + NULL as PACK_DES_XIEHE, + NULL as DRUG_DELIVERY_ROUTE, + NULL as NFC, + NULL as CORP_TYPE, + NULL as LAUNCHTIME, + NULL as VBP_BRAND +from DM.DM_TD_EXT_CHPA_PACK_PROPERTY +where NVL(PACK_CODE, '') <> '' +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源2 COUNTY +CREATE OR REPLACE TEMPORARY VIEW VIEW_COUNTY_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + CASE + WHEN MAX(VBP_DESC) = 'VBP-IN' THEN 'VBP-IN' + WHEN MAX(VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(VBP_DESC) IS NOT NULL THEN 'Non VBP' + ELSE NULL END AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_COUNTY_PACK_PROPERTY b +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源3 THC +CREATE OR REPLACE TEMPORARY VIEW VIEW_THC_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + NULL AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + MAX(VBP_DESC) AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM DM.DM_TD_EXT_THC_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源4 CHC +CREATE OR REPLACE TEMPORARY VIEW VIEW_CHC_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + NULL AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + MAX(VBP_DESC) AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM DM.DM_TD_EXT_CHC_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源5 retail +CREATE OR REPLACE TEMPORARY VIEW VIEW_RETAIL_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + CASE + WHEN MAX(VBP_DESC) = 'VBP-IN' then 'VBP-IN' + WHEN MAX(VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(VBP_DESC) IS NOT NULL THEN 'Non VBP' + ELSE NULL END AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_RETAIL_PACK_PROPERTY +GROUP BY PACK_CODE +UNION +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + CASE + WHEN MAX(VBP_DESC) = 'VBP-IN' then 'VBP-IN' + WHEN MAX(VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(VBP_DESC) IS NOT NULL THEN 'Non VBP' + ELSE NULL END as VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源6 EC +CREATE OR REPLACE TEMPORARY VIEW VIEW_EC_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + CASE + WHEN MAX(VBP_DESC) = 'VBP-IN' then 'VBP-IN' + WHEN MAX(VBP_DESC) LIKE '%VBP%' THEN 'VBP-OUT' + WHEN MAX(VBP_DESC) IS NOT NULL THEN 'Non VBP' + ELSE NULL END AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_EC_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源7 AIA +CREATE OR REPLACE TEMPORARY VIEW VIEW_AIA_PACK_INFO +AS +SELECT + CASE + WHEN PACK_CODE like '%OTHERS%' + OR length(PACK_CODE) >= 12 + OR (not PACK_CODE REGEXP '^[0-9]') THEN PACK_CODE + ELSE right(concat('000000000000', PACK_CODE), 12) END AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + NULL AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END AS GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_AIA_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 数据源8 XIEHE +CREATE OR REPLACE TEMPORARY VIEW VIEW_XIEHE_PACK_INFO +AS +SELECT + PACK_CODE AS PACK_CODE, + MAX(PACK_DESC) AS PACK_DESC, + MAX(PACK_LCH) AS PACK_LCH, + MAX(PROD_CODE) AS PROD_CODE, + MAX(PROD_DESC) AS PROD_DESC, + MAX(PROD_DESC_C) AS PROD_DESC_C, + MAX(CMPS_CODE) AS CMPS_CODE, + MAX(CMPS_DESC) AS CMPS_DESC, + MAX(CMPS_DESC_C) AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + MAX(STGH_DESC) AS STGH_DESC, + MAX(BIO_DESC) AS BIO_DESC, + MAX(ETH_OTC_DESC) AS ETH_OTC_DESC, + MAX(NRDL_DESC) AS NRDL_DESC, + MAX(NRDL_ENTRY_DATE) AS NRDL_ENTRY_DATE, + MAX(EDL_DESC) AS EDL_DESC, + MAX(TCM_DESC) AS TCM_DESC, + MAX(PAED_DESC) AS PAED_DESC, + MAX(GQCE_DESC) AS GQCE_DESC, + MAX(MANU_CODE) AS MANU_CODE, + MAX(MANU_DESC) AS MANU_DESC, + MAX(MANU_DESC_C) as MANU_DESC_C, + MAX(MNFL_CODE) AS MNFL_CODE, + MAX(ATC1_CODE) AS ATC1_CODE, + MAX(ATC1_DESC) AS ATC1_DESC, + MAX(ATC1_DESC_C) AS ATC1_DESC_C, + MAX(ATC2_CODE) AS ATC2_CODE, + MAX(ATC2_DESC) AS ATC2_DESC, + MAX(ATC2_DESC_C) AS ATC2_DESC_C, + MAX(ATC3_CODE) AS ATC3_CODE, + MAX(ATC3_DESC) AS ATC3_DESC, + MAX(ATC3_DESC_C) AS ATC3_DESC_C, + MAX(ATC4_CODE) AS ATC4_CODE, + MAX(ATC4_DESC) AS ATC4_DESC, + MAX(ATC4_DESC_C) AS ATC4_DESC_C, + MAX(APP1_CODE) AS APP1_CODE, + MAX(APP1_DESC) AS APP1_DESC, + MAX(APP1_DESC_C) AS APP1_DESC_C, + MAX(APP2_CODE) AS APP2_CODE, + MAX(APP2_DESC) AS APP2_DESC, + MAX(APP2_DESC_C) AS APP2_DESC_C, + MAX(APP3_CODE) AS APP3_CODE, + MAX(APP3_DESC) AS APP3_DESC, + MAX(APP3_DESC_C) AS APP3_DESC_C, + MAX(GENE_ORIG_DESC) AS GENE_ORIG_DESC, + NULL AS VBP_DESC, + MAX(CORP_CODE) AS CORP_CODE, + CASE + WHEN MAX(GENE_ORIG_DESC) = 'ORIG' THEN 1 + WHEN MAX(GENE_ORIG_DESC) = 'Branded Gen' THEN 2 + WHEN MAX(GENE_ORIG_DESC) = 'Unbranded Gen' THEN 3 + WHEN MAX(GENE_ORIG_DESC) = 'TCM' THEN 4 + ELSE 5 END as GEN_RN, + MAX(CORP_DESC) AS CORP_DESC, + MAX(CORP_DESC_C) AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND +FROM dm.DM_TD_EXT_XIEHE_PACK_PROPERTY +GROUP BY PACK_CODE + +-- COMMAND ---------- + +-- 获取所有的PACK_CODE,以CHPA为主,其他数据源不存在与CHPA一样的,再取。 +CREATE OR REPLACE TEMPORARY VIEW VIEW_PACK_INFO_TEMP1 +AS +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_CHPA_PACK_INFO AS T1 +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_COUNTY_PACK_INFO AS T2 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_THC_PACK_INFO AS T3 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_CHC_PACK_INFO AS T4 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_RETAIL_PACK_INFO AS T5 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_EC_PACK_INFO AS T6 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_AIA_PACK_INFO AS T7 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM VIEW_XIEHE_PACK_INFO AS T8 +WHERE PACK_CODE not in (select PACK_CODE from VIEW_CHPA_PACK_INFO) + +-- COMMAND ---------- + +-- 4. 如果PACK_CODE在2~8多个表都有,任选一个(row_number()取第一个) +CREATE OR REPLACE TEMPORARY VIEW VIEW_PACK_INFO_TEMP2 +AS +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND +FROM ( + SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND, + row_number() over (partition by PACK_CODE order by PACK_DESC) as rn + FROM VIEW_PACK_INFO_TEMP1 +) t +where rn = 1 + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW VIEW_PACK_INFO_TEMP3 +AS +SELECT + T1.PACK_CODE, + T1.PACK_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.PROD_DESC, + T1.PROD_DESC_C, + T1.CMPS_CODE, + T1.CMPS_DESC, + CASE + WHEN UPPER(T1.CMPS_DESC) = 'TRADITIONAL CHINESE MEDICINE' THEN '传统中药' + ELSE T1.CMPS_DESC_C END AS CMPS_DESC_C, + NVL(T2.VBP_BATCH, '') VBP_BATCH, + NVL(T2.VBP_IMPLEMENTING_TIME, '') VBP_IMPLEMENTING_TIME, + T1.STGH_DESC, + T1.BIO_DESC, + T1.ETH_OTC_DESC, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MANU_DESC_C, + T1.MNFL_CODE, + T1.ATC1_CODE, + T1.ATC1_DESC, + T1.ATC1_DESC_C, + T1.ATC2_CODE, + T1.ATC2_DESC, + T1.ATC2_DESC_C, + T1.ATC3_CODE, + T1.ATC3_DESC, + T1.ATC3_DESC_C, + T1.ATC4_CODE, + T1.ATC4_DESC, + T1.ATC4_DESC_C, + T1.APP1_CODE, + T1.APP1_DESC, + T1.APP1_DESC_C, + T1.APP2_CODE, + T1.APP2_DESC, + T1.APP2_DESC_C, + T1.APP3_CODE, + T1.APP3_DESC, + T1.APP3_DESC_C, + T1.GENE_ORIG_DESC, + NVL(T1.VBP_DESC, 'Non VBP') AS VBP_DESC, + T1.CORP_CODE, + T1.GEN_RN, + T1.CORP_DESC, + T1.CORP_DESC_C, + T1.PACK_RN, + T1.PROD_RN, + T1.CMPS_RN, + T1.DATA_SOURCE, + T1.ATC, + T1.NEW_CODE, + T1.COMMON_NAME, + T1.PRODUCT_NAME, + T1.MANU_DES_XIEHE, + T1.PACK_DES_XIEHE, + T1.DRUG_DELIVERY_ROUTE, + T1.NFC, + T1.CORP_TYPE, + T1.LAUNCHTIME, + T1.VBP_BRAND +FROM VIEW_PACK_INFO_TEMP2 AS T1 +LEFT JOIN dwd.dwd_gnd_ims_vbp_information AS T2 ON T1.PACK_CODE = T2.PACK_CODE + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW FINAL +AS +SELECT + PACK_CODE AS PACK_CODE, + NULL AS PACK_DESC, + NULL AS PACK_LCH, + NULL AS PROD_CODE, + NULL AS PROD_DESC, + NULL AS PROD_DESC_C, + NULL AS CMPS_CODE, + NULL AS CMPS_DESC, + NULL AS CMPS_DESC_C, + NULL AS VBP_BATCH, + NULL AS VBP_IMPLEMENTING_TIME, + NULL AS STGH_DESC, + NULL AS BIO_DESC, + NULL AS ETH_OTC_DESC, + NULL AS NRDL_DESC, + NULL AS NRDL_ENTRY_DATE, + NULL AS EDL_DESC, + NULL AS TCM_DESC, + NULL AS PAED_DESC, + NULL AS GQCE_DESC, + NULL AS MANU_CODE, + NULL AS MANU_DESC, + NULL AS MANU_DESC_C, + NULL AS MNFL_CODE, + NULL AS ATC1_CODE, + NULL AS ATC1_DESC, + NULL AS ATC1_DESC_C, + NULL AS ATC2_CODE, + NULL AS ATC2_DESC, + NULL AS ATC2_DESC_C, + NULL AS ATC3_CODE, + NULL AS ATC3_DESC, + NULL AS ATC3_DESC_C, + NULL AS ATC4_CODE, + NULL AS ATC4_DESC, + NULL AS ATC4_DESC_C, + NULL AS APP1_CODE, + NULL AS APP1_DESC, + NULL AS APP1_DESC_C, + NULL AS APP2_CODE, + NULL AS APP2_DESC, + NULL AS APP2_DESC_C, + NULL AS APP3_CODE, + NULL AS APP3_DESC, + NULL AS APP3_DESC_C, + NULL AS GENE_ORIG_DESC, + NULL AS VBP_DESC, + NULL AS CORP_CODE, + NULL AS GEN_RN, + NULL AS CORP_DESC, + NULL AS CORP_DESC_C, + NULL AS PACK_RN, + NULL AS PROD_RN, + NULL AS CMPS_RN, + NULL AS DATA_SOURCE, + NULL AS ATC, + NULL AS NEW_CODE, + NULL AS COMMON_NAME, + NULL AS PRODUCT_NAME, + NULL AS MANU_DES_XIEHE, + NULL AS PACK_DES_XIEHE, + NULL AS DRUG_DELIVERY_ROUTE, + NULL AS NFC, + NULL AS CORP_TYPE, + NULL AS LAUNCHTIME, + NULL AS VBP_BRAND, + 1 AS REPLENISH_FALG +FROM +( + SELECT + PACK_CODE + FROM DM.DM_TF_EXT_UNIONALL_SALES + GROUP BY + PACK_CODE +) AS T1 +WHERE PACK_CODE NOT IN (SELECT PACK_CODE FROM VIEW_PACK_INFO_TEMP3) +UNION ALL +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + PROD_DESC, + PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CORP_DESC, + CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND, + 0 AS REPLENISH_FALG +FROM VIEW_PACK_INFO_TEMP3 + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_UNIONALL_PACKINFO +SELECT + PACK_CODE, + PACK_DESC, + PACK_LCH, + PROD_CODE, + CASE + WHEN PROD_DESC IS NULL THEN 'OTHERS' + ELSE PROD_DESC END AS PROD_DESC, + CASE + WHEN PROD_DESC_C IS NULL THEN 'OTHERS' + ELSE PROD_DESC_C END AS PROD_DESC_C, + CMPS_CODE, + CMPS_DESC, + CMPS_DESC_C, + VBP_BATCH, + VBP_IMPLEMENTING_TIME, + STGH_DESC, + BIO_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + MANU_CODE, + MANU_DESC, + MANU_DESC_C, + MNFL_CODE, + ATC1_CODE, + ATC1_DESC, + ATC1_DESC_C, + ATC2_CODE, + ATC2_DESC, + ATC2_DESC_C, + ATC3_CODE, + ATC3_DESC, + ATC3_DESC_C, + ATC4_CODE, + ATC4_DESC, + ATC4_DESC_C, + APP1_CODE, + APP1_DESC, + APP1_DESC_C, + APP2_CODE, + APP2_DESC, + APP2_DESC_C, + APP3_CODE, + APP3_DESC, + APP3_DESC_C, + GENE_ORIG_DESC, + VBP_DESC, + CORP_CODE, + GEN_RN, + CASE + WHEN CORP_DESC IS NULL THEN 'OTHERS' + ELSE CORP_DESC END AS CORP_DESC, + CASE + WHEN CORP_DESC_C IS NULL THEN 'OTHERS' + ELSE CORP_DESC_C END AS CORP_DESC_C, + PACK_RN, + PROD_RN, + CMPS_RN, + DATA_SOURCE, + ATC, + NEW_CODE, + COMMON_NAME, + PRODUCT_NAME, + MANU_DES_XIEHE, + PACK_DES_XIEHE, + DRUG_DELIVERY_ROUTE, + NFC, + CORP_TYPE, + LAUNCHTIME, + VBP_BRAND, + REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM FINAL \ No newline at end of file diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql b/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql new file mode 100644 index 0000000..43b2e3d --- /dev/null +++ b/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES.sql @@ -0,0 +1,524 @@ +-- Databricks notebook source +-- DBTITLE 1,分区优化 +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_MARKET_SALES ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_COD STRING, +-- CORP_COD STRING, +-- AUDIT_COD STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- DATA_SOURCE STRING, +-- PACK_FLAG STRING, +-- PROD_FLAG STRING, +-- DTP_FLAG STRING, +-- CMPS_FLAG STRING, +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- INST_CODE STRING COMMENT '内部机构编码', +-- AIA_HP_FLAG STRING, +-- DEPT_NAME STRING COMMENT '科室名称', +-- H_LEVEL STRING, +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_TYPE STRING COMMENT '处方来源', +-- PRESCRIPTION DECIMAL(35,10), +-- PRESCRIPTION_LY DECIMAL(35,10), +-- VA STRING, +-- UT STRING, +-- CU STRING, +-- PT STRING, +-- SALES_UNIT_CAL DECIMAL(35,6), +-- SALES_UNIT_CAL_LY DECIMAL(35,6), +-- SALES_VALUE_CAL DECIMAL(35,6), +-- SALES_VALUE_CAL_LY DECIMAL(35,6), +-- CONUTING_UNIT DECIMAL(35,6), +-- CONUTING_UNIT_LY DECIMAL(35,6), +-- PDOT DECIMAL(35,6), +-- PDOT_LY DECIMAL(35,6), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- PARTITIONED BY (DATA_SOURCE) +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; + + +-- COMMAND ---------- + +-- DBTITLE 1,性能优化 +-- -- 按最常用的过滤和 JOIN 字段做 Z-Order 聚簇 +-- OPTIMIZE DM.DM_TF_EXT_UNIONALL_SALES +-- ZORDER BY (DATA_SOURCE, PACK_CODE, YYYYMM); + +-- -- 收集统计信息,帮助优化器选择更好的执行计划 +-- ANALYZE TABLE DM.DM_TF_EXT_UNIONALL_SALES COMPUTE STATISTICS FOR ALL COLUMNS; +-- ANALYZE TABLE DM.dm_td_ext_unionall_market_pack_mapping COMPUTE STATISTICS FOR ALL COLUMNS; + +-- COMMAND ---------- + +-- DBTITLE 1,测试跑数据 +-- delete from DM.DM_TF_EXT_UNIONALL_MARKET_SALES where DATA_SOURCE IN ('Retail(Quarterly)', 'EC(Monthly)') + +-- COMMAND ---------- + +-- DBTITLE 1,测试跑数据 +-- INSERT INTO TABLE +-- DM.DM_TF_EXT_UNIONALL_MARKET_SALES +-- WITH +-- t1_filtered AS ( +-- SELECT +-- * +-- FROM +-- DM.DM_TF_EXT_UNIONALL_SALES +-- WHERE +-- DATA_SOURCE IN ( +-- -- 'IQVIA-CHPA(Monthly)', +-- -- 'AIA(Monthly)' +-- -- 'CHC(Quarterly)', +-- -- 'IQVIA-COUNTY(Quarterly)', +-- -- 'THC(Quarterly)' +-- 'Retail(Quarterly)', +-- -- 'DTP(Quarterly)', +-- 'EC(Monthly)' +-- -- 'XH Data(Quarterly)' +-- ) -- 谓词下推,最先过滤 +-- ), +-- mapping_cleaned AS ( +-- SELECT +-- * +-- FROM +-- ( +-- SELECT +-- PACK_CODE, +-- DATASOURCE, +-- MARKET, +-- KEY_COMPETITOR, +-- CLASS, +-- MARKET_RATIO, +-- Value_brand_Ratio, +-- Unit_brand_Ratio, +-- CountingUnit_brand_Ratio, +-- PDOT_brand_Ratio, +-- GREATEST ( +-- starttime, +-- Value_brand_Ratio_start, +-- Unit_brand_start, +-- CountingUnit_brand_start, +-- PDOT_brand_start +-- ) AS eff_start, +-- LEAST ( +-- endtime, +-- Value_brand_Ratio_end, +-- Unit_brand_end, +-- CountingUnit_brand_end, +-- PDOT_brand_end +-- ) AS eff_end +-- FROM +-- DM.dm_td_ext_unionall_market_pack_mapping +-- ) tmp +-- WHERE +-- eff_start <= eff_end -- 在外层子查询中过滤 +-- ), +-- joined AS ( +-- SELECT +-- /*+ BROADCAST(t2, t3) */ +-- t1.*, +-- -- 当年 ratio +-- t2.MARKET, +-- t2.KEY_COMPETITOR, +-- t2.CLASS, +-- t2.MARKET_RATIO AS cy_market_ratio, +-- t2.Value_brand_Ratio AS cy_value_ratio, +-- t2.Unit_brand_Ratio AS cy_unit_ratio, +-- t2.CountingUnit_brand_Ratio AS cy_cu_ratio, +-- t2.PDOT_brand_Ratio AS cy_pdot_ratio, +-- -- 去年 ratio +-- t3.MARKET_RATIO AS ly_market_ratio, +-- t3.Value_brand_Ratio AS ly_value_ratio, +-- t3.Unit_brand_Ratio AS ly_unit_ratio, +-- t3.CountingUnit_brand_Ratio AS ly_cu_ratio, +-- t3.PDOT_brand_Ratio AS ly_pdot_ratio +-- FROM +-- t1_filtered t1 +-- LEFT JOIN mapping_cleaned t2 ON t1.PACK_CODE = t2.PACK_CODE +-- AND t1.DATA_SOURCE = t2.DATASOURCE +-- AND t1.YYYYMM >= t2.eff_start +-- AND t1.YYYYMM <= t2.eff_end +-- LEFT JOIN mapping_cleaned t3 ON t1.PACK_CODE = t3.PACK_CODE +-- AND t1.DATA_SOURCE = t3.DATASOURCE +-- AND (t1.YYYYMM - 100) >= t3.eff_start +-- AND (t1.YYYYMM - 100) <= t3.eff_end +-- AND t2.MARKET = t3.MARKET -- 保持原逻辑 +-- ) +-- SELECT +-- NVL(MARKET, 'ALL Market') AS MARKET, +-- NVL(KEY_COMPETITOR, 'OTHERS') AS KEY_COMPETITOR, +-- CASE +-- WHEN trim(lower(CLASS)) = 'others' THEN 'OTHERS' +-- WHEN CLASS IS NULL THEN 'OTHERS' +-- ELSE CLASS +-- END AS CLASS, +-- YYYYMM, +-- PACK_CODE, +-- CORP_CODE, +-- AUDIT_CODE, +-- PLATFORM_TYPE, +-- STORE_NAME, +-- STORE_TYPE, +-- REGION_TYPE, +-- DATA_SOURCE, +-- PACK_FLAG, +-- PROD_FLAG, +-- DTP_FLAG, +-- CMPS_FLAG, +-- NEW_CODE, +-- INST_CODE, +-- NULL AS AIA_HP_FLAG, +-- DEPT_NAME, +-- H_LEVEL, +-- REIMBURSE, +-- REIMBURSE_TYPE, +-- PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE, +-- PRESCRIPTION, +-- PRESCRIPTION_LY, +-- -- 预计算公用因子,避免重复计算 +-- NVL(NVL(cy_market_ratio, 1) * cy_value_ratio, 1) AS VA, +-- NVL(NVL(cy_market_ratio, 1) * cy_unit_ratio, 1) AS UT, +-- NVL(NVL(cy_market_ratio, 1) * cy_cu_ratio, 1) AS CU, +-- NVL(NVL(cy_market_ratio, 1) * cy_pdot_ratio, 1) AS PT, +-- CAST( +-- SALES_UNIT_CAL * NVL(cy_unit_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS SALES_UNIT_CAL, +-- CAST( +-- SALES_UNIT_CAL_LY * NVL(ly_unit_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS SALES_UNIT_CAL_LY, +-- CAST( +-- SALES_VALUE_CAL * NVL(cy_value_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS SALES_VALUE_CAL, +-- CAST( +-- SALES_VALUE_CAL_LY * NVL(ly_value_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS SALES_VALUE_CAL_LY, +-- CAST( +-- CONUTING_UNIT * NVL(cy_cu_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS CONUTING_UNIT, +-- CAST( +-- CONUTING_UNIT_LY * NVL(ly_cu_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS CONUTING_UNIT_LY, +-- CAST( +-- CONUTING_UNIT * NVL(cy_pdot_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS PDOT, +-- CAST( +-- CONUTING_UNIT_LY * NVL(ly_pdot_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) +-- ) AS PDOT_LY, +-- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, +-- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +-- FROM +-- joined; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE + DM.DM_TF_EXT_UNIONALL_MARKET_SALES +WITH + t1_filtered AS ( + SELECT + * + FROM + DM.DM_TF_EXT_UNIONALL_SALES + WHERE + DATA_SOURCE IN ( + 'IQVIA-CHPA(Monthly)', + 'AIA(Monthly)', + 'CHC(Quarterly)', + 'IQVIA-COUNTY(Quarterly)', + 'THC(Quarterly)', + 'Retail(Quarterly)', + 'DTP(Quarterly)', + 'EC(Monthly)', + 'XH Data(Quarterly)' + ) -- 谓词下推,最先过滤 + ), + mapping_cleaned AS ( + SELECT + * + FROM + ( + SELECT + PACK_CODE, + DATASOURCE, + MARKET, + KEY_COMPETITOR, + CLASS, + MARKET_RATIO, + Value_brand_Ratio, + Unit_brand_Ratio, + CountingUnit_brand_Ratio, + PDOT_brand_Ratio, + GREATEST ( + starttime, + Value_brand_Ratio_start, + Unit_brand_start, + CountingUnit_brand_start, + PDOT_brand_start + ) AS eff_start, + LEAST ( + endtime, + Value_brand_Ratio_end, + Unit_brand_end, + CountingUnit_brand_end, + PDOT_brand_end + ) AS eff_end + FROM + DM.dm_td_ext_unionall_market_pack_mapping + ) tmp + WHERE + eff_start <= eff_end -- 在外层子查询中过滤 + ), + joined AS ( + SELECT + /*+ BROADCAST(t2, t3) */ + t1.*, + -- 当年 ratio + t2.MARKET, + t2.KEY_COMPETITOR, + t2.CLASS, + t2.MARKET_RATIO AS cy_market_ratio, + t2.Value_brand_Ratio AS cy_value_ratio, + t2.Unit_brand_Ratio AS cy_unit_ratio, + t2.CountingUnit_brand_Ratio AS cy_cu_ratio, + t2.PDOT_brand_Ratio AS cy_pdot_ratio, + -- 去年 ratio + t3.MARKET_RATIO AS ly_market_ratio, + t3.Value_brand_Ratio AS ly_value_ratio, + t3.Unit_brand_Ratio AS ly_unit_ratio, + t3.CountingUnit_brand_Ratio AS ly_cu_ratio, + t3.PDOT_brand_Ratio AS ly_pdot_ratio + FROM + t1_filtered t1 + LEFT JOIN mapping_cleaned t2 ON t1.PACK_CODE = t2.PACK_CODE + AND t1.DATA_SOURCE = t2.DATASOURCE + AND t1.YYYYMM >= t2.eff_start + AND t1.YYYYMM <= t2.eff_end + LEFT JOIN mapping_cleaned t3 ON t1.PACK_CODE = t3.PACK_CODE + AND t1.DATA_SOURCE = t3.DATASOURCE + AND (t1.YYYYMM - 100) >= t3.eff_start + AND (t1.YYYYMM - 100) <= t3.eff_end + AND t2.MARKET = t3.MARKET -- 保持原逻辑 + ) +SELECT + NVL(MARKET, 'ALL Market') AS MARKET, + NVL(KEY_COMPETITOR, 'OTHERS') AS KEY_COMPETITOR, + CASE + WHEN trim(lower(CLASS)) = 'others' THEN 'OTHERS' + WHEN CLASS IS NULL THEN 'OTHERS' + ELSE CLASS + END AS CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + NULL AS AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + -- 预计算公用因子,避免重复计算 + NVL(NVL(cy_market_ratio, 1) * cy_value_ratio, 1) AS VA, + NVL(NVL(cy_market_ratio, 1) * cy_unit_ratio, 1) AS UT, + NVL(NVL(cy_market_ratio, 1) * cy_cu_ratio, 1) AS CU, + NVL(NVL(cy_market_ratio, 1) * cy_pdot_ratio, 1) AS PT, + CAST( + SALES_UNIT_CAL * NVL(cy_unit_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_UNIT_CAL, + CAST( + SALES_UNIT_CAL_LY * NVL(ly_unit_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_UNIT_CAL_LY, + CAST( + SALES_VALUE_CAL * NVL(cy_value_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_VALUE_CAL, + CAST( + SALES_VALUE_CAL_LY * NVL(ly_value_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_VALUE_CAL_LY, + CAST( + CONUTING_UNIT * NVL(cy_cu_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS CONUTING_UNIT, + CAST( + CONUTING_UNIT_LY * NVL(ly_cu_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS CONUTING_UNIT_LY, + CAST( + CONUTING_UNIT * NVL(cy_pdot_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS PDOT, + CAST( + CONUTING_UNIT_LY * NVL(ly_pdot_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + joined; + +-- COMMAND ---------- + +-- DBTITLE 1,maket_sales_cht +INSERT OVERWRITE TABLE + DM.DM_TF_EXT_THC_MARKET_SALES_CHT +WITH + t1_filtered AS ( + SELECT + * + FROM + DM.DM_TF_EXT_THC_SALES + WHERE DATA_SOURCE = 'THC(Quarterly)' + and AUDIT_CODE <> 'CHT' + -- 谓词下推,最先过滤 + ), + mapping_cleaned AS ( + SELECT + * + FROM + ( + SELECT + PACK_CODE, + 'THC(Quarterly)' as DATASOURCE, + MARKET, + KEY_COMPETITOR, + CLASS, + MARKET_RATIO, + Value_brand_Ratio, + Unit_brand_Ratio, + CountingUnit_brand_Ratio, + PDOT_brand_Ratio, + GREATEST ( + starttime, + Value_brand_Ratio_start, + Unit_brand_start, + CountingUnit_brand_start, + PDOT_brand_start + ) AS eff_start, + LEAST ( + endtime, + Value_brand_Ratio_end, + Unit_brand_end, + CountingUnit_brand_end, + PDOT_brand_end + ) AS eff_end + FROM + DM.dm_td_ext_THC_market_pack_mapping + ) tmp + WHERE + eff_start <= eff_end -- 在外层子查询中过滤 + ), + joined AS ( + SELECT + /*+ BROADCAST(t2, t3) */ + t1.*, + -- 当年 ratio + t2.MARKET, + t2.KEY_COMPETITOR, + t2.CLASS, + t2.MARKET_RATIO AS cy_market_ratio, + t2.Value_brand_Ratio AS cy_value_ratio, + t2.Unit_brand_Ratio AS cy_unit_ratio, + t2.CountingUnit_brand_Ratio AS cy_cu_ratio, + t2.PDOT_brand_Ratio AS cy_pdot_ratio, + -- 去年 ratio + t3.MARKET_RATIO AS ly_market_ratio, + t3.Value_brand_Ratio AS ly_value_ratio, + t3.Unit_brand_Ratio AS ly_unit_ratio, + t3.CountingUnit_brand_Ratio AS ly_cu_ratio, + t3.PDOT_brand_Ratio AS ly_pdot_ratio + FROM + t1_filtered t1 + LEFT JOIN mapping_cleaned t2 ON t1.PACK_CODE = t2.PACK_CODE + AND t1.DATA_SOURCE = t2.DATASOURCE + AND t1.YYYYMM >= t2.eff_start + AND t1.YYYYMM <= t2.eff_end + LEFT JOIN mapping_cleaned t3 ON t1.PACK_CODE = t3.PACK_CODE + AND t1.DATA_SOURCE = t3.DATASOURCE + AND (t1.YYYYMM - 100) >= t3.eff_start + AND (t1.YYYYMM - 100) <= t3.eff_end + AND t2.MARKET = t3.MARKET -- 保持原逻辑 + ) +SELECT + NVL(MARKET, 'ALL Market') AS MARKET, + NVL(KEY_COMPETITOR, 'OTHERS') AS KEY_COMPETITOR, + CASE + WHEN trim(lower(CLASS)) = 'others' THEN 'OTHERS' + WHEN CLASS IS NULL THEN 'OTHERS' + ELSE CLASS + END AS CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + NULL AS AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + -- 预计算公用因子,避免重复计算 + NVL(NVL(cy_market_ratio, 1) * cy_value_ratio, 1) AS VA, + NVL(NVL(cy_market_ratio, 1) * cy_unit_ratio, 1) AS UT, + NVL(NVL(cy_market_ratio, 1) * cy_cu_ratio, 1) AS CU, + NVL(NVL(cy_market_ratio, 1) * cy_pdot_ratio, 1) AS PT, + CAST( + SALES_UNIT_CAL * NVL(cy_unit_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_UNIT_CAL, + CAST( + SALES_UNIT_CAL_LY * NVL(ly_unit_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_UNIT_CAL_LY, + CAST( + SALES_VALUE_CAL * NVL(cy_value_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_VALUE_CAL, + CAST( + SALES_VALUE_CAL_LY * NVL(ly_value_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS SALES_VALUE_CAL_LY, + CAST( + CONUTING_UNIT * NVL(cy_cu_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS CONUTING_UNIT, + CAST( + CONUTING_UNIT_LY * NVL(ly_cu_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS CONUTING_UNIT_LY, + CAST( + CONUTING_UNIT * NVL(cy_pdot_ratio, 1) * NVL(cy_market_ratio, 1) AS DECIMAL(35, 6) + ) AS PDOT, + CAST( + CONUTING_UNIT_LY * NVL(ly_pdot_ratio, 1) * NVL(ly_market_ratio, 1) AS DECIMAL(35, 6) + ) AS PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT +FROM + joined; \ No newline at end of file diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql b/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql new file mode 100644 index 0000000..73b3689 --- /dev/null +++ b/UNIONALL/DM_TF_EXT_UNIONALL_MARKET_SALES_v1.0.sql @@ -0,0 +1,1012 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_MARKET_SALES ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_COD STRING, +-- CORP_COD STRING, +-- AUDIT_COD STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- DATA_SOURCE STRING, +-- PACK_FLAG STRING, +-- PROD_FLAG STRING, +-- DTP_FLAG STRING, +-- CMPS_FLAG STRING, +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- INST_CODE STRING COMMENT '内部机构编码', +-- AIA_HP_FLAG STRING, +-- DEPT_NAME STRING COMMENT '科室名称', +-- H_LEVEL STRING, +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_TYPE STRING COMMENT '处方来源', +-- PRESCRIPTION DECIMAL(35,10), +-- PRESCRIPTION_LY DECIMAL(35,10), +-- VA STRING, +-- UT STRING, +-- CU STRING, +-- PT STRING, +-- SALES_UNIT_CAL DECIMAL(35,6), +-- SALES_UNIT_CAL_LY DECIMAL(35,6), +-- SALES_VALUE_CAL DECIMAL(35,6), +-- SALES_VALUE_CAL_LY DECIMAL(35,6), +-- CONUTING_UNIT DECIMAL(35,6), +-- CONUTING_UNIT_LY DECIMAL(35,6), +-- PDOT DECIMAL(35,6), +-- PDOT_LY DECIMAL(35,6), +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,CHPA +CREATE OR REPLACE TEMPORARY VIEW CHPA +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' + +-- COMMAND ---------- + +-- DBTITLE 1,AIA +CREATE OR REPLACE TEMPORARY VIEW AIA +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'AIA(Monthly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,CHC +CREATE OR REPLACE TEMPORARY VIEW CHC +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'CHC(Quarterly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,COUNTY +CREATE OR REPLACE TEMPORARY VIEW COUNTY +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,THC +CREATE OR REPLACE TEMPORARY VIEW THC +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'THC(Quarterly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,RETAIL +CREATE OR REPLACE TEMPORARY VIEW RETAIL +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'Retail(Quarterly)' and t1.DTP_FLAG<>1 +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,RETAIL_DTP +CREATE OR REPLACE TEMPORARY VIEW RETAIL_DTP +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'DTP(Quarterly)' and t1.DTP_FLAG=1 +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,EC +CREATE OR REPLACE TEMPORARY VIEW EC +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'EC(Monthly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +-- DBTITLE 1,XIEHE +CREATE OR REPLACE TEMPORARY VIEW XIEHE +AS +SELECT +nvl(t2.market,'ALL Market') MARKET +,nvl(t2.KEY_COMPETITOR,'OTHERS') as KEY_COMPETITOR +,nvl(t2.CLASS,'Others') as CLASS +,t1.YYYYMM +,t1.PACK_CODE +,t1.CORP_CODE +,t1.AUDIT_CODE +,t1.PLATFORM_TYPE +,t1.STORE_NAME +,t1.STORE_TYPE +,t1.REGION_TYPE +,t1.DATA_SOURCE +,t1.PACK_FLAG +,t1.PROD_FLAG +,t1.DTP_FLAG +,t1.CMPS_FLAG +,t1.NEW_CODE +,t1.INST_CODE +,NULL AS AIA_HP_FLAG +,t1.DEPT_NAME +,t1.H_LEVEL +,t1.REIMBURSE +,t1.REIMBURSE_TYPE +,PRESCRIPTION_SOURCE AS PRESCRIPTION_TYPE +,t1.PRESCRIPTION +,t1.PRESCRIPTION_LY +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Value_brand_Ratio,1) as VA +,nvl(nvl(t2.MARKET_RATIO,1)*t2.Unit_brand_Ratio,1) AS UT +,nvl(nvl(t2.MARKET_RATIO,1)*t2.CountingUnit_brand_Ratio,1) AS CU +,nvl(nvl(t2.MARKET_RATIO,1)*t2.PDOT_brand_Ratio,1) AS PT +,cast(t1.SALES_UNIT_CAL * nvl(t2.Unit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL +,cast(t1.SALES_UNIT_CAL_LY * nvl(t3.Unit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_UNIT_CAL_LY +,cast(t1.SALES_VALUE_CAL * nvl(t2.Value_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL +,cast(t1.SALES_VALUE_CAL_LY * nvl(t3.Value_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS SALES_VALUE_CAL_LY +,cast(t1.CONUTING_UNIT * nvl(t2.CountingUnit_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.CountingUnit_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS CONUTING_UNIT_LY +,cast(t1.CONUTING_UNIT * nvl(t2.PDOT_brand_Ratio,1) *nvl(t2.MARKET_RATIO,1) as decimal(35,6)) AS PDOT +,cast(t1.CONUTING_UNIT_LY * nvl(t3.PDOT_brand_Ratio,1) *nvl(t3.MARKET_RATIO,1) as decimal(35,6)) AS PDOT_LY +FROM DM.DM_TF_EXT_UNIONALL_SALES t1 +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t2 +on t1.PACK_CODE = t2.PACK_CODE and t1.DATA_SOURCE = t2.DATASOURCE +and t1.YYYYMM >=t2.starttime and t1.YYYYMM <=t2.endtime +and t1.YYYYMM >= t2.Value_brand_Ratio_start and t1.YYYYMM <=t2.Value_brand_Ratio_end +and t1.YYYYMM >= t2.Unit_brand_start and t1.YYYYMM <=t2.Unit_brand_end +and t1.YYYYMM >= t2.CountingUnit_brand_start and t1.YYYYMM <=t2.CountingUnit_brand_end +and t1.YYYYMM >= t2.PDOT_brand_start and t1.YYYYMM <=t2.PDOT_brand_end +LEFT JOIN DM.dm_td_ext_unionall_market_pack_mapping t3 +on t1.PACK_CODE = t3.PACK_CODE and t1.DATA_SOURCE = t3.DATASOURCE +and (t1.YYYYMM-100) >=t3.starttime and (t1.YYYYMM-100) <=t3.endtime +and (t1.YYYYMM-100) >= t3.Value_brand_Ratio_start and (t1.YYYYMM-100) <=t3.Value_brand_Ratio_end +and (t1.YYYYMM-100) >= t3.Unit_brand_start and (t1.YYYYMM-100) <=t3.Unit_brand_end +and (t1.YYYYMM-100) >= t3.CountingUnit_brand_start and (t1.YYYYMM-100) <=t3.CountingUnit_brand_end +and (t1.YYYYMM-100) >= t3.PDOT_brand_start and (t1.YYYYMM-100) <=t3.PDOT_brand_end +and t2.market = t3.MARKET +where t1.DATA_SOURCE = 'XH Data(Quarterly)' +-- and YYYYMM >=202501 + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_UNIONALL_MARKET_SALES +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + CHPA +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + AIA +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + CHC +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + COUNTY +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + THC +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + RETAIL +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + RETAIL_DTP +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + EC +UNION ALL +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + NEW_CODE, + INST_CODE, + AIA_HP_FLAG, + DEPT_NAME, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + PRESCRIPTION, + PRESCRIPTION_LY, + VA, + UT, + CU, + PT, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PDOT, + PDOT_LY, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + XIEHE \ No newline at end of file diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql b/UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql new file mode 100644 index 0000000..7e02e1e --- /dev/null +++ b/UNIONALL/DM_TF_EXT_UNIONALL_SALES.sql @@ -0,0 +1,349 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_UNIONALL_SALES +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_AIA_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_CHC_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_CHPA_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_COUNTY_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_EC_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_RETAIL_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_RETAIL_DTP_SALES +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_THC_SALES +WHERE + AUDIT_CODE = 'CHT'--只放全国数据 +UNION ALL +SELECT + YYYYMM, + PACK_CODE, + CORP_CODE, + AUDIT_CODE, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + DATA_SOURCE, + INST_CODE, + CMPS_FLAG, + DEPT_NAME, + PRESCRIPTION, + PRESCRIPTION_LY, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TF_EXT_XIEHE_SALES +; \ No newline at end of file diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql new file mode 100644 index 0000000..d060309 --- /dev/null +++ b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING.sql @@ -0,0 +1,458 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING +-- ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_COD STRING, +-- CORP_COD STRING, +-- AUDIT_COD STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- DATA_SOURCE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- CMPS_FLAG INT, +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- INST_CODE STRING COMMENT '内部机构编码', +-- AIA_HP_FLAG INT, +-- DEPT_NAME STRING COMMENT '科室名称', +-- H_LEVEL INT, +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_TYPE STRING COMMENT '处方来源', +-- VA decimal(35,10), +-- UT decimal(35,10), +-- CU decimal(35,10), +-- PT decimal(35,10), +-- SALES_UNIT_CAL decimal(35,10), +-- SALES_UNIT_CAL_LY decimal(35,10), +-- SALES_VALUE_CAL decimal(35,10), +-- SALES_VALUE_CAL_LY decimal(35,10), +-- CONUTING_UNIT decimal(35,10), +-- CONUTING_UNIT_LY decimal(35,10), +-- PDOT decimal(35,10), +-- PDOT_LY decimal(35,10), +-- PRESCRIPTION INT, +-- PRESCRIPTION_LY INT, +-- AIA_REMOVE INT, +-- MERGEDATA_FLAG STRING, +-- MERGEDATA_FLAG_MKT STRING, +-- MERGEDATA_FLAG_CHPA_DTP INT, +-- MERGEDATA_FLAG_DTP_NOROC INT, +-- MERGED_DATA_DTP_OTHERS INT, +-- TARGET_INS STRING +-- -- , +-- -- ETL_INSERT_DT TIMESTAMP, +-- -- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW ALL_EXTERNAL_SALES AS +--DTP +SELECT + T0.MARKET, + T0.KEY_COMPETITOR, + T0.CLASS, + T0.YYYYMM, + T0.PACK_COD, + T0.CORP_COD, + T0.AUDIT_COD, + T0.PLATFORM_TYPE, + T0.STORE_NAME, + T0.STORE_TYPE, + T0.REGION_TYPE, + T0.DATA_SOURCE, + T0.PACK_FLAG, + T0.PROD_FLAG, + T0.DTP_FLAG, + T0.CMPS_FLAG, + T0.NEW_CODE, + T0.INST_CODE, + T0.AIA_HP_FLAG, + T0.DEPT_NAME, + T0.H_LEVEL, + T0.REIMBURSE, + T0.REIMBURSE_TYPE, + T0.PRESCRIPTION_TYPE, + T0.VA, + T0.UT, + T0.CU, + T0.PT, + T0.SALES_UNIT_CAL, + T0.SALES_UNIT_CAL_LY, + T0.SALES_VALUE_CAL, + T0.SALES_VALUE_CAL_LY, + T0.CONUTING_UNIT, + T0.CONUTING_UNIT_LY, + T0.PDOT, + T0.PDOT_LY, + T0.PRESCRIPTION, + T0.PRESCRIPTION_LY, + 1 MERGED_DATA_DTP_OTHERS +FROM + DM.DM_TF_EXT_UNIONALL_MARKET_SALES AS T0 +WHERE + T0.DATA_SOURCE = 'DTP(Quarterly)' + +--Retail +UNION ALL +SELECT + T0.MARKET, + T0.KEY_COMPETITOR, + T0.CLASS, + T0.YYYYMM, + T0.PACK_COD, + T0.CORP_COD, + T0.AUDIT_COD, + T0.PLATFORM_TYPE, + T0.STORE_NAME, + T0.STORE_TYPE, + T0.REGION_TYPE, + T0.DATA_SOURCE, + T0.PACK_FLAG, + T0.PROD_FLAG, + T0.DTP_FLAG, + T0.CMPS_FLAG, + T0.NEW_CODE, + T0.INST_CODE, + T0.AIA_HP_FLAG, + T0.DEPT_NAME, + T0.H_LEVEL, + T0.REIMBURSE, + T0.REIMBURSE_TYPE, + T0.PRESCRIPTION_TYPE, + T0.VA, + T0.UT, + T0.CU, + T0.PT, + T0.SALES_UNIT_CAL, + T0.SALES_UNIT_CAL_LY, + T0.SALES_VALUE_CAL, + T0.SALES_VALUE_CAL_LY, + T0.CONUTING_UNIT, + T0.CONUTING_UNIT_LY, + T0.PDOT, + T0.PDOT_LY, + T0.PRESCRIPTION, + T0.PRESCRIPTION_LY, + 1 MERGED_DATA_DTP_OTHERS +FROM + DM.DM_TF_EXT_UNIONALL_MARKET_SALES AS T0 + LEFT JOIN ( + SELECT + OTHERS_MONTH + FROM + tmp.tmp_dm_td_ext_retail_niad_month + ) T1 --Retail取非niad先来数据部分 +WHERE + T0.DATA_SOURCE = 'Retail(Quarterly)' + AND SUBSTR(T0.YYYYMM, 5, 2) IN ('03', '06', '09', '12') +--EC +UNION ALL +SELECT + T0.MARKET, + T0.KEY_COMPETITOR, + T0.CLASS, + T0.YYYYMM, + T0.PACK_COD, + T0.CORP_COD, + T0.AUDIT_COD, + T0.PLATFORM_TYPE, + T0.STORE_NAME, + T0.STORE_TYPE, + T0.REGION_TYPE, + T0.DATA_SOURCE, + T0.PACK_FLAG, + T0.PROD_FLAG, + T0.DTP_FLAG, + T0.CMPS_FLAG, + T0.NEW_CODE, + T0.INST_CODE, + T0.AIA_HP_FLAG, + T0.DEPT_NAME, + T0.H_LEVEL, + T0.REIMBURSE, + T0.REIMBURSE_TYPE, + T0.PRESCRIPTION_TYPE, + T0.VA, + T0.UT, + T0.CU, + T0.PT, + T0.SALES_UNIT_CAL, + T0.SALES_UNIT_CAL_LY, + T0.SALES_VALUE_CAL, + T0.SALES_VALUE_CAL_LY, + T0.CONUTING_UNIT, + T0.CONUTING_UNIT_LY, + T0.PDOT, + T0.PDOT_LY, + T0.PRESCRIPTION, + T0.PRESCRIPTION_LY, + 1 MERGED_DATA_DTP_OTHERS +FROM + DM.DM_TF_EXT_UNIONALL_MARKET_SALES AS T0 + LEFT JOIN ( + SELECT + OTHERS_MONTH + FROM + tmp.tmp_dm_td_ext_ec_niad_month + ) T1 --EC取非niad先来数据部分 +WHERE + T0.DATA_SOURCE = 'EC(Monthly)' + AND SUBSTR(T0.YYYYMM, 5, 2) IN ('03', '06', '09', '12') +--OTHERS DATA SOURCE +UNION ALL +SELECT + T0.MARKET, + T0.KEY_COMPETITOR, + T0.CLASS, + T0.YYYYMM, + T0.PACK_COD, + T0.CORP_COD, + T0.AUDIT_COD, + T0.PLATFORM_TYPE, + T0.STORE_NAME, + T0.STORE_TYPE, + T0.REGION_TYPE, + T0.DATA_SOURCE, + T0.PACK_FLAG, + T0.PROD_FLAG, + T0.DTP_FLAG, + T0.CMPS_FLAG, + T0.NEW_CODE, + T0.INST_CODE, + T0.AIA_HP_FLAG, + T0.DEPT_NAME, + T0.H_LEVEL, + T0.REIMBURSE, + T0.REIMBURSE_TYPE, + T0.PRESCRIPTION_TYPE, + T0.VA, + T0.UT, + T0.CU, + T0.PT, + T0.SALES_UNIT_CAL, + T0.SALES_UNIT_CAL_LY, + T0.SALES_VALUE_CAL, + T0.SALES_VALUE_CAL_LY, + T0.CONUTING_UNIT, + T0.CONUTING_UNIT_LY, + T0.PDOT, + T0.PDOT_LY, + T0.PRESCRIPTION, + T0.PRESCRIPTION_LY, + 1 MERGED_DATA_DTP_OTHERS +FROM + DM.DM_TF_EXT_UNIONALL_MARKET_SALES AS T0 +WHERE + T0.DATA_SOURCE NOT IN ('Retail(Quarterly)', 'EC(Monthly)', 'DTP(Quarterly)') + +-- COMMAND ---------- + +create or replace table tmp.tmp_tf_ext_aia_target_inst +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/TMP/tmp_tf_ext_aia_target_inst'; +-- 上面是生产环境location,下面是测试环境location +LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/TMP/tmp_tf_ext_aia_target_inst' +as +select distinct + MARKET, + AUDIT_COD +from + dm.dm_td_ext_aia_org +where + MR_TRTY_CODE <> 'Vacant' +UNION ALL +SELECT distinct + 'ALL Market', + AUDIT_COD +from + dm.dm_td_ext_aia_org +where + MR_TRTY_CODE <> 'Vacant' + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW DM_TF_EXT_UNIONALL_SALES_MAPPING +AS +SELECT + A.MARKET, + A.KEY_COMPETITOR, + A.CLASS, + A.YYYYMM, + A.PACK_COD AS PACK_COD, + A.CORP_COD AS CORP_COD, + A.AUDIT_COD AS AUDIT_COD, + A.PLATFORM_TYPE, + A.STORE_NAME, + A.STORE_TYPE, + A.REGION_TYPE, + A.DATA_SOURCE, + A.PACK_FLAG, + A.PROD_FLAG, + A.DTP_FLAG, + INT(A.CMPS_FLAG) AS CMPS_FLAG, + A.NEW_CODE, + A.INST_CODE, + B.AIA_HP_FLAG, + A.DEPT_NAME, + ROUND(A.H_LEVEL, 0) AS H_LEVEL, + A.REIMBURSE, + A.REIMBURSE_TYPE, + A.PRESCRIPTION_TYPE, + A.VA, + A.UT, + A.CU, + A.PT, + CASE + WHEN A.SALES_UNIT_CAL = 0 THEN NULL + ELSE CAST(A.SALES_UNIT_CAL AS DECIMAL(35, 10)) + END AS SALES_UNIT_CAL, + CASE + WHEN A.SALES_UNIT_CAL_LY = 0 THEN NULL + ELSE CAST(A.SALES_UNIT_CAL_LY AS DECIMAL(35, 10)) + END AS SALES_UNIT_CAL_LY, + CASE + WHEN A.SALES_VALUE_CAL = 0 THEN NULL + ELSE CAST(A.SALES_VALUE_CAL AS DECIMAL(35, 10)) + END AS SALES_VALUE_CAL, + CASE + WHEN A.SALES_VALUE_CAL_LY = 0 THEN NULL + ELSE CAST(A.SALES_VALUE_CAL_LY AS DECIMAL(35, 10)) + END AS SALES_VALUE_CAL_LY, + CASE + WHEN A.CONUTING_UNIT = 0 THEN NULL + ELSE CAST(A.CONUTING_UNIT AS DECIMAL(35, 10)) + END AS CONUTING_UNIT, + CASE + WHEN A.CONUTING_UNIT_LY = 0 THEN NULL + ELSE CAST(A.CONUTING_UNIT_LY AS DECIMAL(35, 10)) + END AS CONUTING_UNIT_LY, + CASE + WHEN A.PDOT = 0 THEN NULL + ELSE CAST(A.PDOT AS DECIMAL(35, 10)) + END AS PDOT, + CASE + WHEN A.PDOT_LY = 0 THEN NULL + ELSE CAST(A.PDOT_LY AS DECIMAL(35, 10)) + END AS PDOT_LY, + CASE + WHEN A.PRESCRIPTION = 0 THEN NULL + ELSE CAST(A.PRESCRIPTION AS DECIMAL(35, 10)) + END AS PRESCRIPTION, + CASE + WHEN A.PRESCRIPTION_LY = 0 THEN NULL + ELSE CAST(A.PRESCRIPTION_LY AS DECIMAL(35, 10)) + END PRESCRIPTION_LY + --AIA remove ins which is wrong +, + IF (D.ins_code IS NULL, 1, 0) AS AIA_REMOVE + --Merged Data part +, + null as MERGEDATA_FLAG +, + CASE + when A.DATA_SOURCE='IQVIA-CHPA(Monthly)' and A.AUDIT_COD = 'ROC' THEN 'CHPA' + WHEN A.DTP_FLAG = '1' THEN 'DTP' + WHEN F.SOURCENAME IS NULL THEN 'Normal' + ELSE F.SOURCENAME + END AS MERGEDATA_FLAG_MKT --mark ins and pack by markettable +, + CASE + WHEN A.DTP_FLAG = '1' THEN 1 + WHEN A.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' THEN 1 + ELSE 0 + END AS MERGEDATA_FLAG_CHPA_DTP --mark chap and dtp data +, + CASE + WHEN A.DTP_FLAG = '1' + AND A.AUDIT_COD = 'ROC' THEN 0 + ELSE 1 + END AS MERGEDATA_FLAG_DTP_NOROC --mark dtp roc with 0 +, + CASE WHEN A.DATA_SOURCE<>'AIA(Monthly)' THEN 'Y' + WHEN G.AUDIT_COD IS NULL THEN 'N' + ELSE 'Y' + END AS TARGET_INS +FROM + ALL_EXTERNAL_SALES AS A + LEFT JOIN DM.DM_AIA_HP_FLAG AS B ON A.INST_CODE = B.INST_CODE + AND A.DATA_SOURCE = B.DATA_SOURCE + LEFT JOIN dm.dm_ext_aia_data_remove_flag D ON A.market = D.market + AND A.audit_cod = D.ins_code + LEFT JOIN dws.dws_td_ext_merge_data_config F ON A.DATA_SOURCE = F.data_source + AND A.AUDIT_COD = F.audit_cod + AND A.MARKET = F.market + LEFT JOIN tmp.tmp_tf_ext_aia_target_inst G ON + A.MARKET = G.MARKET AND A.AUDIT_COD = G.AUDIT_COD AND A.DATA_SOURCE ='AIA(Monthly)' + +-- COMMAND ---------- + +-- delete from dm.DM_TF_EXT_UNIONALL_SALES_MAPPING where DATA_SOURCE IN ('Retail(Quarterly)', 'EC(Monthly)') + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING +-- INSERT INTO TABLE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING +SELECT + MARKET, + KEY_COMPETITOR, + CLASS, + YYYYMM, + PACK_COD, + CORP_COD, + AUDIT_COD, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + DATA_SOURCE, + CAST(PACK_FLAG AS INT) AS PACK_FLAG, + CAST(PROD_FLAG AS INT) AS PROD_FLAG, + CAST(DTP_FLAG AS INT) AS DTP_FLAG, + CAST(CMPS_FLAG AS INT) AS CMPS_FLAG, + NEW_CODE, + INST_CODE, + CAST(AIA_HP_FLAG AS INT) AS AIA_HP_FLAG, + DEPT_NAME, + CAST(H_LEVEL AS INT) AS H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_TYPE, + CAST(VA AS decimal(35,10)) AS VA, + CAST(UT AS decimal(35,10) ) AS UT, + CAST(CU AS decimal(35,10) ) AS CU, + CAST(PT AS decimal(35,10) ) AS PT, + CAST(SALES_UNIT_CAL AS decimal(35,10) ) AS SALES_UNIT_CAL, + CAST(SALES_UNIT_CAL_LY AS decimal(35,10) ) AS SALES_UNIT_CAL_LY, + CAST(SALES_VALUE_CAL AS decimal(35,10) ) AS SALES_VALUE_CAL, + CAST(SALES_VALUE_CAL_LY AS decimal(35,10) ) AS SALES_VALUE_CAL_LY, + CAST(CONUTING_UNIT AS decimal(35,10) ) AS CONUTING_UNIT, + CAST(CONUTING_UNIT_LY AS decimal(35,10) ) AS CONUTING_UNIT_LY, + CAST(PDOT AS decimal(35,10) ) AS PDOT, + CAST(PDOT_LY AS decimal(35,10) ) AS PDOT_LY, + CAST(PRESCRIPTION AS INT) AS PRESCRIPTION, + CAST(PRESCRIPTION_LY AS INT) AS PRESCRIPTION_LY, + CAST(AIA_REMOVE AS INT) AS AIA_REMOVE, + null MERGEDATA_FLAG, + MERGEDATA_FLAG_MKT MERGEDATA_FLAG_MKT, + CAST(MERGEDATA_FLAG_CHPA_DTP AS INT) AS MERGEDATA_FLAG_CHPA_DTP, + CAST(MERGEDATA_FLAG_DTP_NOROC AS INT) AS MERGEDATA_FLAG_DTP_NOROC, + null AS MERGED_DATA_DTP_OTHERS, + TARGET_INS + -- , + -- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + -- FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM + DM_TF_EXT_UNIONALL_SALES_MAPPING + +-- WHERE DATA_SOURCE IN ('Retail(Quarterly)', 'EC(Monthly)') \ No newline at end of file diff --git a/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql new file mode 100644 index 0000000..e779c9d --- /dev/null +++ b/UNIONALL/DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD.sql @@ -0,0 +1,112 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD ( +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- CLASS STRING, +-- YYYYMM STRING, +-- PACK_COD STRING, +-- AUDIT_COD STRING, +-- DATA_SOURCE STRING, +-- VA decimal(35,10), +-- UT decimal(35,10), +-- CU decimal(35,10), +-- PT decimal(35,10), +-- SALES_UNIT_CAL decimal(35,10), +-- SALES_UNIT_CAL_LY decimal(35,10), +-- SALES_VALUE_CAL decimal(35,10), +-- SALES_VALUE_CAL_LY decimal(35,10), +-- CONUTING_UNIT decimal(35,10), +-- CONUTING_UNIT_LY decimal(35,10), +-- PDOT decimal(35,10), +-- PDOT_LY decimal(35,10), +-- PRESCRIPTION INT, +-- PRESCRIPTION_LY INT, +-- PACK_SOURCE STRING, +-- AUDIT_SOURCE STRING, +-- MARKET_SOURCE STRING, +-- CLASS_SOURCE STRING, +-- DATE_KEY DATE, +-- PLATFORM STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping_niad'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping_niad'; + +-- COMMAND ---------- + +-- DBTITLE 1,NIAD单独页面 +-- **************************************************** +-- 功能说明:提取NIAD(非胰岛素类抗糖尿病药物)市场的销售数据并创建映射表 +-- 数据源:EC(Monthly)月度电商数据 + Retail(Quarterly)季度零售数据 +-- 创建日期:2026-04-02 +-- 修改日期:2026-04-02 +-- **************************************************** + +INSERT OVERWRITE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING_NIAD + +WITH + +-- CTE 1:获取NIAD市场的产品编码集合 +-- 注:直接下推双重过滤条件,减少扫描数据量 +niad_pack_cods AS ( + SELECT DISTINCT PACK_COD + FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES + WHERE MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' + AND DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') +) + +-- 主查询:提取所有关联市场的完整销售数据 +-- BROADCAST 小表 niad_markets,避免大表 shuffle +SELECT /*+ BROADCAST(m) */ + + -- 业务维度 + t.MARKET, + t.KEY_COMPETITOR, + t.CLASS, + t.YYYYMM, + + -- 产品标识 + t.PACK_COD, + t.AUDIT_COD, + + -- 数据来源 + t.DATA_SOURCE, + + -- 调整系数 + t.VA, -- Value Adjustment + t.UT, -- Unit Adjustment + t.CU, -- Counting Unit Adjustment + t.PT, -- PDOT Adjustment + + -- 当期销售指标 + t.SALES_UNIT_CAL, + t.SALES_VALUE_CAL, + t.CONUTING_UNIT, -- 注:字段名原始拼写保持不变 + t.PDOT, + + -- 去年同期指标 + t.SALES_UNIT_CAL_LY, + t.SALES_VALUE_CAL_LY, + t.CONUTING_UNIT_LY, + t.PDOT_LY, + + -- 处方指标 + t.PRESCRIPTION, + t.PRESCRIPTION_LY, + + -- 衍生组合键 + CONCAT(t.PACK_COD, t.DATA_SOURCE) AS PACK_SOURCE, + CONCAT(t.AUDIT_COD, t.DATA_SOURCE) AS AUDIT_SOURCE, + CONCAT(t.MARKET, t.DATA_SOURCE) AS MARKET_SOURCE, + CONCAT(t.MARKET,t.CLASS, t.DATA_SOURCE) AS CLASS_SOURCE, + + -- 时间维度:优化为 TO_DATE 直接解析 yyyyMM 格式,避免字符串拼接 + TO_DATE(t.YYYYMM, 'yyyyMM') AS DATE_KEY, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE +FROM DM.DM_TF_EXT_UNIONALL_MARKET_SALES t +LEFT SEMI JOIN niad_pack_cods m ON t.PACK_COD = m.PACK_COD +WHERE t.DATA_SOURCE IN ('EC(Monthly)', 'Retail(Quarterly)') \ No newline at end of file diff --git a/XIEHE/01 xiehe_blob_to_dwd.py b/XIEHE/01 xiehe_blob_to_dwd.py new file mode 100644 index 0000000..a4f5e11 --- /dev/null +++ b/XIEHE/01 xiehe_blob_to_dwd.py @@ -0,0 +1,194 @@ +# Databricks notebook source +# MAGIC %md +# MAGIC ### 从blob读取csv文件作为xiehe的事实表 + +# COMMAND ---------- + +# MAGIC %run ../../../Common/config + +# COMMAND ---------- + +from datetime import datetime, timedelta +import pandas as pd + +# COMMAND ---------- + +if ENVIRONMENT == PRD_ENVIRONMENT_VALUE: + factsales_file_path_template = "abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +elif ENVIRONMENT == TEST_ENVIRONMENT_VALUE: + factsales_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" + +# COMMAND ---------- + +# 计算时间得到当天的路径 +current_date = datetime.utcnow() + timedelta(hours=8) +date_path = current_date.strftime("%Y/%m/%d/") +base_path = factsales_file_path_template + date_path + +# COMMAND ---------- + +# 路径是否存在 +def path_exists(path): + try: + dbutils.fs.ls(path) + return True + except Exception as e: + if "java.io.FileNotFoundException" in str(e): + return False + else: + print(f"检查路径 {path} 时出错: {e}") + raise + +# COMMAND ---------- + +# 列出blob上的文件列表 +def list_file_name(path): + first_path_list = [i.path for i in dbutils.fs.ls(path)] + second_path_list = [dbutils.fs.ls(i)[0] for i in first_path_list ] + return second_path_list + +# COMMAND ---------- + +# 从blob下载文件到local +def download_file(file_path, local_path): + # dbutils.fs.cp(file_path, local_path.replace("/dbfs", "")) + dbutils.fs.cp(file_path, local_path) + print(f"已下载 {file_path} 到 {local_path}") + return local_path + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 获取路径下的文件名称 +# MAGIC - 并挑出符合条件的文件路径 + +# COMMAND ---------- + +try: + if path_exists(base_path): + all_file_list = list_file_name(base_path) + # 生成df来筛选内容 + files_df = pd.DataFrame([{ + 'path':f.path, + 'modificationtime': f.modificationTime, + 'name': f.name + } for f in all_file_list]) + print(f"{base_path} 路径存在") + else: + print(f"{base_path} 路径不存在") +except Exception as e: + print(e) + +# COMMAND ---------- + +try: + files_df = files_df.sort_values('modificationtime', ascending=False).drop_duplicates('name').sort_index() + files_df = files_df[files_df['name'].str.match(r'^Dept_Fact.*\.csv$')] + files_df +except Exception as e: + print(e) + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 读取文件内容 + +# COMMAND ---------- + +import os + +# COMMAND ---------- + +# 下载数据到local +try: + if files_df['path'].tolist(): + # 如果列表不为空 + df_all = [] + for file in files_df['path'].tolist(): + local_path = download_file(file, f"/Volumes/{NGBI_CATALOG}/tmp/volume_tmp/tmp/{os.path.basename(file)}") + file_df = (spark.read.option("header", "true").option("quote", '"').option("escape", '"').option("multiLine", "true").option("mode", "PERMISSIVE").csv(local_path)) + print(f'已读取{local_path}') + df_all.append(file_df) + # df_combine = pd.concat(df_all) + df_ifexists = True + else: + print('没有符合条件的文件') + df_ifexists= False +except Exception as e: + print(e) + +# COMMAND ---------- + +try: + if df_ifexists: # 如果不为空 + spark.sql(f"TRUNCATE table tmp.tmp_xiehe_raw_data") + num = 1 + for i in df_all: + df_renamed = i.withColumnRenamed('区域','area') \ + .withColumnRenamed('城市','city') \ + .withColumnRenamed('年&季度','yyyyqq') \ + .withColumnRenamed('月','yyyymm') \ + .withColumnRenamed('医保类型','reimburse') \ + .withColumnRenamed('处方来源','prescription_source') \ + .withColumnRenamed('处方科室_lv1','prescription_dept_lv1') \ + .withColumnRenamed('处方科室_lv2','prescription_dept_lv2') \ + .withColumnRenamed('处方科室_lv3','prescription_dept_lv3') \ + .withColumnRenamed('ATC','ATC') \ + .withColumnRenamed('PHCD标准码','new_code') \ + .withColumnRenamed('药品通用名','common_name') \ + .withColumnRenamed('药品商品名','product_name') \ + .withColumnRenamed('规格','pack_des') \ + .withColumnRenamed('PackSize','PackSize') \ + .withColumnRenamed('PackageType','PackageType') \ + .withColumnRenamed('给药途径','nfc') \ + .withColumnRenamed('药品厂家','manu_des') \ + .withColumnRenamed('药品剂型','drug_delivery_route') \ + .withColumnRenamed('处方张数','prescription') \ + .withColumnRenamed('取药数量','sales_vol') \ + .withColumnRenamed('处方金额','sales_value') + # i.columns = ['area','city','yyyyqq','yyyymm','reimburse','prescription_source','prescription_dept_lv1','prescription_dept_lv2','prescription_dept_lv3','ATC','new_code','common_name','product_name','pack_des','PackSize','PackageType','nfc','manu_des','drug_delivery_route','prescription','sales_vol','sales_value'] #'h_level', + # sdf = spark.createDataFrame(i) + df_renamed.createOrReplaceTempView('fact_sales') + spark.sql(f"INSERT into tmp.tmp_xiehe_raw_data SELECT area,city,yyyyqq,yyyymm,reimburse,prescription_source,prescription_dept_lv1,prescription_dept_lv2,prescription_dept_lv3,ATC,new_code,common_name,product_name,pack_des,PackSize,PackageType,nfc,manu_des,drug_delivery_route,prescription,sales_vol,sales_value FROM fact_sales") + print(f'第{num}个') + num +=1 +except Exception as e: + print(e) + +# COMMAND ---------- + +# MAGIC %md +# MAGIC ### 将读取到的dataframe写入表中 + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC -- 全量覆盖 +# MAGIC insert overwrite dwd.dwd_gnd_ext_xiehe_raw_data +# MAGIC select +# MAGIC area , +# MAGIC city , +# MAGIC yyyyqq , +# MAGIC yyyymm , +# MAGIC null h_level , +# MAGIC reimburse , +# MAGIC prescription_source , +# MAGIC prescription_dept_lv1 , +# MAGIC prescription_dept_lv2 , +# MAGIC prescription_dept_lv3 , +# MAGIC ATC , +# MAGIC new_code , +# MAGIC common_name , +# MAGIC product_name , +# MAGIC pack_des , +# MAGIC cast ( PackSize as BIGINT) PackSize , +# MAGIC PackageType , +# MAGIC nfc , +# MAGIC manu_des , +# MAGIC drug_delivery_route, +# MAGIC cast ( prescription as BIGINT) prescription , +# MAGIC cast ( sales_vol as DECIMAL(38,8)) sales_vol, +# MAGIC cast ( sales_value as DECIMAL(38,8)) sales_value , +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from tmp.tmp_xiehe_raw_data \ No newline at end of file diff --git a/XIEHE/02 dm_xiehe_pack_property.sql b/XIEHE/02 dm_xiehe_pack_property.sql new file mode 100644 index 0000000..c09f954 --- /dev/null +++ b/XIEHE/02 dm_xiehe_pack_property.sql @@ -0,0 +1,232 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC ### xiehe的 pack property + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE dm.dm_xiehe_pack_property ( +-- PACK_COD STRING, +-- pack_des STRING, +-- stgh_des STRING, +-- pack_lch STRING, +-- PROD_COD STRING, +-- prod_des STRING, +-- prod_des_c STRING, +-- Family_Code STRING, +-- Family_Name STRING, +-- cmps_cod STRING, +-- cmps_des STRING, +-- cmps_des_c STRING, +-- atc1_cod STRING, +-- atc1_des STRING, +-- atc1_des_c STRING, +-- atc2_cod STRING, +-- atc2_des STRING, +-- atc2_des_c STRING, +-- atc3_cod STRING, +-- atc3_des STRING, +-- atc3_des_c STRING, +-- atc4_cod STRING, +-- atc4_des STRING, +-- atc4_des_c STRING, +-- app1_cod STRING, +-- app1_des STRING, +-- app1_des_c STRING, +-- app2_cod STRING, +-- app2_des STRING, +-- app2_des_c STRING, +-- app3_cod STRING, +-- app3_des STRING, +-- app3_des_c STRING, +-- bio_desc STRING, +-- gene_orig_desc STRING, +-- eth_otc_desc STRING, +-- nrdl_desc STRING, +-- NRDL_Entry_Date STRING, +-- edl_desc STRING, +-- tcm_desc STRING, +-- paed_desc STRING, +-- gqce_desc STRING, +-- vbp_desc STRING, +-- manu_cod STRING, +-- manu_des STRING, +-- manu_des_c STRING, +-- mnfl_cod STRING, +-- mnfl_des STRING, +-- corp_cod STRING, +-- corp_des STRING, +-- corp_des_c STRING, +-- BrandType STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_Related STRING, +-- countingunit STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_xiehe_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_xiehe_pack_property'; + +-- COMMAND ---------- + +create or replace temporary view dwd_pack_property +as + select + t1.iqvia_pack_code , + t1.PACK_DES, + t1.STGH_DES, + t1.PACK_LCH, + null as Family_Code, + null as Family_Name, + t1.iqvia_prod_code , + t1.PROD_DES , + t1.PROD_DES_C , + t1.CMPS_COD , + t1.CMPS_DES , + t1.CMPS_DES_C , + t1.ATC1_COD , + t1.ATC2_COD , + t1.ATC3_COD , + t1.ATC4_COD , + t1.APP1_COD , + t1.APP2_COD , + t1.APP3_COD , + t1.BIO_DESC , + t1.GENE_ORIG_DESC , + t1.ETH_OTC_DESC , + t1.NRDL_DESC , + null as NRDL_Entry_Date, + t1.EDL_DESC , + t1.TCM_DESC , + t1.PAED_DESC , + t1.GQCE_DESC , + t1.VBP_DESC , + t1.MANU_COD , + t1.MANU_DES , + t1.MANU_DES_C , + t1.MNFL_COD , + t1.MNFL_DES , + t1.CORP_COD , + t1.CORP_DES , + t1.CORP_DES_C , + null as BrandType, + null as IS_AZ, + null as AZ_MAIN, + null as AZ_Related, + t1.atc1_des , + t1.atc1_des_c , + t1.atc2_des , + t1.atc2_des_c , + t1.atc3_des , + t1.atc3_des_c , + t1.atc4_des , + t1.atc4_des_c , + t1.app1_des , + t1.app1_des_c , + t1.app2_des , + t1.app2_des_c , + t1.app3_des , + t1.app3_des_c , + countingunit + from dwd.dwd_gnd_dept_pack_property t1 + +-- COMMAND ---------- + +-- create or replace table dm.dm_xiehe_pack_property +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_xiehe_pack_property' +-- as +insert overwrite table dm.dm_xiehe_pack_property +WITH dedup_l AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY iqvia_pack_code ORDER BY iqvia_pack_code) AS rn + FROM dwd_pack_property + QUALIFY rn = 1 +), +dedup_r AS ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY PACK_COD ORDER BY PACK_COD) AS rn + FROM tmp.tmp_ext_chpa_pack_propetry + QUALIFY rn = 1 +) +SELECT + l.iqvia_pack_code AS PACK_COD, + + -- Pack / Product 描述 + COALESCE(r.PACK_DES, l.pack_des) AS pack_des, + COALESCE(r.STGH_DES, l.stgh_des) AS stgh_des, + COALESCE(r.PACK_LCH, l.pack_lch) AS pack_lch, + COALESCE(r.PROD_COD, l.iqvia_prod_code) AS PROD_COD, + COALESCE(r.PROD_DES, l.prod_des) AS prod_des, + COALESCE(r.PROD_DES_C, l.prod_des_c) AS prod_des_c, + + -- 右表独有:Family + r.Family_Code, + r.Family_Name, + + -- 成分 + COALESCE(r.CMPS_COD, l.cmps_cod) AS cmps_cod, + COALESCE(r.CMPS_DES, l.cmps_des) AS cmps_des, + COALESCE(r.CMPS_DES_C, l.cmps_des_c) AS cmps_des_c, + + -- ATC + COALESCE(r.ATC1_COD, l.atc1_cod) AS atc1_cod, + COALESCE(r.atc1_des, l.atc1_des) AS atc1_des, + COALESCE(r.atc1_des_c, l.atc1_des_c) AS atc1_des_c, + COALESCE(r.ATC2_COD, l.atc2_cod) AS atc2_cod, + COALESCE(r.atc2_des, l.atc2_des) AS atc2_des, + COALESCE(r.atc2_des_c, l.atc2_des_c) AS atc2_des_c, + COALESCE(r.ATC3_COD, l.atc3_cod) AS atc3_cod, + COALESCE(r.atc3_des, l.atc3_des) AS atc3_des, + COALESCE(r.atc3_des_c, l.atc3_des_c) AS atc3_des_c, + COALESCE(r.ATC4_COD, l.atc4_cod) AS atc4_cod, + COALESCE(r.atc4_des, l.atc4_des) AS atc4_des, + COALESCE(r.atc4_des_c, l.atc4_des_c) AS atc4_des_c, + + -- APP + COALESCE(r.APP1_COD, l.app1_cod) AS app1_cod, + COALESCE(r.app1_des, l.app1_des) AS app1_des, + COALESCE(r.app1_des_c, l.app1_des_c) AS app1_des_c, + COALESCE(r.APP2_COD, l.app2_cod) AS app2_cod, + COALESCE(r.app2_des, l.app2_des) AS app2_des, + COALESCE(r.app2_des_c, l.app2_des_c) AS app2_des_c, + COALESCE(r.APP3_COD, l.app3_cod) AS app3_cod, + COALESCE(r.app3_des, l.app3_des) AS app3_des, + COALESCE(r.app3_des_c, l.app3_des_c) AS app3_des_c, + + -- 标志位 + COALESCE(r.BIO_DESC, l.bio_desc) AS bio_desc, + COALESCE(r.GENE_ORIG_DESC, l.gene_orig_desc) AS gene_orig_desc, + COALESCE(r.ETH_OTC_DESC, l.eth_otc_desc) AS eth_otc_desc, + COALESCE(r.NRDL_DESC, l.nrdl_desc) AS nrdl_desc, + r.NRDL_Entry_Date, + COALESCE(r.EDL_DESC, l.edl_desc) AS edl_desc, + COALESCE(r.TCM_DESC, l.tcm_desc) AS tcm_desc, + COALESCE(r.PAED_DESC, l.paed_desc) AS paed_desc, + COALESCE(r.GQCE_DESC, l.gqce_desc) AS gqce_desc, + COALESCE(r.VBP_DESC, l.vbp_desc) AS vbp_desc, + + -- 厂商 + COALESCE(r.MANU_COD, l.manu_cod) AS manu_cod, + COALESCE(r.MANU_DES, l.manu_des) AS manu_des, + COALESCE(r.MANU_DES_C, l.manu_des_c) AS manu_des_c, + COALESCE(r.MNFL_COD, l.mnfl_cod) AS mnfl_cod, + COALESCE(r.MNFL_DES, l.mnfl_des) AS mnfl_des, + + -- 公司 + COALESCE(r.CORP_COD, l.corp_cod) AS corp_cod, + COALESCE(r.CORP_DES, l.corp_des) AS corp_des, + COALESCE(r.CORP_DES_C, l.corp_des_c) AS corp_des_c, + + -- 右表独有:品牌 / AZ 标志 + r.BrandType, + r.IS_AZ, + r.AZ_MAIN, + r.AZ_Related, + -- 左表独有 + l.countingunit, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT +FROM dedup_l l +LEFT JOIN dedup_r r + ON l.iqvia_pack_code = r.PACK_COD \ No newline at end of file diff --git a/XIEHE/03 dm_ext_xiehe_geo.sql b/XIEHE/03 dm_ext_xiehe_geo.sql new file mode 100644 index 0000000..64aaaac --- /dev/null +++ b/XIEHE/03 dm_ext_xiehe_geo.sql @@ -0,0 +1,76 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC ### dws层xiehegeo + +-- COMMAND ---------- + + +insert overwrite dws.dws_ext_xiehe_geo +with geo_xiehe as (-- dwd层表 + select fact_province,fact_city,geo_city,nvl(geo_province,'') geo_province + from dwd.dwd_gnd_xiehe_geo + group by fact_province,fact_city,geo_city,nvl(geo_province,'') +) + +-- 特殊区域:'黑吉辽','云贵川青','湖北','甘肃','其他地区' +select + -- a.*, + concat('xiehe_',nvl(b.AUDIT_COD,concat(a.geo_province,a.fact_province,a.fact_city))) as AUDIT_COD + ,nvl(b.CITY,a.geo_city) CITY + ,nvl(b.CITY_C,a.geo_city) CITY_C + ,'City' CITY_TYPE + ,'4' AZ_CITY_TIER + ,a.geo_province PROVINCE + ,a.geo_province PROVINCE_C + ,concat('xiehe_',nvl(b.PROVINCE_CODE,a.geo_province)) PROVINCE_CODE + ,a.fact_city as CITY_MAP + ,a.fact_province as PROVINCE_MAP + ,case when a.geo_province='' then a.fact_province else a.geo_province end as REGION_CENTER + ,from_utc_timestamp(current_timestamp(),'UTC+8') ETL_INSERT_DT + ,from_utc_timestamp(current_timestamp(),'UTC+8') ETL_UPDATE_DT +from geo_xiehe a +left join dm.dm_ims_td_geo b on a.geo_city = b.CITY_C +where fact_province in ('黑吉辽','云贵川青','湖北','甘肃','其他地区') + +union all +-- 非特殊区域 +select + -- a.* , + concat('xiehe_',nvl(b.AUDIT_COD,concat(a.geo_province,a.fact_province,a.fact_city))) as AUDIT_COD + ,nvl(b.CITY,a.geo_city) CITY + ,nvl(b.CITY_C,a.geo_city) CITY_C + ,'City' CITY_TYPE + ,nvl(b.AZ_CITY_TIER,'4') AZ_CITY_TIER + ,a.geo_province PROVINCE + ,a.geo_province PROVINCE_C + ,concat('xiehe_',nvl(b.PROVINCE_CODE,a.geo_province)) PROVINCE_CODE + ,a.fact_city as CITY_MAP + ,a.fact_province as PROVINCE_MAP + ,a.geo_province as REGION_CENTER + ,from_utc_timestamp(current_timestamp(),'UTC+8') ETL_INSERT_DT + ,from_utc_timestamp(current_timestamp(),'UTC+8') ETL_UPDATE_DT +from geo_xiehe a +left join dm.dm_ims_td_geo b on a.geo_city = b.CITY_C +where fact_province not in ('黑吉辽','云贵川青','湖北','甘肃','其他地区') + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### dm + +-- COMMAND ---------- + +insert overwrite dm.dm_ext_xiehe_geo +select + AUDIT_COD + ,CITY + ,CITY_C + ,CITY_TYPE + ,AZ_CITY_TIER + ,PROVINCE + ,PROVINCE_C + ,PROVINCE_CODE + ,CITY_MAP + ,PROVINCE_MAP + ,REGION_CENTER +from dws.dws_ext_xiehe_geo \ No newline at end of file diff --git a/XIEHE/04 dm_ext_xiehe_sales.sql b/XIEHE/04 dm_ext_xiehe_sales.sql new file mode 100644 index 0000000..fb9e0a8 --- /dev/null +++ b/XIEHE/04 dm_ext_xiehe_sales.sql @@ -0,0 +1,219 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC ### dws + +-- COMMAND ---------- + +/* +修改时间:20250707 +修改人:chenwu +内容:xiehe数据源变更,逻辑调整 +*/ +insert overwrite dws.dws_ext_xiehe_raw_data +with +--法伯的code 和 iqviacode 的对应关系 +pack_cod_2_iqvia_pack_code( + select + pack_cod + ,max(IQVIA_PACK_CODE) IQVIA_PACK_CODE + from dwd.dwd_gnd_dept_pack_property + group by 1 +) +,geo_mapping( + select + province_map fact_province + ,city_map fact_city + ,max(city_c) city + ,max(province_c) province + ,max(audit_cod) audit_cod + from dm.dm_ext_xiehe_geo + group by 1,2 +) +,pack_countingunit( + select + pack_cod + ,max(countingunit) countingunit + from dm.dm_xiehe_pack_property + group by 1 +) + +,underlying_ly_data( + select + c.audit_cod + ,b.iqvia_pack_code + ,c.city + ,c.province + ,a.yyyymm + ,a.h_level + ,a.reimburse + ,a.prescription_source + ,a.prescription_dept_lv1 + ,a.prescription_dept_lv2 + ,a.prescription_dept_lv3 + ,a.new_code + ,a.atc + ,a.common_name + ,a.product_name + ,a.manu_des + ,a.pack_des + ,a.drug_delivery_route + ,a.nfc + ,a.PackSize + ,a.PackageType + ,a.prescription + ,a.sales_vol*nvl(d.countingunit,0) as sales_vol + -- ,a.price + ,a.sales_value + ,0 as prescription_ly + ,0 as sales_vol_ly + -- ,0 as price_ly + ,0 as sales_value_ly + from dwd.dwd_gnd_ext_xiehe_raw_data a + left join pack_cod_2_iqvia_pack_code b + on upper(a.new_code) = upper(b.pack_cod) + left join geo_mapping c + on a.area = c.fact_province + and a.city = c.fact_city + left join pack_countingunit d + on b.iqvia_pack_code = d.pack_cod + union all + select + c.audit_cod + ,b.iqvia_pack_code + ,c.city + ,c.province + ,(a.yyyymm + 100) yyyymm + ,a.h_level + ,a.reimburse + ,a.prescription_source + ,a.prescription_dept_lv1 + ,a.prescription_dept_lv2 + ,a.prescription_dept_lv3 + ,a.new_code + ,a.atc + ,a.common_name + ,a.product_name + ,a.manu_des + ,a.pack_des + ,a.drug_delivery_route + ,a.nfc + ,a.PackSize + ,a.PackageType + ,0 as prescription + ,0 as sales_vol + -- ,0 as price + ,0 as sales_value + ,a.prescription as prescription_ly + ,a.sales_vol*nvl(d.countingunit,0) as sales_vol_ly + -- ,a.price as price_ly + ,a.sales_value as sales_value_ly + from dwd.dwd_gnd_ext_xiehe_raw_data a + left join pack_cod_2_iqvia_pack_code b + on upper(a.new_code) = upper(b.pack_cod) + left join geo_mapping c + on a.area = c.fact_province + and a.city = c.fact_city + left join pack_countingunit d + on b.iqvia_pack_code = d.pack_cod + where (a.yyyymm + 100) <= (select max(yyyymm) from dwd.dwd_gnd_ext_xiehe_raw_data) +) + + select + yyyymm + ,iqvia_pack_code + ,AUDIT_COD + ,city + ,province + ,replace(h_level,'.0','') h_level + ,reimburse + ,null as reimburse_type + ,prescription_source + ,prescription_dept_lv1 + ,prescription_dept_lv2 + ,prescription_dept_lv3 + ,prescription_dept_lv3 dept_name + ,new_code + ,atc + ,common_name + ,product_name + ,manu_des + ,pack_des + ,drug_delivery_route + ,nfc + ,PackSize + ,PackageType + ,sum(prescription) prescription + ,SUM(sales_vol) counting_unit + ,null as price + ,SUM(sales_value) sales_value + ,sum(prescription_ly) prescription_ly + ,SUM(sales_vol_ly) counting_unit_ly + ,null as price_ly + ,SUM(sales_value_ly) sales_value_ly + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt + from underlying_ly_data + group by + yyyymm + ,iqvia_pack_code + ,AUDIT_COD + ,city + ,province + ,h_level + ,reimburse + -- ,null as reimburse_type + ,prescription_source + ,prescription_dept_lv1 + ,prescription_dept_lv2 + ,prescription_dept_lv3 + ,prescription_dept_lv3 + ,new_code + ,atc + ,common_name + ,product_name + ,manu_des + ,pack_des + ,drug_delivery_route + ,nfc + ,PackSize + ,PackageType + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### dm + +-- COMMAND ---------- + +insert overwrite dm.dm_ext_xiehe_sales +select + yyyymm + ,iqvia_pack_code + ,AUDIT_COD + ,city + ,province + ,h_level + ,reimburse + ,reimburse_type + ,prescription_source + ,prescription_dept_lv1 + ,prescription_dept_lv2 + ,prescription_dept_lv3 + ,dept_name + ,new_code + ,atc + ,common_name + ,product_name + ,manu_des + ,pack_des + ,drug_delivery_route + ,nfc + ,prescription + ,counting_unit + ,price + ,sales_value + ,prescription_ly + ,counting_unit_ly + ,price_ly + ,sales_value_ly +from dws.dws_ext_xiehe_raw_data \ No newline at end of file diff --git a/XIEHE/05 dm_td_xiehe_core_dept.sql b/XIEHE/05 dm_td_xiehe_core_dept.sql new file mode 100644 index 0000000..b2354db --- /dev/null +++ b/XIEHE/05 dm_td_xiehe_core_dept.sql @@ -0,0 +1,8 @@ +-- Databricks notebook source +insert overwrite table dm.dm_td_xiehe_core_dept +select distinct +MarketName as MARKET, +Dept_NAME as DEPT_NAME, +Defined_Dept as CORE_DEPT, +'XH Data(Quarterly)' as DATA_SOURCE +from dwd.dwd_gnd_xiehe_core_dept \ No newline at end of file diff --git a/XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql b/XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql new file mode 100644 index 0000000..1a4d51e --- /dev/null +++ b/XIEHE/06 DM_TF_EXT_XIEHE_SALES.sql @@ -0,0 +1,170 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_XIEHE_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_xiehe_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_xiehe_sales'; + +-- COMMAND ---------- + +CREATE OR REPLACE TEMPORARY VIEW TF_XIEHE +AS + SELECT + A.YYYYMM, + A.iqvia_pack_code AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'XH Data(Quarterly)' DATA_SOURCE, + ------------------------------------- + 0 SALES_UNIT_CAL, + 0 SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) SALES_VALUE_CAL_LY, + SUM(A.counting_unit) CONUTING_UNIT, + SUM(A.counting_unit_ly) CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + NVL(A.dept_name, '') dept_name, + NVL(A.new_code, '') new_code, + NVL(A.province, '') area, + NVL(A.h_level, '') h_level, + NVL(A.reimburse, '') reimburse, + NVL(A.reimburse_type, '') reimburse_type, + NVL(A.prescription_source, '') prescription_source, + ------------------------------------- + '' as CORP_CODE --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_ext_xiehe_sales A + WHERE + A.YYYYMM >= '202001' + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.dept_name, + A.new_code, + A.province, + A.h_level, + A.reimburse, + A.reimburse_type, + A.prescription_source + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_XIEHE_SALES ( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) + SELECT + YYYYMM, + NVL(NULLIF(PACK_CODE, ''), CONCAT('PACK_CODE_', DATA_SOURCE)) AS PACK_CODE, + NVL(NULLIF(AUDIT_CODE, ''), 'ROC') AS AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + TF_XIEHE; \ No newline at end of file diff --git a/XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql b/XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql new file mode 100644 index 0000000..44f423d --- /dev/null +++ b/XIEHE/07 DM_TD_EXT_XIEHE_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_PACK_PROPERTY +-- ( +-- -- -- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- -- MARKET STRING, +-- -- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- -- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- -- CLASS STRING, +-- -- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_XIEHE_PACK_PROPERTY +SELECT + -- MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + CMPS_DES_C AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + null as VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + MANU_DES_C AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + -- MARKET, + -- KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + -- AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + -- CLASS, + -- NULL AS MARKET_RATIO, + COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_XIEHE_PACK_PROPERTY; \ No newline at end of file diff --git a/XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql b/XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql new file mode 100644 index 0000000..b11ccfb --- /dev/null +++ b/XIEHE/08 DM_TD_EXT_XIEHE_PACK2MARKET.sql @@ -0,0 +1,326 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market'; + +-- COMMAND ---------- + +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_xiehe_PACK2MARKET_KEYCOMPETITOR ( +-- KEY_COMPETITOR STRING, +-- MARKET STRING, +-- PACK_CODE STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market_keycompetitor'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market_keycompetitor'; + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE DM.DM_TD_EXT_xiehe_PACK2MARKET_CLASS ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CLASS STRING) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market_class'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market_class'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_XIEHE_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_xiehe_PACK2MARKET_KEYCOMPETITOR +WITH kc AS ( + SELECT + keycompetitor, no, + ROW_NUMBER() OVER (ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 + END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1, + ATC1_Code, ATC2_Code, ATC3_Code, ATC4_Code, + NFC1_Code, NFC2_Code, NFC3_Code, + corporation_code, Manufacturer_Code, + Product_Code, Pack_Code, Strength, Molecule_Code, market + FROM dwd.dwd_gnd_ims_tblkeycompetitor +), +joined AS ( + SELECT + /*+ BROADCAST(kc) */ + COALESCE(kc.keycompetitor, 'OTHERS') AS Key_Competitor, -- ✅ UPDATE 逻辑内联 + t1.market, t1.PACK_CODE + /*bug 调试区 + , + kc.no, + kc.no1, + t1.PROD_COD, t1.CMPS_COD, t1.CMPS_DES, + t1.ATC1_COD, t1.ATC2_COD, t1.ATC3_COD, t1.ATC4_COD, + t1.APP1_COD, t1.APP2_COD, t1.APP3_COD, + t1.BIO_DESC, t1.GENE_ORIG_DESC, t1.ETH_OTC_DESC, + t1.NRDL_DESC, t1.NRDL_Entry_Date, t1.EDL_DESC, t1.TCM_DESC, + t1.PAED_DESC, t1.GQCE_DESC, t1.VBP_DESC, + t1.MANU_COD, t1.MANU_DES, t1.MNFL_COD, t1.MNFL_DES, + t1.CORP_COD, t1.CORP_DES, t1.BrandType, t1.bu, t1.Market_Ratio + */ + ,ROW_NUMBER() OVER ( + PARTITION BY t1.market, t1.PACK_CODE, t1.PROD_CODE + ORDER BY kc.no1 DESC, kc.no DESC + ) AS _rn + FROM DM.DM_TD_EXT_xiehe_PACK2MARKET t1 + LEFT JOIN kc + ON (kc.ATC1_Code IS NULL OR t1.ATC1_CODE = kc.ATC1_Code) + AND (kc.ATC2_Code IS NULL OR t1.ATC2_CODE = kc.ATC2_Code) + AND (kc.ATC3_Code IS NULL OR t1.ATC3_CODE = kc.ATC3_Code) + AND (kc.ATC4_Code IS NULL OR t1.ATC4_CODE = kc.ATC4_Code) + AND (kc.NFC1_Code IS NULL OR t1.APP1_CODE = kc.NFC1_Code) + AND (kc.NFC2_Code IS NULL OR t1.APP2_CODE = kc.NFC2_Code) + AND (kc.NFC3_Code IS NULL OR t1.APP3_CODE = kc.NFC3_Code) + AND (kc.corporation_code IS NULL OR t1.CORP_CODE = kc.corporation_code) + AND (kc.Manufacturer_Code IS NULL OR t1.MANU_CODE = kc.Manufacturer_Code) + AND (kc.Product_Code IS NULL OR t1.PROD_CODE = kc.Product_Code) + AND (kc.Pack_Code IS NULL OR t1.PACK_CODE = kc.Pack_Code) + AND (kc.Strength IS NULL OR t1.STGH_DESC = kc.Strength) + AND (kc.Molecule_Code IS NULL OR t1.CMPS_CODE = kc.Molecule_Code) + AND (kc.market IS NULL OR t1.market = kc.market) +) +SELECT distinct Key_Competitor,market,pack_code +FROM joined +WHERE _rn = 1; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_xiehe_PACK2MARKET_CLASS +SELECT + /*+ BROADCAST(T2) */ + DISTINCT + T1.MARKET, + T1.PACK_CODE, + COALESCE( T2.CLASS, 'OTHERS') AS CLASS +FROM DM.DM_TD_EXT_xiehe_PACK2MARKET T1 +LEFT JOIN DWD.DWD_GND_TBLCLASS T2 + ON (T2.MARKET IS NULL OR T1.MARKET = T2.MARKET) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) \ No newline at end of file diff --git a/XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql b/XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql new file mode 100644 index 0000000..d690b32 --- /dev/null +++ b/XIEHE/09 DM_TD_EXT_XIEHE_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_XIEHE_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/XIEHE/10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql b/XIEHE/10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..b700136 --- /dev/null +++ b/XIEHE/10 DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_XIEHE_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/XIEHE/11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql b/XIEHE/11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..da53454 --- /dev/null +++ b/XIEHE/11 DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING.sql @@ -0,0 +1,71 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING + SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T4.CLASS, + T5.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.DM_TD_EXT_XIEHE_PACK2MARKET T1 + LEFT JOIN DM.DM_TD_EXT_XIEHE_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET + AND T1.PACK_CODE = T2.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET + AND T1.PACK_CODE = T3.PACK_CODE + LEFT JOIN DM.DM_TD_EXT_XIEHE_PACK2MARKET_CLASS T4 + ON T1.PACK_CODE = T4.PACK_CODE + AND T1.MARKET = T4.MARKET + LEFT JOIN DM.DM_TD_EXT_XIEHE_PACK2MARKET_KEYCOMPETITOR T5 + ON T1.PACK_CODE = T5.PACK_CODE + AND T1.MARKET = T5.MARKET + WHERE + UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/XIEHE/bkp_01 xiehe_blob2dwd.py b/XIEHE/bkp_01 xiehe_blob2dwd.py new file mode 100644 index 0000000..ac64014 --- /dev/null +++ b/XIEHE/bkp_01 xiehe_blob2dwd.py @@ -0,0 +1,478 @@ +# Databricks notebook source +# MAGIC %run ../../../Common/config + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC insert overwrite dwd.dwd_gnd_xiehe_config_table_mapping +# MAGIC select id,file_name, +# MAGIC concat('dwd.dwd_gnd_xiehe_', id) as table_name, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') as etl_insert_dt +# MAGIC from dwd.dwd_gnd_xiehe_config_table + +# COMMAND ---------- + +# MAGIC %md +# MAGIC + 20250415 kzzh331 uc_upgrade uc兼容调整: +# MAGIC 1. 将代码中的`DBFS`路径根调整为`Volume`路径 +# MAGIC 2. 将`session`中安装的`mdb`工具调整到集群`init-script`中,`uc`集群可能需要`admin`权限才能在集群中安装程序 +# MAGIC 3. 清理重复的`access_file_path_template`赋值,根据环境自动设置`Blob Container` + +# COMMAND ---------- + +# %sh +# # 安装 mdbtools +# sudo apt-get update +# sudo apt-get install -y apt-utils +# sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mdbtools + +# COMMAND ---------- + +# import os +# from pyspark.sql import SparkSession + +# # 初始化SparkSession +# spark = SparkSession.builder.getOrCreate() + +# # 列出最新日期目录下的所有 Blob 文件 +# def list_latest_blob_files(base_path_template): +# try: +# current_date = datetime.utcnow() + timedelta(hours=8) +# date_path = current_date.strftime("%Y/%m/%d/") +# base_path = base_path_template + date_path + +# if path_exists(base_path): +# all_files = list_files_recursive(base_path) +# access_files = [file for file in all_files if is_access_file(file)] +# if not access_files: +# print("最新日期目录下未找到 Access 文件。") +# return [] +# else: +# return access_files +# else: +# print(f"指定路径不存在: {base_path}") +# return [] +# except Exception as e: +# print(f"列出路径模板 {base_path_template} 中的最新 Blob 文件时出错: {e}") +# raise + + +# # 设置原始路径模板 +# # 测试路径 +# # access_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +# # 生产路径 +# access_file_path_template = "abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" + + +# # Blob存储的文件夹路径 +# blob_folder_path = list_latest_blob_files(access_file_path_template) + +# # 遍历Blob存储上的文件夹和子文件夹 +# file_list = [] +# for root, dirs, files in os.walk(blob_folder_path): +# for file in files: +# file_list.append((root, file)) + +# # 创建DataFrame +# df = spark.createDataFrame(file_list, ["folder_path", "file_name"]) + +# # 将DataFrame写入临时表 +# df.createOrReplaceTempView("temp_table") + + +# COMMAND ---------- + +# # 730 修改在一半版本 +# from io import StringIO +# import pandas as pd +# from pyspark.sql import SparkSession +# from subprocess import run, PIPE +# import subprocess +# from pyspark.sql import SparkSession +# from datetime import datetime + +# #获取所有blob文件目录地址并复制到 dbfs 的指定目录下 +# def get_access_file_path_dbfs_list(access_file_path_blob,target_path): +# access_file_path_dbfs_list =[] +# # 使用 dbutils.fs.ls 遍历目录 +# for file_info in dbutils.fs.ls(access_file_path_blob): +# if file_info.isDir() and file_info.path.endswith('/') : +# # 确保是目录 +# blob_path = file_info.path +# for file_name in dbutils.fs.ls(file_info.path): +# if file_name.path.lower().endswith('xiehe.accdb') & file_name.name.lower().startswith('database') : +# dbutils.fs.cp(file_name.path,f"{target_path}/{file_name.name}" ) +# access_file_path_dbfs_list.append(f"{target_path}/{file_name.name}") +# return access_file_path_dbfs_list + +# import subprocess + +# # 将access 文件转化成csv +# def access_file_to_csv(access_file_path_blob,target_path,output_dir): +# access_file_path_dbfs_list = get_access_file_path_dbfs_list(access_file_path_blob,target_path) +# print(access_file_path_dbfs_list) +# for access_path in access_file_path_dbfs_list: +# # 首先列出所有表名 +# result = subprocess.run(['mdb-tables', '-1', f"/dbfs{access_path}"], stdout=subprocess.PIPE, text=True) +# print(result.returncode) +# if result.returncode != 0: +# print(f"Error listing tables: {result.stderr}") +# return +# table_names = result.stdout.strip().split('\n') +# print(table_names) +# # 遍历表,并保存至csv ,以下代码有问题----修需改 +# for table_name in table_names: +# csv_path = f"{output_dir}/{table_name}.csv" +# export_result = subprocess.run(['mdb-export', f"/dbfs{access_path}", table_name], stdout=subprocess.PIPE, text=True) +# with open(csv_path, 'w') as file: +# file.write(export_result.stdout) +# if export_result.returncode != 0: +# print(f"Error exporting {table_name} to {csv_path}: {export_result.stderr}") + +# # 以上代码有问题----修需改 +# # 还需功能,实现 读取csv 文件,写入对应DWD 表,并基于数据时间对 结果表数据进行数据覆盖 + + +# def main(access_file_path_blob,target_path,output_dir): +# access_file_to_csv(access_file_path_blob,target_path,output_dir) + +# if __name__ == "__main__": + +# # 原始路径模板,使用年月日替换 +# access_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/{date}/" +# today = datetime.now().strftime("%Y/%m/%d") +# access_file_path_blob = access_file_path_template.format(date=today) + +# main(access_file_path_blob,"/dbfs/tmp" ,"/dbfs/tmp") + +# COMMAND ---------- + +import os +import subprocess +import pandas as pd +from datetime import datetime, timedelta +from concurrent.futures import ThreadPoolExecutor +from pyspark.sql.functions import expr, date_format, lit +from queue import Queue + +# 增加一个全局变量,保存线程中生成的临时文件名称 +TEMP_FILES = Queue() + +# 下载 Access 文件到本地 +def download_access_file(file_path, local_path): + # dbutils.fs.cp(file_path, local_path.replace("/dbfs", "")) + dbutils.fs.cp(file_path, local_path) + print(f"已下载 {file_path} 到 {local_path}") + return local_path + +# 检查文件是否存在 +def file_exists(local_path): + return os.path.exists(local_path) + +# 列出 Access 文件中的表 +def list_tables_in_access_file(local_path): + if not file_exists(local_path): + raise FileNotFoundError(f"文件未找到: {local_path}") + + result = subprocess.run(['mdb-tables', '-1', local_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if result.returncode != 0: + error_message = result.stderr.decode('utf-8') + raise RuntimeError(f"列出表名时出错: {error_message}") + + table_names = result.stdout.decode('utf-8').strip().split('\n') + print(f"{local_path} 中的表: {table_names}") + return table_names + +# 读取每个表的数据并转换为 Pandas DataFrame +def read_table_from_access(local_path, table_name): + local_dirname = os.path.dirname(local_path) + local_filename = os.path.basename(local_path).split('.')[0] + temp_file_path = f"{local_dirname}/mdb_export_{local_filename}_{table_name}.csv" + + try: + # 将数据导出到临时文件 + result = subprocess.run( + ["mdb-export", local_path, table_name], stdout=open(temp_file_path, "w") + ) + + # 读取csv文件并清理列名 + df = ( + spark.read.option("header", "true") + .option("quote", '"') + .option("escape", '"') + .option("multiLine", "true") + .option("mode", "PERMISSIVE") + .csv(temp_file_path) + ) + # 清理列名 + for col in df.columns: + clean_col = ( + col.replace(" ", "_") + .replace(",", "_") + .replace(";", "_") + .replace("{", "_") + .replace("}", "_") + .replace("(", "_") + .replace(")", "_") + .replace("\n", "_") + .replace("\t", "_") + .replace("=", "_") + ) + if clean_col != col: + df = df.withColumnRenamed(col, clean_col) + return df + finally: + TEMP_FILES.put(temp_file_path) + +# 并行处理表 +def process_table_parallel(local_path, table_name, column_mapping, target_columns): + try: + df = read_table_from_access(local_path, table_name) + + # 映射列名 + if column_mapping: + for old_col, new_col in column_mapping.items(): + df = df.withColumnRenamed(old_col, new_col) + + # 确保列对齐 + for col in target_columns: + if col not in df.columns: + df = df.withColumn(col, lit(None)) + + # 添加 ETL 字段 + df = df.withColumn("etl_insert_dt", date_format(expr("current_timestamp() + INTERVAL 8 HOURS"), "yyyy-MM-dd HH:mm:ss")) + df = df.withColumn("etl_update_dt", date_format(expr("current_timestamp() + INTERVAL 8 HOURS"), "yyyy-MM-dd HH:mm:ss")) + + # 重新排序列 + spark_df = df.select(target_columns) + + return spark_df + except Exception as e: + print(f"处理表 {table_name} 时出错: {e}") + return None + +# 处理 Access 文件并转换为 Spark DataFrame +def process_access_files_with_config(access_files, config_df, column_mapping): + all_dataframes = [] + + # 获取目标表的列名 + target_columns = list(column_mapping.values()) + ['etl_insert_dt', 'etl_update_dt'] + + with ThreadPoolExecutor(max_workers=8) as executor: + futures = [] + + # 读取配置文件中的配置信息 + for index, row in config_df.iterrows(): + file_name = row['file_name'] + table_name = row['table_name'] + + # 找到匹配的文件 + matching_files = [file for file in access_files if file_name in file] + if not matching_files: + print(f"未找到匹配的文件: {file_name}") + continue + + # 读取匹配文件中的数据并合并 + for file in matching_files: + try: + local_path = download_access_file(file, f"/Volumes/{NGBI_CATALOG}/tmp/volume_tmp/tmp/{os.path.basename(file)}") + table_names = list_tables_in_access_file(local_path) + + for table in table_names: + futures.append(executor.submit(process_table_parallel, local_path, table, column_mapping, target_columns)) + except Exception as e: + print(f"处理文件 {file} 时出错: {e}") + continue + + for future in futures: + result = future.result() + if result: + all_dataframes.append((result, table_name)) + + return all_dataframes + +# 设置原始路径模板 +# 测试路径 +# access_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +# 生产路径 +if ENVIRONMENT == PRD_ENVIRONMENT_VALUE: + access_file_path_template = "abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +elif ENVIRONMENT == TEST_ENVIRONMENT_VALUE: + access_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" + +# 列出最新日期目录下的所有 Blob 文件 +def list_latest_blob_files(base_path_template): + try: + current_date = datetime.utcnow() + timedelta(hours=8) + date_path = current_date.strftime("%Y/%m/%d/") + base_path = base_path_template + date_path + + if path_exists(base_path): + all_files = list_files_recursive(base_path) + access_files = [file for file in all_files if is_access_file(file)] + if not access_files: + print("最新日期目录下未找到 Access 文件。") + return [] + else: + return access_files + else: + print(f"指定路径不存在: {base_path}") + return [] + except Exception as e: + print(f"列出路径模板 {base_path_template} 中的最新 Blob 文件时出错: {e}") + raise + +# 检查路径是否存在 +def path_exists(path): + try: + dbutils.fs.ls(path) + return True + except Exception as e: + if "java.io.FileNotFoundException" in str(e): + return False + else: + print(f"检查路径 {path} 时出错: {e}") + raise + +# 判断文件是否为 Access 文件 +def is_access_file(file_path): + return file_path.lower().endswith('.accdb') + +# 递归遍历目录以列出所有文件 +def list_files_recursive(path): + try: + files = [] + if path_exists(path): + for file_info in dbutils.fs.ls(path): + if file_info.isDir(): + files.extend(list_files_recursive(file_info.path)) + else: + files.append(file_info.path) + return files + except Exception as e: + print(f"列出路径 {path} 中的文件时出错: {e}") + raise + +# 设置原始路径模板 +# 测试路径 +# access_file_path_template = "abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" +# 生产路径 +# access_file_path_template = "abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/ODS/GND/UserUpload/" + +# 列出最新日期目录下的 Blob 文件 +latest_access_files = list_latest_blob_files(access_file_path_template) + +if latest_access_files: + try: + # 从配置表中读取配置数据 + config_df = spark.table("dwd.dwd_gnd_xiehe_config_table_mapping").toPandas() + + # 字段映射 + column_mapping = { + 'AREA': 'area', + 'Date': 'yq', + '医院级别': 'h_level', + 'DEPT_NAME': 'dept_name', + '报销': 'reimburse', + '报销类型': 'reimburse_type', + '处方来源': 'prescription_source', + 'ATC': 'atc', + '新code': 'new_code', + '通用名': 'common_name', + '商品名称': 'product_name', + '厂家': 'manu_des', + '规格': 'pack_des', + '给药途径': 'drug_delivery_route', + '剂型': 'nfc', + '处方张数': 'prescription', + '取药数量': 'sales_vol', + '单价': 'price', + '金额': 'sales_value' + } + + # 处理并合并最新的 Access 文件的数据 + all_dataframes = process_access_files_with_config(latest_access_files, config_df, column_mapping) + + if all_dataframes: + combined_spark_df = None + + for df, table_name in all_dataframes: + # 将更改字段名后的 DataFrame 转换为 Spark DataFrame + df.createOrReplaceTempView("temp_access_table") + spark.sql(f"CREATE TABLE IF NOT EXISTS {table_name} AS SELECT * FROM temp_access_table") + spark.sql(f"INSERT overwrite {table_name} SELECT * FROM temp_access_table") + + if combined_spark_df is None: + combined_spark_df = df + else: + combined_spark_df = combined_spark_df.union(df) + + # 合并所有写入的表成一个结果表 result + if combined_spark_df: + combined_spark_df.createOrReplaceTempView("combined_table") + spark.sql("create table if not exists dwd.dwd_inc_gnd_ext_xiehe_union_all as select * from combined_table") + spark.sql("insert overwrite dwd.dwd_inc_gnd_ext_xiehe_union_all select * from combined_table") + else: + print("Access 文件中没有找到数据。") + except Exception as e: + print(f"处理 Access 文件时出错: {e}") +else: + print("没有 Access 文件需要处理。") + + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC delete from dwd.dwd_gnd_ext_xiehe_raw_data +# MAGIC where yq in ( +# MAGIC select yq from dwd.dwd_inc_gnd_ext_xiehe_union_all t1 +# MAGIC where left(t1.etl_insert_dt, 10) = left(from_utc_timestamp(current_timestamp(),'UTC+8'),10) +# MAGIC ); +# MAGIC +# MAGIC insert into dwd.dwd_gnd_ext_xiehe_raw_data +# MAGIC ( +# MAGIC area, +# MAGIC yq, +# MAGIC h_level, +# MAGIC dept_name, +# MAGIC reimburse, +# MAGIC reimburse_type, +# MAGIC prescription_source, +# MAGIC atc, +# MAGIC new_code, +# MAGIC common_name, +# MAGIC product_name, +# MAGIC manu_des, +# MAGIC pack_des, +# MAGIC drug_delivery_route, +# MAGIC nfc, +# MAGIC prescription, +# MAGIC sales_vol, +# MAGIC price, +# MAGIC sales_value, +# MAGIC etl_insert_dt, +# MAGIC etl_update_dt +# MAGIC ) +# MAGIC select area, +# MAGIC yq, +# MAGIC h_level, +# MAGIC dept_name, +# MAGIC reimburse, +# MAGIC reimburse_type, +# MAGIC prescription_source, +# MAGIC atc, +# MAGIC new_code, +# MAGIC common_name, +# MAGIC product_name, +# MAGIC manu_des, +# MAGIC pack_des, +# MAGIC drug_delivery_route, +# MAGIC nfc, +# MAGIC prescription, +# MAGIC sales_vol, +# MAGIC price, +# MAGIC sales_value, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt, +# MAGIC from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt +# MAGIC from dwd.dwd_inc_gnd_ext_xiehe_union_all +# MAGIC where left(etl_insert_dt, 10) = left(from_utc_timestamp(current_timestamp(),'UTC+8'),10); diff --git a/XIEHE/bkp_02 dm_ext_xiehe_sales.sql b/XIEHE/bkp_02 dm_ext_xiehe_sales.sql new file mode 100644 index 0000000..64a8e10 --- /dev/null +++ b/XIEHE/bkp_02 dm_ext_xiehe_sales.sql @@ -0,0 +1,115 @@ +-- Databricks notebook source +-------------------------------------------------------------------------------- +--修改时间:20241025 +--修改人:FanXujia +--修改内容: +--协和的报销情况、报销类型、处方来源等字段与产品无关,不能放packinfo表,因此放事实表里 +-------------------------------------------------------------------------------- +--------------------------------------对协和raw data 数据挂上pack geo信息,并获取本同期数据--------------------------------------------------- +insert overwrite table dws.dws_ext_xiehe_raw_data +select + yyyymm + ,IQVIA_PACK_CODE + ,AUDIT_COD + ,h_level + ,reimburse + ,reimburse_type + ,prescription_source + ,area + ,dept_name + ,new_code + ,sum(prescription) prescription + ,SUM(sales_vol) counting_unit + ,SUM(price) price + ,SUM(sales_value) sales_value + ,sum(prescription_ly) prescription_ly + ,SUM(sales_vol_ly) counting_unit_ly + ,SUM(price_ly) price_ly + ,SUM(sales_value_ly) sales_value_ly + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_insert_dt + ,from_utc_timestamp(current_timestamp(),'UTC+8') etl_update_dt + FROM ( + select + cast(concat('20',left(yq,2))*100 + right(yq,1)*3 as int ) yyyymm + ,if( b.IQVIA_PACK_CODE REGEXP '^[0-9]',right(concat('000000000000',b.IQVIA_PACK_CODE),12),b.IQVIA_PACK_CODE) IQVIA_PACK_CODE --right(concat('0000000',b.IQVIA_PACK_CODE),7 ) + ,c.AUDIT_COD + ,a.h_level + ,a.reimburse + ,a.reimburse_type + ,a.prescription_source + ,a.area + ,a.dept_name + ,a.new_code + ,a.prescription + ,a.sales_vol + ,a.price + ,a.sales_value + ,0 as prescription_ly + ,0 as sales_vol_ly + ,0 as price_ly + ,0 as sales_value_ly + from dwd.dwd_gnd_ext_xiehe_raw_data a + left join (select DISTINCT pack_code,IQVIA_PACK_CODE from dwd.dwd_gnd_xiehe_pack_info) b on upper(b.pack_code) = upper(a.new_code) + left join dm.dm_ims_td_geo c on c.CITY_C = a.area + union all + select + cast(concat('20',left(yq,2))*100 + right(yq,1)*3 +100 as int ) yyyymm + ,if( b.IQVIA_PACK_CODE REGEXP '^[0-9]',right(concat('000000000000',b.IQVIA_PACK_CODE),12),b.IQVIA_PACK_CODE) IQVIA_PACK_CODE --right(concat('0000000',b.IQVIA_PACK_CODE),7 ) + ,c.AUDIT_COD + ,a.h_level + ,a.reimburse + ,a.reimburse_type + ,a.prescription_source + ,a.area + ,a.dept_name + ,a.new_code + ,0 as prescription + ,0 as sales_vol + ,0 as price + ,0 as sales_value + ,a.prescription as prescription_ly + ,a.sales_vol as sales_vol_ly + ,a.price as price_ly + ,a.sales_value as sales_value_ly + from dwd.dwd_gnd_ext_xiehe_raw_data a + left join (select DISTINCT pack_code,IQVIA_PACK_CODE from dwd.dwd_gnd_xiehe_pack_info) b on upper(b.pack_code) = upper(a.new_code) + left join dm.dm_ims_td_geo c on c.CITY_C = a.area + where cast(concat('20',left(yq,2))*100 + right(yq,1)*3 +100 as int ) + <=(SELECT MAX(cast(concat('20',left(yq,2))*100 + right(yq,1)*3 as int )) from dwd.dwd_gnd_ext_xiehe_raw_data ) + ) +GROUP BY + yyyymm + ,IQVIA_PACK_CODE + ,AUDIT_COD + ,h_level + ,reimburse + ,reimburse_type + ,prescription_source + ,area + ,dept_name + ,new_code + +-- COMMAND ---------- + +----------raw data 数据抽取到dm------------ +insert overwrite table dm.dm_ext_xiehe_sales +select + yyyymm + ,IQVIA_PACK_CODE + ,AUDIT_COD + ,h_level + ,reimburse + ,reimburse_type + ,prescription_source + ,area + ,dept_name + ,new_code + ,prescription + ,counting_unit + ,price + ,sales_value + ,prescription_ly + ,counting_unit_ly + ,price_ly + ,sales_value_ly +from dws.dws_ext_xiehe_raw_data diff --git a/XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql b/XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql new file mode 100644 index 0000000..b17dc59 --- /dev/null +++ b/XIEHE/bkp_03 dm_ext_xiehe_pack_property.sql @@ -0,0 +1,776 @@ +-- Databricks notebook source +---------------------------------------------在配置表中提取所需字段去重,并对编码类数据补位、公司名称简化、产品重新归属公司------------------------------------ +insert overwrite table tmp.tmp_ext_xiehe_pack_property_tmp +----code 补码 +---重新归属公司 +select + distinct + --20250428 chenwu iqivacode扩到12位,brandcode 扩到9位 + if( IQVIA_PACK_CODE REGEXP '^[0-9]',right(concat('000000000000',IQVIA_PACK_CODE),12),IQVIA_PACK_CODE) as IQVIA_PACK_CODE --right(concat('0000000', IQVIA_PACK_CODE),7) + ,right(concat('000000000', IQVIA_PROD_CODE),9) as IQVIA_PROD_CODE --right(concat('00000', IQVIA_PROD_CODE),5) + ,a.pack_des + ,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 + ,right(concat('000000', a.CMPS_COD),6) AS CMPS_COD + ,a.CMPS_DES + ,a.CMPS_DES_C + ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) as corp_cod + ,COALESCE(c.corp_des,b.corp_des,case when a.CORP_DES like '% GROUP%' then replace(a.CORP_DES,' GROUP','') else a.CORP_DES end) as CORP_DES + ,COALESCE(d.corp_des_c,a.corp_des_c ) as 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 + ,case when a.MNFL_COD = 'L' then 'L' else 'M' end MNFL_COD --chpa逻辑 + ,case when a.MNFL_DES='Local' then 'LOCAL' else 'MNC' end MNFL_DES --chpa逻辑 + -- ,a.MNFL_COD + -- ,a.MNFL_DES + ,a.NRDL_DESC + ,a.STGH_DES + ,a.PACK_LCH + ,a.PAED_DESC + ,a.PROD_DES + ,a.PROD_DES_C + ,a.TCM_DESC + ,CASE WHEN a.VBP_DESC IN ('VBP-IN','VBP-N/A') THEN 'VBP' ELSE 'Non VBP' END VBP_DESC --chpa逻辑 + -- ,a.VBP_DESC + ,a.Unit + ,a.Counting_Unit + ,a.Dosage_Unit +from dwd.dwd_gnd_xiehe_pack_info a +left join (select right(concat('000000000',prod_cod ),9) prod_cod,corp_cod + ,case when CORP_DES like '% GROUP%' then replace(CORP_DES,' GROUP','') else CORP_DES end 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', IQVIA_PROD_CODE),9)= b.prod_cod +--right(concat('00000',A.IQVIA_PROD_CODE ),5)= b.prod_cod +left join (select if( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,corp_cod + ,case when CORP_DES like '% GROUP%' then replace(CORP_DES,' GROUP','') else CORP_DES end 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 if( IQVIA_PACK_CODE REGEXP '^[0-9]',right(concat('000000000000',IQVIA_PACK_CODE),12),IQVIA_PACK_CODE) = c.pack_cod +--right(concat('0000000', IQVIA_PACK_CODE),7) = c.pack_cod +left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_xiehe_pack_info) 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_xiehe_pack_info) e On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod + +; + +--------关联tblmarket 数据 +-----MARKET +--第一步:先处理 Extend_Market 和 NOT_IN_FLAG 都为空的数据,代表有明确定义得市场 +insert overwrite table tmp.tmp_ext_xiehe_pack_property +select distinct + t2.market,t1.*, +t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio +from tmp.tmp_ext_xiehe_pack_property_tmp t1 +left join (select * from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NULL AND ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' )) t2 +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', coalesce(t1.IQVIA_PROD_CODE,'')),9) = case when t2.Product_Code is null then right(concat('000000000', coalesce(t1.IQVIA_PROD_CODE,'')),9) else right(concat('000000000', coalesce(t2.Product_Code,'')),9) end +-- and t1.IQVIA_PACK_CODE = case when t2.Pack_Code is null then t1.IQVIA_PACK_CODE else t2.Pack_Code end +and nvl(t1.STGH_DES,'') = case when t2.Strength is null then nvl(t1.STGH_DES,'') else nvl(t2.Strength,'') end +and right(concat('000000', coalesce(t1.CMPS_COD,'')),6) = case when t2.Molecule_Code is null then right(concat('000000', coalesce(t1.CMPS_COD,'')),6) else right(concat('000000', coalesce( t2.Molecule_Code ,'')),6) end +and if( coalesce(t1.IQVIA_PACK_CODE,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t1.IQVIA_PACK_CODE,'')),12),coalesce(t1.IQVIA_PACK_CODE,'')) += case when t2.pack_code is null +then if( coalesce(t1.IQVIA_PACK_CODE,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t1.IQVIA_PACK_CODE,'')),12),coalesce(t1.IQVIA_PACK_CODE,'')) +else if( coalesce(t2.pack_code,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t2.pack_code,'')),12),coalesce(t2.pack_code,'')) end +where t2.market is not null +; + +--第二步: +--处理 Extend_Market 为空,并且 NOT_IN_FLAG 有值的数据,代表反选定义市场的规则 +insert overwrite table tmp.tmp_ext_xiehe_pack_property_del +select distinct t2.market,t1.*,t2.bu,CASE WHEN t2.extend_market_ratio IS NULL THEN '1' ELSE t2.extend_market_ratio END AS Market_Ratio + from tmp.tmp_ext_xiehe_pack_property_tmp t1 + left join (select * from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NULL AND NOT_IN_FLAG = '0' ) t2 + 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', coalesce(t1.IQVIA_PROD_CODE,'')),9) = case when t2.Product_Code is null then right(concat('000000000', coalesce(t1.IQVIA_PROD_CODE,'')),9) else right(concat('000000000', coalesce(t2.Product_Code,'')),9) end + and nvl(t1.STGH_DES,'') = case when t2.Strength is null then nvl(t1.STGH_DES,'') else nvl(t2.Strength,'') end + and right(concat('000000', coalesce(t1.CMPS_COD,'')),6) = case when t2.Molecule_Code is null then right(concat('000000', coalesce(t1.CMPS_COD,'')),6) else right(concat('000000', coalesce( t2.Molecule_Code ,'')),6) end + and if( coalesce(t1.IQVIA_PACK_CODE,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t1.IQVIA_PACK_CODE,'')),12),coalesce(t1.IQVIA_PACK_CODE,'')) + = case when t2.pack_code is null + then if( coalesce(t1.IQVIA_PACK_CODE,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t1.IQVIA_PACK_CODE,'')),12),coalesce(t1.IQVIA_PACK_CODE,'')) + else if( coalesce(t2.pack_code,'') REGEXP '^[0-9]',right(concat('000000000000', coalesce(t2.pack_code,'')),12),coalesce(t2.pack_code,'')) end + where t2.market is not null + ; + +--!!!注意此段是反选的规则,故执行的是从已经定义好的TempMKT中删除数据 +--需要看TempMKT的字段结构,没有值的字段,在Value里面放个空值 +MERGE INTO tmp.tmp_ext_xiehe_pack_property AS t1 +USING tmp.tmp_ext_xiehe_pack_property_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 +; + + +---第三步: +--处理 Extend_Market 有值得数据,用已有市场,定义新的市场,带上系数 +insert into tmp.tmp_ext_xiehe_pack_property +select distinct + t2.Market, + t1.iqvia_pack_code , + t1.iqvia_prod_code + ,t1.pack_des + ,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 + ,t1.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.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 + ,t2.BU + ,case when t2.Extend_Market_Ratio is null then '1' end AS Market_Ratio --市场的系数若没有维护,默认为1 +from tmp.tmp_ext_xiehe_pack_property t1 +left join (select Market, BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ims_tblmarket WHERE Extend_Market IS NOT NULL) t2 on t1.Market=t2.Extend_Market +where t2.Market is not null +; + +-- COMMAND ---------- + +--补上未匹配到Market的pack +insert into tmp.tmp_ext_xiehe_pack_property +( +Market, +IQVIA_PACK_CODE, +IQVIA_PROD_CODE, +pack_des, +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_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, +STGH_DES, +PACK_LCH, +PAED_DESC, +PROD_DES, +PROD_DES_C, +TCM_DESC, +VBP_DESC, +Unit, +Counting_Unit, +Dosage_Unit, +bu, +Market_Ratio +) +select distinct +'Non Market' as Market, +t1.IQVIA_PACK_CODE, +t1.IQVIA_PROD_CODE, +t1.pack_des, +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, +t1.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.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, +'' as bu, +'1' as Market_Ratio +from tmp.tmp_ext_xiehe_pack_property_tmp t1 +left join tmp.tmp_ext_xiehe_pack_property t2 +on t1.IQVIA_PACK_CODE = t2.IQVIA_PACK_CODE +where t2.IQVIA_PACK_CODE is null + +-- COMMAND ---------- + +----------------------------------------------------补齐维度信息--------------------------- +------对属于az 的产品打上 is az 标识 +insert overwrite table dws.dws_ext_xiehe_pack_property +select + concat(t1.Market,'_',T1.IQVIA_PACK_CODE) as MARKET_PACK_KEY + ,t1.market + ,t1.IQVIA_PACK_CODE + ,t1.IQVIA_PROD_CODE + ,t1.pack_des + ,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 + ,t1.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.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 + ,t1.bu + ,t1.Market_Ratio + ,NRDL_ENTRY_DATE + ,case when ta.prod_code is null then 'N' ELSE 'Y' END IS_AZ + ,null as AZ_MAIN + ,BRANDTYPE.brand_type AS BRANDTYPE +from tmp.tmp_ext_xiehe_pack_property t1 +left join (select distinct Pack_Code,NRDL_ENTRY_DATE from dwd.dwd_ims_td_pack_additional_attribute ) t2 on t1.IQVIA_PACK_CODE =t2.Pack_Code +left join (select distinct IQVIA_PROD_CODE prod_code from tmp.tmp_ext_xiehe_pack_property where corp_cod='A5Z' ) ta on t1.IQVIA_PROD_CODE=ta.prod_code +LEFT JOIN dwd.dwd_gnd_ims_tblbrandtype BRANDTYPE ON t1.IQVIA_PACK_CODE = BRANDTYPE.PACK_COD +; + + +-- COMMAND ---------- + +----------------------------------------------------补齐维度信息--------------------------- +insert overwrite table tmp.tmp_dm_ext_xiehe_pack_property +select + t1.MARKET_PACK_KEY + ,t1.market + ,t1.IQVIA_PACK_CODE + ,t1.IQVIA_PROD_CODE + ,t1.pack_des + ,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 + ,t1.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.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 + ,t1.bu + ,t1.Market_Ratio + ,t1.NRDL_ENTRY_DATE + ,t1.IS_AZ + ,t1.AZ_MAIN + ,t1.BRANDTYPE + ,nvl(cla.class,'Others') class + ,ta.ta +from dws.dws_ext_xiehe_pack_property t1 +left join dwd.dwd_gnd_ext_retail_dim_ta ta on t1.market = ta.market +left join dwd.dwd_gnd_tblclass cla on t1.MARKET = case when cla.market is null then t1.market else cla.market end + and nvl(t1.iqvia_pack_code,'') = case when cla.pack_code is null then nvl(t1.iqvia_pack_code,'') + else if( cla.pack_code REGEXP '^[0-9]',right(concat('000000000000',cla.pack_code),12),cla.pack_code) end --right(concat('0000000',cla.pack_code ), 7) + and nvl(t1.IQVIA_PROD_CODE,'') = case when cla.product_code is null then nvl(t1.IQVIA_PROD_CODE ,'') + else right(concat('000000000',cla.product_code ),9 ) end --right(concat('00000',cla.product_code ),5 ) + and nvl(t1.CMPS_COD,'') = case when cla.molecule_code is null then nvl(t1.cmps_cod ,'') else right(concat('000000', cla.molecule_code),6 ) end + and nvl(t1.corp_cod,'') = case when cla.Corporation_code is null then nvl(t1.corp_cod ,'') else cla.Corporation_code end + and nvl(t1.manu_cod,'')= case when cla.Manufacturer_Code is null then nvl(t1.manu_cod,'') else cla.Manufacturer_Code end + and nvl(t1.atc1_cod,'')= case when cla.ATC1_Code is null then nvl(t1.atc1_cod ,'') else cla.ATC1_Code end + and nvl(t1.ATC2_COD,'') = case when cla.ATC2_Code is null then nvl(t1.ATC2_COD ,'') else cla.ATC2_Code end + and nvl(t1.ATC3_COD,'') = case when cla.ATC3_Code is null then nvl(t1.ATC3_COD ,'') else cla.ATC3_Code end + and nvl(t1.ATC4_COD,'') = case when cla.ATC4_Code is null then nvl(t1.ATC4_COD ,'') else cla.ATC4_Code end + and nvl(t1.app1_cod,'') = case when cla.NFC1_Code is null then nvl(t1.app1_cod ,'') else cla.NFC1_Code end + and nvl(t1.APP2_COD,'') = case when cla.NFC2_Code is null then nvl(t1.APP2_COD ,'') else cla.NFC2_Code end + and nvl(t1.APP3_COD,'') = case when cla.NFC3_Code is null then nvl(t1.APP3_COD ,'') else cla.NFC3_Code end + and nvl(t1.stgh_des,'') = case when cla.Strength is null then nvl(t1.stgh_des ,'') else cla.Strength end +; + + +-- COMMAND ---------- + +with ims_pack_property as ( +select + MARKET_PACK_KEY, + max(PACK_COD) as PACK_COD, + max(PACK_DES) as PACK_DES, + max(STGH_DES) as STGH_DES, + max(PACK_LCH) as PACK_LCH, + max(Family_Code) as Family_Code, + max(Family_Name) as Family_Name, + max(PROD_COD) as PROD_COD, + max(PROD_DES) as PROD_DES, + max(PROD_DES_C) as PROD_DES_C, + max(CMPS_COD) as CMPS_COD, + max(CMPS_DES) as CMPS_DES, + max(CMPS_DES_C) as CMPS_DES_C, + max(ATC1_COD) as ATC1_COD, + max(ATC2_COD) as ATC2_COD, + max(ATC3_COD) as ATC3_COD, + max(ATC4_COD) as ATC4_COD, + max(APP1_COD) as APP1_COD, + max(APP2_COD) as APP2_COD, + max(APP3_COD) as APP3_COD, + max(BIO_DESC) as BIO_DESC, + max(GENE_ORIG_DESC) as GENE_ORIG_DESC, + max(ETH_OTC_DESC) as ETH_OTC_DESC, + max(NRDL_DESC) as NRDL_DESC, + max(NRDL_Entry_Date) as NRDL_Entry_Date, + max(EDL_DESC) as EDL_DESC, + max(TCM_DESC) as TCM_DESC, + max(PAED_DESC) as PAED_DESC, + max(GQCE_DESC) as GQCE_DESC, + max(VBP_DESC) as VBP_DESC, + max(MANU_COD) as MANU_COD, + max(MANU_DES) as MANU_DES, + max(MANU_DES_C) as MANU_DES_C, + max(MNFL_COD) as MNFL_COD, + max(MNFL_DES) as MNFL_DES, + max(CORP_COD) as CORP_COD, + max(CORP_DES) as CORP_DES, + max(CORP_DES_C) as CORP_DES_C, + max(BrandType) as BrandType, + max(MARKET) as MARKET, + max(KEY_COMPETITOR) as KEY_COMPETITOR, + max(IS_AZ) as IS_AZ, + max(AZ_MAIN) as AZ_MAIN, + max(AZ_Related) as AZ_Related, + max(atc1_des) as atc1_des, + max(atc1_des_c) as atc1_des_c, + max(atc2_des) as atc2_des, + max(atc2_des_c) as atc2_des_c, + max(atc3_des) as atc3_des, + max(atc3_des_c) as atc3_des_c, + max(atc4_des) as atc4_des, + max(atc4_des_c) as atc4_des_c, + max(app1_des) as app1_des, + max(app1_des_c) as app1_des_c, + max(app2_des) as app2_des, + max(app2_des_c) as app2_des_c, + max(app3_des) as app3_des, + max(app3_des_c) as app3_des_c, + max(Class) as Class +from dm.dm_ims_td_pack_property +group by MARKET_PACK_KEY +) + +insert overwrite table dm.dm_ext_xiehe_pack_property ( +MARKET_PACK_KEY, +PACK_COD, +PACK_DES, +STGH_DES, +PACK_LCH, +Family_Code, +Family_Name, +PROD_COD, +PROD_DES, +PROD_DES_C, +CMPS_COD, +CMPS_DES, +CMPS_DES_C, +ATC1_COD, +ATC2_COD, +ATC3_COD, +ATC4_COD, +APP1_COD, +APP2_COD, +APP3_COD, +BIO_DESC, +GENE_ORIG_DESC, +ETH_OTC_DESC, +NRDL_DESC, +NRDL_Entry_Date, +EDL_DESC, +TCM_DESC, +PAED_DESC, +GQCE_DESC, +VBP_DESC, +MANU_COD, +MANU_DES, +MANU_DES_C, +MNFL_COD, +MNFL_DES, +CORP_COD, +CORP_DES, +CORP_DES_C, +BrandType, +MARKET, +KEY_COMPETITOR, +IS_AZ, +AZ_MAIN, +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, +Class, +ETL_INSERT_DT, +ETL_UPDATE_DT, +Market_Ratio, +counting_unit, +bu, +Dosage_Unit, +ta +) +select distinct + t1.market_pack_key, + t1.iqvia_pack_code as PACK_COD, + coalesce(t2.PACK_DES,t1.pack_des) as PACK_DES, + coalesce(t2.STGH_DES,t1.stgh_des) as STGH_DES, + coalesce(t2.PACK_LCH,t1.pack_lch) as PACK_LCH, + t2.Family_Code, + t2.Family_Name, + coalesce(t2.PROD_COD,t1.iqvia_prod_code) as PROD_COD, + coalesce(t2.PROD_DES,t1.prod_des) as PROD_DES, + coalesce(t2.PROD_DES_C,t1.prod_des_c) as PROD_DES_C, + coalesce(t2.CMPS_COD,t1.cmps_cod) as CMPS_COD, + coalesce(t2.CMPS_DES,t1.cmps_des) as CMPS_DES, + coalesce(t2.CMPS_DES_C,t1.cmps_des_c) as CMPS_DES_C, + coalesce(t2.ATC1_COD,t1.atc1_cod) as ATC1_COD, + coalesce(t2.ATC2_COD,t1.atc2_cod) as ATC2_COD, + coalesce(t2.ATC3_COD,t1.atc3_cod) as ATC3_COD, + coalesce(t2.ATC4_COD,t1.atc4_cod) as ATC4_COD, + coalesce(t2.APP1_COD,t1.app1_cod) as APP1_COD, + coalesce(t2.APP2_COD,t1.app2_cod) as APP2_COD, + coalesce(t2.APP3_COD,t1.app3_cod) as APP3_COD, + coalesce(t2.BIO_DESC,t1.bio_desc) as BIO_DESC, + coalesce(t2.GENE_ORIG_DESC,t1.gene_orig_desc) as GENE_ORIG_DESC, + coalesce(t2.ETH_OTC_DESC,t1.eth_otc_desc) as ETH_OTC_DESC, + coalesce(t2.NRDL_DESC,t1.nrdl_desc) as NRDL_DESC, + coalesce(t2.NRDL_Entry_Date,t1.NRDL_Entry_Date) as NRDL_Entry_Date, + coalesce(t2.EDL_DESC,t1.edl_desc) as EDL_DESC, + coalesce(t2.TCM_DESC,t1.tcm_desc) as TCM_DESC, + coalesce(t2.PAED_DESC,t1.paed_desc) as PAED_DESC, + coalesce(t2.GQCE_DESC,t1.gqce_desc) as GQCE_DESC, + coalesce(t2.VBP_DESC,t1.vbp_desc) as VBP_DESC, + coalesce(t2.MANU_COD,t1.manu_cod) as MANU_COD, + coalesce(t2.MANU_DES,t1.manu_des) as MANU_DES, + coalesce(t2.MANU_DES_C,t1.manu_des_c) as MANU_DES_C, + coalesce(t2.MNFL_COD,t1.mnfl_cod) as MNFL_COD, + coalesce(t2.MNFL_DES,t1.mnfl_des) as MNFL_DES, + coalesce(t2.CORP_COD,t1.corp_cod) as CORP_COD, + coalesce(t2.CORP_DES,t1.corp_des) as CORP_DES, + coalesce(t2.CORP_DES_C,t1.corp_des_c) as CORP_DES_C, + coalesce(t2.BrandType,t1.BrandType) as BrandType, + t1.market, + t2.KEY_COMPETITOR, + coalesce(t2.IS_AZ,t1.IS_AZ) as IS_AZ, + coalesce(t2.AZ_MAIN,t1.AZ_MAIN) as AZ_MAIN, + t2.AZ_Related, + coalesce(t2.atc1_des,t1.atc1_des) as atc1_des, + coalesce(t2.atc1_des_c,t1.atc1_des_c) as atc1_des_c, + coalesce(t2.atc2_des,t1.atc2_des) as atc2_des, + coalesce(t2.atc2_des_c,t1.atc2_des_c) as atc2_des_c, + coalesce(t2.atc3_des,t1.atc3_des) as atc3_des, + coalesce(t2.atc3_des_c,t1.atc3_des_c) as atc3_des_c, + coalesce(t2.atc4_des,t1.atc4_des) as atc4_des, + coalesce(t2.atc4_des_c,t1.atc4_des_c) as atc4_des_c, + coalesce(t2.app1_des,t1.app1_des) as app1_des, + coalesce(t2.app1_des_c,t1.app1_des_c) as app1_des_c, + coalesce(t2.app2_des,t1.app2_des) as app2_des, + coalesce(t2.app2_des_c,t1.app2_des_c) as app2_des_c, + coalesce(t2.app3_des,t1.app3_des) as app3_des, + coalesce(t2.app3_des_c,t1.app3_des_c) as app3_des_c, + coalesce(t2.Class,t1.Class) as Class, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT, + cast(t1.market_ratio as decimal(30,10)) as market_ratio, + coalesce(cast(t1.counting_unit / coalesce(t1.unit,1) as decimal(30,10)),1) as counting_unit, + t1.bu, + t1.Dosage_Unit, + t1.ta +from tmp.tmp_dm_ext_xiehe_pack_property t1 +left join ims_pack_property t2 +on t1.market_pack_key = t2.market_pack_key +where t1.market <> 'Non Market' +union +select distinct + concat('XIEHE ALL Market_',t1.iqvia_pack_code) as market_pack_key, + t1.iqvia_pack_code as PACK_COD, + max(coalesce(t2.PACK_DES,t1.pack_des)) as PACK_DES, + max(coalesce(t2.STGH_DES,t1.stgh_des)) as STGH_DES, + max(coalesce(t2.PACK_LCH,t1.pack_lch)) as PACK_LCH, + max(t2.Family_Code) as Family_Code, + max(t2.Family_Name) as Family_Name, + max(coalesce(t2.PROD_COD,t1.iqvia_prod_code)) as PROD_COD, + max(coalesce(t2.PROD_DES,t1.prod_des)) as PROD_DES, + max(coalesce(t2.PROD_DES_C,t1.prod_des_c)) as PROD_DES_C, + max(coalesce(t2.CMPS_COD,t1.cmps_cod)) as CMPS_COD, + max(coalesce(t2.CMPS_DES,t1.cmps_des)) as CMPS_DES, + max(coalesce(t2.CMPS_DES_C,t1.cmps_des_c)) as CMPS_DES_C, + max(coalesce(t2.ATC1_COD,t1.atc1_cod)) as ATC1_COD, + max(coalesce(t2.ATC2_COD,t1.atc2_cod)) as ATC2_COD, + max(coalesce(t2.ATC3_COD,t1.atc3_cod)) as ATC3_COD, + max(coalesce(t2.ATC4_COD,t1.atc4_cod)) as ATC4_COD, + max(coalesce(t2.APP1_COD,t1.app1_cod)) as APP1_COD, + max(coalesce(t2.APP2_COD,t1.app2_cod)) as APP2_COD, + max(coalesce(t2.APP3_COD,t1.app3_cod)) as APP3_COD, + max(coalesce(t2.BIO_DESC,t1.bio_desc)) as BIO_DESC, + max(coalesce(t2.GENE_ORIG_DESC,t1.gene_orig_desc)) as GENE_ORIG_DESC, + max(coalesce(t2.ETH_OTC_DESC,t1.eth_otc_desc)) as ETH_OTC_DESC, + max(coalesce(t2.NRDL_DESC,t1.nrdl_desc)) as NRDL_DESC, + max(coalesce(t2.NRDL_Entry_Date,t1.NRDL_Entry_Date)) as NRDL_Entry_Date, + max(coalesce(t2.EDL_DESC,t1.edl_desc)) as EDL_DESC, + max(coalesce(t2.TCM_DESC,t1.tcm_desc)) as TCM_DESC, + max(coalesce(t2.PAED_DESC,t1.paed_desc)) as PAED_DESC, + max(coalesce(t2.GQCE_DESC,t1.gqce_desc)) as GQCE_DESC, + max(coalesce(t2.VBP_DESC,t1.vbp_desc)) as VBP_DESC, + max(coalesce(t2.MANU_COD,t1.manu_cod)) as MANU_COD, + max(coalesce(t2.MANU_DES,t1.manu_des)) as MANU_DES, + max(coalesce(t2.MANU_DES_C,t1.manu_des_c)) as MANU_DES_C, + max(coalesce(t2.MNFL_COD,t1.mnfl_cod)) as MNFL_COD, + max(coalesce(t2.MNFL_DES,t1.mnfl_des)) as MNFL_DES, + max(coalesce(t2.CORP_COD,t1.corp_cod)) as CORP_COD, + max(coalesce(t2.CORP_DES,t1.corp_des)) as CORP_DES, + max(coalesce(t2.CORP_DES_C,t1.corp_des_c)) as CORP_DES_C, + max(coalesce(t2.BrandType,t1.BrandType)) as BrandType, + 'XIEHE ALL Market' as MARKET, + max(t2.KEY_COMPETITOR) as KEY_COMPETITOR, + max(coalesce(t2.IS_AZ,t1.IS_AZ)) as IS_AZ, + max(coalesce(t2.AZ_MAIN,t1.AZ_MAIN)) as AZ_MAIN, + max(t2.AZ_Related) as AZ_Related, + max(coalesce(t2.atc1_des,t1.atc1_des)) as atc1_des, + max(coalesce(t2.atc1_des_c,t1.atc1_des_c)) as atc1_des_c, + max(coalesce(t2.atc2_des,t1.atc2_des)) as atc2_des, + max(coalesce(t2.atc2_des_c,t1.atc2_des_c)) as atc2_des_c, + max(coalesce(t2.atc3_des,t1.atc3_des)) as atc3_des, + max(coalesce(t2.atc3_des_c,t1.atc3_des_c)) as atc3_des_c, + max(coalesce(t2.atc4_des,t1.atc4_des)) as atc4_des, + max(coalesce(t2.atc4_des_c,t1.atc4_des_c)) as atc4_des_c, + max(coalesce(t2.app1_des,t1.app1_des)) as app1_des, + max(coalesce(t2.app1_des_c,t1.app1_des_c)) as app1_des_c, + max(coalesce(t2.app2_des,t1.app2_des)) as app2_des, + max(coalesce(t2.app2_des_c,t1.app2_des_c)) as app2_des_c, + max(coalesce(t2.app3_des,t1.app3_des)) as app3_des, + max(coalesce(t2.app3_des_c,t1.app3_des_c)) as app3_des_c, + max(coalesce(t2.Class,t1.Class)) as Class, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_INSERT_DT, + from_utc_timestamp(current_timestamp(),'UTC+8') as ETL_UPDATE_DT, + max(cast(t1.market_ratio as decimal(30,10))) as market_ratio, + coalesce(max(cast(t1.counting_unit / coalesce(t1.unit,1) as decimal(30,10))),1) as counting_unit, + max(t1.bu) as bu, + max(t1.Dosage_Unit) as Dosage_Unit, + max(t1.ta) as ta +from tmp.tmp_dm_ext_xiehe_pack_property t1 +left join ims_pack_property t2 +on t1.market_pack_key = t2.market_pack_key +group by t1.iqvia_pack_code diff --git a/county/01 tmp_ims_county_fact_sales_sum.sql b/county/01 tmp_ims_county_fact_sales_sum.sql new file mode 100644 index 0000000..c544c56 --- /dev/null +++ b/county/01 tmp_ims_county_fact_sales_sum.sql @@ -0,0 +1,60 @@ +-- Databricks notebook source +--笛卡尔积生成PKAU维度表 +insert overwrite table tmp.tmp_ims_county_pack_audit +SELECT + PACK.Pack_ID, + if( Pack_Code REGEXP '^[0-9]',right(concat('000000000000',Pack_Code),12),Pack_Code) as PACK_CODE,--RIGHT(concat('0000000',Pack_Code),7) + AUDI.Audit_ID, + AUDI.Audit_Name AS AUDIT_COD, + concat(REPLACE(AUDI.Audit_Name,' ','') , '_', if( Pack_Code REGEXP '^[0-9]',right(concat('000000000000',Pack_Code),12),Pack_Code))as PKAU_INDEX, + from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, + from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +FROM dwd.dwd_gnd_county_dim_pack PACK +CROSS JOIN ( + SELECT + Audit_ID, + Audit_Type, + Audit_Name + FROM dwd.dwd_gnd_county_dim_audit +) AUDI + +-- COMMAND ---------- + +---------------------------------------------事实表添加lastyear的KPI字段--------------------------------------------- +insert overwrite table tmp.tmp_ims_county_fact_sales_sum +select +distinct +t1.qtr +,left(t1.qtr,4)*100+right(t1.qtr,1)*3 as yyyymm +,t2.pack_code as pack_cod +,t2.audit_cod as region_cod +,sum(SalesValue_LC ) as SalesValue_LC +,sum(SalesValue_LC_LY) as SalesValue_LC_LY +,sum(Counting_Unit ) as Counting_Unit +,sum(Counting_Unit_LY) as Counting_Unit_LY +,sum(Sales_Unit ) as Sales_Unit +,sum(Sales_Unit_LY) as Sales_Unit_LY +,from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt +,from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from( + select DISTINCT left(concat(year,'Q',month/3),6) as qtr,pack_id,audit_id, + nvl(SalesValue_LC,0) AS SalesValue_LC, + 0 AS SalesValue_LC_LY, + nvl(Counting_Unit,0) AS Counting_Unit, + 0 AS Counting_Unit_LY, + nvl(Sales_Unit,0) AS Sales_Unit, + 0 AS Sales_Unit_LY + from dwd.dwd_gnd_county_fact_sales + union all + select DISTINCT left(concat(left(year,4),'Q',month/3),6) as qtr,pack_id,audit_id, + 0 AS SalesValue_LC, + nvl(SalesValue_LC,0) AS SalesValue_LC_LY, + 0 AS Counting_Unit, + nvl(Counting_Unit,0) AS Counting_Unit_LY, + 0 AS Sales_Unit, + nvl(Sales_Unit,0) AS Sales_Unit_LY + from (select DISTINCT year+1 as year,month,SalesValue_LC,Counting_Unit,Sales_Unit,pack_id,audit_id from dwd.dwd_gnd_county_fact_sales) fact_ly + where year*100+month in (select distinct year*100+month from dwd.dwd_gnd_county_fact_sales) +)t1 +left join tmp.tmp_ims_county_pack_audit t2 on t1.pack_id=t2.pack_id and t1.audit_id=t2.audit_id +group by t1.qtr,t2.pack_code,t2.audit_cod diff --git a/county/02 tmp_imscounty_Result.sql b/county/02 tmp_imscounty_Result.sql new file mode 100644 index 0000000..659b4e2 --- /dev/null +++ b/county/02 tmp_imscounty_Result.sql @@ -0,0 +1,64 @@ +-- Databricks notebook source +-------------------------------------county新倒减拆分需求代码示例之KPI递减------------------------------------- +insert overwrite table tmp.tmp_imscounty_Result +with ObuEast5 as ( + --取OBU 东五的数据(仅包含L01+L02) + SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY +FROM tmp.tmp_ims_county_fact_sales_sum +WHERE region_cod = 'County2' +),CountyProv as ( + --得到省份的数据 +SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY +FROM tmp.tmp_ims_county_fact_sales_sum +WHERE region_cod NOT IN ('County','County2','National') +) +,CountyProvSH as ( + --取河南、四川的数据(肿瘤+非肿瘤) + SELECT YYYYMM,pack_cod,SUM(Counting_Unit) Counting_Unit,sum(Counting_Unit_LY) Counting_Unit_LY,SUM(Sales_Unit) Sales_Unit,sum(Sales_Unit_LY) Sales_Unit_LY,SUM(SalesValue_LC) SalesValue_LC,sum(SalesValue_LC_LY) SalesValue_LC_LY + FROM CountyProv + WHERE region_cod IN ('Sichuan','Henan') + GROUP BY YYYYMM,pack_cod +),BBU_Other as ( + --减去重复的四川河南部分的BBU County数据,即可得到BBU Others数据 + --BBU County = BBU_OtherProv+四川+河南(肿瘤+非肿瘤产品) + SELECT A.YYYYMM,'BBU_OtherProv' region_cod,A.pack_cod,A.Counting_Unit-NVL(B.Counting_Unit,0) Counting_Unit,A.Counting_Unit_LY-NVL(B.Counting_Unit_LY,0) Counting_Unit_LY, + A.Sales_Unit-NVL(B.Sales_Unit,0) Sales_Unit, A.Sales_Unit_LY-NVL(B.Sales_Unit_LY,0) Sales_Unit_LY,A.SalesValue_LC-NVL(B.SalesValue_LC,0) SalesValue_LC,A.SalesValue_LC_LY-NVL(B.SalesValue_LC_LY,0) SalesValue_LC_LY + FROM tmp.tmp_ims_county_fact_sales_sum A + LEFT JOIN CountyProvSH B ON A.YYYYMM = B.YYYYMM AND + A.pack_cod = B.pack_cod + WHERE A.region_cod = 'County' +),CountyProvOthers_tmp as ( + --取山东、江苏、浙江、广东四省数据 + SELECT YYYYMM,pack_cod,SUM(Counting_Unit) Counting_Unit,sum(Counting_Unit_LY) Counting_Unit_LY,SUM(Sales_Unit) Sales_Unit,sum(Sales_Unit_LY) Sales_Unit_LY,SUM(SalesValue_LC) SalesValue_LC,sum(SalesValue_LC_LY) SalesValue_LC_LY + FROM CountyProv + WHERE region_cod IN ('Shandong','Jiangsu','Zhejiang','Guangdong') + GROUP BY YYYYMM,pack_cod +),CountyProvFJ as ( + --通过OBU东五的数据倒减四省数据,得到福建省的数据 + SELECT A.YYYYMM, 'OBU_OtherProv' region_cod,A.pack_cod,A.Counting_Unit-NVL(B.Counting_Unit,0) Counting_Unit,A.Counting_Unit_LY-NVL(B.Counting_Unit_LY,0) Counting_Unit_LY, + A.Sales_Unit-NVL(B.Sales_Unit,0) Sales_Unit, A.Sales_Unit_LY-NVL(B.Sales_Unit_LY,0) Sales_Unit_LY,A.SalesValue_LC-NVL(B.SalesValue_LC,0) SalesValue_LC,A.SalesValue_LC_LY-NVL(B.SalesValue_LC_LY,0) SalesValue_LC_LY + FROM ObuEast5 A + LEFT JOIN CountyProvOthers_tmp B ON A.YYYYMM = B.YYYYMM AND A.pack_cod = B.pack_cod +),Result_NonOthers as ( + --汇总省份+BBU other+obu otter + SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY + FROM CountyProv + UNION ALL + SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY + FROM CountyProvFJ + UNION ALL + SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY + FROM BBU_Other +),Result_NonOthersGroup AS ( + --用于全国产品数据倒减,得到other省份数据 + SELECT YYYYMM,pack_cod,SUM(Counting_Unit) Counting_Unit,sum(Counting_Unit_LY) Counting_Unit_LY,SUM(Sales_Unit) Sales_Unit,sum(Sales_Unit_LY) Sales_Unit_LY,SUM(SalesValue_LC) SalesValue_LC,sum(SalesValue_LC_LY) SalesValue_LC_LY + FROM Result_NonOthers + GROUP BY YYYYMM,pack_cod +) +SELECT YYYYMM,region_cod,pack_cod,SalesValue_LC,SalesValue_LC_LY,Counting_Unit,Counting_Unit_LY,Sales_Unit,Sales_Unit_LY + FROM Result_NonOthers + UNION ALL + SELECT A.YYYYMM,'Others' region_cod,A.pack_cod,A.SalesValue_LC-NVL(B.SalesValue_LC,0) SalesValue_LC,A.SalesValue_LC_LY-NVL(B.SalesValue_LC_LY,0) SalesValue_LC_LY,A.Counting_Unit-NVL(B.Counting_Unit,0) Counting_Unit,A.Counting_Unit_LY-NVL(B.Counting_Unit_LY,0) Counting_Unit_LY, + A.Sales_Unit-NVL(B.Sales_Unit,0) Sales_Unit, A.Sales_Unit_LY-NVL(B.Sales_Unit_LY,0) Sales_Unit_LY + FROM (SELECT * from tmp.tmp_ims_county_fact_sales_sum WHERE region_cod = 'National') A + LEFT JOIN Result_NonOthersGroup B ON A.YYYYMM = B.YYYYMM AND A.pack_cod = B.pack_cod diff --git a/county/03 dm_ims_td_county_geo.sql b/county/03 dm_ims_td_county_geo.sql new file mode 100644 index 0000000..8adad6b --- /dev/null +++ b/county/03 dm_ims_td_county_geo.sql @@ -0,0 +1,24 @@ +-- Databricks notebook source +-----------------------------------------------创建county geo表----------------------------------------------- +insert overwrite table dm.dm_ims_td_county_geo +with geo as ( + select + distinct + REGION_COD +from tmp.tmp_imscounty_Result +) +select distinct +case when A.PROVINCE_CODE is not null then A.PROVINCE_CODE + when A.PROVINCE_CODE is null and geo.REGION_COD = 'Others' then 'ROC' + when A.PROVINCE_CODE is null and geo.REGION_COD = 'OBU_OtherProv' then 'OBUROC' + when A.PROVINCE_CODE is null and geo.REGION_COD = 'BBU_OtherProv' then 'BBUROC' + end AUDIT_COD, +geo.REGION_COD, +nvl(A.PROVINCE_C,geo.REGION_COD ) PROVINCE_C, +nvl(A.PROVINCE_MAP,geo.REGION_COD ) PROVINCE_MAP, +nvl(INITCAP(A.REGION_CENTER),geo.REGION_COD ) REGION_CENTER +from geo +left join (select * from dm.dm_ims_td_geo where PROVINCE_CODE is not null) A +on geo.REGION_COD = A.PROVINCE + + diff --git a/county/04 dws_ext_county_tf_sales.sql b/county/04 dws_ext_county_tf_sales.sql new file mode 100644 index 0000000..290f248 --- /dev/null +++ b/county/04 dws_ext_county_tf_sales.sql @@ -0,0 +1,36 @@ +-- Databricks notebook source +---------------------------------bbu county、obu county拆分需求代码示例之事实表字段开发--------------------------------- +insert overwrite table dws.dws_ext_county_tf_sales +select +distinct +cast(cast(t1.YYYYMM as int) as string) as YYYYMM +,concat(left(cast(t1.YYYYMM as int),4 ),'-',right(cast(t1.YYYYMM as int),2),'-01') as DAY_DATE +,t1.pack_cod as PACK_COD +,t1.region_cod as REGION_COD +,geo.AUDIT_COD +,'ALL' as RELATED_FLAG +,'' as ORG_KEY +,'IMS ALL Market' as MARKET +, concat('IMS ALL Market','_',t1.pack_cod ) as MARKET_PACK_KEY +,'' as MARKET_AUDIT_KEY +,'' as SALES_VALUE +,'' as SALES_VALUE_LY +,'' as SALES_VALUE_L2Y +,'' as SALES_UNIT +,'' as SALES_UNIT_LY +,'' as SALES_UNIT_L2Y +,t1.Counting_Unit as CONUTING_UNIT +,t1.Counting_Unit_LY as CONUTING_UNIT_LY +,'' as CONUTING_UNIT_L2Y +,t1.Counting_Unit as PDOT +,'' as PDOT_LY +,'' as PDOT_L2Y +,t1.SalesValue_LC as SALES_VALUE_CAL +,t1.SalesValue_LC_LY as SALES_VALUE_CAL_LY +,t1.Sales_Unit as SALES_UNIT_CAL +,t1.Sales_Unit_LY as SALES_UNIT_CAL_LY +,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_imscounty_Result t1 +left join dm.dm_ims_td_county_geo geo +on t1.region_cod = geo.REGION_COD diff --git a/county/05 dm_ext_county_td_pack_property.sql b/county/05 dm_ext_county_td_pack_property.sql new file mode 100644 index 0000000..a914f2f --- /dev/null +++ b/county/05 dm_ext_county_td_pack_property.sql @@ -0,0 +1,236 @@ +-- Databricks notebook source +-- county 自己的维度表 dm_ext_county_td_pack_property +insert overwrite table dm.dm_ext_county_td_pack_property --------------------------------------------county事实表中与CHPA匹配到的维度信息-------------------------------------------- + with county_matched_value as ( + select + concat(t2.MARKET,t1.PACK_COD) as MARKET_PACK_KEY, + t1.PACK_COD, + t1.PACK_DES, + t1.STGH_DES, + t1.PACK_LCH, + t1.Family_Code, + t1.Family_Name, + t1.PROD_COD, + t1.PROD_DES, + t1.PROD_DES_C, + t1.CMPS_COD, + t1.CMPS_DES, + t1.ATC1_COD, + t1.ATC2_COD, + t1.ATC3_COD, + t1.ATC4_COD, + t1.APP1_COD, + t1.APP2_COD, + t1.APP3_COD, + t1.BIO_DESC, + t1.GENE_ORIG_DESC, + t1.ETH_OTC_DESC, + t1.NRDL_DESC, + t1.NRDL_Entry_Date, + t1.EDL_DESC, + t1.TCM_DESC, + t1.PAED_DESC, + t1.GQCE_DESC, + t1.VBP_DESC, + t1.MANU_COD, + t1.MANU_DES, + t1.MNFL_COD, + t1.MNFL_DES, + t1.CORP_COD, + t1.CORP_DES, + t1.CORP_DES_C, + t1.BrandType, + t2.MARKET, + t2.KEY_COMPETITOR, + t1.IS_AZ, + t1.AZ_MAIN, + null AZ_Related, + t1.atc1_des, + t1.atc1_des_c, + t1.atc2_des, + t1.atc2_des_c, + t1.atc3_des, + t1.atc3_des_c, + t1.atc4_des, + t1.atc4_des_c, + t1.app1_des, + t1.app1_des_c, + t1.app2_des, + t1.app2_des_c, + t1.app3_des, + t1.app3_des_c, + t2.Class, + t1.ETL_INSERT_DT, + t1.ETL_UPDATE_DT + from + dm.dm_ims_td_pack_property t1 +left join DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING t2 on t1.PACK_COD = t2.PACK_CODE +--事实表中有yyyymm字段,故要去重,防止数据发散 + + inner join ( + select distinct + PACK_COD + from + dws.dws_ext_county_tf_sales + ) t3 on t1.PACK_COD = t3.PACK_COD + ), + -------------------------------county事实表中与CHPA没有匹配到的维度信息取county维度表里的维度信息------------------------------- + --获取county表与CHPA没有匹配到的MARKET_PACK_KEY + county_notmatched_key as (select + t3.PACK_COD + from + ( + select distinct + PACK_COD + from + dws.dws_ext_county_tf_sales + ) t3 + where + not exists ( + select + 1 + from + dm.dm_ims_td_pack_property t4 + where + t3.PACK_COD = t4.PACK_COD + ) + ), + county_notmatched_value as (--获取county维度表里的维度信息 + select + distinct + t6.MARKET_PACK_KEY, + t6.PACK_COD, + t6.PACK_DES, + t6.STGH_DES, + t6.PACK_LCH, + t6.Family_Code, + t6.Family_Name, + t6.PROD_COD, + t6.PROD_DES, + t6.PROD_DES_C, + t6.CMPS_COD, + t6.CMPS_DES, + t6.ATC1_COD, + t6.ATC2_COD, + t6.ATC3_COD, + t6.ATC4_COD, + t6.APP1_COD, + t6.APP2_COD, + t6.APP3_COD, + t6.BIO_DESC, + t6.GENE_ORIG_DESC, + t6.ETH_OTC_DESC, + t6.NRDL_DESC, + t6.NRDL_Entry_Date, + t6.EDL_DESC, + t6.TCM_DESC, + t6.PAED_DESC, + t6.GQCE_DESC, + t6.VBP_DESC, + t6.MANU_COD, + t6.MANU_DES, + t6.MNFL_COD, + t6.MNFL_DES, + t6.CORP_COD, + t6.CORP_DES, + t6.CORP_DES_C, + t6.BrandType, + t6.MARKET, + t6.KEY_COMPETITOR, + t6.IS_AZ, + t6.AZ_MAIN, + t6.AZ_Related, + t6.atc1_des, + t6.atc1_des_c, + t6.atc2_des, + t6.atc2_des_c, + t6.atc3_des, + t6.atc3_des_c, + t6.atc4_des, + t6.atc4_des_c, + t6.app1_des, + t6.app1_des_c, + t6.app2_des, + t6.app2_des_c, + t6.app3_des, + t6.app3_des_c, + t6.Class, + from_utc_timestamp(current_timestamp, 'UTC+8') ETL_INSERT_DT, + from_utc_timestamp(current_timestamp, 'UTC+8') ETL_UPDATE_DT + from + county_notmatched_key t5 + left join dm.dm_ims_county_td_pack_property t6 --此表有重复数据(etl时间不同) + on t5.PACK_COD = t6.PACK_COD + ), + county_total_pack_property as (select + * + from + county_matched_value + union + select + * + from + county_notmatched_value + ) + select + MARKET_PACK_KEY, + PACK_COD, + PACK_DES, + STGH_DES, + PACK_LCH, + Family_Code, + Family_Name, + PROD_COD, + PROD_DES, + PROD_DES_C, + CMPS_COD, + CMPS_DES, + ATC1_COD, + ATC2_COD, + ATC3_COD, + ATC4_COD, + APP1_COD, + APP2_COD, + APP3_COD, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_Entry_Date, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + VBP_DESC, + MANU_COD, + MANU_DES, + MNFL_COD, + MNFL_DES, + CORP_COD, + CORP_DES, + CORP_DES_C, + BrandType, + MARKET, + upper(NVL(KEY_COMPETITOR, 'Others')) as KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + 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, + Class, + ETL_INSERT_DT, + ETL_UPDATE_DT + from + county_total_pack_property \ No newline at end of file diff --git a/county/06 dm_td_county_pack_region.sql b/county/06 dm_td_county_pack_region.sql new file mode 100644 index 0000000..fa14bdd --- /dev/null +++ b/county/06 dm_td_county_pack_region.sql @@ -0,0 +1,106 @@ +-- Databricks notebook source +-- --OBU COUNTY 改为 OBU EAST5、OBU_BU_COUNTY 改为 OBU NON EAST5 +-- drop table if exists dm.dm_td_county_pack_region; +-- create table if not exists dm.dm_td_county_pack_region +-- using delta +-- as +-- with tmp as ( +-- select +-- t1.pack_cod, +-- t1.region_cod, +-- t2.ATC1_COD, +-- t2.ATC2_COD +-- from (select distinct PACK_COD,REGION_COD from dws.dws_ext_county_tf_sales) t1 +-- left join (select distinct PACK_COD,ATC1_COD,ATC2_COD from dm.dm_ext_county_td_pack_property) t2 +-- on t1.PACK_COD = t2.pack_cod +-- ),obu_county as ( +-- select pack_cod,region_cod,'OBU East5' region_type from tmp where region_cod in ('Shandong','Jiangsu','Zhejiang','Guangdong','OBU_OtherProv') and (ATC2_COD = 'L01' OR ATC2_COD = 'L02')--ATC1_COD = 'L' +-- ),bbu_county as ( +-- select pack_cod,region_cod,'BBU COUNTY' region_type from tmp where region_cod in('Henan','Sichuan','BBU_OtherProv') +-- and ATC1_COD <> 'L' +-- ),bbu_bu_county as ( +-- select pack_cod,region_cod,'BBU_BU_COUNTY' region_type from tmp where region_cod in ('Guangdong','Zhejiang','Shandong','Jiangsu','Others') and ATC1_COD <> 'L' +-- ),obu_bu_county as ( +-- select pack_cod,region_cod,'OBU NonEast5' region_type from tmp where region_cod in ('Henan','Sichuan','Others','BBU_OtherProv') and (ATC2_COD = 'L01' OR ATC2_COD = 'L02') +-- ),county_all as ( +-- select * from obu_county +-- union +-- select * from bbu_county +-- union +-- select * from bbu_bu_county +-- union +-- select * from obu_bu_county +-- ) +-- select +-- pack_cod, +-- region_cod, +-- region_type +-- from county_all order by region_type + +-- COMMAND ---------- + +---------------------------------------------------------------------------------- +--修改时间:20240913 +--修改人:FanXujia +--修改内容: +--划分BBU_COUNTY、BBU_BU_COUNTY两个区域时,去掉ATC1_COD <> 'L'的限制 +--这个需求使得BBU和OBU会有一部分重叠的区域 +--因此对区域划分逻辑进行调整 +-----几个region_cod的含义 +--OBU_OtherProv:福建的ATC2=L01、L02 +--BBU_OtherProv:BBU_COUNTY的18个省减去四川、河南 +--Others:其他省份,这里面包含了福建的ATC2<>L01、L02的数 +---------------------------------------------------------------------------------- +insert overwrite table dm.dm_td_county_pack_region +with tmp as ( + select + t1.pack_cod, + t1.region_cod, + t2.ATC1_COD, + t2.ATC2_COD +from (select distinct PACK_COD,REGION_COD from dws.dws_ext_county_tf_sales) t1 +left join (select distinct PACK_COD,ATC1_COD,ATC2_COD from dm.dm_ext_county_td_pack_property) t2 +on t1.PACK_COD = t2.pack_cod +) +--单独bbu_bu_county +,bbu_bu_county as ( + select pack_cod,region_cod,'BBU_BU_COUNTY' region_type from tmp + where region_cod in ('Guangdong','Jiangsu','Others','Shandong','Zhejiang') and ATC2_COD NOT IN ('L01','L02') +) +--bbu_bu_county与OBU East5共有 +,bbu_bu_county_obu_East5 as ( + select pack_cod,region_cod,'bbu_bu_county_obu_East5' region_type from tmp + where region_cod in ('Guangdong','Jiangsu','Shandong','Zhejiang','OBU_OtherProv') and ATC2_COD in ('L01','L02') +) +--bbu_bu_county与OBU NonEast5共有 +,bbu_bu_county_obu_nonEast5 as ( + select pack_cod,region_cod,'bbu_bu_county_obu_nonEast5' region_type from tmp + where region_cod in ('Others') and ATC2_COD in ('L01','L02') +) +--bbu_county与OBU NonEast5共有 +,bbu_county_obu_nonEast5 as ( + select pack_cod,region_cod,'bbu_county_obu_nonEast5' region_type from tmp + where region_cod in ('BBU_OtherProv','Henan','Sichuan') and ATC2_COD in ('L01','L02') +) +--单独bbu_county +,bbu_county as ( + select pack_cod,region_cod,'BBU County' region_type from tmp + where region_cod in('BBU_OtherProv','Henan','Sichuan') and ATC2_COD NOT IN ('L01','L02') +) +--全部 +,county_all as ( + select * from bbu_bu_county + union + select * from bbu_bu_county_obu_East5 + union + select * from bbu_bu_county_obu_nonEast5 + union + select * from bbu_county_obu_nonEast5 + union + select * from bbu_county +) +select + pack_cod, + region_cod, + region_type +from county_all order by region_type diff --git a/county/07 dm_ext_county_tf_sales_region.sql b/county/07 dm_ext_county_tf_sales_region.sql new file mode 100644 index 0000000..73ec3f4 --- /dev/null +++ b/county/07 dm_ext_county_tf_sales_region.sql @@ -0,0 +1,37 @@ +-- Databricks notebook source +--county事实表加上region_type字段 +insert overwrite table dm.dm_ext_county_tf_sales_region +select + A.YYYYMM, + A.DAY_DATE, + A.PACK_COD, + A.REGION_COD, + A.AUDIT_COD, + A.RELATED_FLAG, + A.ORG_KEY, + A.MARKET, + A.MARKET_PACK_KEY, + A.MARKET_AUDIT_KEY, + A.SALES_VALUE, + A.SALES_VALUE_LY, + A.SALES_VALUE_L2Y, + A.SALES_UNIT, + A.SALES_UNIT_LY, + A.SALES_UNIT_L2Y, + A.CONUTING_UNIT, + A.CONUTING_UNIT_LY, + A.CONUTING_UNIT_L2Y, + A.PDOT, + A.PDOT_LY, + A.PDOT_L2Y, + A.SALES_VALUE_CAL, + A.SALES_VALUE_CAL_LY, + A.SALES_UNIT_CAL, + A.SALES_UNIT_CAL_LY, + A.etl_insert_dt, + A.etl_update_dt, + B.region_type as REGION_TYPE +from dws.dws_ext_county_tf_sales A +left join dm.dm_td_county_pack_region B +on A.PACK_COD = B.pack_cod and A.REGION_COD = B.region_cod +order by region_type diff --git a/county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql b/county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql new file mode 100644 index 0000000..2d48521 --- /dev/null +++ b/county/08 DM_TD_EXT_COUNTY_PACK_PROPERTY.sql @@ -0,0 +1,146 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_PACK_PROPERTY +-- ( +-- MARKET_PACK_KEY STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- FAMILY_CODE STRING, +-- FAMILY_NAME STRING, +-- PROD_CODE STRING, +-- PROD_DESC STRING, +-- PROD_DESC_C STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- CMPS_DESC_C STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC_V STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MANU_DESC_C STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- CORP_DESC_C STRING, +-- BRANDTYPE STRING, +-- MARKET STRING, +-- KEY_COMPETITOR STRING, +-- IS_AZ STRING, +-- AZ_MAIN STRING, +-- AZ_RELATED STRING, +-- ATC1_DESC STRING, +-- ATC1_DESC_C STRING, +-- ATC2_DESC STRING, +-- ATC2_DESC_C STRING, +-- ATC3_DESC STRING, +-- ATC3_DESC_C STRING, +-- ATC4_DESC STRING, +-- ATC4_DESC_C STRING, +-- APP1_DESC STRING, +-- APP1_DESC_C STRING, +-- APP2_DESC STRING, +-- APP2_DESC_C STRING, +-- APP3_DESC STRING, +-- APP3_DESC_C STRING, +-- CLASS STRING, +-- MARKET_RATIO STRING, +-- COUNTINGUNIT STRING, +-- VBP_BRAND STRING, +-- REPLENISH_FALG STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack_property'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack_property'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_COUNTY_PACK_PROPERTY +SELECT + MARKET_PACK_KEY, + PACK_COD AS PACK_CODE, + PACK_DES AS PACK_DESC, + STGH_DES AS STGH_DESC, + PACK_LCH, + FAMILY_CODE, + FAMILY_NAME, + PROD_COD AS PROD_CODE, + PROD_DES AS PROD_DESC, + PROD_DES_C AS PROD_DESC_C, + CMPS_COD AS CMPS_CODE, + CMPS_DES AS CMPS_DESC, + NULL AS CMPS_DESC_C, + ATC1_COD AS ATC1_CODE, + ATC2_COD AS ATC2_CODE, + ATC3_COD AS ATC3_CODE, + ATC4_COD AS ATC4_CODE, + APP1_COD AS APP1_CODE, + APP2_COD AS APP2_CODE, + APP3_COD AS APP3_CODE, + BIO_DESC, + GENE_ORIG_DESC, + ETH_OTC_DESC, + NRDL_DESC, + NRDL_ENTRY_DATE, + EDL_DESC, + TCM_DESC, + PAED_DESC, + GQCE_DESC, + NULL AS VBP_DESC_V, + VBP_DESC, + MANU_COD AS MANU_CODE, + MANU_DES AS MANU_DESC, + NULL AS MANU_DESC_C, + MNFL_COD AS MNFL_CODE, + MNFL_DES AS MNFL_DESC, + CORP_COD AS CORP_CODE, + CORP_DES AS CORP_DESC, + CORP_DES_C AS CORP_DESC_C, + BRANDTYPE, + MARKET, + KEY_COMPETITOR, + IS_AZ, + AZ_MAIN, + AZ_RELATED, + ATC1_DES AS ATC1_DESC, + ATC1_DES_C AS ATC1_DESC_C, + ATC2_DES AS ATC2_DESC, + ATC2_DES_C AS ATC2_DESC_C, + ATC3_DES AS ATC3_DESC, + ATC3_DES_C AS ATC3_DESC_C, + ATC4_DES AS ATC4_DESC, + ATC4_DES_C AS ATC4_DESC_C, + APP1_DES AS APP1_DESC, + APP1_DES_C AS APP1_DESC_C, + APP2_DES AS APP2_DESC, + APP2_DES_C AS APP2_DESC_C, + APP3_DES AS APP3_DESC, + APP3_DES_C AS APP3_DESC_C, + CLASS, + NULL AS MARKET_RATIO, + NULL AS COUNTINGUNIT, + NULL AS VBP_BRAND, + NULL AS REPLENISH_FALG, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_EXT_COUNTY_TD_PACK_PROPERTY; \ No newline at end of file diff --git a/county/09 DM_TF_EXT_COUNTY_SALES.sql b/county/09 DM_TF_EXT_COUNTY_SALES.sql new file mode 100644 index 0000000..da495ff --- /dev/null +++ b/county/09 DM_TF_EXT_COUNTY_SALES.sql @@ -0,0 +1,128 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TF_EXT_COUNTY_SALES ( +-- YYYYMM STRING, +-- PACK_CODE STRING, +-- CORP_CODE STRING, +-- AUDIT_CODE STRING, +-- PLATFORM_TYPE STRING, +-- STORE_NAME STRING, +-- STORE_TYPE STRING, +-- REGION_TYPE STRING, +-- PACK_FLAG INT, +-- PROD_FLAG INT, +-- DTP_FLAG INT, +-- SALES_UNIT_CAL DECIMAL(38,10), +-- SALES_UNIT_CAL_LY DECIMAL(38,10), +-- SALES_VALUE_CAL DECIMAL(38,10), +-- SALES_VALUE_CAL_LY DECIMAL(38,10), +-- CONUTING_UNIT DECIMAL(38,10), +-- CONUTING_UNIT_LY DECIMAL(38,10), +-- DATA_SOURCE STRING, +-- INST_CODE STRING COMMENT '内部机构编码', +-- CMPS_FLAG STRING COMMENT '分子式标签', +-- DEPT_NAME STRING COMMENT '科室名称', +-- PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', +-- PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', +-- NEW_CODE STRING COMMENT '主数据关联CODE', +-- AREA STRING COMMENT '城市', +-- H_LEVEL STRING COMMENT '医院类型', +-- REIMBURSE STRING COMMENT '报销情况', +-- REIMBURSE_TYPE STRING COMMENT '报销类型', +-- PRESCRIPTION_SOURCE STRING COMMENT '处方来源', +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_county_sales'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_county_sales'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TF_EXT_COUNTY_SALES ( + YYYYMM, + PACK_CODE, + AUDIT_CODE, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + PRESCRIPTION, + PRESCRIPTION_LY, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + CMPS_FLAG, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + INST_CODE, + DEPT_NAME, + NEW_CODE, + AREA, + H_LEVEL, + REIMBURSE, + REIMBURSE_TYPE, + PRESCRIPTION_SOURCE, + CORP_CODE, + ETL_INSERT_DT, + ETL_UPDATE_DT +) + SELECT + A.YYYYMM, + A.PACK_COD AS PACK_CODE, + A.AUDIT_COD AS AUDIT_CODE, + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(SALES_UNIT_CAL) SALES_UNIT_CAL, + SUM(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY, + SUM(SALES_VALUE_CAL) SALES_VALUE_CAL, + SUM(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + SUM(CONUTING_UNIT) CONUTING_UNIT, + SUM(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + NVL(A.REGION_TYPE, '') REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_CODE, --可以移除,报告没有使用 + ------------------------------------- + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC+8') AS ETL_UPDATE_DT + FROM + DM.dm_ext_county_tf_sales_region A + where + A.YYYYMM >= '202001' + AND A.MARKET = 'IMS ALL Market' + GROUP BY + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + A.REGION_TYPE \ No newline at end of file diff --git a/county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql b/county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql new file mode 100644 index 0000000..ac83197 --- /dev/null +++ b/county/10 DM_TD_EXT_COUNTY_PACK2MARKET.sql @@ -0,0 +1,208 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_PACK2MARKET ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- PACK_DESC STRING, +-- STGH_DESC STRING, +-- PACK_LCH STRING, +-- PROD_CODE STRING, +-- CMPS_CODE STRING, +-- CMPS_DESC STRING, +-- ATC1_CODE STRING, +-- ATC2_CODE STRING, +-- ATC3_CODE STRING, +-- ATC4_CODE STRING, +-- APP1_CODE STRING, +-- APP2_CODE STRING, +-- APP3_CODE STRING, +-- BIO_DESC STRING, +-- GENE_ORIG_DESC STRING, +-- ETH_OTC_DESC STRING, +-- NRDL_DESC STRING, +-- NRDL_ENTRY_DATE STRING, +-- EDL_DESC STRING, +-- TCM_DESC STRING, +-- PAED_DESC STRING, +-- GQCE_DESC STRING, +-- VBP_DESC STRING, +-- MANU_CODE STRING, +-- MANU_DESC STRING, +-- MNFL_CODE STRING, +-- MNFL_DESC STRING, +-- CORP_CODE STRING, +-- CORP_DESC STRING, +-- BRANDTYPE STRING, +-- BU STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack2market'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack2market'; + +-- COMMAND ---------- + +-- 使用 EXCEPT(集合差操作)简化逻辑 +INSERT OVERWRITE TABLE DM.DM_TD_EXT_COUNTY_PACK2MARKET +-- 包含规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1') +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL + +EXCEPT + +-- 排除规则 +SELECT DISTINCT + T2.MARKET, + T1.PACK_CODE, + T1.PACK_DESC, + T1.STGH_DESC, + T1.PACK_LCH, + T1.PROD_CODE, + T1.CMPS_CODE, + T1.CMPS_DESC, + T1.ATC1_CODE, + T1.ATC2_CODE, + T1.ATC3_CODE, + T1.ATC4_CODE, + T1.APP1_CODE, + T1.APP2_CODE, + T1.APP3_CODE, + T1.BIO_DESC, + T1.GENE_ORIG_DESC AS GENE_ORIG, + T1.ETH_OTC_DESC AS ETH_OTC_D, + T1.NRDL_DESC, + T1.NRDL_ENTRY_DATE AS NRDL_ENTR, + T1.EDL_DESC, + T1.TCM_DESC, + T1.PAED_DESC, + T1.GQCE_DESC, + T1.VBP_DESC, + T1.MANU_CODE, + T1.MANU_DESC, + T1.MNFL_CODE, + T1.MNFL_DESC, + T1.CORP_CODE, + T1.CORP_DESC, + T1.BRANDTYPE, + T2.BU, + T2.STARTTIME, + T2.ENDTIME, + COALESCE(T2.EXTEND_MARKET_RATIO, '1') AS MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_PACK_PROPERTY AS T1 +LEFT JOIN ( + SELECT + MARKET, + BU, + STARTTIME, + ENDTIME, + EXTEND_MARKET_RATIO, + ATC1_CODE, + ATC2_CODE, + ATC3_CODE, + ATC4_CODE, + NFC1_CODE, + NFC2_CODE, + NFC3_CODE, + CORPORATION_CODE, + MANUFACTURER_CODE, + PRODUCT_CODE, + PACK_CODE, + STRENGTH, + MOLECULE_CODE + FROM DWD.DWD_GND_IMS_TBLMARKET_BYMONTH + WHERE EXTEND_MARKET IS NULL AND NOT_IN_FLAG = '0' +) AS T2 + ON (T2.ATC1_CODE IS NULL OR T1.ATC1_CODE = T2.ATC1_CODE) + AND (T2.ATC2_CODE IS NULL OR T1.ATC2_CODE = T2.ATC2_CODE) + AND (T2.ATC3_CODE IS NULL OR T1.ATC3_CODE = T2.ATC3_CODE) + AND (T2.ATC4_CODE IS NULL OR T1.ATC4_CODE = T2.ATC4_CODE) + AND (T2.NFC1_CODE IS NULL OR T1.APP1_CODE = T2.NFC1_CODE) + AND (T2.NFC2_CODE IS NULL OR T1.APP2_CODE = T2.NFC2_CODE) + AND (T2.NFC3_CODE IS NULL OR T1.APP3_CODE = T2.NFC3_CODE) + AND (T2.CORPORATION_CODE IS NULL OR T1.CORP_CODE = T2.CORPORATION_CODE) + AND (T2.MANUFACTURER_CODE IS NULL OR T1.MANU_CODE = T2.MANUFACTURER_CODE) + AND (T2.PRODUCT_CODE IS NULL OR T1.PROD_CODE = T2.PRODUCT_CODE) + AND (T2.PACK_CODE IS NULL OR T1.PACK_CODE = T2.PACK_CODE) + AND (T2.STRENGTH IS NULL OR T1.STGH_DESC = T2.STRENGTH) + AND (T2.MOLECULE_CODE IS NULL OR T1.CMPS_CODE = T2.MOLECULE_CODE) +WHERE T2.MARKET IS NOT NULL; \ No newline at end of file diff --git a/county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql b/county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql new file mode 100644 index 0000000..ffb3d31 --- /dev/null +++ b/county/11 DM_TD_EXT_COUNTY_MARKET_RATIO.sql @@ -0,0 +1,30 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- CMPS_CODE STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- MARKET_RATIO STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_COUNTY_MARKET_RATIO +SELECT + DISTINCT + MARKET, + PACK_CODE, + CMPS_CODE, + STARTTIME, + ENDTIME, + MARKET_RATIO, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_PACK2MARKET +WHERE UPPER(MARKET) NOT LIKE '%ALL%' \ No newline at end of file diff --git a/county/12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql b/county/12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql new file mode 100644 index 0000000..79bdb7e --- /dev/null +++ b/county/12 DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO.sql @@ -0,0 +1,163 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO ( +-- MARKET STRING, +-- PACK_CODE STRING, +-- VALUE_BRAND_RATIO FLOAT, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO FLOAT, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO FLOAT, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO FLOAT, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_brand_ratio'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_brand_ratio'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO +SELECT + DISTINCT + T1.MARKET, + T1.PACK_CODE, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.RATIO + ELSE NVL(T5.RATIO, 1) END AS VALUE_BRAND_RATIO, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.STARTTIME + ELSE NVL(T5.STARTTIME, 200001) END AS VALUE_BRAND_RATIO_START, + CASE + WHEN T2.RATIO IS NOT NULL THEN T2.ENDTIME + ELSE NVL(T5.ENDTIME, 299912) END AS VALUE_BRAND_RATIO_END, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.RATIO + ELSE NVL(T6.RATIO, 1) END AS UNIT_BRAND_RATIO, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.STARTTIME + ELSE NVL(T6.STARTTIME, 200001) END AS UNIT_BRAND_START, + CASE + WHEN T3.RATIO IS NOT NULL THEN T3.ENDTIME + ELSE NVL(T6.ENDTIME, 299912) END AS UNIT_BRAND_END, + 1 AS COUNTINGUNIT_BRAND_RATIO, + 200001 AS COUNTINGUNIT_BRAND_START, + 299912 AS COUNTINGUNIT_BRAND_END, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.RATIO + ELSE NVL(T7.RATIO, 1) END AS PDOT_BRAND_RATIO, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.STARTTIME + ELSE NVL(T7.STARTTIME, 200001) END AS PDOT_BRAND_START, + CASE + WHEN T4.RATIO IS NOT NULL THEN T4.ENDTIME + ELSE NVL(T7.ENDTIME, 299912) END AS PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT +FROM DM.DM_TD_EXT_COUNTY_MARKET_RATIO T1 +LEFT JOIN ( --VALUE--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'PACK' +) T2 ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_COD +LEFT JOIN ( --UNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'PACK' +) T3 ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_COD +LEFT JOIN ( --COUNTINGUNIT--PACK + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'PACK' +) T4 ON T1.MARKET = T4.MARKET AND T1.PACK_CODE = T4.PACK_COD +LEFT JOIN ( --VALUE--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'VALUE' AND UPPER(LEVEL) = 'MOLECULE' +) T5 ON T1.MARKET = T5.MARKET AND T1.CMPS_CODE = T5.CMPS_COD +LEFT JOIN ( --UNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'UNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T6 ON T1.MARKET = T6.MARKET AND T1.CMPS_CODE = T6.CMPS_COD +LEFT JOIN ( --COUNTINGUNIT--MOLECULE + 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_BYMONTH + WHERE UPPER(TYPE) = 'COUNTINGUNIT' AND UPPER(LEVEL) = 'MOLECULE' +) T7 ON T1.MARKET = T7.MARKET +AND T1.CMPS_CODE = T7.CMPS_COD + +-- COMMAND ---------- + diff --git a/county/13 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql b/county/13 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql new file mode 100644 index 0000000..b5a5502 --- /dev/null +++ b/county/13 DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING.sql @@ -0,0 +1,62 @@ +-- Databricks notebook source +-- CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING +-- ( +-- PACK_CODE STRING, +-- MARKET STRING, +-- CLASS STRING, +-- KEY_COMPETITOR STRING, +-- MARKET_RATIO STRING, +-- STARTTIME STRING, +-- ENDTIME STRING, +-- VALUE_BRAND_RATIO STRING, +-- VALUE_BRAND_RATIO_START STRING, +-- VALUE_BRAND_RATIO_END STRING, +-- UNIT_BRAND_RATIO STRING, +-- UNIT_BRAND_START STRING, +-- UNIT_BRAND_END STRING, +-- COUNTINGUNIT_BRAND_RATIO STRING, +-- COUNTINGUNIT_BRAND_START STRING, +-- COUNTINGUNIT_BRAND_END STRING, +-- PDOT_BRAND_RATIO STRING, +-- PDOT_BRAND_START STRING, +-- PDOT_BRAND_END STRING, +-- ETL_INSERT_DT TIMESTAMP, +-- ETL_UPDATE_DT TIMESTAMP +-- ) +-- USING delta +-- -- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_pack_mapping'; +-- -- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_pack_mapping'; + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE DM.DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING +SELECT DISTINCT + T1.PACK_CODE, + T1.MARKET, + T1.CLASS, + T1.KEY_COMPETITOR, + T2.MARKET_RATIO, + T2.STARTTIME, + T2.ENDTIME, + T3.VALUE_BRAND_RATIO, + T3.VALUE_BRAND_RATIO_START, + T3.VALUE_BRAND_RATIO_END, + T3.UNIT_BRAND_RATIO, + T3.UNIT_BRAND_START, + T3.UNIT_BRAND_END, + T3.COUNTINGUNIT_BRAND_RATIO, + T3.COUNTINGUNIT_BRAND_START, + T3.COUNTINGUNIT_BRAND_END, + T3.PDOT_BRAND_RATIO, + T3.PDOT_BRAND_START, + T3.PDOT_BRAND_END, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_INSERT_DT, + FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(),'UTC+8') AS ETL_UPDATE_DT + FROM +DM.DM_TD_EXT_COUNTY_PACK_PROPERTY T1 +LEFT JOIN DM.DM_TD_EXT_COUNTY_MARKET_RATIO T2 + ON T1.MARKET = T2.MARKET AND T1.PACK_CODE = T2.PACK_CODE +LEFT JOIN DM.DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO T3 + ON T1.MARKET = T3.MARKET AND T1.PACK_CODE = T3.PACK_CODE +WHERE UPPER(T1.MARKET) NOT LIKE "%ALL%" \ No newline at end of file diff --git a/for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql b/for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql new file mode 100644 index 0000000..667d2f6 --- /dev/null +++ b/for_AIA_Dashboard/01 dm_td_aia_inst_mkt.sql @@ -0,0 +1,237 @@ +-- Databricks notebook source +------------------------------------------------------------------------------------------- +--修改时间:20241021 +--修改人:Fanxujia +--修改内容: +--提供给AIA Dashboard的机构维度表 +--机构 + 市场粒度 +------------------------------------------------------------------------------------------- + +-- COMMAND ---------- + +insert overwrite table dm.dm_td_aia_inst_mkt --Pack_cod以及对应的market +WITH ALL_pack_mkt AS ( + SELECT DISTINCT + PACK_CODE AS PACK_COD, + MARKET + FROM DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +), + +-- 销量表里所有机构 + 市场维度 +ALL_INS_mkt AS ( + SELECT DISTINCT + AUDIT_COD AS inst_code, + MARKET + FROM dm.dm_tf_ext_unionall_market_sales + WHERE DATA_SOURCE = 'AIA(Monthly)' +), + +-- SalesDetail报告用的潜力事实表 +-- 其中的潜力市场名字与外部数据报告里的市场的名字不同,不能直接关联 +-- 关联思路:潜力市场 ---> 内部产品 ---> 外部产品 ---> 外部市场 +potential_decile1 AS ( + SELECT DISTINCT + p1.inst_code, + p1.mkt_code, + p1.mkt_name, + p1.potential_type, + p1.potential_type_name, + p1.is_defult_potential_type, + INT(p1.decile) AS decile, + p1.potential_value, + IFNULL(p1.default_decile, 10) AS default_decile + FROM dm.dm_tf_potential p1 + WHERE yyyymm = ( + SELECT KEY_VALUE + FROM dm.dm_td_date_config + WHERE key_code = 'pfmc_latest_mon' + ) +), + +-- 潜力市场与内部Brand的mapping +brand_market_mapping AS ( + SELECT DISTINCT + brand_code, + market_code + FROM dwd.dwd_gnd_link_family_imsmkt + WHERE active_status = 1 +), + +-- 内外部产品编码映射表:获取内部Brand与外部pack的mapping +imscode_azcode AS ( + SELECT DISTINCT + brandcode, + CASE + WHEN LENGTH(ims_pack_cod) < 7 AND ims_pack_cod REGEXP '^[0-9]' + THEN RIGHT(CONCAT('000000000000', ims_pack_cod), 12) + ELSE ims_pack_cod + END AS ims_pack_cod + FROM dwd.dwd_td_imscode_azcode + WHERE ims_pack_cod IS NOT NULL +), + +-- 将潜力数据、Decile数据对应到外部的market +potential_decile2 AS ( + SELECT DISTINCT + t1.inst_code, + t1.mkt_code AS potential_mkt_code, + t1.mkt_name AS potential_mkt_name, + t4.market, + t1.potential_type, + t1.potential_type_name, + t1.is_defult_potential_type, + t1.potential_value, + t1.decile, + CASE + WHEN t1.decile <= 3 THEN 'Decile 1-3' + WHEN t1.decile <= 5 THEN 'Decile 4-5' + WHEN t1.decile <= 8 THEN 'Decile 6-8' + WHEN t1.decile <= 10 THEN 'Decile 9-10' + END AS decile_group + FROM potential_decile1 t1 + INNER JOIN brand_market_mapping t2 + ON t1.mkt_code = t2.market_code + INNER JOIN imscode_azcode t3 + ON t2.brand_code = t3.brandcode + INNER JOIN ALL_pack_mkt t4 + ON t3.ims_pack_cod = t4.pack_cod +), + +-- 外部市场与默认潜力市场的mapping关系(一对一的关系) +-- 增加对手工数据的处理 +default_potential_market AS ( + SELECT DISTINCT + REPLACE(REPLACE(REPLACE(UPPER(market), '(', '('), ')', ')'), ' (', '(') AS market, + REPLACE( + REPLACE(REPLACE(UPPER(Default_Potential_Market), '(', '('), ')', ')'), + ' (', + '(' + ) AS Default_Potential_Market + FROM dwd.dwd_gnd_ext_default_potential_market_link +), + +-- 潜力数据只到机构 + 市场,不到产品 +potential_decile3 AS ( + SELECT DISTINCT + t1.inst_code, + t1.market, + NVL(t2.potential_mkt_code, '') AS potential_mkt_code, + NVL(t2.potential_mkt_name, '') AS potential_mkt_name, + CASE + WHEN t2.potential_mkt_name IS NOT NULL AND t3.default_potential_market IS NULL + THEN '0' + WHEN t2.potential_mkt_name IS NULL + THEN '' + ELSE '1' + END AS is_defult_potential_mkt, + NVL(t2.potential_type, '') AS potential_type_code, + NVL(t2.potential_type_name, '') AS potential_type_name, + NVL(t2.is_defult_potential_type, '') AS is_defult_potential_type, + -- 潜力值字段类型decimal(25,8),不转成空字符串了 + t2.potential_value, + NVL(t2.decile, '') AS decile, + NVL(t2.decile_group, '') AS decile_group + FROM ALL_INS_mkt t1 + LEFT JOIN potential_decile2 t2 + ON t1.inst_code = t2.inst_code + AND t1.market = t2.market + LEFT JOIN default_potential_market t3 + ON REPLACE(REPLACE(REPLACE(UPPER(t1.market), '(', '('), ')', ')'), ' (', '(') = t3.market + AND REPLACE(REPLACE(REPLACE(UPPER(t2.potential_mkt_name), '(', '('), ')', ')'), ' (', '(') = t3.Default_Potential_Market +) + +SELECT DISTINCT + t1.inst_code, + t1.market, + t2.potential_mkt_code, + t2.potential_mkt_name, + t2.is_defult_potential_mkt, + t2.potential_type_code, + t2.potential_type_name, + t2.is_defult_potential_type, + t2.potential_value, + t2.decile, + t2.decile_group, + CASE + WHEN t2.decile = '' THEN 99 + ELSE CAST(t2.decile AS INT) + END AS decile_order, + CASE + WHEN t1.inst_code IS NULL OR t1.inst_code = '' THEN 'ROC' + ELSE t1.inst_code + END AS audit_cod, + 'AIA(Monthly)' AS DATA_SOURCE +FROM ALL_INS_mkt t1 +LEFT JOIN potential_decile3 t2 + ON t1.inst_code = t2.inst_code + AND t1.MARKET = t2.MARKET; + +-- COMMAND ---------- + +--没有默认潜力市场的市场,增加一条假的默认潜力市场数据 +with mkt1 as ( + select distinct + market + from + dm.dm_td_aia_inst_mkt +), +mkt2 as ( + select distinct + market + from + dm.dm_td_aia_inst_mkt + where + is_defult_potential_mkt = '1' +), +mkt as ( + select + a.market + from + mkt1 a + left join mkt2 b + on a.market = b.market + where + b.market is null +), +all_inst_mkt as ( + select distinct + t1.inst_code, + t1.audit_cod, + t1.market + from + dm.dm_td_aia_inst_mkt t1 + inner join mkt t2 + on t1.market = t2.market +) insert into dm.dm_td_aia_inst_mkt ( + inst_code, + market, + potential_mkt_code, + potential_mkt_name, + is_defult_potential_mkt, + potential_type_code, + potential_type_name, + is_defult_potential_type, + potential_value, + decile, + decile_group, + decile_order, + audit_cod, + DATA_SOURCE +) + select distinct + inst_code, + market, + '' as potential_mkt_code, + '' as potential_mkt_name, + '1' as is_defult_potential_mkt, + '' as potential_type_code, + '' as potential_type_name, + '1' as is_defult_potential_type, + null as potential_value, + '' as decile, + '' as decile_group, + 99 as decile_order, + audit_cod, + 'AIA(Monthly)' as DATA_SOURCE + from + all_inst_mkt \ No newline at end of file diff --git a/for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql b/for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql new file mode 100644 index 0000000..179ea10 --- /dev/null +++ b/for_AIA_Dashboard/02 dm_td_aia_auth_sales.sql @@ -0,0 +1,293 @@ +-- Databricks notebook source +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +------------------------------------------------------------------------------------------- +--修改时间:20250109 +--修改人:Caoyining +--修改内容: +--提供给AIA Dashboard的权限表 +--销售人员给自己岗位对应的数据,针对部分AIA Org N+1特殊岗位给予特定DSM角色RSM的岗位权限 +------------------------------------------------------------------------------------------- +create or replace temporary view aia_auth_sales +as +--从销量表取到全部的机构、市场组合 +with ALL_AUDIT_Market as ( +select distinct t1.AUDIT_COD,NVL(t2.market,'ALL Market') market +from dm.dm_ext_aia_sales t1 +left join DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING t2 +on t1.pack_cod = t2.PACK_CODE +) + +--CVH架构月 +,CVH_YM as ( +select key_value as yyyymm +from dm.dm_td_date_config +where key_code = 'pfmc_cvh' +) +--获取特定dsm的rsm岗位号 +,org_dsmforrsm as ( + select distinct rsm_trty_code + from dm.dm_td_org org + inner join CVH_YM ym + on org.yyyymm = ym.yyyymm + where dsm_trty_code in( + 'DM_EG0072' + ,'DM_EG0089' + ,'DM_EG0101' + ,'DM_EG0141' + ,'DM_EG0066' + ,'DM_EG0173' + ,'DM_EG0090' + ,'DM_EG0045' + ,'DM_EG0011' + ,'DM_EG0102') +) +,dsm_rsm_kcode as ( + select distinct dsm_kcode,dsm_name,rsm_kcode + from dm.dm_td_org org + inner join CVH_YM ym + on org.yyyymm = ym.yyyymm + where dsm_trty_code in( + 'DM_EG0072' + ,'DM_EG0089' + ,'DM_EG0101' + ,'DM_EG0141' + ,'DM_EG0066' + ,'DM_EG0173' + ,'DM_EG0090' + ,'DM_EG0045' + ,'DM_EG0011' + ,'DM_EG0102') +) +--特定dsm岗位org表 +,org_dsm as ( +select distinct +t1.yyyymm, +t1.bu_code, +t1.nsd_kcode, +t1.nsd_name, +t1.rsd_kcode, +t1.rsd_name, +t1.rsm_kcode, +t1.rsm_name, +t1.dsm_kcode, +t1.dsm_name, +t1.mr_trty_code +from dm.dm_td_org t1 +inner join CVH_YM t2 +on t1.yyyymm = t2.yyyymm +inner join org_dsmforrsm t3 +on t1.rsm_trty_code = t3.rsm_trty_code +) +,dsm_rsm_all as ( + select + t2.yyyymm, + t2.bu_code, + t2.nsd_kcode, + t2.nsd_name, + t2.rsd_kcode, + t2.rsd_name, + t2.rsm_kcode, + t2.rsm_name, + t1.dsm_kcode, + t1.dsm_name, + t2.mr_trty_code + from dsm_rsm_kcode t1 + left join org_dsm t2 + on t1.rsm_kcode = t2.rsm_kcode +) +--剔除特定dsm岗位org表 +,orgWithoutDsm as ( +select distinct +t1.yyyymm, +t1.bu_code, +t1.nsd_kcode, +t1.nsd_name, +t1.rsd_kcode, +t1.rsd_name, +t1.rsm_kcode, +t1.rsm_name, +t1.dsm_kcode, +t1.dsm_name, +t1.mr_trty_code +from dm.dm_td_org t1 +inner join CVH_YM t2 +on t1.yyyymm = t2.yyyymm +where t1.dsm_trty_code not in ( +'DM_EG0072' +,'DM_EG0089' +,'DM_EG0101' +,'DM_EG0141' +,'DM_EG0066' +,'DM_EG0173' +,'DM_EG0090' +,'DM_EG0045' +,'DM_EG0011' +,'DM_EG0102') +) +--territory表 +,territory as ( +select distinct +t1.yyyymm, +t1.trty_code, +t1.inst_code, +t1.family_code +from dm.dm_td_sd_territory_indication t1 +inner join CVH_YM t2 +on t1.yyyymm = t2.yyyymm +where t1.bu not in ('CUBE','KA') +) +--PACK与market的mapping关系表 +,pack_market as ( +select distinct pack_code as pack_cod,market +from DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +) +--将内部的Family_code转为外部的pack_cod +,inst_market as ( +select distinct +t1.yyyymm, +t1.trty_code, +t1.inst_code, +t5.market +from territory t1 +left join dwd.dwd_td_institution t2 +on t1.inst_code = t2.inst_code +left join cdw_dwd_dim_product_wide t3 +on t1.family_code = t3.prd_family_cd +left join dwd.dwd_td_imscode_azcode t4 +on t3.prd_brand_cd = t4.brandcode +left join pack_market t5 +on t4.ims_pack_cod = t5.pack_cod +) + +select distinct +t2.dsm_kcode as KCODE, +'dsm' as role, +t2.mr_trty_code, +concat(t0.AUDIT_COD,'AIA(Monthly)') as AUDIT_SOURCE, +concat(t0.MARKET,'AIA(Monthly)') as MKT_SOURCE, +concat(t2.bu_code,'AIA(Monthly)') as BU_CODE_AUTH, +concat(t3.pack_cod,'AIA(Monthly)') as PACK_SOURCE +from ALL_AUDIT_Market t0 +inner join inst_market t1 +on t0.AUDIT_COD = t1.inst_code +and t0.market = t1.market +inner join orgWithoutDsm t2 +on t1.trty_code = t2.mr_trty_code +and t1.yyyymm = t2.yyyymm +inner join pack_market t3 +on t1.market = t3.market +-- where t2.dsm_name <> 'Vacant' + +union all +select distinct +t2.dsm_kcode as KCODE, +'dsm' as role, +t2.mr_trty_code, +concat(t0.AUDIT_COD,'AIA(Monthly)') as AUDIT_SOURCE, +concat(t0.MARKET,'AIA(Monthly)') as MKT_SOURCE, +concat(t2.bu_code,'AIA(Monthly)') as BU_CODE_AUTH, +concat(t3.pack_cod,'AIA(Monthly)') as PACK_SOURCE +from ALL_AUDIT_Market t0 +inner join inst_market t1 +on t0.AUDIT_COD = t1.inst_code +and t0.market = t1.market +inner join dsm_rsm_all t2 +on t1.trty_code = t2.mr_trty_code +and t1.yyyymm = t2.yyyymm +inner join pack_market t3 +on t1.market = t3.market +-- where t2.dsm_name <> 'Vacant' + +union all +select distinct +t2.rsm_kcode as KCODE, +'rsm' as role, +t2.mr_trty_code, +concat(t0.AUDIT_COD,'AIA(Monthly)') as AUDIT_SOURCE, +concat(t0.MARKET,'AIA(Monthly)') as MKT_SOURCE, +concat(t2.bu_code,'AIA(Monthly)') as BU_CODE_AUTH, +concat(t3.pack_cod,'AIA(Monthly)') as PACK_SOURCE +from ALL_AUDIT_Market t0 +inner join inst_market t1 +on t0.AUDIT_COD = t1.inst_code +and t0.market = t1.market +inner join orgWithoutDsm t2 +on t1.trty_code = t2.mr_trty_code +and t1.yyyymm = t2.yyyymm +inner join pack_market t3 +on t1.market = t3.market +-- where t2.rsm_name <> 'Vacant' +union all +select distinct +t2.rsd_kcode as KCODE, +'rsd' as role, +t2.mr_trty_code, +concat(t0.AUDIT_COD,'AIA(Monthly)') as AUDIT_SOURCE, +concat(t0.MARKET,'AIA(Monthly)') as MKT_SOURCE, +concat(t2.bu_code,'AIA(Monthly)') as BU_CODE_AUTH, +concat(t3.pack_cod,'AIA(Monthly)') as PACK_SOURCE +from ALL_AUDIT_Market t0 +inner join inst_market t1 +on t0.AUDIT_COD = t1.inst_code +and t0.market = t1.market +inner join orgWithoutDsm t2 +on t1.trty_code = t2.mr_trty_code +and t1.yyyymm = t2.yyyymm +inner join pack_market t3 +on t1.market = t3.market +-- where t2.rsd_name <> 'Vacant' +union all +select distinct +t2.nsd_kcode as KCODE, +'nsd' as role, +t2.mr_trty_code, +concat(t0.AUDIT_COD,'AIA(Monthly)') as AUDIT_SOURCE, +concat(t0.MARKET,'AIA(Monthly)') as MKT_SOURCE, +concat(t2.bu_code,'AIA(Monthly)') as BU_CODE_AUTH, +concat(t3.pack_cod,'AIA(Monthly)') as PACK_SOURCE +from ALL_AUDIT_Market t0 +inner join inst_market t1 +on t0.AUDIT_COD = t1.inst_code +and t0.market = t1.market +inner join orgWithoutDsm t2 +on t1.trty_code = t2.mr_trty_code +and t1.yyyymm = t2.yyyymm +inner join pack_market t3 +on t1.market = t3.market +-- where t2.nsd_name <> 'Vacant' + +-- COMMAND ---------- + +insert overwrite table dm.dm_auth_aia_sales_geo +select distinct KCODE,AUDIT_SOURCE +from aia_auth_sales + +-- COMMAND ---------- + +insert overwrite table dm.dm_auth_aia_sales_mkt +select distinct KCODE,MKT_SOURCE +from aia_auth_sales + +-- COMMAND ---------- + +insert overwrite table dm.dm_auth_aia_sales_org +select distinct +KCODE, +role, +mr_trty_code, +concat(mr_trty_code,'AIA(Monthly)') as trty_source +from aia_auth_sales + +-- COMMAND ---------- + +insert overwrite table dm.dm_auth_aia_sales_pack +select distinct KCODE,PACK_SOURCE +from aia_auth_sales \ No newline at end of file diff --git a/for_AIA_Dashboard/03 dm_td_aia_original_col.sql b/for_AIA_Dashboard/03 dm_td_aia_original_col.sql new file mode 100644 index 0000000..710fc95 --- /dev/null +++ b/for_AIA_Dashboard/03 dm_td_aia_original_col.sql @@ -0,0 +1,23 @@ +-- Databricks notebook source +insert overwrite table dm.dm_td_aia_original_col +select distinct +case when length(trim(IQVIA_PACK_CODE)) < 12 and trim(IQVIA_PACK_CODE) REGEXP '^[0-9]' then right(concat('000000000000',trim(IQVIA_PACK_CODE)),12) + else trim(IQVIA_PACK_CODE) end as PACK_COD, +-- case when length(trim(IQVIA_PACK_CODE)) < 7 then right(concat('0000000',trim(IQVIA_PACK_CODE)),7) +-- else trim(IQVIA_PACK_CODE) end as PACK_COD, +'AIA(Monthly)' as DATA_SOURCE, +ATC1, +ATC2, +ATC3, +ATC4, +org_prd_cd, +org_mole_nm_c, +org_manu_prd_nm_c, +org_prd_nm_c, +org_pk, +org_prd_str, +org_pth, +min_pk_unit, +org_pk_unit, +org_manu_nm +from dwd.dwd_gnd_ext_aia_cpt_data; diff --git a/for_AIA_Dashboard/04 dm_td_aia_nosales_inst.sql b/for_AIA_Dashboard/04 dm_td_aia_nosales_inst.sql new file mode 100644 index 0000000..62af838 --- /dev/null +++ b/for_AIA_Dashboard/04 dm_td_aia_nosales_inst.sql @@ -0,0 +1,161 @@ +-- Databricks notebook source +--------------------------------------------------------------------------------------- +--修改时间:20241113 +--修改人:Fanxujia +--修改内容: +--无销量机构列表 +--以CPA机构表为主表,根据事实表判断每个月销量是否为0 +--------------------------------------------------------------------------------------- +insert overwrite table dm.dm_td_aia_nosales_inst( +year, +cpa_ins_code, +az_ins_code, +az_ins_name, +January, +February, +March, +April, +May, +June, +July, +August, +September, +October, +November, +December, +etl_insert_dt, +etl_update_dt +) + +--12个月 +with MM as ( +select explode(array('01','02','03','04','05','06','07','08','09','10','11','12')) as MM +) +--机构名称 +,inst_name as ( +select distinct +inst_code, +inst_name +from dm.dm_td_institution +) +--全部CPA机构,year +,ALL_INS_year as ( +select distinct +t1.year, +t1.cpa_hospital_code, +t1.ins_cd_nl as inst_code, +t2.inst_name +from dwd.dwd_gnd_hospital_not_provided t1 +left join inst_name t2 +on t1.ins_cd_nl = t2.inst_code +) +--全部CPA机构,yyyymm +,ALL_INS_yyyymm as ( +select distinct +concat(t1.year,t2.MM) as yyyymm, +t1.cpa_hospital_code, +t1.ins_cd_nl as inst_code, +t3.inst_name +from dwd.dwd_gnd_hospital_not_provided t1 +cross join MM t2 +left join inst_name t3 +on t1.ins_cd_nl = t3.inst_code +) +--有销量的机构 +,sales_ins as ( +select +YYYYMM, +inst_code +from dm.dm_tf_external_sales +where data_source = 'AIA(Monthly)' +group by YYYYMM,inst_code +having sum(SALES_VALUE_CAL) <> 0 +) +--销量最大月 +,sales_maxym as ( +select max(yyyymm) as max_ym +from dm.dm_tf_external_sales +where data_source = 'AIA(Monthly)' +) +--无销量的机构,by yyyymm +,no_sales_ins_yyyymm as ( +select t1.YYYYMM, +t1.cpa_hospital_code, +t1.inst_code, +t1.inst_name, +left(t1.yyyymm,4) as year, +right(t1.yyyymm,2) as MM +from ALL_INS_yyyymm t1 +left join sales_ins t2 +on t1.inst_code = t2.inst_code +and t1.YYYYMM = t2.YYYYMM +cross join sales_maxym t3 +where t2.inst_code is null +and t1.YYYYMM <= t3.max_ym +) +--无销量的机构,by year +,no_sales_ins_year1 as ( +select distinct +year, +cpa_hospital_code, +inst_code, +inst_name, +case when MM = '01' then 'N' end as January, +case when MM = '02' then 'N' end as February, +case when MM = '03' then 'N' end as March, +case when MM = '04' then 'N' end as April, +case when MM = '05' then 'N' end as May, +case when MM = '06' then 'N' end as June, +case when MM = '07' then 'N' end as July, +case when MM = '08' then 'N' end as August, +case when MM = '09' then 'N' end as September, +case when MM = '10' then 'N' end as October, +case when MM = '11' then 'N' end as November, +case when MM = '12' then 'N' end as December +from no_sales_ins_yyyymm +) +,no_sales_ins_year2 as ( +select +year, +cpa_hospital_code, +inst_code, +inst_name, +MAX(January) as January, +MAX(February) as February, +MAX(March) as March, +MAX(April) as April, +MAX(May) as May, +MAX(June) as June, +MAX(July) as July, +MAX(August) as August, +MAX(September) as September, +MAX(October) as October, +MAX(November) as November, +MAX(December) as December +from no_sales_ins_year1 +group by year,cpa_hospital_code,inst_code,inst_name +) + +select distinct +t1.year, +t1.cpa_hospital_code as cpa_ins_code, +t1.inst_code as az_ins_code, +t1.inst_name as az_ins_name, +NVL(t2.January,'') as January, +NVL(t2.February,'') as February, +NVL(t2.March,'') as March, +NVL(t2.April,'') as April, +NVL(t2.May,'') as May, +NVL(t2.June,'') as June, +NVL(t2.July,'') as July, +NVL(t2.August,'') as August, +NVL(t2.September,'') as September, +NVL(t2.October,'') as October, +NVL(t2.November,'') as November, +NVL(t2.December,'') as December, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_insert_dt, +from_utc_timestamp(current_timestamp,'UTC+8') as etl_update_dt +from ALL_INS_year t1 +left join no_sales_ins_year2 t2 +on t1.year = t2.year +and t1.cpa_hospital_code = t2.cpa_hospital_code diff --git a/for_AIA_Dashboard/05 dm_td_aia_is_eagle_flag.sql b/for_AIA_Dashboard/05 dm_td_aia_is_eagle_flag.sql new file mode 100644 index 0000000..0ed57df --- /dev/null +++ b/for_AIA_Dashboard/05 dm_td_aia_is_eagle_flag.sql @@ -0,0 +1,61 @@ +-- Databricks notebook source +------------------------------------------------------------------------------------ +--修改时间:20241128 +--修改人:Fanxujia +--修改内容: +--新增is_eagle字段,参考Eagle BI报告 +--粒度是机构+市场 +------------------------------------------------------------------------------------ + +-- COMMAND ---------- + +-- MAGIC %run ../../../Common/config + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC spark.read.table(f'`{CDW_CATALOG}`.`dwd`.`dim_product_wide`').createOrReplaceTempView('cdw_dwd_dim_product_wide') + +-- COMMAND ---------- + +insert overwrite table dm.dm_td_aia_is_eagle_flag +WITH cvh_org AS ( + SELECT key_value + FROM dm.dm_td_date_config + WHERE key_code = 'pfmc_cvh' +), +pack_mkt AS ( + SELECT DISTINCT pack_code as pack_cod, MARKET + FROM DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +), +famil_mkt AS ( + SELECT + DISTINCT + t1.prd_family_cd, + t3.MARKET + FROM cdw_dwd_dim_product_wide t1 + INNER JOIN dwd.dwd_td_imscode_azcode t2 + ON t1.prd_brand_cd = t2.brandcode + INNER JOIN pack_mkt t3 + ON t2.ims_pack_cod = t3.pack_cod +), +base AS ( + -- 谓词下推:先过滤主表,减少 JOIN 数据量 + SELECT inst_code, project_name, family_code, yyyymm + FROM dm.dm_td_sd_territory_indication + WHERE project_name <> 'NA' +) + +SELECT + base.inst_code, + famil_mkt.market, + base.project_name, + 'AIA(Monthly)' DATA_SOURCE, + base.inst_code AUDIT_COD +FROM base +INNER JOIN cvh_org + ON base.yyyymm = cvh_org.key_value +LEFT SEMI JOIN dm.dm_ext_aia_sales t_aia -- 替代 DISTINCT + INNER JOIN + ON base.inst_code = t_aia.inst_code +INNER JOIN famil_mkt + ON base.family_code = famil_mkt.prd_family_cd \ No newline at end of file diff --git a/for_AIA_Dashboard/06 dm_td_aia_rank.sql b/for_AIA_Dashboard/06 dm_td_aia_rank.sql new file mode 100644 index 0000000..0897668 --- /dev/null +++ b/for_AIA_Dashboard/06 dm_td_aia_rank.sql @@ -0,0 +1,133 @@ +-- Databricks notebook source +------------------------------------------------------------------ +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--新增产品排序表,供PBI使用 +------------------------------------------------------------------ + +-- COMMAND ---------- + +--brand的排名 +insert overwrite table dm.dm_td_aia_brand_rank +WITH max_month AS ( + SELECT MAX(yyyymm) AS max_yyyymm + FROM (SELECT DISTINCT yyyymm FROM dm.dm_tf_ext_aia_sales) t +), +pack_prod AS ( + -- 过滤前移,缩小维表体积再 BROADCAST + SELECT DISTINCT PACK_COD, PROD_DES_C + FROM dm.dm_td_external_packinfo + WHERE DATA_SOURCE = 'AIA(Monthly)' + AND PROD_DES_C <> 'OTHERS' +), +prod_sales AS ( + SELECT /*+ BROADCAST(pack_prod) */ + p.PROD_DES_C, + SUM(s.SALES_VALUE_CAL) AS SALES_VALUE_CAL + FROM dm.dm_tf_ext_aia_sales s + INNER JOIN pack_prod p ON s.PACK_CODE = p.PACK_COD + WHERE s.yyyymm BETWEEN CONCAT(LEFT((SELECT max_yyyymm FROM max_month), 4), '01') + AND (SELECT max_yyyymm FROM max_month) + GROUP BY p.PROD_DES_C +) +SELECT PROD_DES_C, + DENSE_RANK() OVER (ORDER BY SALES_VALUE_CAL DESC, PROD_DES_C) AS RANK +FROM prod_sales +UNION ALL SELECT 'Market', -1 +UNION ALL SELECT 'AZ Total', 0 +UNION ALL SELECT 'OTHERS', (SELECT COUNT(*) + 1 FROM prod_sales) + +-- COMMAND ---------- + +--Class的排名 +insert overwrite table dm.dm_td_aia_class_rank +WITH max_month AS ( + SELECT MAX(yyyymm) AS max_yyyymm + FROM (SELECT DISTINCT yyyymm FROM dm.dm_tf_ext_aia_sales) t +), +pack_class AS ( + SELECT DISTINCT PACK_CODE, upper(class) class + FROM dm.dm_td_ext_aia_market_pack_mapping + WHERE class <> '-' +), +class_sales AS ( + SELECT /*+ BROADCAST(pack_class) */ + c.class, + SUM(s.SALES_VALUE_CAL) AS SALES_VALUE_CAL + FROM dm.dm_tf_ext_aia_sales s + INNER JOIN pack_class c ON s.PACK_CODE = c.PACK_CODE + WHERE s.yyyymm BETWEEN CONCAT(LEFT((SELECT max_yyyymm FROM max_month), 4), '01') + AND (SELECT max_yyyymm FROM max_month) + GROUP BY c.class +) +SELECT class, + DENSE_RANK() OVER (ORDER BY SALES_VALUE_CAL DESC, class) AS RANK +FROM class_sales +UNION ALL SELECT 'Market', -1 +UNION ALL SELECT 'AZ Total', 0 +UNION ALL SELECT '-', (SELECT COUNT(*) + 1 FROM class_sales) + +-- COMMAND ---------- + +INSERT OVERWRITE TABLE dm.dm_td_aia_key_competitor_rank +WITH max_month AS ( + SELECT MAX(yyyymm) AS max_yyyymm + FROM (SELECT DISTINCT yyyymm FROM dm.dm_tf_ext_aia_sales) t +), +pack_key_competitor AS ( + SELECT DISTINCT L.PACK_CODE, R.KEY_COMPETITOR_CN + FROM dm.dm_td_ext_aia_market_pack_mapping l + INNER JOIN (SELECT DISTINCT + PROD_DESC,max(PROD_DESC_C) KEY_COMPETITOR_CN + FROM dm.dm_td_ext_aia_pack_property + GROUP BY 1) r on UPPER(l.KEY_COMPETITOR) = UPPER(r.PROD_DESC) + WHERE KEY_COMPETITOR <> 'OTHERS' +), +key_competitor_sales AS ( + SELECT /*+ BROADCAST(pack_key_competitor) */ + k.KEY_COMPETITOR_CN, + SUM(s.SALES_VALUE_CAL) AS SALES_VALUE_CAL + FROM dm.dm_tf_ext_aia_sales s + INNER JOIN pack_key_competitor k ON s.PACK_CODE = k.PACK_CODE + WHERE s.yyyymm BETWEEN CONCAT(LEFT((SELECT max_yyyymm FROM max_month), 4), '01') + AND (SELECT max_yyyymm FROM max_month) + GROUP BY k.KEY_COMPETITOR_CN +) +SELECT KEY_COMPETITOR_CN, + DENSE_RANK() OVER (ORDER BY SALES_VALUE_CAL DESC, KEY_COMPETITOR_CN) AS RANK +FROM key_competitor_sales +UNION ALL SELECT 'Market', -1 +UNION ALL SELECT 'AZ Total', 0 +UNION ALL SELECT 'OTHERS', (SELECT COUNT(*) + 1 FROM key_competitor_sales) + +-- COMMAND ---------- + +--molecule的排名 +insert overwrite table dm.dm_td_aia_molecule_rank +WITH max_month AS ( + SELECT MAX(yyyymm) AS max_yyyymm + FROM (SELECT DISTINCT yyyymm FROM dm.dm_tf_ext_aia_sales) t +), +pack_CMPS AS ( + -- 过滤前移,缩小维表体积再 BROADCAST + SELECT DISTINCT PACK_CODE, CMPS_DESC_C + FROM DM.dm_td_ext_aia_pack_property + WHERE PROD_DESC_C <> 'OTHERS' +), +prod_sales AS ( + SELECT /*+ BROADCAST(pack_prod) */ + p.CMPS_DESC_C, + SUM(s.SALES_VALUE_CAL) AS SALES_VALUE_CAL + FROM dm.dm_tf_ext_aia_sales s + INNER JOIN pack_CMPS p ON s.PACK_CODE = p.PACK_CODE + WHERE s.yyyymm BETWEEN CONCAT(LEFT((SELECT max_yyyymm FROM max_month), 4), '01') + AND (SELECT max_yyyymm FROM max_month) + GROUP BY p.CMPS_DESC_C +) +SELECT CMPS_DESC_C, + DENSE_RANK() OVER (ORDER BY SALES_VALUE_CAL DESC, CMPS_DESC_C) AS RANK +FROM prod_sales +UNION ALL SELECT 'Market', -1 +UNION ALL SELECT 'AZ Total', 0 +UNION ALL SELECT 'OTHERS', (SELECT COUNT(*) + 1 FROM prod_sales) \ No newline at end of file diff --git a/for_AIA_Dashboard/07 dm_ext_aia_data_remove_flag.sql b/for_AIA_Dashboard/07 dm_ext_aia_data_remove_flag.sql new file mode 100644 index 0000000..b679651 --- /dev/null +++ b/for_AIA_Dashboard/07 dm_ext_aia_data_remove_flag.sql @@ -0,0 +1,111 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC - dwd_gnd_aia_mark_ins_data_by_brand --> brand 转换成 market +-- MAGIC - dwd_gnd_aia_mark_ins_data_by_mkt 与 brand 的进行拼接 得到 market ins data all market +-- MAGIC - 生成 dm.dm_ext_td_mark_ins_data_remove + +-- COMMAND ---------- + +-- DBTITLE 1,创建brand的dwd临时视图 +create or replace temporary view temp_by_brand as +select + azinscode as ins_code + ,upper(azbrandnamee) as brand_name +from dwd.dwd_gnd_aia_mark_ins_data_by_brand +group by 1,2 + +-- COMMAND ---------- + +-- DBTITLE 1,创建mkt 的临时dwd视图 +create or replace temporary view temp_by_mkt as +select + azinscode as azinscode + ,market +from dwd.dwd_gnd_aia_mark_ins_data_by_mkt +group by 1,2 + +-- COMMAND ---------- + +-- DBTITLE 1,将brand转换成market +create or replace temporary view temp_aia_data_flag as +with pack_and_brand ( --brand 转 pack + select + upper(brandnamee) brand_name + ,ims_pack_cod PACK_COD --取所有code带出market + from dwd.dwd_td_imscode_azcode + where ims_pack_cod is not null and startswith(ims_pack_cod,'0') + and upper(brandnamee) in (select brand_name from temp_by_brand group by 1 )--取出在配置表中的pack + group by 1,2 + ) +,pack_to_market ( + select + a.PACK_CODE + ,a.MARKET + from dm.dm_td_ext_aia_market_pack_mapping a + where --只取 AIA中的市场 + lower(a.MARKET) not like '%all market%' + group by 1,2 +) + +select distinct + t1.brand_name + ,t1.ins_code + ,t3.market +from temp_by_brand t1 +left join pack_and_brand t2 on t1.brand_name = t2.brand_name +inner join pack_to_market t3 on t2.pack_cod = t3.pack_code +where t1.ins_code in (select distinct audit_code from dm.dm_tf_ext_aia_sales ) --没有销量的机构不展示 + +union all + +select + 'remove_directly_by_mkt' as brand_name + ,azinscode + ,market +from temp_by_mkt--dwd.dwd_gnd_aia_mark_ins_data_by_mkt +where azinscode in (select distinct audit_code from dm.dm_tf_ext_aia_sales ) --没有销量的机构不展示 +GROUP BY azinscode,market + +-- COMMAND ---------- + +-- DBTITLE 1,写入dws层 +insert overwrite dws.dws_ext_aia_data_remove_flag +select + ins_code + ,brand_name + ,market + ,from_utc_timestamp(current_timestamp,'UTC+8') etl_insert_dt +from temp_aia_data_flag + +-- COMMAND ---------- + +-- DBTITLE 1,写入dm层并去重 +insert overwrite dm.dm_ext_aia_data_remove_flag +select + ins_code + ,market + ,from_utc_timestamp(current_timestamp,'UTC+8') etl_insert_dt +from dws.dws_ext_aia_data_remove_flag +group by + ins_code + ,market + +-- COMMAND ---------- + +-- DBTITLE 1,DDL 语句 +-- CREATE OR REPLACE TABLE dm.dm_ext_aia_data_remove_flag ( +-- ins_code STRING COMMENT '机构编码', +-- market STRING COMMENT '市场', +-- etl_insert_dt TIMESTAMP COMMENT 'ETL时间') +-- USING delta +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ext_aia_data_remove_flag' +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_ext_aia_data_remove_flag'; + +-- CREATE OR REPLACE TABLE dws.dws_ext_aia_data_remove_flag ( +-- ins_code STRING COMMENT '机构编码', +-- brand_name STRING COMMENT '产品名称,用来区分配置表来源', +-- market STRING COMMENT '市场', +-- etl_insert_dt TIMESTAMP) +-- USING delta +-- -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_ext_aia_data_remove_flag' +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWS/dws_ext_aia_data_remove_flag' \ No newline at end of file diff --git a/for_AIA_Dashboard/07 dm_td_aia_remove_special_ins_bkp.py b/for_AIA_Dashboard/07 dm_td_aia_remove_special_ins_bkp.py new file mode 100644 index 0000000..0633380 --- /dev/null +++ b/for_AIA_Dashboard/07 dm_td_aia_remove_special_ins_bkp.py @@ -0,0 +1,56 @@ +# Databricks notebook source +# MAGIC %sql +# MAGIC create or replace temporary view ins_mkt_distinct +# MAGIC as +# MAGIC select distinct +# MAGIC azinscode as ins_code +# MAGIC ,market as mkt +# MAGIC from dwd.dwd_gnd_aia_mark_ins_data_by_mkt + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC create or replace temporary view mkt_pack_mapping_distinct +# MAGIC as --pack code, prod desc, market 的关系 +# MAGIC select distinct +# MAGIC PACK_COD +# MAGIC ,MARKET +# MAGIC ,PROD_DES +# MAGIC from dm.dm_td_external_market_pack_mapping +# MAGIC -- where DATA_SOURCE = 'AIA(Monthly)' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC create or replace temporary view ins_pack_result as +# MAGIC +# MAGIC select distinct +# MAGIC a.ins_code +# MAGIC ,b.PACK_COD +# MAGIC from ins_mkt_distinct a +# MAGIC left join ( --pack 和 market 的mapping +# MAGIC select +# MAGIC PACK_COD +# MAGIC ,MARKET +# MAGIC from mkt_pack_mapping_distinct +# MAGIC ) b +# MAGIC on a.mkt = b.MARKET + +# COMMAND ---------- + +# %sql +# CREATE TABLE dm.dm_td_aia_remove_special_ins ( +# ins_code STRING, +# pack_cod STRING) +# USING delta +# -- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_aia_remove_special_ins' +# LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_aia_remove_special_ins' + +# COMMAND ---------- + +# MAGIC %sql +# MAGIC insert overwrite dm.dm_td_aia_remove_special_ins +# MAGIC select +# MAGIC ins_code +# MAGIC ,pack_cod +# MAGIC from ins_pack_result diff --git a/for_AIA_Dashboard/08 dm_ext_aia_data_quality_flag.sql b/for_AIA_Dashboard/08 dm_ext_aia_data_quality_flag.sql new file mode 100644 index 0000000..a53213c --- /dev/null +++ b/for_AIA_Dashboard/08 dm_ext_aia_data_quality_flag.sql @@ -0,0 +1,218 @@ +-- Databricks notebook source +-- %python +-- import pandas as pd +-- # 读取上传的新增机构 +-- df = pd.read_excel('AIA_DATA_FLAG_NEWLY_ADDED_INS.xlsx') +-- sdf = spark.createDataFrame(df) +-- sdf.createOrReplaceTempView('newly_added_ins') +-- df = pd.read_excel('AIA_DATA_FLAG_LIGHT.xlsx') +-- sdf = spark.createDataFrame(df) +-- sdf.createOrReplaceTempView('light_ins') + +-- COMMAND ---------- + +-- DBTITLE 1,创建dwd的临时视图 +create or replace temporary view newly_added_ins as +select + inscode + ,is_newly_added +from dwd.dwd_gnd_aia_data_flag_newly_added_ins + +-- COMMAND ---------- + +-- DBTITLE 1,创建dwd的临时视图 +create or replace temporary view light_ins as +select + brand_name + ,inst_code + ,inst_name + ,light +from dwd.dwd_gnd_aia_data_flag_light + +-- COMMAND ---------- + +-- DBTITLE 1,处理新增机构的标签 +-- 外部的机构编码 转换成 AZ 的机构编码 +create or replace temporary view temp_extinscode_2_azinscode as +select + t1.inscode + ,t1.IS_NEWLY_ADDED + ,nvl( t2.ins_cd_nl , t1.inscode) az_inscode +from newly_added_ins t1 +left join ( + select + distinct ins_cd_nl,cpa_hospital_code + from dwd.dwd_gnd_hospital_not_provided + ) t2 + on t1.inscode = t2.cpa_hospital_code + +where t2.ins_cd_nl is not null or len(t1.inscode)<9 --存在转换表中数据不全的情况,考虑过滤掉 + +-- COMMAND ---------- + +-- DBTITLE 1,处理AIA数据质量标签表 +-- 格式化一下表,将红绿转换成数字供后续的排序做铺垫 +create or replace temporary view light_ins_formatted as +select +upper(brand_name) brand_name +,inst_code +-- ,inst_name +,case when trim(light) = '绿灯' then 3 + when trim(light) = '黄灯' then 2 + when trim(light) = '红灯' then 1 +end as light_num +from light_ins +group by 1,2,3 + +-- COMMAND ---------- + +-- DBTITLE 1,AIA数据质量标签临时表 +create or replace temporary view temp_aia_data_flag as +with pack_and_brand ( --brand 转 pack + select + upper(brandnamee) brand_name + ,ims_pack_cod PACK_COD --取所有code带出market + from dwd.dwd_td_imscode_azcode + where ims_pack_cod is not null and startswith(ims_pack_cod,'0') + and upper(brandnamee) in (select brand_name from light_ins_formatted group by 1 )--取出在配置表中的pack + group by 1,2 + ) +,pack_to_market ( + select + a.PACK_CODE + ,MARKET + from dm.dm_td_ext_aia_market_pack_mapping a + inner join pack_and_brand b on a.PACK_CODE = b.pack_cod --取出配置表中的brand对应的 market + where lower(a.MARKET) not like '%all market%' + group by 1,2 +) + +select + t1.brand_name + ,t1.inst_code as ins_code + ,t1.light_num + ,t3.market +from light_ins_formatted t1 +left join pack_and_brand t2 on t1.brand_name = t2.brand_name +inner join pack_to_market t3 on t2.pack_cod = t3.pack_code +where t1.inst_code in (select distinct AUDIT_CODE from dm.dm_tf_ext_aia_sales ) --没有销量的机构不展示 +group by 1,2,3,4 +--增加直接剔除表中的信息(需求:剔除数据异常机构的INS+MKT均为“红灯”,其余INS+MKT根据配置表进行判断) +union all +select + 'remove_directly_by_mkt' as brand_name + ,azinscode + ,1 as light_num + ,market +from dwd.dwd_gnd_aia_mark_ins_data_by_mkt +where azinscode in (select distinct AUDIT_CODE from dm.dm_tf_ext_aia_sales ) --没有销量的机构不展示 +GROUP BY azinscode,market + +-- COMMAND ---------- + +-- DBTITLE 1,dws 层结果 +insert overwrite dws.dws_ext_aia_data_quality_flag +with market_ins_light_flag ( + select + ins_code + ,market + ,brand_name + ,min(light_num) light + from temp_aia_data_flag + group by 1,2,3 + -- having count( distinct light_num) >1 +) +select + t1.ins_code + ,t1.market + ,t1.light + ,case when t2.az_inscode is not null then 1 else 0 end as is_newly_added + ,'AIA(Monthly)' data_source + ,from_utc_timestamp(current_timestamp,'UTC+8') etl_insert_dt +from market_ins_light_flag t1 +left join temp_extinscode_2_azinscode t2 on t1.ins_code = t2.az_inscode -- 是否是新增机构 +-- where t2.az_inscode is not null +group by 1,2,3,4,5 + +-- COMMAND ---------- + +-- DBTITLE 1,dm层 +insert overwrite dm.dm_ext_aia_data_quality_flag +select + t1.ins_code + ,t2.province_name + ,t2.city_name + ,t1.market + ,t1.light + ,t1.is_newly_added + ,t1.data_source + ,from_utc_timestamp(current_timestamp,'UTC+8') etl_insert_dt +from dws.dws_ext_aia_data_quality_flag t1 +left join dm.dm_td_institution t2 on t1.ins_code = t2.inst_code --获取机构地理信息中的省份和城市 + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### pbi 语句 + +-- COMMAND ---------- + +-- with mapping( +-- select 1 as o_value,'Y' as display_value +-- union all +-- select 0,'' +-- ) +-- select +-- ins_code +-- ,province_name +-- ,city_name +-- ,market +-- -- ,pack_cod +-- -- ,concat(pack_cod ,data_source) pack_key +-- ,b.display_value as is_newly_added +-- ,concat(ins_code ,data_source) audit_key +-- ,case +-- when min(light) = 1 then '红灯' +-- when min(light) = 2 then '黄灯' +-- else '绿灯' +-- end as light +-- from dm.dm_ext_aia_data_quality_flag a +-- left join mapping b on a.is_newly_added = b.o_value +-- group by 1,2,3,4,5,6 + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ### ddl 语句 + +-- COMMAND ---------- + +-- drop table dws.dws_ext_aia_data_quality_flag + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE dws.dws_ext_aia_data_quality_flag ( +-- ins_code STRING, +-- market STRING, +-- light INT COMMENT '0 red 1 yellow 2 green', +-- is_newly_added INT COMMENT '1 newly_added 0 old', +-- data_source STRING, +-- etl_insert_dt TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DWS/dws_ext_aia_data_quality_flag' +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DWS/dws_ext_aia_data_quality_flag' + +-- COMMAND ---------- + +-- CREATE or REPLACE TABLE dm.dm_ext_aia_data_quality_flag ( +-- ins_code STRING, +-- province_name STRING, +-- city_name STRING, +-- market STRING, +-- light INT COMMENT '0 red 1 yellow 2 green', +-- is_newly_added INT COMMENT '1 newly_added 0 old', +-- data_source STRING, +-- etl_insert_dt TIMESTAMP) +-- USING delta +-- LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_ext_aia_data_quality_flag' +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_ext_aia_data_quality_flag' \ No newline at end of file diff --git a/z 01 dm_tf_external_sales.sql b/z 01 dm_tf_external_sales.sql new file mode 100644 index 0000000..359ca4a --- /dev/null +++ b/z 01 dm_tf_external_sales.sql @@ -0,0 +1,1187 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC ## 清空表 + +-- COMMAND ---------- + +TRUNCATE TABLE dm.dm_tf_external_sales + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 各渠道逻辑 + +-- COMMAND ---------- + +-- DBTITLE 1,CHPA +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'IQVIA-CHPA(Monthly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + 'IQVIA-CHPA(Monthly)' DATA_SOURCE, + ------------------------------------- + SUM(SALES_UNIT_CAL) SALES_UNIT_CAL, + SUM(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY, + SUM(SALES_VALUE_CAL) SALES_VALUE_CAL, + SUM(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + SUM(CONUTING_UNIT) CONUTING_UNIT, + SUM(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_ims_tf_sales A + where + A.YYYYMM >= '202001' + AND A.MARKET = 'IMS ALL Market' + GROUP BY + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD + +-- COMMAND ---------- + +-- DBTITLE 1,COUNTY +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + 'IQVIA-COUNTY(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(SALES_UNIT_CAL) SALES_UNIT_CAL, + SUM(SALES_UNIT_CAL_LY) as SALES_UNIT_CAL_LY, + SUM(SALES_VALUE_CAL) SALES_VALUE_CAL, + SUM(SALES_VALUE_CAL_LY) as SALES_VALUE_CAL_LY, + SUM(CONUTING_UNIT) CONUTING_UNIT, + SUM(CONUTING_UNIT_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + NVL(A.REGION_TYPE, '') REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + DM.dm_ext_county_tf_sales_region A + where + A.YYYYMM >= '202001' + AND A.MARKET = 'IMS ALL Market' + GROUP BY + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + A.REGION_TYPE + +-- COMMAND ---------- + +-- DBTITLE 1,THC +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'THC(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + 'THC(Quarterly)' DATA_SOURCE, + ------------------------------------- + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + COUNTING_UNIT, + COUNTING_UNIT_LY , + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_ext_thc_sales A + where + AUDIT_COD = 'CHT' + +-- COMMAND ---------- + +-- DBTITLE 1,CHC_RAW_DATA +------------------------------------------------------------------------------CHC------------------------------------------------------------------- +CREATE OR REPLACE TEMPORARY VIEW V_CHC_RAW_DATA AS +with exchc_rawdata_temp as ( --主表数据 + select + CASE + WHEN SUBSTRING(yq, 5,2) = 'Q1' THEN CONCAT(SUBSTRING(yq, 1, 4), '03') + WHEN SUBSTRING(yq, 5, 2) = 'Q2' THEN CONCAT(SUBSTRING(yq, 1, 4), '06') + WHEN SUBSTRING(yq, 5, 2) = 'Q3' THEN CONCAT(SUBSTRING(yq, 1, 4), '09') + WHEN SUBSTRING(yq, 5, 2) = 'Q4' THEN CONCAT(SUBSTRING(yq, 1, 4), '12') + ELSE yq + END AS yq, + city_c, + pack_cod, + prod_cod, + value, + totalunit, + countingunit + from dwd.dwd_gnd_chc_rawdata + where year >= '2021' +), +temp_corp as ( + select + PACK_COD, + CORP_COD, + CORP_DES + from dm.dm_ims_td_pack_property + group by PACK_COD,CORP_COD,CORP_DES +), +chc_pack_property_clean as ( +select distinct + iqvia_pack_code , + iqvia_prod_code , + pack_cod , + 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_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 , + prod_des , + prod_des_c , + tcm_desc , + vbp_desc , + builtinarchivedate , + source_file_path , + source_file_name , + etl_insert_dt , + countingunit +from dwd.dwd_gnd_ext_chc_pack_property +), +temp_corp_temp as ( -- chc本身唯独表 存在corp_cod以及 CORP_DES 与手工数据不一致的问题 + select + t1.pack_cod, + t1.iqvia_pack_code, + t1.countingunit, + coalesce(t2.CORP_COD, t1.CORP_COD) as CORP_COD , + coalesce(t2.CORP_DES,t1.CORP_DES ) as CORP_DES + from chc_pack_property_clean t1 + left join temp_corp t2 + on t1.iqvia_pack_code = t2.PACK_COD +), +dim_exchc_geo as ( + -- geo相关信息 在CHPA中没有 苏州、无锡、福州等数据,根据业务反馈,按照 city_c当作AUDIT_COD + select + t1.city_e, + concat( t1.city_c , '市') as city_c, + upper( nvl(t2.AUDIT_COD ,t1.city_e) ) as AUDIT_COD + from dwd.dwd_gnd_ext_chc_geo t1 + left join dm.dm_ims_td_geo t2 + on t1.city_e= t2.city +-- --20260122 按照新的业务逻辑,直接用城市名称匹配获得省份code +-- SELECT DISTINCT city_name,province_code,province_name FROM DM.dm_td_geography +-- WHERE nvl(city_code,'')!='' and nvl(province_code,'')!='' and nvl(province_name,'')!='' +), +exchc_rawdata_iqvia as ( + select + t1.yq , + t1.city_c, + -- t1.pack_cod pack_cod_old, + t3.iqvia_pack_code as pack_cod, + t3.CORP_COD as CORP_COD, + C.AUDIT_COD as AUDIT_COD, + t1.prod_cod, + t1.value, + t1.totalunit, + -- t1.countingunit, + t1.totalunit * nvl(t3.countingunit,1 ) as countingunit + -- t2.countingunit as tt + from exchc_rawdata_temp t1 + left join temp_corp_temp t3 + on t1.pack_cod = t3.pack_cod + LEFT JOIN dim_exchc_geo C + ON t1.CITY_C = C.city_c +), +value_temp as( + select + a.yq, + a.AUDIT_COD, + a.pack_cod, + --t1.prod_cod, + a.CORP_COD, + sum(a.value) value, + sum(a.totalunit) totalunit, + sum(a.countingunit) countingunit, + sum(value_ly) value_ly, + sum(totalunit_ly) totalunit_ly, + sum(countingunit_ly) countingunit_ly + from ( + select + t1.yq, + t1.AUDIT_COD, + t1.pack_cod, + --t1.prod_cod, + t1.CORP_COD, + t1.value, + t1.totalunit, + t1.countingunit, + 0 value_ly, + 0 totalunit_ly, + 0 countingunit_ly + from exchc_rawdata_iqvia t1 + union all + select + cast(t1.yq+100 as int), + t1.AUDIT_COD, + t1.pack_cod, + --t1.prod_cod, + t1.CORP_COD, + 0 value, + 0 totalunit, + 0 countingunit, + t1.value value_ly, + t1.totalunit totalunit_ly, + t1.countingunit countingunit_ly + from exchc_rawdata_iqvia t1 + WHERE T1.YQ+100 <= (SELECT MAX(YQ) FROM exchc_rawdata_iqvia) + ) a + group by a.yq, + a.AUDIT_COD, + a.pack_cod, + --t1.prod_cod, + a.CORP_COD +) + +select + t1.yq as YYYYMM , + t1.AUDIT_COD, + t1.pack_cod, + t1.CORP_COD + --t1.prod_cod + ,sum(totalunit) AS SALES_UNIT_CAL -- totalunit + ,sum(totalunit_ly) AS SALES_UNIT_CAL_LY --totalunit_ly + ,sum(value) AS SALES_VALUE_CAL --value + ,sum(value_ly ) AS SALES_VALUE_CAL_LY + ,sum(countingunit) AS CONUTING_UNIT --countingunit + ,sum(countingunit_ly) AS CONUTING_UNIT_LY + ,'CHC(Quarterly)' as DATA_SOURCE + from value_temp t1 + group by 1,2,3,4 + +-- COMMAND ---------- + +-- DBTITLE 1,CHC +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'CHC(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.PACK_COD, + A.AUDIT_COD, + 'CHC(Quarterly)' DATA_SOURCE, + ------------------------------------- + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + V_CHC_RAW_DATA A + WHERE + YYYYMM >= ( + SELECT + CAST((LEFT(MAX(YYYYMM), 4) - 3) * 100 + 1 AS INT) + FROM + V_CHC_RAW_DATA + ) + +-- COMMAND ---------- + +-- DBTITLE 1,Retail +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'Retail(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) +SELECT + A.YYYYMM, + A.iqvia_pack_code, + trim(A.AUDIT_COD) AS AUDIT_COD, + 'Retail(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) as SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) as SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + A.PACK_FLAG, + A.brand_flag PROD_FLAG, + 0 DTP_FLAG, + case + when + max(lower(C.CMPS_DES)) in ('atorvastatin', 'rosuvastatin', 'esomeprazole', 'omeprazole') + then + 1 + else 0 + end as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 +------------------------------------- +FROM + dm.dm_zk_retail_sales A + LEFT JOIN ( + select DISTINCT + iqvia_pack_code, + CMPS_DES + from + dm.dm_zk_retail_pack_property + ) C + ON A.iqvia_pack_code = C.iqvia_pack_code +------------------------------------- +LEFT JOIN (SELECT OTHERS_MONTH FROM tmp.tmp_dm_td_ext_retail_niad_month) D +------------------------------------- +where + A.YYYYMM >= '202001' AND A.YYYYMM <= D.OTHERS_MONTH +GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.PACK_FLAG, + A.brand_flag + +-- COMMAND ---------- + +-- DBTITLE 1,DTP +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'DTP(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.iqvia_pack_code, + trim(A.AUDIT_COD) AS AUDIT_COD, + 'DTP(Quarterly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) as SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) as SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + brand_flag AS PROD_FLAG, + 1 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_zk_retail_dtp_sales A + where + A.YYYYMM >= '202001' + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.brand_flag, + A.pack_flag + +-- COMMAND ---------- + +-- DBTITLE 1,EC +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'EC(Monthly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + 'EC(Monthly)' DATA_SOURCE, + ------------------------------------- + SUM(sales_unit) SALES_UNIT_CAL, + SUM(sales_unit_ly) SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) SALES_VALUE_CAL_LY, + SUM(counting_unit) CONUTING_UNIT, + SUM(counting_unit_LY) CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + A.PLATFORM, + A.STORE_NAME, + A.STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_zk_ec_sales A + LEFT JOIN (SELECT OTHERS_MONTH FROM tmp.tmp_dm_td_ext_ec_niad_month) D + where + A.YYYYMM >= '202001' and A.YYYYMM<=D.others_month + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.PLATFORM, + A.STORE_NAME, + A.STORE_TYPE, + A.PACK_FLAG, + A.PROD_FLAG + +-- COMMAND ---------- + +-- DBTITLE 1,AIA +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'AIA(Monthly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.ym, + A.PACK_COD, + A.AUDIT_COD, + 'AIA(Monthly)' DATA_SOURCE, + ------------------------------------- + sum(volume) as SALES_UNIT_CAL, + sum(volume_ly) as SALES_UNIT_CAL_LY, + sum(value) as SALES_VALUE_CAL, + sum(value_ly) as SALES_VALUE_CAL_LY, + sum(counting_unit) as CONUTING_UNIT, + sum(counting_unit_ly) as CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + inst_code AS inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + '' as dept_name, + '' as new_code, + '' as area, + '' as h_level, + '' as reimburse, + '' as reimburse_type, + '' as prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + from + dm.dm_ext_aia_sales A + --取202401年之后的数 + where + ym >= '202401' + group by + ym, + pack_cod, + corp_cod, + AUDIT_COD, + inst_code + +-- COMMAND ---------- + +-- DBTITLE 1,XIEHE +-- DELETE FROM +-- dm.dm_tf_external_sales +-- WHERE +-- DATA_SOURCE = 'XH Data(Quarterly)'; + +INSERT INTO dm.dm_tf_external_sales ( + YYYYMM, + PACK_COD, + AUDIT_COD, + DATA_SOURCE, + SALES_UNIT_CAL, + SALES_UNIT_CAL_LY, + SALES_VALUE_CAL, + SALES_VALUE_CAL_LY, + CONUTING_UNIT, + CONUTING_UNIT_LY, + prescription, + prescription_ly, + PACK_FLAG, + PROD_FLAG, + DTP_FLAG, + cmps_flag, + PLATFORM_TYPE, + STORE_NAME, + STORE_TYPE, + REGION_TYPE, + inst_code, + dept_name, + new_code, + area, + h_level, + reimburse, + reimburse_type, + prescription_source, + CORP_COD + ) + SELECT + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + 'XH Data(Quarterly)' DATA_SOURCE, + ------------------------------------- + 0 SALES_UNIT_CAL, + 0 SALES_UNIT_CAL_LY, + SUM(sales_value) SALES_VALUE_CAL, + SUM(sales_value_LY) SALES_VALUE_CAL_LY, + SUM(A.counting_unit) CONUTING_UNIT, + SUM(A.counting_unit_ly) CONUTING_UNIT_LY, + null as prescription, + null as prescription_ly, + ------------------------------------- + --Retail藏数逻辑标签------------------ + 1 PACK_FLAG, + 1 PROD_FLAG, + 0 DTP_FLAG, + null as cmps_flag, + ------------------------------------- + --EC数据标签-------------------------- + '' PLATFORM_TYPE, + '' STORE_NAME, + '' STORE_TYPE, + ------------------------------------- + --COUNTY数据标签---------------------- + '' REGION_TYPE, + ------------------------------------- + --AIA数据标签------------------------- + null inst_code, --可以移除,报告没有使用 + ------------------------------------- + --XIE HE 数据标签--------------------- + NVL(A.dept_name, '') dept_name, + NVL(A.new_code, '') new_code, + NVL(A.province, '') area, + NVL(A.h_level, '') h_level, + NVL(A.reimburse, '') reimburse, + NVL(A.reimburse_type, '') reimburse_type, + NVL(A.prescription_source, '') prescription_source, + ------------------------------------- + '' as CORP_COD --可以移除,报告没有使用 + ------------------------------------- + FROM + dm.dm_ext_xiehe_sales A + WHERE + A.YYYYMM >= '202001' + GROUP BY + A.YYYYMM, + A.iqvia_pack_code, + A.AUDIT_COD, + A.dept_name, + A.new_code, + A.province, + A.h_level, + A.reimburse, + A.reimburse_type, + A.prescription_source + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## 特殊逻辑 + +-- COMMAND ---------- + +-- DBTITLE 1,更新pack code +update dm.dm_tf_external_sales set PACK_COD = concat('PACK_COD_',DATA_SOURCE) +where PACK_COD is null or PACK_COD = ''; +update dm.dm_tf_external_sales set AUDIT_COD = 'ROC' +where AUDIT_COD is null or AUDIT_COD = ''; + + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC ## NIAD单独页面数据 + +-- COMMAND ---------- + +update dm.dm_zk_retail_sales set DATA_SOURCE = 'Retail(Quarterly)' + +-- COMMAND ---------- + +-- DBTITLE 1,NIAD +-- ============================================================================= +-- 脚本名称: dm.dm_tf_external_sales_niad 数据装载脚本 +-- 功能描述: 将零售和电商的销售数据(仅限NIAD市场)插入目标表 +-- 数据来源: dm.dm_zk_retail_sales, dm.dm_zk_ec_sales, dm.dm_td_external_market_pack_mapping_temp +-- 目标表: dm.dm_tf_external_sales_niad +-- 更新方式: INSERT OVERWRITE(全量覆盖) +-- 创建时间: 2026-03-09 +-- ============================================================================= + +INSERT OVERWRITE TABLE dm.dm_tf_external_sales_niad +( + YYYYMM, -- 年月分区键 + PACK_COD, -- 药品包装代码 + AUDIT_COD, -- 审计代码 + SALES_UNIT_CAL, -- 本期销量(单位) + SALES_UNIT_CAL_LY, -- 去年同期销量(单位) + SALES_VALUE_CAL, -- 本期销售额 + SALES_VALUE_CAL_LY, -- 去年同期销售额 + CONUTING_UNIT, -- 计数单位(本期) + CONUTING_UNIT_LY, -- 计数单位(去年同期) + DATA_SOURCE, -- 数据来源(零售/电商) + DATE_KEY, -- 日期键(转换为日期类型) + PACK_SOURCE, -- 包装来源唯一标识 + AUDIT_SOURCE -- 审计来源唯一标识 +) + +WITH mkt_pack AS ( + SELECT DISTINCT + PACK_COD, + DATA_SOURCE + FROM dm.dm_td_external_market_pack_mapping_temp + WHERE DATA_SOURCE IN ('Retail(Quarterly)', 'EC(Monthly)') -- 仅限零售和电商 + AND MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' -- NIAD市场过滤 +), + +sales AS ( + -- 零售数据(季度) + SELECT + YYYYMM, + iqvia_pack_code AS PACK_COD, + AUDIT_COD, + sales_unit AS SALES_UNIT_CAL, + sales_unit_ly AS SALES_UNIT_CAL_LY, + sales_value AS SALES_VALUE_CAL, + sales_value_ly AS SALES_VALUE_CAL_LY, + counting_unit AS CONUTING_UNIT, + counting_unit_ly AS CONUTING_UNIT_LY, + DATA_SOURCE, + -- 将日期转换放在CTE中统一处理,避免重复解析 + TO_DATE(YYYYMM, 'yyyyMM') AS DATE_KEY, + CONCAT(iqvia_pack_code, DATA_SOURCE) AS PACK_SOURCE, + CONCAT(AUDIT_COD, DATA_SOURCE) AS AUDIT_SOURCE + FROM dm.dm_zk_retail_sales + WHERE YYYYMM >= '202001' -- 仅保留2020年及以后数据 + + UNION ALL + + -- 电商数据(月度) + SELECT + YYYYMM, + iqvia_pack_code AS PACK_COD, + AUDIT_COD, + sales_unit AS SALES_UNIT_CAL, + sales_unit_ly AS SALES_UNIT_CAL_LY, + sales_value AS SALES_VALUE_CAL, + sales_value_ly AS SALES_VALUE_CAL_LY, + counting_unit AS CONUTING_UNIT, + counting_unit_ly AS CONUTING_UNIT_LY, + DATA_SOURCE, + TO_DATE(YYYYMM, 'yyyyMM') AS DATE_KEY, + CONCAT(iqvia_pack_code, DATA_SOURCE) AS PACK_SOURCE, + CONCAT(AUDIT_COD, DATA_SOURCE) AS AUDIT_SOURCE + FROM dm.dm_zk_ec_sales + WHERE YYYYMM >= '202001' -- 仅保留2020年及以后数据 +) +SELECT + a.YYYYMM, + a.PACK_COD, + a.AUDIT_COD, + a.SALES_UNIT_CAL, + a.SALES_UNIT_CAL_LY, + a.SALES_VALUE_CAL, + a.SALES_VALUE_CAL_LY, + a.CONUTING_UNIT, + a.CONUTING_UNIT_LY, + a.DATA_SOURCE, + a.DATE_KEY, + a.PACK_SOURCE, + a.AUDIT_SOURCE + FROM sales a + INNER JOIN mkt_pack b + ON a.PACK_COD = b.PACK_COD + AND a.DATA_SOURCE = b.DATA_SOURCE; \ No newline at end of file diff --git a/z 10 dm_td_external_market_pack_mapping_作废.sql b/z 10 dm_td_external_market_pack_mapping_作废.sql new file mode 100644 index 0000000..0e90786 --- /dev/null +++ b/z 10 dm_td_external_market_pack_mapping_作废.sql @@ -0,0 +1,1439 @@ +-- Databricks notebook source +--------------------------------------------------------------------------- +--修改时间:20241126 +--修改人:Fanxujia +--修改内容: +--THC渠道分为14省的数据源以及全国的数据源两种,分在了2个事实表里,下面在维表在引用事实表时,需要将两个事实表union在一起 +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +--修改时间:20241129 +--修改人:Fanxujia +--修改内容: +--补充Retail直取中DTP的手工文件里的pack_cod +---------------------------------------------------------------------------- +create or replace temporary view external_sales_union as +select distinct +PACK_COD, +DATA_SOURCE +from dm.dm_tf_external_sales +union all +select distinct +PACK_COD, +DATA_SOURCE +from dm.dm_tf_external_sales_thc +union all +select distinct +pack_code, +'Retail(Quarterly)' as DATA_SOURCE +from dm.dm_zk_retail_sales_kpi +where NVL(pack_code,'Others') <> 'Others' +and pack_code <> '' + +-- COMMAND ---------- + +-------------------------------------------------------------------------------------------------------------------------------------------------- +--修改时间:20240812 +--修改人:FanXujia +--修改内容: +--在从DM_TD_EXTERNAL_KEYCOMPATITOR表里获取市场描述(MARKET_DESC字段)时,需要增加一个DATA_SOURCE的条件。 +--修改原因: +--对于同一个市场,每个渠道的市场描述并不一样。 +-------------------------------------------------------------------------------------------------------------------------------------------------- + +-- COMMAND ---------- + +/* +修改日期:20250311 +修改人:chenwu +修改内容:修改COUNTINGUNIT_MARKET_RATIO 取unit的值 +*/ +/* +修改日期:20250513 +修改人:chenwu +修改内容:修改RE Market 为 RE Market (Global) +*/ +INSERT OVERWRITE dm.dm_td_external_market_pack_mapping_temp( + PACK_COD,PACK_DES,PROD_DES,PROD_DES_C,MARKET,TA,KEY_COMPETITOR,AZ_RELATED,CLASS, + VALUE_MARKET_RATIO,UNIT_MARKET_RATIO,COUNTINGUNIT_MARKET_RATIO,PDOT_MARKET_RATIO,MARKET_DESC,TA_RN,DATA_SOURCE,dept_name,key_dept_name + ,new_code + ,area +) +WITH MKT_PACK_RATIO AS ( + -------------------------------------根据沟通,市场+产品对应的ratio是唯一的------------------------------------------ +SELECT A.MARKET,A.PACK_COD,MAX(A.Value_Market_Ratio) Value_Market_Ratio,MAX(A.Unit_Market_Ratio) Unit_Market_Ratio,MAX(A.PDOT_Market_Ratio) CountingUnit_Market_Ratio,MAX(A.CountingUnit_Market_Ratio) PDOT_Market_Ratio --因为之前的报告在使用源表的数据,因此命名是反的。 +FROM DWS.dws_ims_td_market_ratio A +WHERE A.YM = (SELECT MAX(YM) FROM DWS.dws_ims_td_market_ratio) +GROUP BY A.MARKET,A.PACK_COD +) +--------------------------------------------------------------------CHPA------------------------------------------------------------------ +SELECT B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET,B.TA,B.KEY_COMPETITOR, +CASE + WHEN B.MARKET = 'DM Market' THEN 'DM' + WHEN B.MARKET = 'CV Market' THEN 'CV' + WHEN B.MARKET = 'RD Market' THEN 'RD' + WHEN B.MARKET = 'RE Market' THEN 'RE' --WHEN B.MARKET = 'RE Market' THEN 'RE' + WHEN B.MARKET IN ('GI Market','Retail_GI Market') THEN 'GI' + WHEN B.MARKET = 'ONC Market' THEN 'ONCO' + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' + WHEN B.MARKET = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE + END AZ_RELATED + ,B.CLASS,NVL(B.VALUE_MARKET_RATIO,1) VALUE_MARKET_RATIO,NVL(B.UNIT_MARKET_RATIO,1) UNIT_MARKET_RATIO,NVL(B.COUNTINGUNIT_MARKET_RATIO,1) COUNTINGUNIT_MARKET_RATIO,NVL(B.PDOT_MARKET_RATIO,1) PDOT_MARKET_RATIO,B.MARKET_DESC, +CASE + WHEN B.MARKET = 'DM Market' THEN 1 + WHEN B.MARKET = 'CV Market' THEN 2 + WHEN B.MARKET = 'RD Market' THEN 3 + WHEN B.MARKET = 'RE Market' THEN 4 + WHEN B.MARKET = 'GI Market' THEN 5 + WHEN B.MARKET = 'ONC Market' THEN 6 + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 + WHEN B.MARKET = 'RARE Market' THEN 8 --20250701 chenwu 新增RARE + ELSE 99 END TA_RN +,'IQVIA-CHPA(Monthly)' DATA_SOURCE +,'' as dept_name +,'' as key_dept_name +,'' as new_code +,'' as area +FROM ( +SELECT B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET,MAX(C.TA) TA,MAX(E.KEY_COMPETITOR) KEY_COMPETITOR,MAX(E.IS_AZ) IS_AZ,MAX(E.AZ_MAIN) AZ_MAIN,MAX(E.AZ_RELATED) AZ_RELATED,MAX(E.CLASS) CLASS,MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO,MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO,MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO,MAX(D.PDOT_MARKET_RATIO) PDOT_MARKET_RATIO,max(g.MARKET_DESC) MARKET_DESC +FROM (SELECT PACK_COD,COUNT(*) RUM FROM DM.DM_TF_EXTERNAL_SALES +-- WHERE YYYYMM >= (SELECT CAST((LEFT(MAX(YYYYMM),4)-3)*100+1 AS INT) FROM DM.DM_TF_EXTERNAL_SALES) +-- AND DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +where DATA_SOURCE = 'IQVIA-CHPA(Monthly)' +GROUP BY PACK_COD) A +LEFT JOIN DM.DM_IMS_TD_PACK_PROPERTY B +ON B.PACK_COD = A.PACK_COD --AND B.MARKET <> 'IMS ALL Market' +LEFT JOIN DM.DM_IMS_TD_MARKET_PROPERTY C +ON B.MARKET = C.MARKET +LEFT JOIN DM.DM_IMS_TD_PACK_PROPERTY E ON B.MARKET_PACK_KEY = E.MARKET_PACK_KEY +LEFT JOIN MKT_PACK_RATIO D ON B.MARKET = D.MARKET AND B.PACK_COD = D.PACK_COD +LEFT JOIN (SELECT MARKET,DATA_SOURCE,MAX(MARKETDESC) MARKET_DESC FROM DM.DM_TD_EXTERNAL_KEYCOMPATITOR GROUP BY MARKET,DATA_SOURCE) G ON B.MARKET = G.MARKET AND UPPER(G.DATA_SOURCE) = 'IQVIA-CHPA(MONTHLY)' +GROUP BY B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET) B +WHERE B.PACK_COD IS NOT NULL AND B.MARKET IS NOT NULL +UNION ALL +--------------------------------------------------------------------Retail------------------------------------------------------------------ +SELECT + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + CASE + when B.MARKET = 'Non AZ Retail Related Market' + and b.TA = 'CV' THEN 'CV Market' + else b.MARKET + end MARKET, + CASE + WHEN B.MARKET = 'RE Market' THEN 'RE' + when B.TA = 'RE' THEN NULL--只有 'RE Market (Global)' 的ta是 RE + WHEN B.MARKET = 'Soliris Related Market' THEN 'RARE'--20250701 chenwu 新增RARE + ELSE b.TA + END TA, + B.KEY_COMPETITOR, + CASE + WHEN B.MARKET = 'RE Market' THEN 'RE' + when B.TA = 'RE' THEN NULL--只有 'RE Market (Global)' 的ta是 RE + WHEN B.MARKET = 'CVRM_OTHER Market' THEN 'CVRM' + WHEN B.MARKET = 'Soliris Related Market' THEN 'RARE'--20250701 chenwu 新增RARE + ELSE b.TA + END AZ_RELATED, + B.CLASS, + nvl(B.VALUE_MARKET_RATIO, 1), + nvl(B.UNIT_MARKET_RATIO, 1), + nvl(B.UNIT_MARKET_RATIO, 1) COUNTINGUNIT_MARKET_RATIO, --应该取unit的值作为count --,1 COUNTINGUNIT_MARKET_RATIO + nvl(B.PDOT_MARKET_RATIO, 1), + B.MARKET_DESC, + -- CASE WHEN b.TA='DM' THEN 1 WHEN b.TA ='CV' OR B.MARKET='CV Market' THEN 2 WHEN b.TA ='RD' THEN 3 WHEN b.MARKET ='RE Market' OR b.TA ='RE' or b.MARKET = 'Inhaled Extended Market by Brand' THEN 4 WHEN b.TA ='GI' THEN 5 WHEN b.TA ='ONCO' THEN 6 + CASE + WHEN b.TA = 'DM' THEN 1 + WHEN b.TA = 'CV' OR B.MARKET = 'CV Market' THEN 2 + WHEN b.TA = 'RD' THEN 3 + WHEN b.MARKET = 'RE Market' THEN 4 + WHEN b.TA = 'GI' THEN 5 + WHEN b.TA = 'ONCO' THEN 6 + WHEN B.MARKET = 'CVRM_OTHER Market' THEN 0 + WHEN B.MARKET = 'Soliris Related Market' THEN 8--20250701 chenwu 新增RARE + ELSE 99 + END TA_RN, + 'Retail(Quarterly)' DATA_SOURCE, + '' as dept_name, + '' as key_dept_name, + '' as new_code, + '' as area +FROM + ( + SELECT + a.MARKET_PACK_KEY, + B.iqvia_pack_code PACK_COD, + a.PACK_DES, + a.PROD_DES, + a.PROD_DES_C, + a.MARKET, + MAX(a.TA) TA, + MAX(a.KEY_COMPETITOR) KEY_COMPETITOR, + MAX(a.CLASS) CLASS, + MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO, + MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO, + MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO, + MAX(D.COUNTINGUNIT_MARKET_RATIO) PDOT_MARKET_RATIO, + max(g.MARKET_DESC) MARKET_DESC + FROM + DM.dm_zk_retail_pack_property a + LEFT JOIN DM.dm_zk_retail_market_property B ON A.iqvia_pack_code = B.iqvia_pack_code + and a.market = b.market + LEFT JOIN dm.dm_zk_retail_market_ratio D ON B.MARKET = D.MARKET + AND B.iqvia_pack_code = D.pack_cod + LEFT JOIN ( + SELECT + MARKET, + DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + FROM + DM.DM_TD_EXTERNAL_KEYCOMPATITOR + GROUP BY + MARKET, + DATA_SOURCE + ) G ON B.MARKET = G.MARKET + AND UPPER(G.DATA_SOURCE) = 'RETAIL(QUARTERLY)' + WHERE + A.iqvia_pack_code in ( + select + distinct iqvia_pack_code + from + dm.dm_zk_retail_sales + ) + GROUP BY + a.MARKET_PACK_KEY, + B.iqvia_pack_code, + a.PACK_DES, + a.PROD_DES, + a.PROD_DES_C, + a.MARKET + ) b +--------------------------------------------------------DTP-------------------------------------------------------- +UNION ALL +SELECT B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C +,MARKET +,CASE + WHEN B.TA IS NULL AND MARKET = 'ONC Market' + THEN 'ONCO' +ELSE B.TA END AS TA +,B.KEY_COMPETITOR +,CASE + WHEN B.TA IS NULL AND MARKET = 'ONC Market' + THEN 'ONCO' + ELSE B.TA END AS AZ_RELATED +,B.CLASS +,nvl(B.VALUE_MARKET_RATIO,1) +,nvl(B.UNIT_MARKET_RATIO,1) +,nvl(B.UNIT_MARKET_RATIO,1) COUNTINGUNIT_MARKET_RATIO --应该取unit的值作为count--,1 COUNTINGUNIT_MARKET_RATIO +,nvl(B.PDOT_MARKET_RATIO,1) +,B.MARKET_DESC, +CASE + WHEN B.TA IS NULL AND MARKET = 'ONC Market' THEN 6 + WHEN B.TA IS NULL THEN 99 + WHEN B.TA ='CVRM' THEN 0 + WHEN B.TA ='DM' THEN 1 + WHEN B.TA ='CV' THEN 2 + WHEN B.TA ='RD' THEN 3 + WHEN B.TA ='RE' THEN 4 + WHEN B.TA ='GI' THEN 5 + WHEN B.TA ='ONCO' THEN 6 + WHEN B.TA ='NIAD' THEN 7 + WHEN B.TA ='RARE' THEN 8 + WHEN B.TA ='NP' THEN 9 + ELSE 99 END TA_RN +,'DTP(Quarterly)' DATA_SOURCE +,'' as dept_name +,'' as key_dept_name +,'' as new_code +,'' as area +FROM ( +SELECT a.MARKET_PACK_KEY,a.iqvia_pack_code PACK_COD,a.PACK_DES,a.PROD_DES,a.PROD_DES_C +,a.MARKET,max(t3.TA) AS TA,max(t3.TA_ORDER) AS TA_ORDER +,MAX(a.KEY_COMPETITOR) KEY_COMPETITOR,MAX(a.CLASS) CLASS,MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO,MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO,MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO,MAX(D.COUNTINGUNIT_MARKET_RATIO) PDOT_MARKET_RATIO,max(g.MARKET_DESC) MARKET_DESC +FROM DM.dm_zk_retail_dtp_pack_property a +LEFT JOIN dm.dm_zk_retail_market_ratio D ON a.MARKET = D.MARKET AND a.iqvia_pack_code = D.pack_cod +LEFT JOIN (SELECT MARKET,DATA_SOURCE,MAX(MARKETDESC) MARKET_DESC FROM DM.DM_TD_EXTERNAL_KEYCOMPATITOR GROUP BY MARKET,DATA_SOURCE) G ON a.MARKET = G.MARKET AND UPPER(G.DATA_SOURCE) = 'RETAIL(QUARTERLY)' +LEFT JOIN ( + select + MARKET,IF(TA = 'ONC' ,'ONCO',TA) AS TA,TA_ORDER + from dwd.dwd_td_ims_market_ta_order + group by 1,2,3) t3 ON a.MARKET = t3.market +WHERE A.iqvia_pack_code in (select distinct iqvia_pack_code from dm.dm_zk_retail_dtp_sales) +GROUP BY a.MARKET_PACK_KEY,A.iqvia_pack_code,a.PACK_DES,a.PROD_DES,a.PROD_DES_C,a.MARKET +) b + +--------------------------------------------------------RETAIL all market-------------------------------------------------------- +union all +SELECT B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C +,'Retail All Market' MARKET ,TA,b.KEY_COMPETITOR,null AZ_RELATED,null CLASS, +1 VALUE_MARKET_RATIO,1 UNIT_MARKET_RATIO,1 COUNTINGUNIT_MARKET_RATIO,1 PDOT_MARKET_RATIO,null MARKET_DESC,null TA_RN +,'Retail(Quarterly)' DATA_SOURCE +,'' as dept_name +,'' as key_dept_name +,'' as new_code +,'' as area +FROM ( +SELECT a.iqvia_pack_code PACK_COD,a.PACK_DES,a.PROD_DES,a.PROD_DES_C,null TA,MAX(a.KEY_COMPETITOR) KEY_COMPETITOR +FROM DM.dm_zk_retail_pack_property a +WHERE A.iqvia_pack_code in (select distinct iqvia_pack_code from dm.dm_zk_retail_sales) +GROUP BY A.iqvia_pack_code,a.PACK_DES,a.PROD_DES,a.PROD_DES_C +union +select a.pack_code,nvl(b.pack_des,c.pack_des),nvl(b.PROD_DES,c.PROD_DES),nvl(b.PROD_DES_C,c.PROD_DES_C),null ta,MAX(b.KEY_COMPETITOR) KEY_COMPETITOR +from dm.dm_zk_retail_sales_kpi a +left join dm.dm_zk_retail_pack_property b on a.pack_code =b.iqvia_pack_code +left join (select distinct iqvia_pack_code,pack_des,PROD_DES,PROD_DES_C from dm.dm_zk_retail_pack_property ) c on a.pack_code =c.iqvia_pack_code +where a.pack_code <>'' +--排除Others以及null +and NVL(a.pack_code,'Others') <> 'Others' +GROUP BY a.pack_code,nvl(b.pack_des,c.pack_des),nvl(b.PROD_DES,c.PROD_DES),nvl(b.PROD_DES_C,c.PROD_DES_C) +) b + +--------------------------------------------------------DTP all market-------------------------------------------------------- +union all +SELECT B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C +,'DTP ALL Market' MARKET ,TA,b.KEY_COMPETITOR,null AZ_RELATED,null CLASS, +1 VALUE_MARKET_RATIO,1 UNIT_MARKET_RATIO,1 COUNTINGUNIT_MARKET_RATIO,1 PDOT_MARKET_RATIO,null MARKET_DESC,null TA_RN +,'DTP(Quarterly)' DATA_SOURCE +,'' as dept_name +,'' as key_dept_name +,'' as new_code +,'' as area +FROM ( + SELECT a.iqvia_pack_code PACK_COD,a.PACK_DES,a.PROD_DES,a.PROD_DES_C,null TA,MAX(a.KEY_COMPETITOR) KEY_COMPETITOR +FROM DM.dm_zk_retail_dtp_pack_property a +WHERE A.iqvia_pack_code in (select distinct iqvia_pack_code from dm.dm_zk_retail_dtp_sales) +GROUP BY A.iqvia_pack_code,a.PACK_DES,a.PROD_DES,a.PROD_DES_C +) B + +-- COMMAND ---------- + +--------------------------------------------------------------------------------- +--修改时间:20240918 +--修改人:FanXuJia +--修改内容: +--计算market_ratio\pdot_ratio时,之前使用的是现成的dws表,但是这个dws表不是外部数据报告的,更新频率也不是每天更新。会存在一定的更新时间差。 +--因此改成使用dwd层表 +----------------------------------------------------------------------------------- +INSERT into dm.dm_td_external_market_pack_mapping_temp( + PACK_COD,PACK_DES,PROD_DES,PROD_DES_C,MARKET,TA,KEY_COMPETITOR,AZ_RELATED,CLASS, + VALUE_MARKET_RATIO,UNIT_MARKET_RATIO,COUNTINGUNIT_MARKET_RATIO,PDOT_MARKET_RATIO,MARKET_DESC,TA_RN,DATA_SOURCE,dept_name,key_dept_name + ,new_code + ,area +) +WITH county_brand_ratio as ( + SELECT distinct market, + CASE WHEN length(cmps_cod) < 6 THEN RIGHT(CONCAT('000000',cmps_cod),6) ELSE cmps_cod END AS cmps_cod, + cmps_des, + CASE WHEN length(pack_cod) < 12 and pack_cod REGEXP '^[0-9]' THEN RIGHT(CONCAT('000000000000',pack_cod),12) ELSE pack_cod END AS pack_cod, + pack_des, + level, + type, + ratio + from dwd.dwd_gnd_ims_tblBrandRatio +) +,MKT_PACK_RATIO_tmp as ( +select t1.market, +t1.PACK_COD, +--优先取pack粒度的ratio +case when t2.ratio is not null then t1.Market_Ratio * t2.ratio + else t1.Market_Ratio * NVL(t3.ratio,1) +end as Value_Market_Ratio, +case when t4.ratio is not null then t1.Market_Ratio * t4.ratio + else t1.Market_Ratio * NVL(t5.ratio,1) +end as Unit_Market_Ratio, +t1.Market_Ratio as CountingUnit_Market_Ratio, +case when t6.ratio is not null then t1.Market_Ratio * t6.ratio + else t1.Market_Ratio * NVL(t7.ratio,1) +end as PDOT_Market_Ratio +from DWS.dws_ims_td_market t1 +--value by Pack +left join (select * from county_brand_ratio where UPPER(TYPE) = 'VALUE' and UPPER(Level) = 'PACK') t2 +on t1.MARKET = t2.market +and t1.PACK_COD = t2.pack_cod +--value by MOLECULE +LEFT JOIN (select * from county_brand_ratio where UPPER(TYPE) = 'VALUE' and UPPER(Level) = 'MOLECULE') t3 +on t1.MARKET = t3.market +and t1.CMPS_COD = t3.cmps_cod +--unit by Pack +left join (select * from county_brand_ratio where UPPER(TYPE) = 'UNIT' and UPPER(Level) = 'PACK') t4 +on t1.MARKET = t4.market +and t1.PACK_COD = t4.pack_cod +--unit by MOLECULE +LEFT JOIN (select * from county_brand_ratio where UPPER(TYPE) = 'UNIT' and UPPER(Level) = 'MOLECULE') t5 +on t1.MARKET = t5.market +and t1.CMPS_COD = t5.cmps_cod +--PDOT by Pack +left join (select * from county_brand_ratio where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK') t6 +on t1.MARKET = t6.market +and t1.PACK_COD = t6.pack_cod +--PDOT by MOLECULE +LEFT JOIN (select * from county_brand_ratio where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE') t7 +on t1.MARKET = t7.market +and t1.CMPS_COD = t7.cmps_cod +) +,MKT_PACK_RATIO as ( +select market, +PACK_COD, +max(Value_Market_Ratio) as Value_Market_Ratio, +max(Unit_Market_Ratio) as Unit_Market_Ratio, +max(CountingUnit_Market_Ratio) as CountingUnit_Market_Ratio, +max(PDOT_Market_Ratio) as PDOT_Market_Ratio +FROM MKT_PACK_RATIO_tmp +GROUP BY market,PACK_COD +) + + +SELECT B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET,B.TA,B.KEY_COMPETITOR, +CASE +WHEN B.MARKET = 'DM Market' THEN 'DM' +WHEN B.MARKET = 'CV Market' THEN 'CV' +WHEN B.MARKET = 'RD Market' THEN 'RD' +WHEN B.MARKET = 'RE Market' THEN 'RE' +WHEN B.MARKET = 'GI Market' THEN 'GI' +WHEN B.MARKET = 'ONC Market' THEN 'ONCO' +WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' +WHEN B.MARKET = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE +END AZ_RELATED +,B.CLASS,nvl(CAST(B.VALUE_MARKET_RATIO AS decimal(20,16)),1),nvl(CAST(B.UNIT_MARKET_RATIO AS decimal(20,16)),1),nvl(CAST(B.COUNTINGUNIT_MARKET_RATIO AS decimal(20,16)),1),nvl(CAST(B.PDOT_MARKET_RATIO AS decimal(20,16)),1),B.MARKET_DESC, +CASE +WHEN B.MARKET = 'DM Market' THEN 1 +WHEN B.MARKET = 'CV Market' THEN 2 +WHEN B.MARKET = 'RD Market' THEN 3 +WHEN B.MARKET = 'RE Market' THEN 4 +WHEN B.MARKET = 'GI Market' THEN 5 +WHEN B.MARKET = 'ONC Market' THEN 6 +WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 +WHEN B.MARKET = 'RARE Market' THEN 8--20250701 chenwu 新增RARE +ELSE 99 END TA_RN,'IQVIA-COUNTY(Quarterly)' DATA_SOURCE,'' as dept_name,'' as key_dept_name +,'' as new_code +,'' as area +FROM ( +SELECT B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET,MAX(C.TA) TA,MAX(E.KEY_COMPETITOR) KEY_COMPETITOR,MAX(E.IS_AZ) IS_AZ,MAX(E.AZ_MAIN) AZ_MAIN,MAX(E.AZ_RELATED) AZ_RELATED,MAX(E.CLASS) CLASS,MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO,MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO,MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO,MAX(D.PDOT_MARKET_RATIO) PDOT_MARKET_RATIO,MAX(G.MARKET_DESC) MARKET_DESC +FROM (SELECT PACK_COD,COUNT(*) RUM FROM DM.DM_TF_EXTERNAL_SALES +-- WHERE YYYYMM >= (SELECT CAST((LEFT(MAX(YYYYMM),4)-3)*100+1 AS INT) FROM DM.DM_TF_EXTERNAL_SALES) +-- AND DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' +where DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' +GROUP BY PACK_COD) A +LEFT JOIN dm.dm_ext_county_td_pack_property B +ON B.PACK_COD = A.PACK_COD --AND B.MARKET <> 'IMS ALL Market' +LEFT JOIN DM.DM_IMS_TD_MARKET_PROPERTY C +ON B.MARKET = C.MARKET +LEFT JOIN DM.dm_ext_county_td_pack_property E ON B.MARKET_PACK_KEY = E.MARKET_PACK_KEY +LEFT JOIN MKT_PACK_RATIO D ON B.MARKET = D.MARKET AND B.PACK_COD = D.PACK_COD +LEFT JOIN (SELECT MARKET,DATA_SOURCE,MAX(MARKETDESC) MARKET_DESC FROM DM.DM_TD_EXTERNAL_KEYCOMPATITOR GROUP BY MARKET,DATA_SOURCE) G ON B.MARKET = G.MARKET AND UPPER(G.DATA_SOURCE) = 'IQVIA-COUNTY(QUARTERLY)' +WHERE A.PACK_COD IS NOT NULL +GROUP BY B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET) B +WHERE B.PACK_COD IS NOT NULL AND B.MARKET IS NOT NULL + + +-- COMMAND ---------- + +delete from dm.dm_td_external_market_pack_mapping_temp where DATA_SOURCE = 'THC(Quarterly)' + +-- COMMAND ---------- + +-----------------------------------------------THC--------------------------------------------------------------------------------------------------------- +with exchc_rawdata_temp as ( --主表数据 + select + temp.yq, + pack_property.iqvia_pack_code as pack_cod + from ( + select + CASE + WHEN SUBSTRING(yq, 5,2) = 'Q1' THEN CONCAT(SUBSTRING(yq, 1, 4), '03') + WHEN SUBSTRING(yq, 5, 2) = 'Q2' THEN CONCAT(SUBSTRING(yq, 1, 4), '06') + WHEN SUBSTRING(yq, 5, 2) = 'Q3' THEN CONCAT(SUBSTRING(yq, 1, 4), '09') + WHEN SUBSTRING(yq, 5, 2) = 'Q4' THEN CONCAT(SUBSTRING(yq, 1, 4), '12') + ELSE yq + END AS yq, + pack_cod + from dwd.dwd_gnd_ext_thc_rawdata + ) temp + LEFT JOIN dwd.dwd_gnd_ext_thc_pack_property pack_property + ON temp.pack_cod = pack_property.pack_cod +), +A as( + SELECT + PACK_COD, + COUNT(*) RUM + FROM exchc_rawdata_temp + -- WHERE yq >= (SELECT CAST((LEFT(MAX(yq),4)-3)*100+1 AS INT) FROM exchc_rawdata_temp) + GROUP BY PACK_COD +) +insert into table dm.dm_td_external_market_pack_mapping_temp +( + PACK_COD,PACK_DES,PROD_DES,PROD_DES_C,MARKET,TA,KEY_COMPETITOR,AZ_RELATED,CLASS, + VALUE_MARKET_RATIO,UNIT_MARKET_RATIO,COUNTINGUNIT_MARKET_RATIO,PDOT_MARKET_RATIO,MARKET_DESC,TA_RN,DATA_SOURCE,dept_name,key_dept_name + ,new_code + ,area +) +SELECT + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + B.TA, + B.KEY_COMPETITOR, + CASE + WHEN B.MARKET = 'DM Market' THEN 'DM' + WHEN B.MARKET = 'CV Market' THEN 'CV' + WHEN B.MARKET = 'RD Market' THEN 'RD' + WHEN B.MARKET = 'RE Market' THEN 'RE' + WHEN B.MARKET = 'GI Market' THEN 'GI' + WHEN B.MARKET = 'ONC Market' THEN 'ONCO' + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' + WHEN B.MARKET = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE + END AZ_RELATED, + B.Class, + cast (B.VALUE_MARKET_RATIO as double), + cast (B.UNIT_MARKET_RATIO as double), + cast (B.COUNTINGUNIT_MARKET_RATIO as double), + cast (B.PDOT_MARKET_RATIO as double), + B.MARKET_DESC, + CASE + WHEN B.MARKET = 'DM Market' THEN 1 + WHEN B.MARKET = 'CV Market' THEN 2 + WHEN B.MARKET = 'RD Market' THEN 3 + WHEN B.MARKET = 'RE Market' THEN 4 + WHEN B.MARKET = 'GI Market' THEN 5 + WHEN B.MARKET = 'ONC Market' THEN 6 + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 + WHEN B.MARKET = 'RARE Market' THEN 8--20250701 chenwu 新增RARE + ELSE 99 + END TA_RN, + 'THC(Quarterly)' DATA_SOURCE + ,'' as dept_name + ,'' as key_dept_name + ,'' as new_code + ,'' as area +FROM ( + SELECT + B.MARKET_PACK_KEY, + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + nvl(MAX(C.TA),'') as TA, + MAX(E.KEY_COMPETITOR) as KEY_COMPETITOR, + NULL IS_AZ, + NULL AZ_MAIN, + NULL AZ_Related, + nvl(MAX(E.CLASS),'') CLASS, + MAX(nvl(B.Market_Ratio,1)) as VALUE_MARKET_RATIO, -- sales * VALUE_MARKET_RATIO = 折算好的sales + MAX(nvl(B.Market_Ratio,1) ) as UNIT_MARKET_RATIO, -- unint * UNIT_MARKET_RATIO = 折算好的 UNIT + MAX(nvl(B.Market_Ratio,1)) as COUNTINGUNIT_MARKET_RATIO, -- counting_unit*COUNTINGUNIT_MARKET_RATIO = 折算好的 CU + MAX(nvl(B.Market_Ratio,1) * nvl(D.Ratio,1)) as PDOT_MARKET_RATIO, -- counting_unit*Market_Ratio*PDOT_MARKET_RATIO = PDOT + max(g.MARKET_DESC) MARKET_DESC + FROM A + LEFT JOIN dm.dm_thc_pack_property B -- 以A表 pack_code 为准 获取需要的维度信息 + ON B.PACK_COD = A.PACK_COD + LEFT JOIN DM.DM_IMS_TD_MARKET_PROPERTY C -- THC没有TA字段,关联CHC的相关表,获取TA + ON B.MARKET = C.MARKET + LEFT JOIN dm.dm_thc_pack_property E -- MARKET_PACK_KEY 为唯一主键,获取KEY_COMPETITOR,class等信息 + ON B.MARKET_PACK_KEY = E.MARKET_PACK_KEY + LEFT JOIN( --转码 补0 + select + MARKET, + b.iqvia_pack_code as pack_cod, + ratio + from dwd.dwd_gnd_ext_thc_brandratio a + inner join dwd.dwd_gnd_ext_thc_pack_property b + on (case when length(a.pack_cod) < 12 and a.pack_cod REGEXP '^[0-9]' then right(concat('000000000000',a.pack_cod),12) else a.pack_cod end ) + =(case when length(b.pack_cod) < 12 and b.pack_cod REGEXP '^[0-9]' then right(concat('000000000000',b.pack_cod),12) else b.pack_cod end ) + ) D + ON B.MARKET = D.MARKET + AND B.PACK_COD = D.PACK_COD + LEFT JOIN ( --获取 MARKET_DESC 字段 + SELECT + MARKET,DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + FROM DM.DM_TD_EXTERNAL_KEYCOMPATITOR + GROUP BY MARKET,DATA_SOURCE + ) G + ON B.MARKET = G.MARKET AND UPPER(G.DATA_SOURCE) = 'THC(QUARTERLY)' + GROUP BY B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET +) B +WHERE B.PACK_COD IS NOT NULL AND B.MARKET IS NOT NULL + +-- COMMAND ---------- + +-----------------------------------------------CHC---------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------- + +with exchc_rawdata_temp as ( --主表数据 + select + temp.yq, + pack_property.iqvia_pack_code as pack_cod + from ( + select + CASE + WHEN SUBSTRING(yq, 5,2) = 'Q1' THEN CONCAT(SUBSTRING(yq, 1, 4), '03') + WHEN SUBSTRING(yq, 5, 2) = 'Q2' THEN CONCAT(SUBSTRING(yq, 1, 4), '06') + WHEN SUBSTRING(yq, 5, 2) = 'Q3' THEN CONCAT(SUBSTRING(yq, 1, 4), '09') + WHEN SUBSTRING(yq, 5, 2) = 'Q4' THEN CONCAT(SUBSTRING(yq, 1, 4), '12') + ELSE yq + END AS yq, + pack_cod + from dwd.dwd_gnd_chc_rawdata + ) temp + LEFT JOIN dwd.dwd_gnd_ext_chc_pack_property pack_property + ON temp.pack_cod = pack_property.pack_cod +), +A as( + SELECT + PACK_COD, + COUNT(*) RUM + FROM exchc_rawdata_temp + -- WHERE yq >= (SELECT CAST((LEFT(MAX(yq),4)-3)*100+1 AS INT) FROM exchc_rawdata_temp) + GROUP BY PACK_COD +) +insert into table dm.dm_td_external_market_pack_mapping_temp( + PACK_COD,PACK_DES,PROD_DES,PROD_DES_C,MARKET,TA,KEY_COMPETITOR,AZ_RELATED,CLASS, + VALUE_MARKET_RATIO,UNIT_MARKET_RATIO,COUNTINGUNIT_MARKET_RATIO,PDOT_MARKET_RATIO,MARKET_DESC,TA_RN,DATA_SOURCE,dept_name,key_dept_name + ,new_code + ,area +) +SELECT + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + B.TA, + B.KEY_COMPETITOR, + CASE + WHEN B.MARKET = 'DM Market' THEN 'DM' + WHEN B.MARKET = 'CV Market' THEN 'CV' + -- WHEN B.MARKET = 'RD Market' THEN 'RD' --RD隐藏 + when B.MARKET = 'RE Market' THEN 'RE' --RE改为Respules Market + WHEN B.MARKET = 'GI Market' THEN 'GI' + WHEN B.MARKET = 'ONC Market' THEN 'ONCO' + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' + WHEN B.MARKET = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE + END AZ_RELATED, + B.Class, + cast (B.VALUE_MARKET_RATIO as double), + cast (B.UNIT_MARKET_RATIO as double), + cast (B.COUNTINGUNIT_MARKET_RATIO as double), + cast (B.PDOT_MARKET_RATIO as double), + B.MARKET_DESC, + CASE + WHEN B.MARKET = 'DM Market' THEN 1 + WHEN B.MARKET = 'CV Market' THEN 2 + -- WHEN B.MARKET = 'RD Market' THEN 3 + WHEN B.MARKET = 'RE Market' THEN 4 + WHEN B.MARKET = 'GI Market' THEN 5 + WHEN B.MARKET = 'ONC Market' THEN 6 + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 + WHEN B.MARKET = 'RARE Market' THEN 8 --20250701 chenwu 新增RARE + ELSE 99 + END TA_RN, + 'CHC(Quarterly)' DATA_SOURCE + ,'' as dept_name + ,'' as key_dept_name + ,'' as new_code + ,'' as area +FROM ( + SELECT + B.MARKET_PACK_KEY, + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + nvl(MAX(C.TA) ,'') TA, + -- null as TA, + MAX(E.KEY_COMPETITOR) KEY_COMPETITOR, + --MAX(B.KEY_COMPETITOR) KEY_COMPETITOR, + --MAX(E.IS_AZ) IS_AZ, + --MAX(E.AZ_MAIN) AZ_MAIN, + --MAX(E.AZ_RELATED) AZ_RELATED, + NULL as IS_AZ, + NULL as AZ_MAIN, + NULL as AZ_Related, + nvl (MAX(E.CLASS) ,'' ) CLASS, + MAX(nvl(B.Market_Ratio,1)) as VALUE_MARKET_RATIO, -- sales * VALUE_MARKET_RATIO = 折算好的sales + MAX(nvl(B.Market_Ratio,1)) as UNIT_MARKET_RATIO, -- unint * UNIT_MARKET_RATIO = 折算好的 UNIT + MAX(nvl(B.Market_Ratio,1)) as COUNTINGUNIT_MARKET_RATIO, -- counting_unit*COUNTINGUNIT_MARKET_RATIO = 折算好的 CU + MAX(nvl(B.Market_Ratio,1) * nvl(D.Ratio,1)) PDOT_MARKET_RATIO, -- counting_unit*Market_Ratio*PDOT_MARKET_RATIO = PDOT + max(G.MARKET_DESC) as MARKET_DESC + FROM A + LEFT JOIN dm.dm_chc_pack_property B -- 以A表 pack_code 为准 获取需要的维度信息 + ON B.PACK_COD = A.PACK_COD + LEFT JOIN DM.DM_IMS_TD_MARKET_PROPERTY C -- THC没有TA字段,关联CHPA的相关表,获取TA + ON B.MARKET = C.MARKET + LEFT JOIN dm.dm_chc_pack_property E --MARKET_PACK_KEY 为唯一主键,获取KEY_COMPETITOR,class等信息 + ON B.MARKET_PACK_KEY = E.MARKET_PACK_KEY + LEFT JOIN( -- 获取RATIO ,其中chc_brandratio没有补0和转码的操作,这里处理 + select + MARKET, + b.iqvia_pack_code as pack_cod, + ratio + from dwd.dwd_gnd_ext_chc_brandratio a + inner join dwd.dwd_gnd_ext_chc_pack_property b + on (case when length(a.pack_cod) < 12 and a.pack_cod REGEXP '^[0-9]' then right(concat('000000000000',a.pack_cod),12) else a.pack_cod end ) + =(case when length(b.pack_cod) < 12 and b.pack_cod REGEXP '^[0-9]' then right(concat('000000000000',b.pack_cod),12) else b.pack_cod end ) + ) D + ON B.MARKET = D.MARKET + AND B.PACK_COD = D.PACK_COD + LEFT JOIN ( --获取 MARKET_DESC 字段 + SELECT + MARKET,DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + FROM DM.DM_TD_EXTERNAL_KEYCOMPATITOR + GROUP BY MARKET,DATA_SOURCE + ) G + ON B.MARKET = G.MARKET AND UPPER(G.DATA_SOURCE) = 'CHC(QUARTERLY)' + GROUP BY B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET + +) B +WHERE B.PACK_COD IS NOT NULL AND B.MARKET IS NOT NULL +and market!='RD Market' + +-- COMMAND ---------- + +/* +修改人:chenwu +修改时间:20250319 +修改内容: EC的数据源cu恒等于1 +*/ +-----------------------------------------------------------ec----------------------------------------------------------- +INSERT into dm.dm_td_external_market_pack_mapping_temp( + PACK_COD,PACK_DES,PROD_DES,PROD_DES_C,MARKET,TA,KEY_COMPETITOR,AZ_RELATED,CLASS, + VALUE_MARKET_RATIO,UNIT_MARKET_RATIO,COUNTINGUNIT_MARKET_RATIO,PDOT_MARKET_RATIO,MARKET_DESC,TA_RN,DATA_SOURCE,dept_name,key_dept_name + ,new_code + ,area +) +SELECT + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + CASE + WHEN B.MARKET = 'RE Market' THEN 'RE' + when B.TA = 'RE' THEN NULL--只有 'RE Market (Global)' 的ta是 RE + ELSE B.TA + END TA, + B.KEY_COMPETITOR, + CASE + WHEN B.MARKET = 'RE Market' THEN 'RE' + WHEN B.TA = 'RE' THEN NULL + ELSE B.TA + END AZ_RELATED, + B.CLASS, + nvl(B.VALUE_MARKET_RATIO, 1), + nvl(B.UNIT_MARKET_RATIO, 1), + 1, + --nvl(B.COUNTINGUNIT_MARKET_RATIO,1), --ec的数据源cu恒等于1 + nvl(B.PDOT_MARKET_RATIO, 1), + B.MARKET_DESC, + CASE + WHEN b.TA = 'DM' THEN 1 + WHEN b.TA = 'CV' THEN 2 + WHEN b.TA = 'RE' THEN 4 + WHEN b.TA = 'GI' THEN 5 + WHEN B.TA = 'CVRM' THEN 0 + ELSE 99 + END TA_RN, + 'EC(Monthly)' DATA_SOURCE, + '' as dept_name, + '' as key_dept_name, + '' as new_code, + '' as area +FROM + ( + SELECT + a.MARKET_PACK_KEY, + B.iqvia_pack_code PACK_COD, + a.PACK_DES, + a.PROD_DES, + a.PROD_DES_C, + a.MARKET, + MAX(a.TA) TA, + MAX(a.KEY_COMPETITOR) KEY_COMPETITOR, + MAX(a.CLASS) CLASS, + MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO, + MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO, + MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO, + MAX(D.COUNTINGUNIT_MARKET_RATIO) PDOT_MARKET_RATIO, + max(g.MARKET_DESC) MARKET_DESC + FROM + DM.dm_zk_ec_pack_property a + LEFT JOIN DM.dm_zk_ec_market_property B ON A.iqvia_pack_code = B.iqvia_pack_code + and a.market = b.market + LEFT JOIN dm.dm_zk_ec_market_ratio D ON B.MARKET = D.MARKET + AND B.iqvia_pack_code = D.PACK_COD + LEFT JOIN ( + SELECT + MARKET, + DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + FROM + DM.DM_TD_EXTERNAL_KEYCOMPATITOR + GROUP BY + MARKET, + DATA_SOURCE + ) G ON B.MARKET = G.MARKET + AND UPPER(G.DATA_SOURCE) = 'EC(MONTHLY)' + WHERE + A.iqvia_pack_code in ( + select + distinct iqvia_pack_code + from + dm.dm_zk_ec_sales + ) + GROUP BY + a.MARKET_PACK_KEY, + B.iqvia_pack_code, + a.PACK_DES, + a.PROD_DES, + a.PROD_DES_C, + a.MARKET + ) b + + +-- COMMAND ---------- + + +-----------------------------------------------AIA---------------------------------------------------------------------------------- +WITH AIA_brand_ratio as ( + SELECT distinct market, + CASE WHEN length(cmps_cod) < 6 THEN RIGHT(CONCAT('000000',cmps_cod),6) ELSE cmps_cod END AS cmps_cod, + cmps_des, + CASE WHEN length(pack_cod) < 12 and pack_cod REGEXP '^[0-9]' THEN RIGHT(CONCAT('000000000000',pack_cod),12) ELSE pack_cod END AS pack_cod, + pack_des, + level, + type, + ratio + from dwd.dwd_gnd_ims_tblBrandRatio +) +,AIA_RATIO as ( +select t1.PACK_COD, +t1.MARKET, +case when t6.ratio is not null then t1.market_ratio * t6.ratio + else t1.market_ratio * NVL(t7.ratio,1) +end as VALUE_MARKET_RATIO, +case when t2.ratio is not null then t1.market_ratio * t2.ratio + else t1.market_ratio * NVL(t3.ratio,1) +end as UNIT_MARKET_RATIO, +t1.market_ratio as COUNTINGUNIT_MARKET_RATIO, +case when t4.ratio is not null then t1.market_ratio * t4.ratio + else t1.market_ratio * NVL(t5.ratio,1) +end as PDOT_MARKET_RATIO +from dm.dm_aia_pack_property t1 +--unit by Pack +left join (select * from AIA_brand_ratio where upper(type) = 'UNIT' and upper(Level) = 'PACK') t2 +on t1.PACK_COD = t2.pack_cod +and t1.MARKET = t2.market +--unit by MOLECULE +left join (select * from AIA_brand_ratio where upper(type) = 'UNIT' and upper(Level) = 'MOLECULE') t3 +on t1.CMPS_COD = t3.cmps_cod +and t1.MARKET = t3.market +--PDOT by Pack +left join (select * from AIA_brand_ratio where upper(type) = 'COUNTINGUNIT' and upper(Level) = 'PACK') t4 +on t1.PACK_COD = t4.pack_cod +and t1.MARKET = t4.market +--PDOT by MOLECULE +left join (select * from AIA_brand_ratio where upper(type) = 'COUNTINGUNIT' and upper(Level) = 'MOLECULE') t5 +on t1.CMPS_COD = t5.cmps_cod +and t1.MARKET = t5.market +--VALUE by Pack +left join (select * from AIA_brand_ratio where upper(type) = 'VALUE' and upper(Level) = 'PACK') t6 +on t1.PACK_COD = t6.pack_cod +and t1.MARKET = t6.market +--VALUE by MOLECULE +left join (select * from AIA_brand_ratio where upper(type) = 'VALUE' and upper(Level) = 'MOLECULE') t7 +on t1.CMPS_COD = t7.cmps_cod +and t1.MARKET = t7.market + +) +,MARKET_PACK_MAPPING_1 as ( + select + B.MARKET_PACK_KEY, + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET as MARKET_AIA, + --AIA有一部分market有通过手工表AIA_IMS_Market_Mapping更新过名称 + --使用旧的从CHPA里来的名称关联 + B.MARKET_CHPA, + nvl(MAX(C.TA),'') as TA, + MAX(E.KEY_COMPETITOR) KEY_COMPETITOR, + NULL as IS_AZ, + NULL as AZ_MAIN, + NULL as AZ_Related, + nvl(MAX(E.CLASS),'') as CLASS, + MAX(t1.VALUE_MARKET_RATIO) as VALUE_MARKET_RATIO, -- sales * VALUE_MARKET_RATIO = 折算好的sales + MAX(t1.UNIT_MARKET_RATIO) as UNIT_MARKET_RATIO, -- unint * UNIT_MARKET_RATIO = 折算好的 UNIT + MAX(t1.COUNTINGUNIT_MARKET_RATIO) as COUNTINGUNIT_MARKET_RATIO, -- counting_unit*COUNTINGUNIT_MARKET_RATIO = 折算好的 CU + MAX(t1.PDOT_MARKET_RATIO) as PDOT_MARKET_RATIO, -- counting_unit*Market_Ratio*PDOT_MARKET_RATIO = PDOT + max(G.MARKET_DESC) as MARKET_DESC + from ( + SELECT + PACK_COD, + COUNT(*) RUM + FROM DM.DM_TF_EXTERNAL_SALES + WHERE DATA_SOURCE = 'AIA(Monthly)' + GROUP BY PACK_COD + ) A + left join dm.dm_aia_pack_property B + on A.PACK_COD = B.PACK_COD + left join DM.DM_IMS_TD_MARKET_PROPERTY C + --AIA有一部分market有通过手工表AIA_IMS_Market_Mapping更新过名称 + --使用旧的从CHPA里来的名称关联 + on B.MARKET_CHPA = C.MARKET + left join dm.dm_aia_pack_property E + on B.MARKET_PACK_KEY = E.MARKET_PACK_KEY + left join AIA_RATIO t1 + on B.PACK_COD = t1.PACK_COD + and B.MARKET = t1.MARKET + left join ( + select MARKET,DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + from DM.DM_TD_EXTERNAL_KEYCOMPATITOR + group by market,DATA_SOURCE + ) G + --竞品配置信息表里使用的AIA的市场名称,因此使用AIA市场名关联 + on B.MARKET = G.MARKET and upper(G.DATA_SOURCE) = 'AIA(Monthly)' + group by B.MARKET_PACK_KEY,B.PACK_COD,B.PACK_DES,B.PROD_DES,B.PROD_DES_C,B.MARKET,B.MARKET_CHPA +) + + +insert into table dm.dm_td_external_market_pack_mapping_temp ( +PACK_COD, +PACK_DES, +PROD_DES, +PROD_DES_C, +MARKET, +TA, +KEY_COMPETITOR, +AZ_RELATED, +CLASS, +VALUE_MARKET_RATIO, +UNIT_MARKET_RATIO, +COUNTINGUNIT_MARKET_RATIO, +PDOT_MARKET_RATIO, +MARKET_DESC, +TA_RN, +DATA_SOURCE, +dept_name, +key_dept_name, +new_code, +area +) + select + PACK_COD, + PACK_DES, + PROD_DES, + PROD_DES_C, + MARKET_AIA as MARKET, + TA, + KEY_COMPETITOR, + case when MARKET_CHPA = 'DM Market' THEN 'DM' + when MARKET_CHPA = 'CV Market' THEN 'CV' + when MARKET_CHPA = 'RD Market' THEN 'RD' + when MARKET_CHPA = 'RE Market' THEN 'RE' + when MARKET_CHPA = 'GI Market' THEN 'GI' + when MARKET_CHPA = 'ONC Market' THEN 'ONCO' + when MARKET_CHPA = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' + WHEN MARKET_CHPA = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE + end as AZ_RELATED, + Class, + cast(VALUE_MARKET_RATIO as double) as VALUE_MARKET_RATIO, + cast(UNIT_MARKET_RATIO as double) as UNIT_MARKET_RATIO, + cast(COUNTINGUNIT_MARKET_RATIO as double) as COUNTINGUNIT_MARKET_RATIO, + cast(PDOT_MARKET_RATIO as double) as PDOT_MARKET_RATIO, + MARKET_DESC, + case when MARKET_CHPA = 'DM Market' THEN 1 + when MARKET_CHPA = 'CV Market' THEN 2 + when MARKET_CHPA = 'RD Market' THEN 3 + when MARKET_CHPA = 'RE Market' THEN 4 + when MARKET_CHPA = 'GI Market' THEN 5 + when MARKET_CHPA = 'ONC Market' THEN 6 + when MARKET_CHPA = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 + WHEN MARKET_CHPA = 'RARE Market' THEN 8--20250701 chenwu 新增RARE + else 99 + end as TA_RN, + 'AIA(Monthly)' as DATA_SOURCE + ,'' as dept_name + ,'' as key_dept_name + ,'' as new_code + ,'' as area + from MARKET_PACK_MAPPING_1 + where PACK_COD IS NOT NULL + and MARKET_AIA IS NOT NULL + + +-- COMMAND ---------- + +INSERT into table dm.dm_td_external_market_pack_mapping_temp( + PACK_COD, + PACK_DES, + PROD_DES, + PROD_DES_C, + MARKET, + TA, + KEY_COMPETITOR, + AZ_RELATED, + CLASS, + VALUE_MARKET_RATIO, + UNIT_MARKET_RATIO, + COUNTINGUNIT_MARKET_RATIO, + PDOT_MARKET_RATIO, + MARKET_DESC, + TA_RN, + DATA_SOURCE, + dept_name, + key_dept_name, + new_code, + area + ) + + WITH MKT_PACK_RATIO AS ( + -------------------------------------根据沟通,市场+产品对应的ratio是唯一的------------------------------------------ + SELECT + A.MARKET, + A.PACK_COD, + MAX(A.Value_Market_Ratio) Value_Market_Ratio, + MAX(A.Unit_Market_Ratio) Unit_Market_Ratio, + MAX(A.PDOT_Market_Ratio) CountingUnit_Market_Ratio, + MAX(A.CountingUnit_Market_Ratio) PDOT_Market_Ratio --因为之前的报告在使用源表的数据,因此命名是反的。 + FROM + DWS.dws_ims_td_market_ratio A + WHERE + A.YM = ( + SELECT + MAX(YM) + FROM + DWS.dws_ims_td_market_ratio + ) + GROUP BY + A.MARKET, + A.PACK_COD + ) +------------------------------------------------------------------xiehe------------------------------------------------------------------ +SELECT + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + B.TA, + B.KEY_COMPETITOR, + CASE + WHEN B.MARKET = 'DM Market' THEN 'DM' + WHEN B.MARKET = 'CV Market' THEN 'CV' + WHEN B.MARKET = 'RD Market' THEN 'RD' + WHEN B.MARKET = 'RE Market' THEN 'RE' + WHEN B.MARKET IN ('GI Market', 'Retail_GI Market') THEN 'GI' + WHEN B.MARKET = 'ONC Market' THEN 'ONCO' + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 'NIAD' + WHEN B.MARKET = 'RARE Market' THEN 'RARE'--20250701 chenwu 新增RARE + END AZ_RELATED, + B.CLASS, + NVL(B.VALUE_MARKET_RATIO, 1) VALUE_MARKET_RATIO, + NVL(B.UNIT_MARKET_RATIO, 1) UNIT_MARKET_RATIO, + NVL(B.COUNTINGUNIT_MARKET_RATIO, 1) COUNTINGUNIT_MARKET_RATIO, + NVL(B.PDOT_MARKET_RATIO, 1) PDOT_MARKET_RATIO, + B.MARKET_DESC, + CASE + WHEN B.MARKET = 'DM Market' THEN 1 + WHEN B.MARKET = 'CV Market' THEN 2 + WHEN B.MARKET = 'RD Market' THEN 3 + WHEN B.MARKET = 'RE Market' THEN 4 + WHEN B.MARKET = 'GI Market' THEN 5 + WHEN B.MARKET = 'ONC Market' THEN 6 + WHEN B.MARKET = 'NIAD (Non-Insulin Anti-Diabetic) Market' THEN 7 + WHEN B.MARKET = 'RARE Market' THEN 8 --20250701 chenwu 新增RARE + ELSE 99 + END TA_RN, + 'XH Data(Quarterly)' DATA_SOURCE, + B.dept_name, + B.key_dept_name, + B.new_code, + B.area +FROM + ( + SELECT + B.MARKET_PACK_KEY, + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + NVL(H.dept_name,'') dept_name, + NVL(t1.CORE_DEPT,'Others') as key_dept_name, + NVL(H.new_code,'') new_code, + NVL(H.area,'') area, + MAX(C.TA) TA, + MAX(E.KEY_COMPETITOR) KEY_COMPETITOR, + MAX(E.IS_AZ) IS_AZ, + MAX(E.AZ_MAIN) AZ_MAIN, + MAX(E.AZ_RELATED) AZ_RELATED, + MAX(E.CLASS) CLASS, + MAX(D.VALUE_MARKET_RATIO) VALUE_MARKET_RATIO, + MAX(D.UNIT_MARKET_RATIO) UNIT_MARKET_RATIO, + MAX(D.COUNTINGUNIT_MARKET_RATIO) COUNTINGUNIT_MARKET_RATIO, + MAX(D.PDOT_MARKET_RATIO) PDOT_MARKET_RATIO, + max(g.MARKET_DESC) MARKET_DESC + FROM + ( + SELECT + PACK_COD, + COUNT(*) RUM + FROM + DM.DM_TF_EXTERNAL_SALES + WHERE DATA_SOURCE = 'XH Data(Quarterly)' + GROUP BY + PACK_COD + ) A + LEFT JOIN dm.dm_xiehe_pack_property B ON B.PACK_COD = A.PACK_COD --AND B.MARKET <> 'IMS ALL Market' + LEFT JOIN DM.DM_IMS_TD_MARKET_PROPERTY C ON B.MARKET = C.MARKET + LEFT JOIN dm.dm_xiehe_pack_property E ON B.MARKET_PACK_KEY = E.MARKET_PACK_KEY + LEFT JOIN MKT_PACK_RATIO D ON B.MARKET = D.MARKET + AND B.PACK_COD = D.PACK_COD + LEFT JOIN ( + SELECT + MARKET,DATA_SOURCE, + MAX(MARKETDESC) MARKET_DESC + FROM + DM.DM_TD_EXTERNAL_KEYCOMPATITOR + GROUP BY + MARKET,DATA_SOURCE + ) G ON B.MARKET = G.MARKET and G.DATA_SOURCE = 'XH Data(Quarterly)' + left join ( + SELECT distinct PACK_COD,dept_name,new_code,area + from dm.dm_td_external_packinfo_temp2 + where DATA_SOURCE = 'XH Data(Quarterly)' + ) H + on A.PACK_COD = H.PACK_COD + left join dm.dm_td_xiehe_core_dept t1 + on B.MARKET = t1.MARKET + AND H.dept_name = t1.Dept_NAME + GROUP BY + B.MARKET_PACK_KEY, + B.PACK_COD, + B.PACK_DES, + B.PROD_DES, + B.PROD_DES_C, + B.MARKET, + H.dept_name, + H.new_code, + H.area, + t1.CORE_DEPT + ) B +WHERE + B.PACK_COD IS NOT NULL + AND B.MARKET IS NOT NULL + +-- COMMAND ---------- + +--修改时间:20240808 +--修改人:FanXuJia +--修改背景: +--事实表与维度表来自于不同手工表,目前存在一部分pack_cod在事实表有销量,但是在维度表没有这个pack_cod,导致销量缺失。 +--因此需要从事实表补全这部分pack_cod +with tmp_market_pack as ( +select distinct + t1.PACK_COD, + CASE WHEN t1.DATA_SOURCE = 'CHC(Quarterly)' then 'CHC ALL Market' + WHEN t1.DATA_SOURCE = 'IQVIA-CHPA(Monthly)' then 'IMS ALL Market' + WHEN t1.DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' then 'IMS ALL Market' + WHEN t1.DATA_SOURCE = 'Retail(Quarterly)' then 'Retail All Market' + WHEN t1.DATA_SOURCE = 'THC(Quarterly)' then 'THC ALL Market' + WHEN t1.DATA_SOURCE = 'EC(Monthly)' then 'EC ALL Market' + WHEN t1.DATA_SOURCE = 'AIA(Monthly)' then 'NON Market' + WHEN t1.DATA_SOURCE = 'XH Data(Quarterly)' then 'XIEHE ALL Market' + WHEN t1.DATA_SOURCE = 'DTP(Quarterly)' then 'DTP ALL Market' + end as market, + t1.DATA_SOURCE +from external_sales_union t1 +left join dm.dm_td_external_market_pack_mapping_temp t2 +on t1.PACK_COD = t2.PACK_COD +and t1.DATA_SOURCE = t2.DATA_SOURCE +where t2.PACK_COD is null +) +,tmp_packinfo as ( +select +PACK_COD, +new_code, +area, +dept_name, +DATA_SOURCE, +max(PACK_DES) as PACK_DES, +max(PROD_DES) as PROD_DES, +max(PROD_DES_C) as PROD_DES_C +from dm.dm_td_external_packinfo_temp2 +group by PACK_COD,DATA_SOURCE,dept_name,new_code,area +) + +INSERT into table dm.dm_td_external_market_pack_mapping_temp( + PACK_COD, + PACK_DES, + PROD_DES, + PROD_DES_C, + MARKET, + TA, + KEY_COMPETITOR, + AZ_RELATED, + CLASS, + VALUE_MARKET_RATIO, + UNIT_MARKET_RATIO, + COUNTINGUNIT_MARKET_RATIO, + PDOT_MARKET_RATIO, + MARKET_DESC, + TA_RN, + DATA_SOURCE, + dept_name, + key_dept_name, + new_code, + area + ) + select + t1.PACK_COD, + t2.PACK_DES, + t2.PROD_DES, + t2.PROD_DES_C, + t1.MARKET, + null as TA, + null as KEY_COMPETITOR, + null as AZ_RELATED, + null as CLASS, + 1 as VALUE_MARKET_RATIO, + 1 as UNIT_MARKET_RATIO, + 1 as COUNTINGUNIT_MARKET_RATIO, + 1 as PDOT_MARKET_RATIO, + null as MARKET_DESC, + null as TA_RN, + t1.DATA_SOURCE, + t2.dept_name, + NVL(t3.CORE_DEPT,'Others') as key_dept_name, + t2.new_code, + t2.area + from tmp_market_pack t1 + left join tmp_packinfo t2 + on t1.PACK_COD = t2.PACK_COD + and t1.DATA_SOURCE = t2.DATA_SOURCE + left join dm.dm_td_xiehe_core_dept t3 + on t1.MARKET = t3.MARKET + AND t2.dept_name = t3.Dept_NAME + + +-- COMMAND ---------- + +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场,不再Hardcoding +----------------------------------------------------------- +-- ---------------------------------------------------------------------------- +-- --修改时间:20240813 +-- --修改人:FanXujia +-- --修改内容:CHC_AZ related TA ALL这个市场只在CHC中显示,其他渠道排除这个市场(Hard Coding) +-- ---------------------------------------------------------------------------- +-- delete from dm.dm_td_external_market_pack_mapping_temp +-- where upper(MARKET) = 'CHC_AZ RELATED TA ALL' +-- and data_source <> 'CHC(Quarterly)' + +-- COMMAND ---------- + +----------------------------------------------------------- +--修改时间:20241118 +--修改人:Fanxujia +--修改内容: +--使用手工文件排除掉每个渠道的不需要显示的市场 +----------------------------------------------------------- +with hidden_market as ( +select distinct +case when upper(data_source) = 'CHPA' then 'IQVIA-CHPA(Monthly)' + when upper(data_source) = '科室市场' then 'XH Data(Quarterly)' + when upper(data_source) = 'EC' then 'EC(Monthly)' + when upper(data_source) = 'RETAIL' then 'Retail(Quarterly)' + when upper(data_source) = 'CHC' then 'CHC(Quarterly)' + when upper(data_source) = 'AIA' then 'AIA(Monthly)' + when upper(data_source) = 'THC' then 'THC(Quarterly)' + when upper(data_source) = 'COUNTY' then 'IQVIA-COUNTY(Quarterly)' + else data_source +end as data_source, +upper(hidden_market) as hidden_market +from dwd.dwd_gnd_ims_hidden_market +union all +select +'AIA(Monthly)' as data_source, +'AIA ALL Market' +) + + +MERGE into dm.dm_td_external_market_pack_mapping_temp as t1 +USING hidden_market t2 +on t1.data_source = t2.data_source +and upper(t1.MARKET) = upper(t2.hidden_market) +WHEN MATCHED THEN +DELETE + +-- COMMAND ---------- + +-------------------------------------------------------------------------------- +--修改时间:20241025 +--修改人:Fanxujia +--修改内容: +--外部数据报告优化,将PBI的逻辑搬到DBR +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +--修改时间:20241209 +--修改人:Fanxujia +--修改内容: +--新增Key Competitor CN,从packinfo表里关联出中文名,关联不到的保留英文名 +-------------------------------------------------------------------------------- +with mapping as ( +select distinct PROD_DES,PROD_DES_C +from dm.dm_td_external_packinfo +) +,market_pack_mapping_1 as ( +SELECT + PACK_COD, + max(PROD_DES) PROD_DES, + max(PROD_DES_C) PROD_DES_C, + MARKET, + ---------------------------------------------------------------------------------- + --修改时间:20241217 + --修改人:Fanxujia + --修改内容: + --取不到Class时,不再显示成中划线-,改成Others + ---------------------------------------------------------------------------------- + CASE + -- WHEN NVL(max(CLASS), '') = '' OR max(CLASS) = 'Others' THEN '-' + WHEN NVL(max(CLASS), '') = '' THEN 'Others' + ELSE UPPER(max(CLASS)) + END CLASS, + CAST(max(VALUE_MARKET_RATIO) AS DECIMAL(38, 20)) VALUE_MARKET_RATIO, + CAST(max(UNIT_MARKET_RATIO) AS DECIMAL(38, 20)) UNIT_MARKET_RATIO, + CAST(max(COUNTINGUNIT_MARKET_RATIO) AS DECIMAL(38, 20)) COUNTINGUNIT_MARKET_RATIO, + CAST(max(PDOT_MARKET_RATIO) AS DECIMAL(38, 20)) PDOT_MARKET_RATIO, + DATA_SOURCE, + case when max(KEY_COMPETITOR) is null or max(KEY_COMPETITOR) = '' then 'Others' + else max(KEY_COMPETITOR) + end as KEY_COMPETITOR, + NEW_CODE +FROM DM.dm_td_external_market_pack_mapping_temp +group by PACK_COD,NEW_CODE,DATA_SOURCE,MARKET +) + +, mapping_match_key_competitor_with_mutil as ( +select +t3.PACK_COD, +t3.PROD_DES, +t3.PROD_DES_C, +t3.MARKET, +t3.CLASS, +t3.VALUE_MARKET_RATIO, +t3.UNIT_MARKET_RATIO, +t3.COUNTINGUNIT_MARKET_RATIO, +t3.PDOT_MARKET_RATIO, +t3.DATA_SOURCE, +case WHEN t3.KEY_COMPETITOR ='Others' and (UPPER(t2.keycompetitor) is not null or UPPER(t2.keycompetitor) <>'') +THEN upper(t2.keycompetitor) ELSE t3.KEY_COMPETITOR +end as KEY_COMPETITOR, +t3.NEW_CODE +,t2.no1 + from market_pack_mapping_1 t3 +left join dm.dm_td_external_packinfo t1 +on t1.PACK_COD = t3.PACK_COD and t1.DATA_SOURCE = t3.DATA_SOURCE +left JOIN (SELECT ROW_NUMBER() OVER(ORDER BY + CASE + WHEN ATC1_Code IS NOT NULL THEN 1 + WHEN ATC2_Code IS NOT NULL THEN 2 + WHEN ATC3_Code IS NOT NULL THEN 3 + WHEN ATC4_Code IS NOT NULL THEN 4 + WHEN Molecule_Code IS NOT NULL THEN 5 + WHEN Product_Code IS NOT NULL THEN 6 + WHEN Pack_Code IS NOT NULL THEN 7 + ELSE 999 END, + CASE WHEN NFC1_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC2_CODE IS NULL THEN 0 ELSE 1 END, + CASE WHEN NFC3_CODE IS NULL THEN 0 ELSE 1 END + ) AS no1,* FROM dwd.dwd_gnd_ims_tblkeycompetitor)t2 + on + COALESCE(t1.ATC1_COD,'') = case when t2.ATC1_Code is null then COALESCE(t1.ATC1_COD,'') else t2.ATC1_Code end + and COALESCE(t1.ATC2_COD,'') = case when t2.ATC2_Code is null then COALESCE(t1.ATC2_COD,'') else t2.ATC2_Code end + and COALESCE(t1.ATC3_COD,'') = case when t2.ATC3_Code is null then COALESCE(t1.ATC3_COD,'') else t2.ATC3_Code end + and COALESCE(t1.ATC4_COD,'') = case when t2.ATC4_Code is null then COALESCE(t1.ATC4_COD,'') else t2.ATC4_Code end + and COALESCE(t1.APP1_COD,'') = case when t2.NFC1_Code is null then COALESCE(t1.APP1_COD,'') else t2.NFC1_Code end + and COALESCE(t1.APP2_COD,'') = case when t2.NFC2_Code is null then COALESCE(t1.APP2_COD,'') else t2.NFC2_Code end + and COALESCE(t1.APP3_COD,'') = case when t2.NFC3_Code is null then COALESCE(t1.APP3_COD,'') else t2.NFC3_Code end + and COALESCE(t1.CORP_COD,'') = case when t2.corporation_code is null then COALESCE(t1.CORP_COD,'') else t2.corporation_code end + and COALESCE(t1.MANU_COD,'') = case when t2.Manufacturer_Code is null then COALESCE(t1.MANU_COD,'') else t2.Manufacturer_Code end + and COALESCE(t1.PROD_COD,'') = case when t2.Product_Code is null then COALESCE(t1.PROD_COD,'') else t2.Product_Code end + and COALESCE(t1.PACK_COD,'') = case when t2.Pack_Code is null then COALESCE(t1.PACK_COD,'') else t2.Pack_Code end + and COALESCE(t1.STGH_DES,'') = case when t2.Strength is null then COALESCE(t1.STGH_DES,'') else t2.Strength end + and COALESCE(t1.CMPS_COD,'') = case when t2.Molecule_Code is null then COALESCE(t1.CMPS_COD,'') else t2.Molecule_Code end + and COALESCE(t3.market ,'') = case when t2.market is null then COALESCE(t3.market,'') else t2.market end +) + +,mapping_match_key_competitor as ( + select * from (select *, row_number() over (partition by PACK_COD,MARKET,DATA_SOURCE,NEW_CODE,CLASS order by no1 desc ) as new_order FROM mapping_match_key_competitor_with_mutil ) as new + WHERE new.new_order =1 + ) + +insert overwrite table DM.dm_td_external_market_pack_mapping +( +PACK_COD, +PROD_DES, +PROD_DES_C, +MARKET, +CLASS, +VALUE_MARKET_RATIO, +UNIT_MARKET_RATIO, +COUNTINGUNIT_MARKET_RATIO, +PDOT_MARKET_RATIO, +DATA_SOURCE, +KEY_COMPETITOR, +KEY_COMPETITOR_CN, +NEW_CODE +) + +SELECT + t1.PACK_COD, + t1.PROD_DES, + t1.PROD_DES_C, + t1.MARKET, + t1.CLASS, + t1.VALUE_MARKET_RATIO, + t1.UNIT_MARKET_RATIO, + t1.COUNTINGUNIT_MARKET_RATIO, + t1.PDOT_MARKET_RATIO, + t1.DATA_SOURCE, + t1.KEY_COMPETITOR, + COALESCE(t2.PROD_DES_C,t1.KEY_COMPETITOR) as KEY_COMPETITOR_CN, + t1.NEW_CODE +FROM mapping_match_key_competitor t1 +left join mapping t2 +on upper(t1.KEY_COMPETITOR) = upper(t2.PROD_DES) + +-- COMMAND ---------- + +update dm.dm_td_external_market_pack_mapping + set KEY_COMPETITOR = 'OTHERS',KEY_COMPETITOR_CN ='OTHERS' +where upper(KEY_COMPETITOR) = 'OTHERS' or upper(KEY_COMPETITOR_CN) = 'OTHERS' + +-- COMMAND ---------- + +create or replace temporary view dim_KEY_COMPETITOR +as +select upper(KEY_COMPETITOR) as KEY_COMPETITOR,max(KEY_COMPETITOR_CN) as KEY_COMPETITOR_CN +from dm.dm_td_external_market_pack_mapping +group by KEY_COMPETITOR + +-- COMMAND ---------- + +MERGE INTO dm.dm_td_external_market_pack_mapping AS t1 +USING dim_KEY_COMPETITOR AS t2 + ON t1.KEY_COMPETITOR = t2.KEY_COMPETITOR +WHEN MATCHED THEN + UPDATE SET t1.KEY_COMPETITOR_CN = t2.KEY_COMPETITOR_CN; diff --git a/z 11 dm_td_external_market_作废.sql b/z 11 dm_td_external_market_作废.sql new file mode 100644 index 0000000..e816a9c --- /dev/null +++ b/z 11 dm_td_external_market_作废.sql @@ -0,0 +1,186 @@ +-- Databricks notebook source +INSERT OVERWRITE dm.dm_td_external_market ( + MARKET, DATA_SOURCE, TA, AZ_RELATED, MARKET_DESC, TA_RN, PRD_FLAG +) + SELECT + MARKET, + DATA_SOURCE, + MAX(TA) TA, + MAX(AZ_RELATED) AZ_RELATED, + MAX(MARKET_DESC) MARKET_DESC, + MAX(TA_RN) TA_RN, + case + when + DATA_SOURCE = 'Retail(Quarterly)' + and MARKET in ( + 'Antacid anti GI swelling agent+PPI Oral', + 'HTN Market', + 'NIAD (Non-Insulin Anti-Diabetic) Market', + 'Respules Market', + 'Statin+XZK Market', + 'BUDESONIDE Market', + 'Rosuvastatin Market', + 'Atorvastatin Market', + 'Metoprolol Succinate Market', + 'PPI Oral ESOMEPRAZOLE Market', + 'PPI Oral OMEPRAZOLE Market', + --'Inhaled Extended Market by Brand', + 'Inhaled Extended Market', + 'Non-Omeprazole', + 'Metoprolol Tartrate Market', + 'Pediatric Cough Market', + 'Anti-HER2 Market', + 'Anti-HER2 mBC Market', + 'Fasenra Market', + 'Severe Asthma' + ) + then + '1' + when + data_source = 'DTP(Quarterly)' + and market in ( + 'EGFR TKI Market', + 'Anti-HER2 Market', + 'Anti-HER2 mBC Market', + 'Fasenra/Tezspire Related Market', + 'Severe Asthma', + 'Tezspire CRSwNP Market', + 'CRSwNP Market', + 'PAM Market' + ) + then + '1' + else '0' + end as PRD_FLAG + FROM + DM.dm_td_external_market_pack_mapping_temp + GROUP BY + MARKET, + DATA_SOURCE + +-- COMMAND ---------- + +refresh table dm.DM_TD_EXTERNAL_MARKET + +-- COMMAND ---------- + +insert overwrite dm.dm_td_external_market_ta(MARKET,DATA_SOURCE,TA,TA_RN,MARKET_DESC) +SELECT MARKET,DATA_SOURCE, AZ_RELATED TA, TA_RN,MARKET_DESC +FROM DM.DM_TD_EXTERNAL_MARKET +WHERE MARKET NOT LIKE '%ALL Market%' and MARKET <>'Retail All Market' +UNION all +SELECT MARKET,DATA_SOURCE, 'CVRM' TA,0 TA_RN,MARKET_DESC +FROM DM.DM_TD_EXTERNAL_MARKET +WHERE MARKET = 'CVRM Market' + +-- COMMAND ---------- + +----------------------------------------------------------------------------------- +--修改时间:20240822 +--修改人:FanXujia +--修改内容: +--Retail、EC渠道,新增NIAD这个TA。数据与DM相同 +----------------------------------------------------------------------------------- +insert into dm.dm_td_external_market_ta +( +MARKET, +DATA_SOURCE, +TA, +TA_RN, +MARKET_DESC +) +select +market, +DATA_SOURCE, +'NIAD' as TA, +7 as TA_RN, +MARKET_DESC +from dm.dm_td_external_market_ta +where DATA_SOURCE = 'Retail(Quarterly)' +and ta = 'DM' +union all +select +market, +DATA_SOURCE, +'NIAD' as TA, +7 as TA_RN, +MARKET_DESC +from dm.dm_td_external_market_ta +where DATA_SOURCE = 'EC(Monthly)' +and ta = 'DM' + +--20250701 chenwu 新增RARE = ONCO的Soliris Related Market +union all +select +market, +DATA_SOURCE, +'RARE' as TA, +8 as TA_RN, +MARKET_DESC +from dm.dm_td_external_market_ta +where DATA_SOURCE = 'Retail(Quarterly)' +and ta = 'ONCO' +and MARKET = 'Soliris Related Market' + +-- COMMAND ---------- + +-- log 20250226 auth:庄伟 +-- 对market_ta表中市场进行补全,并依据手工文件维护的 market 与 ta 映射,匹配出完整市场对应的TA_NAME + + +insert overwrite table dm.dm_td_external_market_ta +( +MARKET, +DATA_SOURCE, +TA, +TA_MAP, +TA_RN, +MARKET_DESC +) + +-----找出在market维度表中不存在的market列表 +with temp_ma_ext_market +as +( +select +distinct +MARKET +,DATA_SOURCE +from dm.dm_td_external_market +where MARKET NOT IN ( +select distinct MARKET +from dm.dm_td_external_market_ta +) +) + + +------补充完整的market列表,并通过market匹配手工文件维护的market对应的TA +select +distinct +dim_mkt_ta.MARKET, +DATA_SOURCE, +dim_mkt_ta.TA, +nvl(mkt_property.ta,mkt_property_key.TA) TA_MAP, +dim_mkt_ta.TA_RN, +dim_mkt_ta.MARKET_DESC +from +( +select MARKET,DATA_SOURCE,TA,TA_RN,MARKET_DESC +from dm.dm_td_external_market_ta +)dim_mkt_ta +left join dm.dm_ims_td_market_property mkt_property +on dim_mkt_ta.market = mkt_property.market +left join dm.dm_ims_td_market_property mkt_property_key +on dim_mkt_ta.MARKET = mkt_property_key.MARKET_KEY +union all +select + ext_market.MARKET, + ext_market.DATA_SOURCE, + null TA, + mkt_property.TA TA_MAP, + '99' as TA_RN, + null MARKET_DESC +from temp_ma_ext_market ext_market +left join dm.dm_ims_td_market_property mkt_property +on ext_market. market =mkt_property.MARKET +where nvl(mkt_property.TA,'')<>''; \ No newline at end of file diff --git a/上线脚本.sql b/上线脚本.sql new file mode 100644 index 0000000..b1661ed --- /dev/null +++ b/上线脚本.sql @@ -0,0 +1,2461 @@ +-- Databricks notebook source +-- MAGIC %md +-- MAGIC # AIA + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_AIA_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP + ) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_aia_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_aia_sales'; + + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_AIA_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_aia_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC #CHC + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack_property'; + + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_CHC_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chc_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chc_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHC_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chc_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC #CHPA + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_CHPA_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chpa_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_chpa_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_chpa_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # COUNTY + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack_property'; + + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_COUNTY_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_county_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_county_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +-- 建表SQL +CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_COUNTY_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_county_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # EC + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_EC_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_ec_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_ec_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_EC_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_ec_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC #RETAIL + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_PACK_PROPERTY + ( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK_DTP +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_DTP_PACK_PROPERTY + ( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_dtp_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_dtp_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_RETAIL_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES_DTP +CREATE OR REPLACE TABLE DM.DM_TF_EXT_RETAIL_DTP_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_dtp_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_retail_dtp_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_RETAIL_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_retail_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # THC + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_THC_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_THC_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_thc_market_pack_mapping'; + +-- COMMAND ---------- + +-- DBTITLE 1,DM_TF_EXT_THC_MARKET_SALES_CHT +CREATE OR REPLACE TABLE DM.DM_TF_EXT_THC_MARKET_SALES_CHT ( + MARKET STRING, + KEY_COMPETITOR STRING, + CLASS STRING, + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + DATA_SOURCE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + CMPS_FLAG STRING COMMENT '分子式标签', + NEW_CODE STRING COMMENT '主数据关联CODE', + INST_CODE STRING COMMENT '内部机构编码', + AIA_HP_FLAG STRING, + DEPT_NAME STRING COMMENT '科室名称', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_TYPE STRING COMMENT '处方来源', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + VA DOUBLE, + UT DOUBLE, + CU DOUBLE, + PT DOUBLE, + SALES_UNIT_CAL DECIMAL(35,6), + SALES_UNIT_CAL_LY DECIMAL(35,6), + SALES_VALUE_CAL DECIMAL(35,6), + SALES_VALUE_CAL_LY DECIMAL(35,6), + CONUTING_UNIT DECIMAL(35,6), + CONUTING_UNIT_LY DECIMAL(35,6), + PDOT DECIMAL(35,6), + PDOT_LY DECIMAL(35,6), + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_market_sales_cht'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_thc_market_sales_cht'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC #XIEHE + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_PACK_PROPERTY +( + MARKET_PACK_KEY STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + FAMILY_CODE STRING, + FAMILY_NAME STRING, + PROD_CODE STRING, + PROD_DESC STRING, + PROD_DESC_C STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + CMPS_DESC_C STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC_V STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MANU_DESC_C STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + CORP_DESC_C STRING, + BRANDTYPE STRING, + MARKET STRING, + KEY_COMPETITOR STRING, + IS_AZ STRING, + AZ_MAIN STRING, + AZ_RELATED STRING, + ATC1_DESC STRING, + ATC1_DESC_C STRING, + ATC2_DESC STRING, + ATC2_DESC_C STRING, + ATC3_DESC STRING, + ATC3_DESC_C STRING, + ATC4_DESC STRING, + ATC4_DESC_C STRING, + APP1_DESC STRING, + APP1_DESC_C STRING, + APP2_DESC STRING, + APP2_DESC_C STRING, + APP3_DESC STRING, + APP3_DESC_C STRING, + CLASS STRING, + MARKET_RATIO STRING, + COUNTINGUNIT STRING, + VBP_BRAND STRING, + REPLENISH_FALG STRING, + ETL_INSERT_DT STRING, + ETL_UPDATE_DT STRING +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack_property'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack_property'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_XIEHE_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_xiehe_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_xiehe_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,PACK2MARKET +CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_PACK2MARKET ( + MARKET STRING, + PACK_CODE STRING, + PACK_DESC STRING, + STGH_DESC STRING, + PACK_LCH STRING, + PROD_CODE STRING, + CMPS_CODE STRING, + CMPS_DESC STRING, + ATC1_CODE STRING, + ATC2_CODE STRING, + ATC3_CODE STRING, + ATC4_CODE STRING, + APP1_CODE STRING, + APP2_CODE STRING, + APP3_CODE STRING, + BIO_DESC STRING, + GENE_ORIG_DESC STRING, + ETH_OTC_DESC STRING, + NRDL_DESC STRING, + NRDL_ENTRY_DATE STRING, + EDL_DESC STRING, + TCM_DESC STRING, + PAED_DESC STRING, + GQCE_DESC STRING, + VBP_DESC STRING, + MANU_CODE STRING, + MANU_DESC STRING, + MNFL_CODE STRING, + MNFL_DESC STRING, + CORP_CODE STRING, + CORP_DESC STRING, + BRANDTYPE STRING, + BU STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_pack2market'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_RATIO ( + MARKET STRING, + PACK_CODE STRING, + CMPS_CODE STRING, + STARTTIME STRING, + ENDTIME STRING, + MARKET_RATIO STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_BRAND_RATIO +CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_BRAND_RATIO ( + MARKET STRING, + PACK_CODE STRING, + VALUE_BRAND_RATIO FLOAT, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO FLOAT, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO FLOAT, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO FLOAT, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_brand_ratio'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_brand_ratio'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_XIEHE_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_xiehe_market_pack_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC #UNIONALL + +-- COMMAND ---------- + +-- DBTITLE 1,PACK +CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_PACKINFO ( + PACK_CODE STRING COMMENT '包装编码', + PACK_DESC STRING COMMENT '包装描述', + PACK_LCH STRING COMMENT '包装上市时间,示例"Y2024M05"', + PROD_CODE STRING COMMENT '产品编码', + PROD_DESC STRING COMMENT '产品描述', + PROD_DESC_C STRING COMMENT '产品中文描述', + CMPS_CODE STRING COMMENT '成分代码', + CMPS_DESC STRING COMMENT '成分描述', + CMPS_DESC_C STRING COMMENT '成分中文描述', + VBP_BATCH STRING COMMENT '带量采购批次号', + VBP_IMPLEMENTING_TIME STRING COMMENT '带量采购实施时间', + STGH_DESC STRING COMMENT '储存方式描述', + BIO_DESC STRING COMMENT '生物制药描述', + ETH_OTC_DESC STRING COMMENT '处方/非处方药描述', + NRDL_DESC STRING COMMENT '国家医保目录状态描述', + NRDL_ENTRY_DATE STRING COMMENT '国家医保目录纳入日期', + EDL_DESC STRING COMMENT '基本药物目录状态描述', + TCM_DESC STRING COMMENT '中医药分类描述', + PAED_DESC STRING COMMENT '儿童用药标志描述', + GQCE_DESC STRING COMMENT '绿色/质量/认证/应急标志描述', + MANU_CODE STRING COMMENT '生产企业编码', + MANU_DESC STRING COMMENT '生产企业名称描述', + MANU_DESC_C STRING COMMENT '生产企业名称中文描述', + MNFL_CODE STRING COMMENT '跨国/本地企业标志编码', + ATC1_CODE STRING COMMENT '解剖学治疗学化学分类1编码', + ATC1_DESC STRING COMMENT '解剖学治疗学化学分类1描述', + ATC1_DESC_C STRING COMMENT '解剖学治疗学化学分类1中文描述', + ATC2_CODE STRING COMMENT '解剖学治疗学化学分类2编码', + ATC2_DESC STRING COMMENT '解剖学治疗学化学分类2描述', + ATC2_DESC_C STRING COMMENT '解剖学治疗学化学分类2中文描述', + ATC3_CODE STRING COMMENT '解剖学治疗学化学分类3编码', + ATC3_DESC STRING COMMENT '解剖学治疗学化学分类3描述', + ATC3_DESC_C STRING COMMENT '解剖学治疗学化学分类3中文描述', + ATC4_CODE STRING COMMENT '解剖学治疗学化学分类4编码', + ATC4_DESC STRING COMMENT '解剖学治疗学化学分类4描述', + ATC4_DESC_C STRING COMMENT '解剖学治疗学化学分类4中文描述', + APP1_CODE STRING COMMENT '审批/申请分类(3个层级)', + APP1_DESC STRING COMMENT '', + APP1_DESC_C STRING COMMENT '', + APP2_CODE STRING COMMENT '', + APP2_DESC STRING COMMENT '', + APP2_DESC_C STRING COMMENT '', + APP3_CODE STRING COMMENT '', + APP3_DESC STRING COMMENT '', + APP3_DESC_C STRING COMMENT '', + GENE_ORIG_DESC STRING COMMENT '原研/仿制/中药药物来源描述', + VBP_DESC STRING COMMENT '带量采购状态(VBP-IN/VBP-OUT/Non VBP)描述', + CORP_CODE STRING COMMENT '公司编码', + GEN_RN INT COMMENT '原研/仿制排名(1-5)', + CORP_DESC STRING COMMENT '公司名称描述', + CORP_DESC_C STRING COMMENT '公司名称中文描述', + PACK_RN INT COMMENT '包装排名(按销售量)', + PROD_RN INT COMMENT '产品排名(按销售量)', + CMPS_RN INT COMMENT '成分排名(按销售量)', + DATA_SOURCE STRING COMMENT '数据来源渠道', + ATC STRING COMMENT 'ATC分类代码', + NEW_CODE STRING COMMENT '新编码', + COMMON_NAME STRING COMMENT '通用名称', + PRODUCT_NAME STRING COMMENT '产品名称', + MANU_DES_XIEHE STRING COMMENT '协和渠道生产企业名称', + PACK_DES_XIEHE STRING COMMENT '协和渠道包装描述', + DRUG_DELIVERY_ROUTE STRING COMMENT '给药途径', + NFC STRING COMMENT '国家处方集代码', + CORP_TYPE STRING COMMENT '企业类型(本地/跨国)', + LAUNCHTIME STRING COMMENT '产品上市时间', + VBP_BRAND STRING COMMENT '品牌带量采购状态汇总', + REPLENISH_FALG STRING COMMENT '后续补充标志', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_packinfo'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_packinfo'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_SALES ( + YYYYMM STRING, + PACK_CODE STRING, + CORP_CODE STRING, + AUDIT_CODE STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(38,10), + CONUTING_UNIT_LY DECIMAL(38,10), + DATA_SOURCE STRING, + INST_CODE STRING COMMENT '内部机构编码', + CMPS_FLAG STRING COMMENT '分子式标签', + DEPT_NAME STRING COMMENT '科室名称', + PRESCRIPTION DECIMAL(38,10) COMMENT '处方张数', + PRESCRIPTION_LY DECIMAL(38,10) COMMENT '去年同期处方张数', + NEW_CODE STRING COMMENT '主数据关联CODE', + AREA STRING COMMENT '城市', + H_LEVEL STRING COMMENT '医院类型', + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_SOURCE STRING COMMENT '处方来源', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_PACK_MAPPING +CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET_PACK_MAPPING +( + PACK_CODE STRING, + MARKET STRING, + CLASS STRING, + KEY_COMPETITOR STRING, + MARKET_RATIO STRING, + STARTTIME STRING, + ENDTIME STRING, + VALUE_BRAND_RATIO STRING, + VALUE_BRAND_RATIO_START STRING, + VALUE_BRAND_RATIO_END STRING, + UNIT_BRAND_RATIO STRING, + UNIT_BRAND_START STRING, + UNIT_BRAND_END STRING, + COUNTINGUNIT_BRAND_RATIO STRING, + COUNTINGUNIT_BRAND_START STRING, + COUNTINGUNIT_BRAND_END STRING, + PDOT_BRAND_RATIO STRING, + PDOT_BRAND_START STRING, + PDOT_BRAND_END STRING, + DATASOURCE STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP +) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_pack_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_pack_mapping'; + +-- COMMAND ---------- + +-- DBTITLE 1,MARKET_SALES +CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_MARKET_SALES ( + MARKET STRING, + KEY_COMPETITOR STRING, + CLASS STRING, + YYYYMM STRING, + PACK_COD STRING, + CORP_COD STRING, + AUDIT_COD STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + DATA_SOURCE STRING, + PACK_FLAG STRING, + PROD_FLAG STRING, + DTP_FLAG STRING, + CMPS_FLAG STRING, + NEW_CODE STRING COMMENT '主数据关联CODE', + INST_CODE STRING COMMENT '内部机构编码', + AIA_HP_FLAG STRING, + DEPT_NAME STRING COMMENT '科室名称', + H_LEVEL STRING, + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_TYPE STRING COMMENT '处方来源', + PRESCRIPTION DECIMAL(35,10), + PRESCRIPTION_LY DECIMAL(35,10), + VA STRING, + UT STRING, + CU STRING, + PT STRING, + SALES_UNIT_CAL DECIMAL(35,6), + SALES_UNIT_CAL_LY DECIMAL(35,6), + SALES_VALUE_CAL DECIMAL(35,6), + SALES_VALUE_CAL_LY DECIMAL(35,6), + CONUTING_UNIT DECIMAL(35,6), + CONUTING_UNIT_LY DECIMAL(35,6), + PDOT DECIMAL(35,6), + PDOT_LY DECIMAL(35,6), + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP + ) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_market_sales'; + +-- COMMAND ---------- + +-- DBTITLE 1,SALES_MAPPING +CREATE OR REPLACE TABLE DM.DM_TF_EXT_UNIONALL_SALES_MAPPING +( + MARKET STRING, + KEY_COMPETITOR STRING, + CLASS STRING, + YYYYMM STRING, + PACK_COD STRING, + CORP_COD STRING, + AUDIT_COD STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + DATA_SOURCE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + CMPS_FLAG INT, + NEW_CODE STRING COMMENT '主数据关联CODE', + INST_CODE STRING COMMENT '内部机构编码', + AIA_HP_FLAG INT, + DEPT_NAME STRING COMMENT '科室名称', + H_LEVEL INT, + REIMBURSE STRING COMMENT '报销情况', + REIMBURSE_TYPE STRING COMMENT '报销类型', + PRESCRIPTION_TYPE STRING COMMENT '处方来源', + VA decimal(35,10), + UT decimal(35,10), + CU decimal(35,10), + PT decimal(35,10), + SALES_UNIT_CAL decimal(35,10), + SALES_UNIT_CAL_LY decimal(35,10), + SALES_VALUE_CAL decimal(35,10), + SALES_VALUE_CAL_LY decimal(35,10), + CONUTING_UNIT decimal(35,10), + CONUTING_UNIT_LY decimal(35,10), + PDOT decimal(35,10), + PDOT_LY decimal(35,10), + PRESCRIPTION INT, + PRESCRIPTION_LY INT, + AIA_REMOVE INT, + MERGEDATA_FLAG STRING, + MERGEDATA_FLAG_MKT STRING, + MERGEDATA_FLAG_CHPA_DTP INT, + MERGEDATA_FLAG_DTP_NOROC INT, + MERGED_DATA_DTP_OTHERS INT, + EGFR_FLAG INT, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_tf_ext_unionall_sales_mapping'; + +-- COMMAND ---------- + +-- MAGIC %md +-- MAGIC # OTHER + +-- COMMAND ---------- + +-- DBTITLE 1,dm_td_ext_unionall_market +CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET ( + MARKET STRING, + DATA_SOURCE STRING, + TA STRING, + AZ_RELATED STRING, + MARKET_DESC STRING, + TA_RN INT, + PRD_FLAG STRING, + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market'; + +-- COMMAND ---------- + +-- DBTITLE 1,dm_td_ext_unionall_market_ta +CREATE OR REPLACE TABLE DM.DM_TD_EXT_UNIONALL_MARKET_TA ( + MARKET STRING COMMENT '市场', + DATA_SOURCE STRING COMMENT '数据源', + TA STRING COMMENT '治疗领域', + TA_MAP STRING COMMENT '治疗领域匹配', + TA_RN INT COMMENT '治疗领域排名', + MARKET_DESC STRING COMMENT '市场描述', + ETL_INSERT_DT TIMESTAMP, + ETL_UPDATE_DT TIMESTAMP) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_ta'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/dm_td_ext_unionall_market_ta'; + +-- COMMAND ---------- + +-- DBTITLE 1,DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth +CREATE OR REPLACE TABLE dm.DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth ( + MARKET STRING, + KEY_COMPETITOR STRING, + CLASS STRING, + YYYYMM STRING, + PACK_COD STRING, + CORP_COD STRING, + AUDIT_COD STRING, + PLATFORM_TYPE STRING, + STORE_NAME STRING, + STORE_TYPE STRING, + REGION_TYPE STRING, + PACK_FLAG INT, + PROD_FLAG INT, + DTP_FLAG INT, + SALES_UNIT_CAL DECIMAL(38,10), + SALES_UNIT_CAL_LY DECIMAL(38,10), + SALES_VALUE_CAL DECIMAL(38,10), + SALES_VALUE_CAL_LY DECIMAL(38,10), + CONUTING_UNIT DECIMAL(21,0), + CONUTING_UNIT_LY DECIMAL(21,0), + PDOT DECIMAL(21,0), + PDOT_LY DECIMAL(21,0), + DATA_SOURCE STRING, + inst_code STRING, + cmps_flag STRING, + dept_name STRING, + prescription STRING, + prescription_ly STRING, + new_code STRING, + area STRING, + h_level STRING, + reimburse STRING, + reimburse_type STRING, + prescription_source STRING) +USING delta +LOCATION 'abfss://master@azcdatalakeprd.dfs.core.chinacloudapi.cn/DM/DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth'; +-- 上面是生产环境location,下面是测试环境location +-- LOCATION 'abfss://master@retaildlstoragetest.dfs.core.chinacloudapi.cn/DM/DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth'; diff --git a/数据验证.sql b/数据验证.sql new file mode 100644 index 0000000..1752822 --- /dev/null +++ b/数据验证.sql @@ -0,0 +1,39 @@ +-- Databricks notebook source +desc dm.dm_tf_ext_aia_sales + +-- COMMAND ---------- + +select DATA_SOURCE,DTP_FLAG from dm.DM_TF_EXTERANL_SALES_MERGED_DATA_DTP_OTHERS_bymonth +group by DATA_SOURCE,DTP_FLAG + +-- COMMAND ---------- + +select DTP_FLAG,DATA_SOURCE from DM.DM_TF_EXT_RETAIL_DTP_SALES group by DTP_FLAG,DATA_SOURCE +-- order by DATA_SOURCE + +-- COMMAND ---------- + +select DATA_SOURCE,DTP_FLAG from DM.DM_TF_EXT_UNIONALL_SALES group by DATA_SOURCE,DTP_FLAG +order by DATA_SOURCE,DTP_FLAG + +-- COMMAND ---------- + +select DATA_SOURCE,DTP_FLAG,count(*) from DM.dm_tf_ext_unionall_sales_mapping +group BY DATA_SOURCE,DTP_FLAG +ORDER BY DATA_SOURCE,DTP_FLAG + + +-- COMMAND ---------- + +select * from DM.DM_TF_EXT_UNIONALL_SALES_MAPPING +limit 4 + +-- COMMAND ---------- + +select AUDIT_CODE from DM.DM_TF_EXT_CHPA_SALES group by AUDIT_CODE +-- limit 5 + +-- COMMAND ---------- + +select * from DM.DM_TD_EXT_CHPA_PACK2MARKET +limit 5 \ No newline at end of file