Files
MarketAnalysis-ETL/Retail/03 split_pack_data.py
2026-04-27 11:04:09 +08:00

1200 lines
47 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Databricks notebook source
### 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##############################################################