diff --git a/CHPA/01 dwd_update.sql b/CHPA/01 dwd_update.sql index 28db555..756c7fa 100644 --- a/CHPA/01 dwd_update.sql +++ b/CHPA/01 dwd_update.sql @@ -85,4 +85,46 @@ SET Pack_Code = if( Pack_Code REGEXP '^[0-9]',right(concat('000000000000',Pack_C ; 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 +; + +-- COMMAND ---------- + +update DWD.dwd_gnd_tblmarket_bymonth +set starttime = '200001' +where starttime is null or starttime='' or starttime='All'; + +update DWD.dwd_gnd_tblmarket_bymonth +set endtime = '299912' +where endtime is null or endtime=''or endtime='All'; + +update DWD.dwd_gnd_ims_tblbrandratio +set starttime = '200001' +where starttime is null or starttime='' or starttime='All'; + +update DWD.dwd_gnd_ims_tblbrandratio +set endtime = '299912' +where endtime is null or endtime=''or endtime='All'; + +update DWD.dwd_gnd_retail_tblmarket_bymonth +set starttime = '200001' +where starttime is null or starttime='' or starttime='All'; + +update DWD.dwd_gnd_retail_tblmarket_bymonth +set endtime = '299912' +where endtime is null or endtime=''or endtime='All'; + +update DWD.dwd_gnd_ec_tblmarket_bymonth +set starttime = '200001' +where starttime is null or starttime='' or starttime='All'; + +update DWD.dwd_gnd_ec_tblmarket_bymonth +set endtime = '299912' +where endtime is null or endtime=''or endtime='All'; + +update DWD.dwd_gnd_dtp_tblmarket_bymonth +set starttime = '200001' +where starttime is null or starttime='' or starttime='All'; + +update DWD.dwd_gnd_dtp_tblmarket_bymonth +set endtime = '299912' +where endtime is null or endtime=''or endtime='All'; diff --git a/EC/03 ec_load_data.ipynb b/EC/03 ec_load_data.ipynb index 3a85889..cfa088d 100644 --- a/EC/03 ec_load_data.ipynb +++ b/EC/03 ec_load_data.ipynb @@ -9,9 +9,12 @@ "byteLimit": 2048000, "rowLimit": 10000 }, + "finishTime": 1777537485985, "inputWidgets": {}, - "nuid": "d61085b4-b83e-484e-bf7a-a2e0c1e69b6a", + "nuid": "86f0c1e4-9672-4b69-b7d7-e972573aa69d", "showTitle": false, + "startTime": 1777537485980, + "submitTime": 1777537484990, "tableResultSettingsMap": {}, "title": "" } @@ -20,7 +23,7 @@ "source": [ "-- 有几张表发生了变化\n", "-- tmp.tmp_ec_temp_market\n", - "-- tmp.tmp_ec_temp_market_del\n", + "-- tmp.tmp_ec_temp_market_del \n", "-- dws.dws_zk_ec_pack_property\n", "\n", "-- dm.dm_zk_ec_market_ratio" @@ -35,236 +38,414 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "finishTime": 1777013125396, + "finishTime": 1777537486382, "inputWidgets": {}, - "nuid": "0d9ce3a9-5ccb-48bc-a100-0d46e5e75bbf", + "nuid": "f319d145-a050-425c-b86f-c73d2e6f41ad", "showTitle": false, - "startTime": 1777013120348, - "submitTime": 1777013120175, + "startTime": 1777537485990, + "submitTime": 1777537484997, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table tmp.tmp_ec_temp_market\n", - "select distinct\n", - " b.iqvia_lineno ,\n", - " 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)\n", - " right(concat('000000000',nvl(b.iqvia_prod_code,0)),9) as prod_cod ,-- right(concat('00000',nvl(b.iqvia_prod_code,0)),5)\n", - " b.iqvia_notes ,\n", - " b.new_pack_flag ,\n", - " b.is_exists_chpa ,\n", - " right(concat('0000000',nvl(b.product_id,0)),7) as product_id,\n", - " b.prescription_nature ,\n", - " b.medicine_type ,\n", - " b.zk_medicine_tier1 ,\n", - " b.zk_medicine_tier2 ,\n", - " b.zk_medicine_tier3 ,\n", - " b.zk_medicine_tier4 ,\n", - " b.common_name ,\n", - " b.dosage_form ,\n", - " b.user_type ,\n", - " b.category_name ,\n", - " b.product_name ,\n", - " b.brand_name ,\n", - " b.zk_manu_des ,\n", - " b.zk_corp_des ,\n", - " b.zk_pack_des ,\n", - " b.counting_unit_a ,\n", - " b.dosage_unit_a ,\n", - " b.unit_a ,\n", - " b.app1_cod ,\n", - " b.app1_des ,\n", - " b.app1_des_c ,\n", - " b.app2_cod ,\n", - " b.app2_des ,\n", - " b.app2_des_c ,\n", - " b.app3_cod ,\n", - " b.app3_des ,\n", - " b.app3_des_c ,\n", - " b.atc1_cod ,\n", - " b.atc1_des ,\n", - " b.atc1_des_c ,\n", - " b.atc2_cod ,\n", - " b.atc2_des ,\n", - " b.atc2_des_c ,\n", - " b.atc3_cod ,\n", - " b.atc3_des ,\n", - " b.atc3_des_c ,\n", - " b.atc4_cod ,\n", - " b.atc4_des ,\n", - " b.atc4_des_c ,\n", - " b.bio_desc ,\n", - " right(concat('000000',nvl(b.cmps_cod,0 )),6) cmps_cod,\n", - " b.cmps_des ,\n", - " b.cmps_des_c ,\n", - " b.corp_cod ,\n", - " b.corp_des ,\n", - " b.corp_des_c ,\n", - " b.edl_desc ,\n", - " b.eth_otc_desc ,\n", - " b.gene_orig_desc ,\n", - " b.gqce_desc ,\n", - " b.manu_cod ,\n", - " b.manu_des ,\n", - " b.manu_des_c ,\n", - " b.mnfl_cod ,\n", - " b.mnfl_des ,\n", - " b.nrdl_desc ,\n", - " b.pack_des ,\n", - " b.stgh_des ,\n", - " b.pack_lch ,\n", - " b.paed_desc ,\n", - " b.prod_des ,\n", - " b.prod_des_c ,\n", - " b.tcm_desc ,\n", - " b.vbp_desc ,\n", - " b.unit ,\n", - " b.counting_unit ,\n", - " b.dosage_unit ,\n", - "\tnvl(mole.NRDL_Entry_Date,'') as NRDL_ENTRY_DATE,\n", - "\ttblmkt.Market,\n", - "\ttblmkt.bu,\n", - "\tnvl(tblmkt.extend_market_ratio,1) as extend_market_ratio,\n", - "\t-- c.ta,\n", - "\tif(b.corp_des_c in ('阿斯利康制药集团'),'Y','N') as is_az\n", - "from dwd.dwd_gnd_ext_retail_pack_property as b\n", - "left join dwd.dwd_ims_td_pack_additional_attribute mole on b.iqvia_pack_code = mole.Pack_Code\n", - "left join (\n", - " select\n", - "\t\tmarket,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\n", - " from dwd.dwd_gnd_ec_retail_tblmarket_rule\n", - "\twhere extend_market is null and ( NOT_IN_FLAG IS NULL or NOT_IN_FLAG = '1' )\n", + "CREATE OR REPLACE TEMPORARY VIEW EC_TBLMARKET_BYMONTH AS\n", + "SELECT DISTINCT\n", + " market_no,\n", + " market,\n", + " bu,\n", + " atc1_code,\n", + " atc2_code,\n", + " atc3_code,\n", + " atc4_code,\n", + " nfc1_code,\n", + " nfc2_code,\n", + " nfc3_code,\n", + " pack_code,\n", + " pack_desc,\n", + " strength,\n", + " product_code,\n", + " product_desc,\n", + " molecule_code,\n", + " molecule_desc,\n", + " not_in_flag,\n", + " extend_market,\n", + " extend_market_ratio,\n", + " corporation_code,\n", + " corporation_desc,\n", + " manufacturer_code,\n", + " manufacturer_desc\n", + "FROM\n", + " DWD.dwd_gnd_ec_tblmarket_bymonth" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "a11838c0-855f-4fe6-95d7-790959cb6739", + "showTitle": false, + "submitTime": 1777537485002, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "insert overwrite table tmp.tmp_ec_temp_market \n", + "-- ============================================================\n", + "-- 药品包装属性维度宽表\n", + "-- 来源:IQVIA 零售包装属性 + NRDL 补充属性 + 市场归属规则\n", + "-- 核心逻辑:基于多维度模糊匹配将包装映射到市场(Market/BU)\n", + "-- 过滤条件:仅保留能匹配到市场的记录\n", + "-- ============================================================\n", + "SELECT DISTINCT\n", + "\n", + " -- ────────────── 基础标识码(统一格式化补零)──────────────\n", + " b.iqvia_lineno,\n", + "\n", + " -- IQVIA 包装编码:纯数字补足 12 位,非数字直接保留\n", + " IF(\n", + " NVL(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', NVL(b.iqvia_pack_code, 0)), 12),\n", + " NVL(b.iqvia_pack_code, 0)\n", + " ) AS iqvia_pack_code,\n", + "\n", + " -- IQVIA 产品编码:补足 9 位\n", + " RIGHT(CONCAT('000000000', NVL(b.iqvia_prod_code, 0)), 9) AS prod_cod,\n", + "\n", + " -- ────────────── 基础属性标记 ──────────────\n", + " b.iqvia_notes,\n", + " b.new_pack_flag, -- 新包装标记\n", + " b.is_exists_chpa, -- 是否存在 CHPA 数据\n", + "\n", + " -- 中康产品 ID:补足 7 位\n", + " RIGHT(CONCAT('0000000', NVL(b.product_id, 0)), 7) AS product_id,\n", + "\n", + " -- ────────────── 药品属性 ──────────────\n", + " b.prescription_nature, -- 处方性质(Rx/OTC)\n", + " b.medicine_type, -- 药品类型\n", + " b.zk_medicine_tier1, -- 中康分类层级 1~4\n", + " b.zk_medicine_tier2,\n", + " b.zk_medicine_tier3,\n", + " b.zk_medicine_tier4,\n", + " b.common_name, -- 通用名\n", + " b.dosage_form, -- 剂型\n", + " b.user_type,\n", + " b.category_name,\n", + " b.product_name,\n", + " b.brand_name, -- 品牌名\n", + "\n", + " -- ────────────── 厂商及规格 ──────────────\n", + " b.zk_manu_des, -- 生产企业(中康)\n", + " b.zk_corp_des, -- 集团企业(中康)\n", + " b.zk_pack_des, -- 包装规格(中康)\n", + " b.counting_unit_a,\n", + " b.dosage_unit_a,\n", + " b.unit_a,\n", + "\n", + " -- ────────────── NFC 分类(APP 层级:治疗大类/亚类/品类)──────────────\n", + " b.app1_cod, b.app1_des, b.app1_des_c,\n", + " b.app2_cod, b.app2_des, b.app2_des_c,\n", + " b.app3_cod, b.app3_des, b.app3_des_c,\n", + "\n", + " -- ────────────── ATC 分类(WHO 解剖治疗化学分类 1~4 级)──────────────\n", + " b.atc1_cod, b.atc1_des, b.atc1_des_c,\n", + " b.atc2_cod, b.atc2_des, b.atc2_des_c,\n", + " b.atc3_cod, b.atc3_des, b.atc3_des_c,\n", + " b.atc4_cod, b.atc4_des, b.atc4_des_c,\n", + "\n", + " -- ────────────── 药品政策属性 ──────────────\n", + " b.bio_desc, -- 生物药标记\n", + " RIGHT(CONCAT('000000', NVL(b.cmps_cod, 0)), 6) AS cmps_cod, -- 化合物编码:补足 6 位\n", + " b.cmps_des, b.cmps_des_c,\n", + " b.corp_cod, b.corp_des, b.corp_des_c, -- 集团编码\n", + " b.edl_desc, -- 基本药物目录标记\n", + " b.eth_otc_desc, -- 处方/非处方标记\n", + " b.gene_orig_desc, -- 原研/仿制标记\n", + " b.gqce_desc, -- 一致性评价标记\n", + " b.manu_cod, b.manu_des, b.manu_des_c, -- 生产企业编码\n", + " b.mnfl_cod, b.mnfl_des,\n", + " b.nrdl_desc, -- 国家医保目录标记\n", + " b.pack_des,\n", + " b.stgh_des, -- 规格/含量描述\n", + " b.pack_lch,\n", + " b.paed_desc, -- 儿科用药标记\n", + " b.prod_des, b.prod_des_c,\n", + " b.tcm_desc, -- 中药标记\n", + " b.vbp_desc, -- 集采中选标记\n", + " b.unit,\n", + " b.counting_unit,\n", + " b.dosage_unit,\n", + "\n", + " -- ────────────── 补充维度(来自关联表)──────────────\n", + " NVL(mole.NRDL_Entry_Date, '') AS NRDL_ENTRY_DATE, -- 进入医保目录日期\n", + " tblmkt.Market, -- 市场名称\n", + " tblmkt.bu, -- BU 归属\n", + " NVL(tblmkt.extend_market_ratio, 1) AS extend_market_ratio, -- 扩展市场系数(默认 1)\n", + "\n", + " -- AZ 品牌标记:判断集团企业是否为阿斯利康\n", + " IF(b.corp_des_c IN ('阿斯利康制药集团'), 'Y', 'N') AS is_az\n", + "\n", + "FROM dwd.dwd_gnd_ext_retail_pack_property AS b\n", + "\n", + "-- ────────────── JOIN 1:关联 NRDL 辅助属性(左连接,按包装编码)──────────────\n", + "LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute mole\n", + " ON b.iqvia_pack_code = mole.Pack_Code\n", + "\n", + "-- ────────────── JOIN 2:关联市场归属规则表(多维度模糊匹配)──────────────\n", + "-- 规则:规则表中为 NULL 的维度视为\"通配符\",允许任意值匹配(即不做限制)\n", + "-- 过滤:仅使用非扩展市场(extend_market IS NULL)且有效规则(NOT_IN_FLAG 为空或为 '1')\n", + "LEFT JOIN (\n", + " SELECT\n", + " market, bu,\n", + " atc1_code, atc2_code, atc3_code, atc4_code,\n", + " nfc1_code, nfc2_code, nfc3_code,\n", + " pack_code, pack_desc, strength,\n", + " product_code, product_desc,\n", + " molecule_code, molecule_desc,\n", + " not_in_flag, extend_market, extend_market_ratio,\n", + " corporation_code, corporation_desc,\n", + " manufacturer_code, manufacturer_desc\n", + " FROM EC_TBLMARKET_BYMONTH\n", + " WHERE extend_market IS NULL\n", + " AND (NOT_IN_FLAG IS NULL OR NOT_IN_FLAG = '1')\n", ") tblmkt\n", - "on \t COALESCE(b.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then COALESCE(b.ATC1_COD,'')\telse tblmkt.ATC1_Code end\n", - "\t\tand COALESCE(b.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then COALESCE(b.ATC2_COD,'')\telse tblmkt.ATC2_Code end\n", - "\t\tand COALESCE(b.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then COALESCE(b.ATC3_COD,'')\telse tblmkt.ATC3_Code end\n", - "\t\tand COALESCE(b.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then COALESCE(b.ATC4_COD,'')\telse tblmkt.ATC4_Code end\n", - "\t\tand COALESCE(b.APP1_COD,'') = case when tblmkt.NFC1_Code is null then COALESCE(b.APP1_COD,'')\telse tblmkt.NFC1_Code end\n", - "\t\tand COALESCE(b.APP2_COD,'') = case when tblmkt.NFC2_Code is null then COALESCE(b.APP2_COD,'')\telse tblmkt.NFC2_Code end\n", - "\t\tand COALESCE(b.app3_cod,'') = case when tblmkt.NFC3_Code is null then COALESCE(b.app3_cod,'')\telse tblmkt.NFC3_Code end\n", - "\t\tand COALESCE(b.stgh_des,'') = case when tblmkt.Strength is null then COALESCE(b.stgh_des,'') else tblmkt.Strength end\n", - "\t\tand COALESCE(b.corp_cod,'') = case when tblmkt.Corporation_Code is null then COALESCE(b.corp_cod,'') else tblmkt.Corporation_Code end\n", - "\t\tand COALESCE(b.manu_cod,'') = case when tblmkt.Manufacturer_Code is null then COALESCE(b.manu_cod,'') else tblmkt.Manufacturer_Code end\n", - "\t 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\n", - "\t\tand 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\n", - " -- 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\n", - "\t\tand 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 \t 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\n", - "\t\t-- and right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) = case when tblmkt.Pack_Code \t is null then right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) else right(concat('0000000',tblmkt.Pack_Code),7) end\n", - "\t\tand right(concat('000000',COALESCE(b.CMPS_COD,0)),6) \t= case when tblmkt.Molecule_Code \t is null then right(concat('000000',COALESCE(b.CMPS_COD,0)),6) else right(concat('000000',tblmkt.Molecule_Code),6) end\n", - "-- left join dwd.dwd_gnd_ext_retail_dim_ta c\n", - "-- on c.market = tblmkt.Market\n", - "where tblmkt.market is not null ;\n", - "insert overwrite table tmp.tmp_ec_temp_market_del\n", - "select\n", - " b.iqvia_lineno ,\n", - " 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)\n", - " right(concat('000000000',nvl(b.iqvia_prod_code,0)),9) as prod_cod ,-- right(concat('00000',nvl(b.iqvia_prod_code,0)),5)\n", - " b.iqvia_notes ,\n", - " b.new_pack_flag ,\n", - " b.is_exists_chpa ,\n", - " right(concat('0000000',nvl(b.product_id,0)),7) as product_id,\n", - " b.prescription_nature ,\n", - " b.medicine_type ,\n", - " b.zk_medicine_tier1 ,\n", - " b.zk_medicine_tier2 ,\n", - " b.zk_medicine_tier3 ,\n", - " b.zk_medicine_tier4 ,\n", - " b.common_name ,\n", - " b.dosage_form ,\n", - " b.user_type ,\n", - " b.category_name ,\n", - " b.product_name ,\n", - " b.brand_name ,\n", - " b.zk_manu_des ,\n", - " b.zk_corp_des ,\n", - " b.zk_pack_des ,\n", - " b.counting_unit_a ,\n", - " b.dosage_unit_a ,\n", - " b.unit_a ,\n", - " b.app1_cod ,\n", - " b.app1_des ,\n", - " b.app1_des_c ,\n", - " b.app2_cod ,\n", - " b.app2_des ,\n", - " b.app2_des_c ,\n", - " b.app3_cod ,\n", - " b.app3_des ,\n", - " b.app3_des_c ,\n", - " b.atc1_cod ,\n", - " b.atc1_des ,\n", - " b.atc1_des_c ,\n", - " b.atc2_cod ,\n", - " b.atc2_des ,\n", - " b.atc2_des_c ,\n", - " b.atc3_cod ,\n", - " b.atc3_des ,\n", - " b.atc3_des_c ,\n", - " b.atc4_cod ,\n", - " b.atc4_des ,\n", - " b.atc4_des_c ,\n", - " b.bio_desc ,\n", - " right(concat('000000',nvl(b.cmps_cod,0 )),6) cmps_cod,\n", - " b.cmps_des ,\n", - " b.cmps_des_c ,\n", - " b.corp_cod ,\n", - " b.corp_des ,\n", - " b.corp_des_c ,\n", - " b.edl_desc ,\n", - " b.eth_otc_desc ,\n", - " b.gene_orig_desc ,\n", - " b.gqce_desc ,\n", - " b.manu_cod ,\n", - " b.manu_des ,\n", - " b.manu_des_c ,\n", - " b.mnfl_cod ,\n", - " b.mnfl_des ,\n", - " b.nrdl_desc ,\n", - " b.pack_des ,\n", - " b.stgh_des ,\n", - " b.pack_lch ,\n", - " b.paed_desc ,\n", - " b.prod_des ,\n", - " b.prod_des_c ,\n", - " b.tcm_desc ,\n", - " b.vbp_desc ,\n", - " b.unit ,\n", - " b.counting_unit ,\n", - " b.dosage_unit ,\n", - "\tnvl(mole.NRDL_Entry_Date,'') as NRDL_ENTRY_DATE,\n", - "\ttblmkt.Market,\n", - "\ttblmkt.bu,\n", - "\tnvl(tblmkt.extend_market_ratio,1) as extend_market_ratio,\n", - "\t-- c.ta,\n", - "\tif(b.corp_des_c in ('阿斯利康制药集团'),'Y','N') as is_az\n", - "from dwd.dwd_gnd_ext_retail_pack_property as b\n", - "left join dwd.dwd_ims_td_pack_additional_attribute mole on b.iqvia_pack_code = mole.Pack_Code\n", - "left join (\n", - " select\n", - "\t\tmarket,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\n", - " from dwd.dwd_gnd_ec_retail_tblmarket_rule\n", - "\twhere Extend_Market is null and NOT_IN_FLAG = '0'\n", + "ON\n", + " -- ATC 四级分类匹配(规则为 NULL 则通配)\n", + " COALESCE(b.ATC1_COD, '') = CASE WHEN tblmkt.ATC1_Code IS NULL THEN COALESCE(b.ATC1_COD, '') ELSE tblmkt.ATC1_Code END\n", + " AND COALESCE(b.ATC2_COD, '') = CASE WHEN tblmkt.ATC2_Code IS NULL THEN COALESCE(b.ATC2_COD, '') ELSE tblmkt.ATC2_Code END\n", + " AND COALESCE(b.ATC3_COD, '') = CASE WHEN tblmkt.ATC3_Code IS NULL THEN COALESCE(b.ATC3_COD, '') ELSE tblmkt.ATC3_Code END\n", + " AND COALESCE(b.ATC4_COD, '') = CASE WHEN tblmkt.ATC4_Code IS NULL THEN COALESCE(b.ATC4_COD, '') ELSE tblmkt.ATC4_Code END\n", + "\n", + " -- NFC 三级分类匹配\n", + " AND COALESCE(b.APP1_COD, '') = CASE WHEN tblmkt.NFC1_Code IS NULL THEN COALESCE(b.APP1_COD, '') ELSE tblmkt.NFC1_Code END\n", + " AND COALESCE(b.APP2_COD, '') = CASE WHEN tblmkt.NFC2_Code IS NULL THEN COALESCE(b.APP2_COD, '') ELSE tblmkt.NFC2_Code END\n", + " AND COALESCE(b.app3_cod, '') = CASE WHEN tblmkt.NFC3_Code IS NULL THEN COALESCE(b.app3_cod, '') ELSE tblmkt.NFC3_Code END\n", + "\n", + " -- 规格/含量匹配\n", + " AND COALESCE(b.stgh_des, '') = CASE WHEN tblmkt.Strength IS NULL THEN COALESCE(b.stgh_des, '') ELSE tblmkt.Strength END\n", + "\n", + " -- 集团 & 生产企业匹配\n", + " AND COALESCE(b.corp_cod, '') = CASE WHEN tblmkt.Corporation_Code IS NULL THEN COALESCE(b.corp_cod, '') ELSE tblmkt.Corporation_Code END\n", + " AND COALESCE(b.manu_cod, '') = CASE WHEN tblmkt.Manufacturer_Code IS NULL THEN COALESCE(b.manu_cod, '') ELSE tblmkt.Manufacturer_Code END\n", + "\n", + " -- IQVIA 产品编码匹配(补足 9 位后比对)\n", + " AND RIGHT(CONCAT('000000000', COALESCE(b.iqvia_prod_code, 0)), 9)\n", + " = CASE WHEN tblmkt.Product_Code IS NULL\n", + " THEN RIGHT(CONCAT('000000000', COALESCE(b.iqvia_prod_code, 0)), 9)\n", + " ELSE RIGHT(CONCAT('000000000', tblmkt.Product_Code), 9)\n", + " END\n", + "\n", + " -- IQVIA 包装编码匹配(纯数字补足 12 位,非数字直接比对)\n", + " AND IF(\n", + " COALESCE(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', COALESCE(b.iqvia_pack_code, 0)), 12),\n", + " COALESCE(b.iqvia_pack_code, 0)\n", + " )\n", + " = CASE WHEN tblmkt.Pack_Code IS NULL\n", + " THEN IF(\n", + " COALESCE(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', COALESCE(b.iqvia_pack_code, 0)), 12),\n", + " COALESCE(b.iqvia_pack_code, 0)\n", + " )\n", + " ELSE IF(\n", + " tblmkt.Pack_Code REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', tblmkt.Pack_Code), 12),\n", + " tblmkt.Pack_Code\n", + " )\n", + " END\n", + "\n", + " -- 化合物编码匹配(补足 6 位后比对)\n", + " AND RIGHT(CONCAT('000000', COALESCE(b.CMPS_COD, 0)), 6)\n", + " = CASE WHEN tblmkt.Molecule_Code IS NULL\n", + " THEN RIGHT(CONCAT('000000', COALESCE(b.CMPS_COD, 0)), 6)\n", + " ELSE RIGHT(CONCAT('000000', tblmkt.Molecule_Code), 6)\n", + " END\n", + "\n", + "-- ────────────── 最终过滤:只保留匹配到市场规则的包装 ──────────────\n", + "WHERE tblmkt.market IS NOT NULL;\n", + "\n", + "\n", + "insert overwrite table tmp.tmp_ec_temp_market_del \n", + "-- ============================================================\n", + "-- 药品包装属性维度宽表\n", + "-- 来源:IQVIA 零售包装属性 + NRDL 补充属性 + 市场归属规则\n", + "-- 核心逻辑:基于多维度模糊匹配将包装映射到市场(Market/BU)\n", + "-- 过滤条件:仅保留能匹配到市场的记录\n", + "-- ============================================================\n", + "SELECT DISTINCT\n", + "\n", + " -- ────────────── 基础标识码(统一格式化补零)──────────────\n", + " b.iqvia_lineno,\n", + "\n", + " -- IQVIA 包装编码:纯数字补足 12 位,非数字直接保留\n", + " IF(\n", + " NVL(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', NVL(b.iqvia_pack_code, 0)), 12),\n", + " NVL(b.iqvia_pack_code, 0)\n", + " ) AS iqvia_pack_code,\n", + "\n", + " -- IQVIA 产品编码:补足 9 位\n", + " RIGHT(CONCAT('000000000', NVL(b.iqvia_prod_code, 0)), 9) AS prod_cod,\n", + "\n", + " -- ────────────── 基础属性标记 ──────────────\n", + " b.iqvia_notes,\n", + " b.new_pack_flag, -- 新包装标记\n", + " b.is_exists_chpa, -- 是否存在 CHPA 数据\n", + "\n", + " -- 中康产品 ID:补足 7 位\n", + " RIGHT(CONCAT('0000000', NVL(b.product_id, 0)), 7) AS product_id,\n", + "\n", + " -- ────────────── 药品属性 ──────────────\n", + " b.prescription_nature, -- 处方性质(Rx/OTC)\n", + " b.medicine_type, -- 药品类型\n", + " b.zk_medicine_tier1, -- 中康分类层级 1~4\n", + " b.zk_medicine_tier2,\n", + " b.zk_medicine_tier3,\n", + " b.zk_medicine_tier4,\n", + " b.common_name, -- 通用名\n", + " b.dosage_form, -- 剂型\n", + " b.user_type,\n", + " b.category_name,\n", + " b.product_name,\n", + " b.brand_name, -- 品牌名\n", + "\n", + " -- ────────────── 厂商及规格 ──────────────\n", + " b.zk_manu_des, -- 生产企业(中康)\n", + " b.zk_corp_des, -- 集团企业(中康)\n", + " b.zk_pack_des, -- 包装规格(中康)\n", + " b.counting_unit_a,\n", + " b.dosage_unit_a,\n", + " b.unit_a,\n", + "\n", + " -- ────────────── NFC 分类(APP 层级:治疗大类/亚类/品类)──────────────\n", + " b.app1_cod, b.app1_des, b.app1_des_c,\n", + " b.app2_cod, b.app2_des, b.app2_des_c,\n", + " b.app3_cod, b.app3_des, b.app3_des_c,\n", + "\n", + " -- ────────────── ATC 分类(WHO 解剖治疗化学分类 1~4 级)──────────────\n", + " b.atc1_cod, b.atc1_des, b.atc1_des_c,\n", + " b.atc2_cod, b.atc2_des, b.atc2_des_c,\n", + " b.atc3_cod, b.atc3_des, b.atc3_des_c,\n", + " b.atc4_cod, b.atc4_des, b.atc4_des_c,\n", + "\n", + " -- ────────────── 药品政策属性 ──────────────\n", + " b.bio_desc, -- 生物药标记\n", + " RIGHT(CONCAT('000000', NVL(b.cmps_cod, 0)), 6) AS cmps_cod, -- 化合物编码:补足 6 位\n", + " b.cmps_des, b.cmps_des_c,\n", + " b.corp_cod, b.corp_des, b.corp_des_c, -- 集团编码\n", + " b.edl_desc, -- 基本药物目录标记\n", + " b.eth_otc_desc, -- 处方/非处方标记\n", + " b.gene_orig_desc, -- 原研/仿制标记\n", + " b.gqce_desc, -- 一致性评价标记\n", + " b.manu_cod, b.manu_des, b.manu_des_c, -- 生产企业编码\n", + " b.mnfl_cod, b.mnfl_des,\n", + " b.nrdl_desc, -- 国家医保目录标记\n", + " b.pack_des,\n", + " b.stgh_des, -- 规格/含量描述\n", + " b.pack_lch,\n", + " b.paed_desc, -- 儿科用药标记\n", + " b.prod_des, b.prod_des_c,\n", + " b.tcm_desc, -- 中药标记\n", + " b.vbp_desc, -- 集采中选标记\n", + " b.unit,\n", + " b.counting_unit,\n", + " b.dosage_unit,\n", + "\n", + " -- ────────────── 补充维度(来自关联表)──────────────\n", + " NVL(mole.NRDL_Entry_Date, '') AS NRDL_ENTRY_DATE, -- 进入医保目录日期\n", + " tblmkt.Market, -- 市场名称\n", + " tblmkt.bu, -- BU 归属\n", + " NVL(tblmkt.extend_market_ratio, 1) AS extend_market_ratio, -- 扩展市场系数(默认 1)\n", + "\n", + " -- AZ 品牌标记:判断集团企业是否为阿斯利康\n", + " IF(b.corp_des_c IN ('阿斯利康制药集团'), 'Y', 'N') AS is_az\n", + "\n", + "FROM dwd.dwd_gnd_ext_retail_pack_property AS b\n", + "\n", + "-- ────────────── JOIN 1:关联 NRDL 辅助属性(左连接,按包装编码)──────────────\n", + "LEFT JOIN dwd.dwd_ims_td_pack_additional_attribute mole\n", + " ON b.iqvia_pack_code = mole.Pack_Code\n", + "\n", + "-- ────────────── JOIN 2:关联市场归属规则表(多维度模糊匹配)──────────────\n", + "-- 规则:规则表中为 NULL 的维度视为\"通配符\",允许任意值匹配(即不做限制)\n", + "-- 过滤:仅使用非扩展市场(extend_market IS NULL)且有效规则(NOT_IN_FLAG 为空或为 '1')\n", + "LEFT JOIN (\n", + " SELECT\n", + " market, bu,\n", + " atc1_code, atc2_code, atc3_code, atc4_code,\n", + " nfc1_code, nfc2_code, nfc3_code,\n", + " pack_code, pack_desc, strength,\n", + " product_code, product_desc,\n", + " molecule_code, molecule_desc,\n", + " not_in_flag, extend_market, extend_market_ratio,\n", + " corporation_code, corporation_desc,\n", + " manufacturer_code, manufacturer_desc\n", + " FROM EC_TBLMARKET_BYMONTH\n", + " where Extend_Market is null and NOT_IN_FLAG = '0'\n", ") tblmkt\n", - "on \t COALESCE(b.ATC1_COD,'') = case when tblmkt.ATC1_Code is null then COALESCE(b.ATC1_COD,'')\telse tblmkt.ATC1_Code end\n", - "\t\tand COALESCE(b.ATC2_COD,'') = case when tblmkt.ATC2_Code is null then COALESCE(b.ATC2_COD,'')\telse tblmkt.ATC2_Code end\n", - "\t\tand COALESCE(b.ATC3_COD,'') = case when tblmkt.ATC3_Code is null then COALESCE(b.ATC3_COD,'')\telse tblmkt.ATC3_Code end\n", - "\t\tand COALESCE(b.ATC4_COD,'') = case when tblmkt.ATC4_Code is null then COALESCE(b.ATC4_COD,'')\telse tblmkt.ATC4_Code end\n", - "\t\tand COALESCE(b.APP1_COD,'') = case when tblmkt.NFC1_Code is null then COALESCE(b.APP1_COD,'')\telse tblmkt.NFC1_Code end\n", - "\t\tand COALESCE(b.APP2_COD,'') = case when tblmkt.NFC2_Code is null then COALESCE(b.APP2_COD,'')\telse tblmkt.NFC2_Code end\n", - "\t\tand COALESCE(b.app3_cod,'') = case when tblmkt.NFC3_Code is null then COALESCE(b.app3_cod,'')\telse tblmkt.NFC3_Code end\n", - "\t\tand COALESCE(b.stgh_des,'') = case when tblmkt.Strength is null then COALESCE(b.stgh_des,'') else tblmkt.Strength end\n", - "\t\tand COALESCE(b.corp_cod,'') = case when tblmkt.Corporation_Code is null then COALESCE(b.corp_cod,'') else tblmkt.Corporation_Code end\n", - "\t\tand COALESCE(b.manu_cod,'') = case when tblmkt.Manufacturer_Code is null then COALESCE(b.manu_cod,'') else tblmkt.Manufacturer_Code end\n", - "\t 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\n", - "\t\tand 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\n", - " -- 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\n", - "\t\tand 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 \t 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\n", - "\t\t-- and right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) = case when tblmkt.Pack_Code \t is null then right(concat('0000000',COALESCE(b.iqvia_pack_code,0)),7) else right(concat('0000000',tblmkt.Pack_Code),7) end\n", - "\t\tand right(concat('000000',COALESCE(b.CMPS_COD,0)),6) \t= case when tblmkt.Molecule_Code \t is null then right(concat('000000',COALESCE(b.CMPS_COD,0)),6) else right(concat('000000',tblmkt.Molecule_Code),6) end\n", - "-- left join dwd.dwd_gnd_ext_retail_dim_ta c\n", - "-- on c.market = tblmkt.Market\n", - "where tblmkt.market is not null ;\n", + "ON\n", + " -- ATC 四级分类匹配(规则为 NULL 则通配)\n", + " COALESCE(b.ATC1_COD, '') = CASE WHEN tblmkt.ATC1_Code IS NULL THEN COALESCE(b.ATC1_COD, '') ELSE tblmkt.ATC1_Code END\n", + " AND COALESCE(b.ATC2_COD, '') = CASE WHEN tblmkt.ATC2_Code IS NULL THEN COALESCE(b.ATC2_COD, '') ELSE tblmkt.ATC2_Code END\n", + " AND COALESCE(b.ATC3_COD, '') = CASE WHEN tblmkt.ATC3_Code IS NULL THEN COALESCE(b.ATC3_COD, '') ELSE tblmkt.ATC3_Code END\n", + " AND COALESCE(b.ATC4_COD, '') = CASE WHEN tblmkt.ATC4_Code IS NULL THEN COALESCE(b.ATC4_COD, '') ELSE tblmkt.ATC4_Code END\n", + "\n", + " -- NFC 三级分类匹配\n", + " AND COALESCE(b.APP1_COD, '') = CASE WHEN tblmkt.NFC1_Code IS NULL THEN COALESCE(b.APP1_COD, '') ELSE tblmkt.NFC1_Code END\n", + " AND COALESCE(b.APP2_COD, '') = CASE WHEN tblmkt.NFC2_Code IS NULL THEN COALESCE(b.APP2_COD, '') ELSE tblmkt.NFC2_Code END\n", + " AND COALESCE(b.app3_cod, '') = CASE WHEN tblmkt.NFC3_Code IS NULL THEN COALESCE(b.app3_cod, '') ELSE tblmkt.NFC3_Code END\n", + "\n", + " -- 规格/含量匹配\n", + " AND COALESCE(b.stgh_des, '') = CASE WHEN tblmkt.Strength IS NULL THEN COALESCE(b.stgh_des, '') ELSE tblmkt.Strength END\n", + "\n", + " -- 集团 & 生产企业匹配\n", + " AND COALESCE(b.corp_cod, '') = CASE WHEN tblmkt.Corporation_Code IS NULL THEN COALESCE(b.corp_cod, '') ELSE tblmkt.Corporation_Code END\n", + " AND COALESCE(b.manu_cod, '') = CASE WHEN tblmkt.Manufacturer_Code IS NULL THEN COALESCE(b.manu_cod, '') ELSE tblmkt.Manufacturer_Code END\n", + "\n", + " -- IQVIA 产品编码匹配(补足 9 位后比对)\n", + " AND RIGHT(CONCAT('000000000', COALESCE(b.iqvia_prod_code, 0)), 9)\n", + " = CASE WHEN tblmkt.Product_Code IS NULL\n", + " THEN RIGHT(CONCAT('000000000', COALESCE(b.iqvia_prod_code, 0)), 9)\n", + " ELSE RIGHT(CONCAT('000000000', tblmkt.Product_Code), 9)\n", + " END\n", + "\n", + " -- IQVIA 包装编码匹配(纯数字补足 12 位,非数字直接比对)\n", + " AND IF(\n", + " COALESCE(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', COALESCE(b.iqvia_pack_code, 0)), 12),\n", + " COALESCE(b.iqvia_pack_code, 0)\n", + " )\n", + " = CASE WHEN tblmkt.Pack_Code IS NULL\n", + " THEN IF(\n", + " COALESCE(b.iqvia_pack_code, 0) REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', COALESCE(b.iqvia_pack_code, 0)), 12),\n", + " COALESCE(b.iqvia_pack_code, 0)\n", + " )\n", + " ELSE IF(\n", + " tblmkt.Pack_Code REGEXP '^[0-9]',\n", + " RIGHT(CONCAT('000000000000', tblmkt.Pack_Code), 12),\n", + " tblmkt.Pack_Code\n", + " )\n", + " END\n", + "\n", + " -- 化合物编码匹配(补足 6 位后比对)\n", + " AND RIGHT(CONCAT('000000', COALESCE(b.CMPS_COD, 0)), 6)\n", + " = CASE WHEN tblmkt.Molecule_Code IS NULL\n", + " THEN RIGHT(CONCAT('000000', COALESCE(b.CMPS_COD, 0)), 6)\n", + " ELSE RIGHT(CONCAT('000000', tblmkt.Molecule_Code), 6)\n", + " END\n", + "\n", + "-- ────────────── 最终过滤:只保留匹配到市场规则的包装 ──────────────\n", + "WHERE tblmkt.market IS NOT NULL;\n", "\n", "MERGE INTO tmp.tmp_ec_temp_market AS t1\n", "USING tmp.tmp_ec_temp_market_del AS t2\n", @@ -295,8 +476,9 @@ "rowLimit": 10000 }, "inputWidgets": {}, - "nuid": "f0391d63-baaa-4748-9285-b15ab11d1b2b", + "nuid": "85453796-9385-4a5a-bf20-6bfd459580ae", "showTitle": false, + "submitTime": 1777537485011, "tableResultSettingsMap": {}, "title": "" } @@ -322,22 +504,22 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "4c6fff68-ab10-4620-bcb4-296d51e992e6", + "nuid": "015ef590-887b-4dfa-bfa1-ebd05effc2cf", "showTitle": false, + "submitTime": 1777537485015, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-----------事实表数据处理:获取counting_unit字段,给特殊字段补0,并对数据去重(QTD粒度)\n", - "insert overwrite table tmp.tmp_ec_source\n", - "select\n", - " concat(year(a.time), 'Q', quarter(a.time)) as ytd,\n", + "-----------事实表数据处理:获取counting_unit字段,给特殊字段补0,并对数据去重\n", + "insert overwrite table tmp.tmp_ec_source \n", + "select \n", + " a.time as yyyymm,\n", " right(concat('0000000',a.product_id),7) as pack_id,\n", - " if( b.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',b.iqvia_pack_code),12),b.iqvia_pack_code) as iqvia_pack_code,\n", + " 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)\n", " a.platform,\n", " a.store_name,\n", " a.store_type,\n", @@ -350,8 +532,7 @@ " from dwd.dwd_gnd_ext_retail_pack_property) b\n", "on right(concat('0000000',a.product_id),7) = right(concat('0000000',b.product_id),7)\n", "group by\n", - " concat(year(a.time), 'Q', quarter(a.time)),\n", - " right(concat('0000000',a.product_id),7)\n", + " a.`time`,right(concat('0000000',a.product_id),7) \n", " ,if( b.iqvia_pack_code REGEXP '^[0-9]',right(concat('000000000000',b.iqvia_pack_code),12),b.iqvia_pack_code)\n", " ,a.platform,a.store_name\n", " ,a.store_type" @@ -366,25 +547,71 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "1c5f831b-111b-443a-9d87-bed1a7fca68f", + "nuid": "339d06b1-1c67-4249-a105-aaafb352bb38", "showTitle": false, + "submitTime": 1777537485020, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table dws.dws_zk_ec_sales\n", + "-- [2026-04-30] NIAD 保持月度粒度,非 NIAD 聚合为季度(季末月 yyyymm 格式,如 Q1→202603)\n", + "-- 聚合点从 tmp_ec_source 移到 dws 层,tmp_ec_source 保持月度原始粒度\n", + "-- 非 NIAD 季度聚合后 store_name 不再有意义,置为空字符串\n", + "insert overwrite table dws.dws_zk_ec_sales \n", "select\n", - " t1.ytd,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type,\n", + " t1.yyyymm,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type,\n", " sum(sales_value) as sales_value,\n", " sum(sales_unit) as sales_unit,\n", " sum(counting_unit) as counting_unit\n", - "from tmp.tmp_ec_source t1\n", + "from (\n", + " -- NIAD: 保持月度粒度,保留 store_name\n", + " select\n", + " a.yyyymm,a.pack_id,a.iqvia_pack_code,a.platform,a.store_name,a.store_type,\n", + " a.sales_value,a.sales_unit,a.counting_unit\n", + " from tmp.tmp_ec_source a\n", + " inner join (\n", + " select distinct iqvia_pack_code\n", + " from tmp.tmp_ec_temp_market\n", + " where upper(market) = 'NIAD'\n", + " ) m on a.iqvia_pack_code = m.iqvia_pack_code\n", + "\n", + " union all\n", + "\n", + " -- 非 NIAD: 聚合为季度(季末月),store_name 置空\n", + " select\n", + " cast(\n", + " case when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 3 then concat(substr(cast(a.yyyymm as string), 1, 4), '03')\n", + " when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 6 then concat(substr(cast(a.yyyymm as string), 1, 4), '06')\n", + " when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 9 then concat(substr(cast(a.yyyymm as string), 1, 4), '09')\n", + " else concat(substr(cast(a.yyyymm as string), 1, 4), '12')\n", + " end as int\n", + " ) as yyyymm,\n", + " first_value(a.pack_id) as pack_id,\n", + " a.iqvia_pack_code,a.platform,\n", + " '' as store_name,\n", + " a.store_type,\n", + " sum(a.sales_value) as sales_value,\n", + " sum(a.sales_unit) as sales_unit,\n", + " sum(a.counting_unit) as counting_unit\n", + " from tmp.tmp_ec_source a\n", + " inner join (\n", + " select distinct iqvia_pack_code\n", + " from tmp.tmp_ec_temp_market\n", + " where upper(market) <> 'NIAD'\n", + " ) m on a.iqvia_pack_code = m.iqvia_pack_code\n", + " group by\n", + " case when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 3 then concat(substr(cast(a.yyyymm as string), 1, 4), '03')\n", + " when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 6 then concat(substr(cast(a.yyyymm as string), 1, 4), '06')\n", + " when cast(substr(cast(a.yyyymm as string), 5, 2) as int) <= 9 then concat(substr(cast(a.yyyymm as string), 1, 4), '09')\n", + " else concat(substr(cast(a.yyyymm as string), 1, 4), '12')\n", + " end,\n", + " a.iqvia_pack_code,a.platform,a.store_type\n", + ") t1\n", "group by\n", - " t1.ytd,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type" + " t1.yyyymm,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type" ] }, { @@ -398,16 +625,21 @@ }, "collapsed": true, "inputWidgets": {}, - "nuid": "4468f90b-48aa-4e4e-9b13-401a34f35956", + "nuid": "c686ec31-8c18-4a4a-96ca-ce5a29f2f676", "showTitle": false, + "submitTime": 1777537485025, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- -------------------------处理top_ta_corp数据\n", - "-- insert overwrite table dws.dws_zk_ec_by_ta_top_corp\n", + "-- [2026-04-30] 已注释:倒减前置准备 - TA大数表构建\n", + "-- 此 cell 构建 dws.dws_zk_ec_by_ta_top_corp,仅被 Cell 8-10 倒减逻辑使用\n", + "-- 倒减已注释,暂不需要此表\n", + "-- 如需恢复倒减,取消此 cell 注释即可\n", + "\n", + "-- insert overwrite table dws.dws_zk_ec_by_ta_top_corp \n", "-- select\n", "-- t1.yyyymm,\n", "-- t1.ta,\n", @@ -417,7 +649,7 @@ "-- t1.platform,\n", "-- t1.store_type,\n", "-- sum(t1.sales_value) sales_value\n", - "-- from (\n", + "-- from ( \n", "-- select\n", "-- a.ytd yyyymm,\n", "-- a.ta,\n", @@ -428,8 +660,8 @@ "-- a.store_type,\n", "-- replace(a.sales_value,',','') as sales_value\n", "-- from dwd.dwd_gnd_ec_ta_overview a\n", - "-- left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b\n", - "-- on b.ZK_Corp_C = a.corp_des\n", + "-- left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b \n", + "-- on b.ZK_Corp_C = a.corp_des \n", "-- ) t1\n", "-- group by 1,2,3,4,5,6,7" ] @@ -445,16 +677,19 @@ }, "collapsed": true, "inputWidgets": {}, - "nuid": "65fd3cdb-0424-499e-9621-5de159c31455", + "nuid": "7814d185-5883-4f00-b350-0d5cab1da7f5", "showTitle": false, + "submitTime": 1777537485031, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- -----加工倒减的by_corp_by_ta_by_total表数据,获取去年数据\n", - "-- insert overwrite table dws.dws_zk_ec_by_ta_top_corp\n", + "-- [2026-04-30] 已注释:倒减前置准备 - TA大数表构建(与 Cell 5 重复,历史遗留代码)\n", + "-- 如需恢复倒减,取消此 cell 注释即可\n", + "\n", + "-- insert overwrite table dws.dws_zk_ec_by_ta_top_corp \n", "-- select\n", "-- t1.yyyymm,\n", "-- t1.ta,\n", @@ -464,7 +699,7 @@ "-- t1.platform,\n", "-- t1.store_type,\n", "-- sum(t1.sales_value) sales_value\n", - "-- from(\n", + "-- from( \n", "-- select\n", "-- a.ytd yyyymm,\n", "-- a.ta,\n", @@ -475,7 +710,7 @@ "-- a.store_type,\n", "-- replace(a.sales_value,',','') as sales_value\n", "-- from dwd.dwd_gnd_ec_ta_overview a\n", - "-- left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b\n", + "-- left join (select distinct ZK_Corp_C ,CORP_COD from dwd.dwd_inc_gnd_retail_b2c_label_total) b \n", "-- on b.ZK_Corp_C = a.corp_des\n", "-- )t1\n", "-- group by 1,2,3,4,5,6,7" @@ -490,36 +725,36 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "b55d8e37-aca4-4a45-838d-7304be5caccf", + "nuid": "b576e313-2815-4991-a92e-82fe68cbaed9", "showTitle": false, + "submitTime": 1777537485038, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- ----倒减需要用到公司信息以及ta信息,加工配置表挂靠Corp、ta\n", - "-- insert overwrite table tmp.tmp_zk_ec_pack_property_corp\n", - "-- select distinct a.product_id,a.iqvia_pack_code,a.Market,ta.ta\n", - "-- ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod\n", - "-- ,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des\n", - "-- ,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c\n", - "-- ,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod\n", - "-- ,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des\n", - "-- ,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c\n", - "-- 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\n", - "-- left join dwd.dwd_gnd_ext_retail_dim_ta ta\n", - "-- on a.Market = ta.market\n", - "-- 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\n", - "-- on right(concat('000000000',A.prod_cod ),9)= b.prod_cod\n", - "-- 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\n", - "-- on a.iqvia_pack_code = c.pack_cod\n", - "-- left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d\n", - "-- on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod\n", - "-- Left join (select distinct manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e\n", - "-- On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod" + "----倒减需要用到公司信息以及ta信息,加工配置表挂靠Corp、ta\n", + "insert overwrite table tmp.tmp_zk_ec_pack_property_corp \n", + "select distinct a.product_id,a.iqvia_pack_code,a.Market,ta.ta\n", + " ,COALESCE(c.corp_cod,b.corp_cod,a.corp_cod) corp_cod\n", + " ,COALESCE(c.corp_des,b.corp_des,a.corp_des) corp_des\n", + " ,COALESCE(d.corp_des_c,a.corp_des_c ) corp_des_c\n", + " ,COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod \n", + " ,COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des \n", + " ,COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c\n", + "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 \n", + "left join dwd.dwd_gnd_ext_retail_dim_ta ta\n", + "on a.Market = ta.market\n", + "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 \n", + "on right(concat('000000000',A.prod_cod ),9)= b.prod_cod\n", + "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 \n", + "on a.iqvia_pack_code = c.pack_cod\n", + "left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d \n", + "on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod \n", + "Left join (select distinct manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e \n", + "On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod " ] }, { @@ -533,19 +768,20 @@ }, "collapsed": true, "inputWidgets": {}, - "nuid": "aef61309-7acf-4a2f-a7af-669027a496fd", + "nuid": "5fdbf78f-228d-4e26-94b8-94565feb2ddf", "showTitle": false, + "submitTime": 1777537485043, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- -------------------------------------------------------ec倒减-------------------------------------------------------\n", - "-- --注意事项:\n", - "-- -- 只做了CV、CVRM、TA大数的倒减,其余TA没有做\n", - "-- --cv倒减:关联加工好的配置表,获取ta信息进行倒减\n", - "-- insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp\n", + "-- [2026-04-30] 已注释:CV 倒减逻辑\n", + "-- 原逻辑:从 dws_zk_ec_sales 取 CV 数据,分离 AZ/非 AZ,用大数倒减出 CV_OTHERS 和 CV_AZ_OTHERS\n", + "-- 如需恢复倒减,取消此 cell 注释即可\n", + "\n", + "-- insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp \n", "-- with cv_data as (\n", "-- select\n", "-- t1.yyyymm,\n", @@ -564,7 +800,6 @@ "-- where t2.ta = 'CV'\n", "-- group by 1,2,3,4,5,6,7,8,9\n", "-- ),cv_corp_data as (\n", - "-- -----------------------cv下的az 数据\n", "-- select\n", "-- A.yyyymm,\n", "-- A.pack_id,\n", @@ -577,12 +812,11 @@ "-- A.sales_unit,\n", "-- A.counting_unit,\n", "-- A.ta\n", - "-- from cv_data A\n", - "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B\n", + "-- from cv_data A \n", + "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B \n", "-- on A.pack_id = B.product_id\n", "-- where B.corp_cod = 'A5Z'\n", - "-- union all\n", - "-- -----------------------cv下的az others数据\n", + "-- union all \n", "-- select\n", "-- cv_az.yyyymm,\n", "-- 'CV_AZ_OTHERS' as pack_id,\n", @@ -594,15 +828,15 @@ "-- cv_az_total.sales_value - cv_az.sales_value as sales_value,\n", "-- 0,0,\n", "-- 'CV_AZ_OTHERS' as ta\n", - "-- from (\n", + "-- from ( \n", "-- select\n", "-- A.yyyymm,\n", "-- B.corp_cod,\n", "-- A.platform,\n", "-- case when A.store_type = '平台店' or A.store_type = '品牌店' then '自营旗舰' else A.store_type end store_type,\n", "-- sum(A.sales_value) sales_value\n", - "-- from cv_data A\n", - "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B\n", + "-- from cv_data A \n", + "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B \n", "-- on A.pack_id = B.product_id\n", "-- where B.corp_cod = 'A5Z'\n", "-- group by 1,2,3,4\n", @@ -612,18 +846,17 @@ "-- yyyymm,\n", "-- CORP_COD,\n", "-- platform,\n", - "-- case when store_type = '三方' then '第三方' else store_type end store_type,\n", + "-- case when store_type = '三方' then '第三方' else store_type end store_type, \n", "-- sum(sales_value) sales_value\n", "-- from dws.dws_zk_ec_by_ta_top_corp\n", "-- where ta = 'CV' and CORP_COD = 'A5Z'\n", "-- group by 1,2,3,4\n", "-- )cv_az_total\n", - "-- on cv_az.yyyymm = cv_az_total.yyyymm\n", - "-- and cv_az.corp_cod = cv_az_total.CORP_COD\n", + "-- on cv_az.yyyymm = cv_az_total.yyyymm \n", + "-- and cv_az.corp_cod = cv_az_total.CORP_COD \n", "-- and cv_az.platform = cv_az_total.platform\n", "-- and cv_az.store_type = cv_az_total.store_type\n", - "-- union all\n", - "-- ---------------cv下的非az数据\n", + "-- union all \n", "-- select\n", "-- A.yyyymm,\n", "-- A.pack_id,\n", @@ -636,14 +869,13 @@ "-- A.sales_unit,\n", "-- A.counting_unit,\n", "-- A.ta\n", - "-- from cv_data A\n", - "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B\n", + "-- from cv_data A \n", + "-- inner join(select distinct iqvia_pack_code,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) B \n", "-- on A.pack_id = B.product_id\n", "-- where nvl(corp_cod,'') <>'A5Z'\n", "-- )\n", - "-- -----------------------所有cv 数据\n", "-- ,all_cv_data as (\n", - "-- select\n", + "-- select \n", "-- yyyymm,\n", "-- pack_id,\n", "-- iqvia_pack_code,\n", @@ -657,8 +889,7 @@ "-- 'CV' flag,\n", "-- ta\n", "-- from cv_corp_data\n", - "-- union all\n", - "-- -----------------------倒减出cv_others数据\n", + "-- union all \n", "-- select\n", "-- t1.yyyymm,\n", "-- 'CV_OTHERS' as pack_id,\n", @@ -671,18 +902,16 @@ "-- 0,0,\n", "-- 'CV' as flag,\n", "-- 'CV_OTHERS' as ta\n", - "-- from(\n", - "-- -----------------------所有的cv数据\n", + "-- from( \n", "-- select\n", "-- yyyymm,\n", "-- platform,\n", "-- case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type,\n", "-- sum(sales_value) sales_value\n", - "-- from cv_corp_data\n", + "-- from cv_corp_data \n", "-- group by 1,2,3\n", "-- )t1\n", "-- left join(\n", - "-- -----------------------cv大数\n", "-- select\n", "-- yyyymm,\n", "-- platform,\n", @@ -694,7 +923,7 @@ "-- )t2\n", "-- on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type\n", "-- ),non_cv_all_data as (\n", - "-- select\n", + "-- select \n", "-- t1.yyyymm,\n", "-- t1.pack_id,\n", "-- t1.iqvia_pack_code,\n", @@ -714,9 +943,8 @@ "-- group by 1,2,3,4,5,6,7,8,9,10,11\n", "-- )\n", "-- select * from all_cv_data\n", - "-- union\n", - "-- select * from non_cv_all_data\n", - "-- -- select * from non_cv_all_data order by sales_value desc" + "-- union \n", + "-- select * from non_cv_all_data" ] }, { @@ -730,18 +958,22 @@ }, "collapsed": true, "inputWidgets": {}, - "nuid": "417e5776-6bb5-495d-bc80-1b7213db7289", + "nuid": "b1f69228-3a47-4a76-ab21-a10e52305a56", "showTitle": false, + "submitTime": 1777537485048, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- --cvrm倒减:关联加工好的配置表,获取ta信息进行倒减\n", - "-- insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp2\n", + "-- [2026-04-30] 已注释:CVRM 倒减逻辑\n", + "-- 原逻辑:在 CV 倒减基础上,用大数倒减出 CVRM_OTHERS 和 CVRM_AZ_OTHERS\n", + "-- 如需恢复倒减,取消此 cell 注释即可\n", + "\n", + "-- insert overwrite table tmp.tmp_dm_zk_ec_sales_cv_tmp2 \n", "-- with all_data as (\n", - "-- select\n", + "-- select \n", "-- yyyymm,\n", "-- pack_id,\n", "-- iqvia_pack_code,\n", @@ -754,7 +986,7 @@ "-- counting_unit,\n", "-- flag\n", "-- from tmp.tmp_dm_zk_ec_sales_cv_tmp\n", - "-- union all\n", + "-- union all \n", "-- select\n", "-- t1.yyyymm,\n", "-- 'CVRM_AZ_OTHERS' as pack_id,\n", @@ -766,15 +998,15 @@ "-- t2.sales_value - t1.sales_value as sales_value,\n", "-- 0,0,\n", "-- 'CVRM' as flag\n", - "-- from(\n", - "-- select\n", + "-- from( \n", + "-- select \n", "-- yyyymm,\n", "-- corp_cod,\n", "-- platform,\n", "-- case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type,\n", "-- sum(sales_value) sales_value\n", "-- from tmp.tmp_dm_zk_ec_sales_cv_tmp\n", - "-- where corp_cod = 'A5Z' and flag in ('CV','CVRM')\n", + "-- where corp_cod = 'A5Z' and flag in ('CV','CVRM') \n", "-- group by 1,2,3,4\n", "-- )t1\n", "-- left join (\n", @@ -803,7 +1035,7 @@ "-- counting_unit,\n", "-- flag\n", "-- from all_data\n", - "-- union all\n", + "-- union all \n", "-- select\n", "-- t1.yyyymm,\n", "-- 'CVRM_OTHERS' as pack_id,\n", @@ -815,13 +1047,13 @@ "-- t2.sales_value - t1.sales_value as sales_value,\n", "-- 0,0,\n", "-- 'CVRM' flag\n", - "-- from (\n", + "-- from ( \n", "-- select\n", "-- yyyymm,\n", "-- platform,\n", "-- case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type,\n", "-- sum(sales_value) sales_value\n", - "-- from all_data\n", + "-- from all_data \n", "-- where flag in ('CV','CVRM')\n", "-- group by 1,2,3\n", "-- )t1\n", @@ -847,87 +1079,160 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "46ab1bf4-aa35-4931-9675-8dfb49298339", + "nuid": "2c5737c9-b8fe-4b8a-a4b6-f39be69af55c", "showTitle": false, + "submitTime": 1777537485052, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "--ta倒减并写入事实表:根据加工好的倒减底表中ta字段信息获取ta总数,进行倒减\n", - "-- 注:倒减逻辑已注释,此处改为直接聚合 dws.dws_zk_ec_sales 数据(QTD粒度)\n", - "insert overwrite table tmp.tmp_dm_zk_ec_sales\n", - "select\n", - " ytd,\n", - " pack_id,\n", - " iqvia_pack_code,\n", - " platform,\n", - " store_type,\n", - " store_name,\n", - " corp_cod,\n", - " sales_value,\n", - " sales_unit,\n", - " counting_unit,\n", - " 'NORMAL' as flag\n", - "from (\n", - " select\n", - " ytd,\n", - " pack_id,\n", - " iqvia_pack_code,\n", - " platform,\n", - " store_type,\n", - " store_name,\n", - " corp_cod,\n", - " sum(sales_value) as sales_value,\n", - " sum(sales_unit) as sales_unit,\n", - " sum(counting_unit) as counting_unit\n", - " from dws.dws_zk_ec_sales\n", - " group by ytd, pack_id, iqvia_pack_code, platform, store_type, store_name, corp_cod\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "cellMetadata": { - "byteLimit": 2048000, - "rowLimit": 10000 - }, - "collapsed": true, - "inputWidgets": {}, - "nuid": "f4b8428b-d5b5-4214-9578-fd01b4c7d5eb", - "showTitle": false, - "tableResultSettingsMap": {}, - "title": "" - } - }, - "outputs": [], - "source": [ - "-- 注:ly 同比数据依赖倒减结果,已移除(QTD粒度)\n", - "insert overwrite table dm.dm_zk_ec_sales\n", - "select\n", - " ytd,\n", - " max(pack_id) as pack_id,\n", - " iqvia_pack_code,\n", - " corp_cod,\n", + "-- [2026-04-30] 已注释:TA 倒减逻辑(最终倒减步骤)\n", + "-- 原逻辑:用 RX Total 大数倒减出 OTHERS_AZ_TA 和 OTHERS_TA,并写入 tmp_dm_zk_ec_sales\n", + "-- 倒减已注释,改为直接从 dws_zk_ec_sales 透传数据\n", + "-- 如需恢复倒减,将下面的透传逻辑替换为原始倒减逻辑\n", + "\n", + "insert overwrite table tmp.tmp_dm_zk_ec_sales \n", + "select distinct\n", + " t1.yyyymm,\n", + " t1.pack_id,\n", + " t1.iqvia_pack_code,\n", + " COALESCE(t2.corp_cod, '') as corp_cod,\n", " 'ROC' as audit_cod,\n", - " platform,\n", - " case when store_type = '第三方' then 'POP' when store_type in ('平台店','品牌店','自营旗舰') then 'SO' end store_type,\n", - " store_name,\n", - " max(PACK_FLAG) as PACK_FLAG,\n", - " max(PROD_FLAG) as PROD_FLAG,\n", - " max(flag) as flag,\n", - " 'EC(Quarterly)' DATA_SOURCE,\n", - " sum(sales_value) as sales_value,\n", - " sum(sales_unit) as sales_unit,\n", - " sum(counting_unit) as counting_unit\n", - "from tmp.tmp_dm_zk_ec_sales\n", - "group by ytd, iqvia_pack_code, corp_cod, audit_cod, platform, store_type, store_name, DATA_SOURCE" + " t1.platform,\n", + " case when t1.store_type = '第三方' then 'POP' when t1.store_type in ('平台店','品牌店','自营旗舰') then 'SO' end as store_type,\n", + " '' as store_name,\n", + " 1 as PACK_FLAG,\n", + " 1 as PROD_FLAG,\n", + " '' as flag,\n", + " 'EC(Monthly)' DATA_SOURCE,\n", + " sum(t1.sales_value) sales_value,\n", + " sum(t1.sales_unit) sales_unit,\n", + " sum(t1.counting_unit) counting_unit\n", + "from dws.dws_zk_ec_sales t1\n", + "left join (\n", + " select distinct iqvia_pack_code, corp_cod\n", + " from tmp.tmp_zk_ec_pack_property_corp\n", + ") t2 on t1.iqvia_pack_code = t2.iqvia_pack_code\n", + "group by t1.yyyymm, t1.pack_id, t1.iqvia_pack_code, t2.corp_cod, t1.platform, t1.store_type\n", + "\n", + "-- ========== 原始倒减逻辑(已注释) ==========\n", + "-- insert overwrite table tmp.tmp_dm_zk_ec_sales \n", + "-- with all_data as (\n", + "-- select distinct\n", + "-- yyyymm,\n", + "-- pack_id,\n", + "-- iqvia_pack_code,\n", + "-- platform,\n", + "-- store_type,\n", + "-- store_name,\n", + "-- corp_cod,\n", + "-- sales_value,\n", + "-- sales_unit,\n", + "-- counting_unit,\n", + "-- flag\n", + "-- from tmp.tmp_dm_zk_ec_sales_cv_tmp2\n", + "-- union all\n", + "-- select\n", + "-- t1.yyyymm,\n", + "-- 'OTHERS_AZ_TA' as pack_id,\n", + "-- 'OTHERS_AZ_TA' as iqvia_pack_code,\n", + "-- t1.platform,\n", + "-- t1.store_type,\n", + "-- case when t1.store_type = '自营旗舰' then 'OTHERS_AZ_TA_SO' when t1.store_type = '第三方' then 'OTHERS_AZ_TA_POP' end store_name,\n", + "-- t1.corp_cod,\n", + "-- t2.sales_value - t1.sales_value as sales_value,\n", + "-- 0,0,\n", + "-- 'OTHERS_AZ_TA' as flag\n", + "-- from( \n", + "-- select\n", + "-- yyyymm,\n", + "-- corp_cod,\n", + "-- platform,\n", + "-- case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type,\n", + "-- sum(sales_value) sales_value\n", + "-- from tmp.tmp_dm_zk_ec_sales_cv_tmp2\n", + "-- where corp_cod = 'A5Z' \n", + "-- group by 1,2,3,4\n", + "-- )t1\n", + "-- left join (\n", + "-- select\n", + "-- yyyymm,\n", + "-- platform,\n", + "-- store_type,\n", + "-- sum(sales_value) sales_value\n", + "-- from dws.dws_zk_ec_by_ta_top_corp\n", + "-- where CORP_COD = 'A5Z' and ta = 'RX Total'\n", + "-- group by 1,2,3\n", + "-- )t2\n", + "-- on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type\n", + "-- ),result as (\n", + "-- select\n", + "-- yyyymm,\n", + "-- pack_id,\n", + "-- iqvia_pack_code,\n", + "-- platform,\n", + "-- store_type,\n", + "-- store_name,\n", + "-- corp_cod,\n", + "-- sales_value,\n", + "-- sales_unit,\n", + "-- counting_unit,\n", + "-- flag\n", + "-- from all_data\n", + "-- union all\n", + "-- select\n", + "-- t1.yyyymm,\n", + "-- 'OTHERS_TA' as pack_id,\n", + "-- 'OTHERS_TA' as iqvia_pack_code,\n", + "-- t1.platform,\n", + "-- t1.store_type,\n", + "-- case when t1.store_type = '自营旗舰' then 'OTHERS_TA_SO' when t1.store_type = '第三方' then 'OTHERS_TA_POP' end store_name,\n", + "-- 'OTHERS_TA' as corp_cod,\n", + "-- t2.sales_value - t1.sales_value as sales_value,\n", + "-- 0,0,\n", + "-- 'OTHERS_TA' as flag\n", + "-- from( \n", + "-- select \n", + "-- yyyymm,\n", + "-- platform,\n", + "-- case when store_type = '平台店' or store_type = '品牌店' then '自营旗舰' else store_type end store_type,\n", + "-- sum(sales_value) sales_value\n", + "-- from all_data\n", + "-- group by 1,2,3\n", + "-- )t1\n", + "-- left join(\n", + "-- select\n", + "-- yyyymm,\n", + "-- platform,\n", + "-- store_type,\n", + "-- sum(sales_value) sales_value\n", + "-- from dws.dws_zk_ec_by_ta_top_corp\n", + "-- where lower(rank) = 'total' and ta = 'RX Total'\n", + "-- group by 1,2,3\n", + "-- )t2\n", + "-- on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type\n", + "-- )\n", + "-- select distinct\n", + "-- yyyymm,\n", + "-- pack_id,\n", + "-- iqvia_pack_code,\n", + "-- corp_cod,\n", + "-- 'ROC' as audit_cod,\n", + "-- platform,\n", + "-- case when store_type = '第三方' then 'POP' when store_type in ('平台店','品牌店','自营旗舰') then 'SO' end store_type,\n", + "-- store_name,\n", + "-- case when iqvia_pack_code like '%OTHERS%' then 0 else 1 end PACK_FLAG,\n", + "-- case when iqvia_pack_code like '%OTHERS%' then 0 else 1 end PROD_FLAG,\n", + "-- flag,\n", + "-- 'EC(Monthly)' DATA_SOURCE,\n", + "-- sum(sales_value) sales_value,\n", + "-- sum(sales_unit) sales_unit,\n", + "-- sum(counting_unit) counting_unit\n", + "-- from result \n", + "-- group by 1,2,3,4,5,6,7,8,9,10,11,12" ] }, { @@ -940,17 +1245,112 @@ "rowLimit": 10000 }, "inputWidgets": {}, - "nuid": "c9fb5215-b43a-4326-adfe-f8e56e547426", + "nuid": "9b43d6a9-6fd4-4568-bc48-7d7cb7ffe266", "showTitle": false, + "submitTime": 1777537485057, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table dws.dws_zk_ec_pack_property\n", + "insert overwrite table dm.dm_zk_ec_sales \n", + "select \n", + "yyyymm,\n", + "max(pack_id) as pack_id,\n", + "iqvia_pack_code,\n", + "corp_cod,\n", + "audit_cod,\n", + "platform,\n", + "store_type,\n", + "store_name,\n", + "max(PACK_FLAG) as PACK_FLAG,\n", + "max(PROD_FLAG) as PROD_FLAG,\n", + "max(flag) as flag,\n", + "DATA_SOURCE,\n", + "sum(sales_value) as sales_value,\n", + "sum(sales_value_ly) as sales_value_ly,\n", + "sum(sales_unit) as sales_unit,\n", + "sum(sales_unit_ly) as sales_unit_ly,\n", + "sum(counting_unit) as counting_unit,\n", + "sum(counting_unit_ly) as counting_unit_ly\n", + "from\n", + "(\n", + "select \n", + "yyyymm,\n", + "pack_id,\n", + "iqvia_pack_code,\n", + "corp_cod,\n", + "audit_cod,\n", + "platform,\n", + "store_type,\n", + "store_name,\n", + "PACK_FLAG,\n", + "PROD_FLAG,\n", + "flag,\n", + "DATA_SOURCE,\n", + "sales_value,\n", + "0 as sales_value_ly,\n", + "sales_unit,\n", + "0 as sales_unit_ly,\n", + "counting_unit,\n", + "0 as counting_unit_ly\n", + "from tmp.tmp_dm_zk_ec_sales\n", + "union all\n", "select\n", - " *\n", + "cast(yyyymm + 100 as int) as yyyymm,\n", + "null as pack_id,\n", + "iqvia_pack_code,\n", + "corp_cod,\n", + "audit_cod,\n", + "platform,\n", + "store_type,\n", + "store_name,\n", + "case when upper(iqvia_pack_code) like '%OTHERS%' then 0 else 1 end as PACK_FLAG,\n", + "case when upper(iqvia_pack_code) like '%OTHERS%' then 0 else 1 end as PROD_FLAG,\n", + "'' as flag,\n", + "DATA_SOURCE,\n", + "0 as sales_value,\n", + "sales_value as sales_value_ly,\n", + "0 as sales_unit,\n", + "sales_unit as sales_unit_ly,\n", + "0 as counting_unit,\n", + "counting_unit as counting_unit_ly\n", + "from tmp.tmp_dm_zk_ec_sales\n", + "where cast(yyyymm + 100 as int) <= (select max(yyyymm) from tmp.tmp_dm_zk_ec_sales)\n", + ") t\n", + "group by yyyymm,\n", + "iqvia_pack_code,\n", + "corp_cod,\n", + "audit_cod,\n", + "platform,\n", + "store_type,\n", + "store_name,\n", + "DATA_SOURCE" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "ebb41c4f-a6d7-4dbd-bdb1-304f0c5abae4", + "showTitle": false, + "submitTime": 1777537485062, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "insert overwrite table dws.dws_zk_ec_pack_property \n", + "select \n", + " * \n", " ,from_utc_timestamp(current_timestamp(),'UTC+8' ) etl_insert_dt\n", " ,from_utc_timestamp(current_timestamp(),'UTC+8' ) etl_update_dt\n", "from tmp.tmp_ec_temp_market\n", @@ -1031,7 +1431,7 @@ ",'' counting_unit\n", ",'' dosage_unit\n", ",'' NRDL_ENTRY_DATE\n", - ",'NON MARKET' Market\n", + ",'ALL Market' Market\n", ",'' bu\n", ",1 extend_market_ratio\n", ",case when iqvia_pack_code like '%AZ%' then 'Y' else 'N' end is_az\n", @@ -1049,18 +1449,18 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "d6f3e56c-f8a8-42a0-ad80-2220d0631740", + "nuid": "25bd255c-597c-4bb0-9c7a-0577e28eefee", "showTitle": false, + "submitTime": 1777537485066, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table tmp.tmp_dm_zk_ec_pack_property\n", - "select\n", + "insert overwrite table tmp.tmp_dm_zk_ec_pack_property \n", + "select \n", "a.iqvia_lineno\n", ",a.iqvia_pack_code\n", ",a.prod_cod\n", @@ -1118,8 +1518,8 @@ ",a.eth_otc_desc\n", ",a.gene_orig_desc\n", ",a.gqce_desc\n", - ",COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod\n", - ",COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des\n", + ",COALESCE(c.manu_cod,b.manu_cod,a.manu_cod) manu_cod \n", + ",COALESCE(c.manu_des,b.manu_des,a.manu_des) manu_des \n", ",COALESCE(e.manu_des_c,a.manu_des_c) manu_des_c\n", ",a.mnfl_cod\n", ",a.mnfl_des\n", @@ -1140,15 +1540,15 @@ ",a.bu\n", ",a.extend_market_ratio\n", ",a.is_az\n", - "from dws.dws_zk_ec_pack_property a\n", - "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\n", + "from dws.dws_zk_ec_pack_property a \n", + "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 \n", "on right(concat('000000000',A.prod_cod ),9)= b.prod_cod\n", - "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\n", + "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 \n", "on a.iqvia_pack_code = c.pack_cod\n", - "left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d\n", - "on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod\n", - "Left join (select distinct manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e\n", - "On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod" + "left join (select distinct corp_cod,corp_des_c from dwd.dwd_gnd_ext_retail_pack_property) d \n", + "on coalesce(C.corp_cod,B.corp_cod ) = d.corp_cod \n", + "Left join (select distinct manu_cod,manu_des,manu_des_c from dwd.dwd_gnd_ext_retail_pack_property) e \n", + "On coalesce(C.manu_cod,B.manu_cod ) = e.manu_cod " ] }, { @@ -1160,10 +1560,10 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "46897086-86d3-475c-aa97-eb99b844f340", + "nuid": "d13a4ab2-9a37-4ac4-a886-3cf57cc9d41a", "showTitle": false, + "submitTime": 1777537485071, "tableResultSettingsMap": {}, "title": "" } @@ -1171,23 +1571,23 @@ "outputs": [], "source": [ "------将事实表倒减之后的维度信息补充到维度表里\n", - "insert overwrite table dm.dm_zk_ec_pack_property\n", - "select\n", + "insert overwrite table dm.dm_zk_ec_pack_property \n", + "select \n", " CASE when a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market'\n", - " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market'\n", + " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market' \n", " WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market'\n", - " ELSE a.market\n", - " END ||'_'||a.iqvia_pack_code MARKET_PACK_KEY\n", + " ELSE a.market \n", + " END ||'_'||a.iqvia_pack_code MARKET_PACK_KEY \n", ",a.iqvia_lineno\n", ",a.iqvia_pack_code\n", ",a.prod_cod\n", ",a.iqvia_notes\n", ",a.new_pack_flag\n", ",a.is_exists_chpa\n", - ",'' Family_Code\n", - ",'' Family_Name\n", + ",'' Family_Code \n", + ",'' Family_Name \n", ",'' BrandType\n", - ",'' AZ_MAIN\n", + ",'' AZ_MAIN \n", ",'' AZ_Related\n", ",t5.KEY_COMPETITOR\n", ",a.product_id\n", @@ -1234,13 +1634,13 @@ ",a.cmps_cod\n", ",a.cmps_des\n", ",a.cmps_des_c\n", - ",CASE WHEN a.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' else a.CORP_COD END\n", - "\t\t\t\t\t\t\t\tcorp_cod\n", - ",CASE\n", - "\tWHEN a.iqvia_pack_code LIKE '%AZ%' THEN 'ASTRAZENECA'\n", + ",CASE WHEN a.iqvia_pack_code LIKE '%AZ%' THEN 'A5Z' else a.CORP_COD END \n", + "\t\t\t\t\t\t\t\tcorp_cod \n", + ",CASE \n", + "\tWHEN a.iqvia_pack_code LIKE '%AZ%' THEN 'ASTRAZENECA' \n", "\tWHEN a.corp_des like '%GROUP%' THEN replace(a.corp_des,' GROUP','')\n", - "\telse a.CORP_DES END corp_des\n", - ",CASE WHEN a.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' else a.CORP_DES_C END\n", + "\telse a.CORP_DES END corp_des \n", + ",CASE WHEN a.iqvia_pack_code LIKE '%AZ%' THEN '阿斯利康制药集团' else a.CORP_DES_C END \n", " CORP_DES_C\n", ",a.edl_desc\n", ",a.eth_otc_desc\n", @@ -1265,22 +1665,22 @@ ",a.dosage_unit\n", ",a.NRDL_ENTRY_DATE\n", ",CASE WHEN a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM_OTHER Market'\n", - " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market'\n", + " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV_OTHER Market' \n", " WHEN A.iqvia_pack_code IN ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market'\n", - " ELSE a.market\n", + " ELSE a.market \n", " END market\n", ",a.bu\n", ",a.extend_market_ratio\n", ",a.is_az\n", ",nvl(b.class, 'Others') class\n", ",CASE WHEN a.iqvia_pack_code IN ('CVRM_AZ_OTHERS','CVRM_OTHERS') THEN 'CVRM'\n", - " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV'\n", - " ELSE c.ta\n", - " END TA\n", - "from tmp.tmp_dm_zk_ec_pack_property a\n", - "left join dwd.dwd_gnd_ext_retail_dim_ta c\n", - "on c.market = a.Market\n", - "left join dwd.dwd_gnd_tblclass b\n", + " WHEN a.iqvia_pack_code IN ('CV_AZ_OTHERS','CV_OTHERS') THEN 'CV' \n", + " ELSE c.ta \n", + " END TA \n", + "from tmp.tmp_dm_zk_ec_pack_property a \n", + "left join dwd.dwd_gnd_ext_retail_dim_ta c \n", + "on c.market = a.Market \n", + "left join dwd.dwd_gnd_tblclass b \n", "on a.Market = case when b.market is null then a.Market else b.market end\n", "and nvl(a.iqvia_pack_code,'') = case when b.pack_code is null then nvl(a.iqvia_pack_code,'') else b.pack_code end\n", "and nvl(a.prod_cod,'') = case when b.product_code is null then nvl(a.prod_cod,'') else b.product_code end\n", @@ -1292,7 +1692,7 @@ "and nvl(a.app3_cod,'') = case when b.nfc3_code is null then nvl(a.app3_cod,'') else b.nfc3_code end\n", "and nvl(a.atc1_cod,'') = case when b.atc1_code is null then nvl(a.atc1_cod,'') else b.atc1_code end\n", "and nvl(a.atc2_cod,'') = case when b.atc2_code is null then nvl(a.atc2_cod,'') else b.atc2_code end\n", - "and nvl(a.atc3_cod,'') = case when b.atc3_code is null then nvl(a.atc3_cod,'') else b.atc3_code end\n", + "and nvl(a.atc3_cod,'') = case when b.atc3_code is null then nvl(a.atc3_cod,'') else b.atc3_code end \n", "and nvl(a.atc4_cod,'') = case when b.atc4_code is null then nvl(a.atc4_cod,'') else b.atc4_code end\n", "and nvl(a.stgh_des,'') = case when b.strength is null then nvl(a.stgh_des,'') else b.strength end\n", "left join (select distinct MARKET,PACK_CODE as PACK_COD,KEY_COMPETITOR from DM.DM_TD_EXT_CHPA_MARKET_PACK_MAPPING) t5\n", @@ -1310,20 +1710,20 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "f13443fe-0759-4691-ab7a-c21d5c11773d", + "nuid": "8c861c10-773a-4449-a5dc-c0340e5ec97e", "showTitle": false, + "submitTime": 1777537485077, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table dm.dm_zk_ec_market_property\n", - "select distinct\n", + "insert overwrite table dm.dm_zk_ec_market_property \n", + "select distinct \n", "iqvia_pack_code,market,ta\n", - "from dm.dm_zk_ec_pack_property" + "from dm.dm_zk_ec_pack_property " ] }, { @@ -1335,17 +1735,17 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "265ea9d8-69de-49a4-976e-2038ca0f26fe", + "nuid": "e39d8c66-7469-46db-a2f4-79976266bec2", "showTitle": false, + "submitTime": 1777537485082, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "insert overwrite table dm.dm_zk_ec_market_ratio\n", + "insert overwrite table dm.dm_zk_ec_market_ratio \n", "select distinct\n", " concat(a.Market,'_',a.iqvia_pack_code) as market_pack_key,\n", " a.iqvia_pack_code as pack_cod,\n", @@ -1358,7 +1758,7 @@ " coalesce(\n", " case when c.ratio is null then a.extend_market_ratio*d.ratio\n", " else a.extend_market_ratio*c.ratio end,1) as countingunit_market_ratio\n", - "from tmp.tmp_ec_temp_market a\n", + "from tmp.tmp_ec_temp_market a \n", "left join (--pack\n", " select\n", "\t\tmarket,\n", @@ -1400,10 +1800,10 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "46161520-e1e0-40f7-b956-e727faf700d4", + "nuid": "bbe40a04-e787-4133-9901-5f331baf912a", "showTitle": false, + "submitTime": 1777537485086, "tableResultSettingsMap": {}, "title": "" } @@ -1429,178 +1829,242 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "58cce78c-5bc2-4471-acda-ad78a8e94b27", + "nuid": "f8d0befe-3de4-48a8-ac53-cdc19c897d0f", "showTitle": false, + "submitTime": 1777537485091, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "---------------------------------------将直取部分数据处理成KPI形式(QTD粒度)-----------------------------------------\n", - "insert overwrite table tmp.tmp_zk_ec_sales_kpi_tmp\n", - "select\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " case when a.store_type = '三方' then '第三方' else a.store_type end store_type ,\n", - " 'ROC' as geo_key,\n", - "'top_yoygr' as KPI_name,\n", - "a.yoy_gr as Kpi_val,\n", - "c.yoy_gr as Kpi_val_ly,\n", - "'' as str_kpi_val,\n", - "'' as str_kpi_val_ly,\n", - "'' as str_kpi_vol,\n", - "'' as str_kpi_vol_ly,\n", - "case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n", - "'' as ta\n", - "from dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", - "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\n", - "on a.corp = b.ZK_Corp_C\n", - "left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c\n", - "on a.corp = c.corp\n", - "and a.ytd = c.ytd + 4\n", - "and a.platform = c.platform\n", - "and a.store_type = c.store_type\n", - "union all\n", - "select\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " case when a.store_type = '三方' then '第三方' else a.store_type end store_type ,\n", - " 'ROC' as geo_key,\n", - "'top1_brand_gr' as KPI_name,\n", - "a.top1_brand_gr as Kpi_val,\n", - "c.top1_brand_gr as Kpi_val_ly,\n", - "'' as str_kpi_val,\n", - "'' as str_kpi_val_ly,\n", - "'' as str_kpi_vol,\n", - "'' as str_kpi_vol_ly,\n", - "case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n", - "'' as ta\n", - "from dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", - "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\n", - "on a.corp = b.ZK_Corp_C\n", - "left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c\n", - "on a.corp = c.corp\n", - "and a.ytd = c.ytd + 4\n", - "and a.platform = c.platform\n", - "and a.store_type = c.store_type\n", - "union all\n", - "select\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n", - " 'ROC' as geo_key,\n", - "'top1_brand_val' as KPI_name,\n", - "'' as Kpi_val,\n", - "'' as Kpi_val_ly,\n", - "a.top1_brand_val as str_kpi_val,\n", - "'' as str_kpi_val_ly,\n", - "'' as str_kpi_vol,\n", - "'' as str_kpi_vol_ly,\n", - "case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n", - "'' as ta\n", - "from dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", - "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\n", - "on a.corp = b.ZK_Corp_C\n", - "union all\n", - "select\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n", - " 'ROC' as geo_key,\n", - " 'incremental_brand' as KPI_name,\n", - " '' as Kpi_val,\n", - " '' as Kpi_val_ly,\n", - " a.growth_driver_brand_val as str_kpi_val,\n", - " '' as str_kpi_val_ly,\n", - " '' as str_kpi_vol,\n", - " '' as str_kpi_vol_ly,\n", - " case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n", - " '' as ta\n", - "from dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", - "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\n", - "on a.corp = b.ZK_Corp_C\n", - "union all\n", - "select\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " case when a.store_type = '三方' then '第三方' else a.store_type end store_type,\n", - " 'ROC' as geo_key,\n", - " 'incremental_brand_gr' as KPI_name,\n", - " a.growth_driver_brand_gr as Kpi_val,\n", - " c.growth_driver_brand_gr as Kpi_val_ly,\n", - " '' as str_kpi_val,\n", - " '' as str_kpi_val_ly,\n", - " '' as str_kpi_vol,\n", - " '' as str_kpi_vol_ly,\n", - " case when upper(a.rank) = 'TTL MKT' then 'Y' else 'N' end total_flag,\n", - " '' as ta\n", - "from dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", - "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\n", - "on a.corp = b.ZK_Corp_C\n", - "left join dwd.dwd_gnd_ec_b2c_top10_drives_brand c\n", - "on a.corp = c.corp\n", - "and a.ytd = c.ytd + 4\n", - "and a.platform = c.platform\n", - "and a.store_type = c.store_type\n", - "union all\n", - "select\n", - " b.CORP_COD,\n", - " a.ytd as ytd,\n", - " '' as ytd_src,\n", - " a.platform,\n", - " a.store_type,\n", - " 'ROC' as geo_key,\n", - " 'top_corp_sales' as KPI_name,\n", - " replace(a.sales_value,',','' ) as Kpi_val,\n", - " replace(c.sales_value,',','' ) as Kpi_val_ly,\n", - " '' as str_kpi_val,\n", - " '' as str_kpi_val_ly,\n", - " '' as str_kpi_vol,\n", - " '' as str_kpi_vol_ly,\n", - " case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag,\n", - " a.ta\n", - "from dwd.dwd_gnd_ec_ta_overview a\n", - "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\n", - "on a.corp_des = b.ZK_Corp_C\n", - "left join dwd.dwd_gnd_ec_ta_overview c\n", - "on a.ytd = c.ytd + 4\n", - "and a.corp_des = c.corp_des\n", - "and a.platform = c.platform\n", - "and a.store_type = c.store_type\n", - "and a.ta = c.ta\n", - "union all\n", - "select distinct\n", - " b.CORP_COD,\n", - " '' as ytd,\n", - " a.ytd as ytd_src,\n", - " a.platform,\n", - " a.store_type,\n", - " 'ROC' as geo_key,\n", - " 'top_rank' as KPI_name,\n", - " a.rank as Kpi_val,\n", - " '' as Kpi_val_ly,\n", - " '' as str_kpi_val,\n", - " '' as str_kpi_val_ly,\n", - " '' as str_kpi_vol,\n", - " '' as str_kpi_vol_ly,\n", - " case when lower(a.rank) = 'total' then 'Y' else 'N' end total_flag,\n", - " a.ta\n", - "from dwd.dwd_gnd_ec_ta_overview a\n", - "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\n", - "on a.corp_des = b.ZK_Corp_C" + "-- ============================================================\n", + "-- 目标表:tmp.tmp_zk_ec_sales_kpi_tmp\n", + "-- 功能:B2C 电商直取数据 → KPI 宽表(QTD 粒度)\n", + "-- 优化:corp_map / brand_base / ta_base 各物化一次,避免重复扫表\n", + "-- ============================================================\n", + "INSERT OVERWRITE TABLE tmp.tmp_zk_ec_sales_kpi_tmp\n", + "\n", + "WITH\n", + "\n", + "-- ────────────────────────────────────────────────────────────\n", + "-- CTE 1:企业编码映射(原 7 处重复子查询,合并为一次扫描)\n", + "-- 东阳光仅取集团层(ZK_Prod_C IS NULL),其他企业全量\n", + "-- 小表,适合 BROADCAST\n", + "-- ────────────────────────────────────────────────────────────\n", + "corp_map AS (\n", + " SELECT DISTINCT ZK_Corp_C, CORP_COD\n", + " FROM dwd.dwd_inc_gnd_retail_b2c_label_total\n", + " WHERE (ZK_Corp_C = '东阳光' AND ZK_Prod_C IS NULL)\n", + " OR ZK_Corp_C != '东阳光'\n", + "),\n", + "\n", + "-- ────────────────────────────────────────────────────────────\n", + "-- CTE 2:B2C Top10 品牌驱动数据(当期 + 去年同期一次性关联)\n", + "-- 原 5 个 UNION 分支各自关联一次,现合并为单次自连接\n", + "-- ────────────────────────────────────────────────────────────\n", + "brand_base AS (\n", + " SELECT\n", + " /*+ BROADCAST(m) */\n", + " m.CORP_COD,\n", + " a.ytd,\n", + " a.platform,\n", + " CASE WHEN a.store_type = '三方' THEN '第三方' ELSE a.store_type END AS store_type,\n", + " CASE WHEN UPPER(a.rank) = 'TTL MKT' THEN 'Y' ELSE 'N' END AS total_flag,\n", + " -- 当期指标\n", + " a.yoy_gr,\n", + " a.top1_brand_gr,\n", + " a.top1_brand_val,\n", + " a.growth_driver_brand_val,\n", + " a.growth_driver_brand_gr,\n", + " -- 去年同期指标(ytd + 4 偏移)\n", + " c.yoy_gr AS yoy_gr_ly,\n", + " c.top1_brand_gr AS top1_brand_gr_ly,\n", + " c.growth_driver_brand_gr AS growth_driver_brand_gr_ly\n", + " FROM dwd.dwd_gnd_ec_b2c_top10_drives_brand a\n", + " LEFT JOIN corp_map m\n", + " ON a.corp = m.ZK_Corp_C\n", + " LEFT JOIN dwd.dwd_gnd_ec_b2c_top10_drives_brand c -- 同比:时间偏移 4 期\n", + " ON a.corp = c.corp\n", + " AND a.ytd = c.ytd + 4\n", + " AND a.platform = c.platform\n", + " AND a.store_type = c.store_type\n", + "),\n", + "\n", + "-- ────────────────────────────────────────────────────────────\n", + "-- CTE 3:TA 概览数据(当期 + 去年同期一次性关联)\n", + "-- 原 2 个 UNION 分支各自关联一次,现合并为单次自连接\n", + "-- ────────────────────────────────────────────────────────────\n", + "ta_base AS (\n", + " SELECT\n", + " /*+ BROADCAST(m) */\n", + " m.CORP_COD,\n", + " a.ytd,\n", + " a.platform,\n", + " a.store_type,\n", + " a.ta,\n", + " a.rank,\n", + " CASE WHEN LOWER(a.rank) = 'total' THEN 'Y' ELSE 'N' END AS total_flag,\n", + " REPLACE(a.sales_value, ',', '') AS sales_value, -- 清除千位分隔符\n", + " REPLACE(c.sales_value, ',', '') AS sales_value_ly\n", + " FROM dwd.dwd_gnd_ec_ta_overview a\n", + " LEFT JOIN corp_map m\n", + " ON a.corp_des = m.ZK_Corp_C -- 注意:此处关联键为 corp_des\n", + " LEFT JOIN dwd.dwd_gnd_ec_ta_overview c -- 同比:时间偏移 4 期\n", + " ON a.ytd = c.ytd + 4\n", + " AND a.corp_des = c.corp_des\n", + " AND a.platform = c.platform\n", + " AND a.store_type = c.store_type\n", + " AND a.ta = c.ta\n", + ")\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 1:市场整体 YOY 增长率(top_yoygr)— 数值型\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'top_yoygr' AS KPI_name,\n", + " yoy_gr AS Kpi_val,\n", + " yoy_gr_ly AS Kpi_val_ly,\n", + " '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " '' AS ta\n", + "FROM brand_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 2:Top1 品牌增长率(top1_brand_gr)— 数值型\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'top1_brand_gr' AS KPI_name,\n", + " top1_brand_gr AS Kpi_val,\n", + " top1_brand_gr_ly AS Kpi_val_ly,\n", + " '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " '' AS ta\n", + "FROM brand_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 3:Top1 品牌销售额(top1_brand_val)— 字符串型,无同比\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'top1_brand_val' AS KPI_name,\n", + " '' AS Kpi_val, '' AS Kpi_val_ly,\n", + " top1_brand_val AS str_kpi_val,\n", + " '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " '' AS ta\n", + "FROM brand_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 4:增量贡献品牌销售额(incremental_brand)— 字符串型,无同比\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'incremental_brand' AS KPI_name,\n", + " '' AS Kpi_val, '' AS Kpi_val_ly,\n", + " growth_driver_brand_val AS str_kpi_val,\n", + " '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " '' AS ta\n", + "FROM brand_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 5:增量贡献品牌增长率(incremental_brand_gr)— 数值型\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'incremental_brand_gr' AS KPI_name,\n", + " growth_driver_brand_gr AS Kpi_val,\n", + " growth_driver_brand_gr_ly AS Kpi_val_ly,\n", + " '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " '' AS ta\n", + "FROM brand_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 6:企业 TA 销售额(top_corp_sales)— 数值型\n", + "-- 注意:ytd 直接填入 ytd 列,ytd_src 留空(与 brand 系列相反)\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT\n", + " CORP_COD,\n", + " ytd AS ytd,\n", + " '' AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'top_corp_sales' AS KPI_name,\n", + " sales_value AS Kpi_val,\n", + " sales_value_ly AS Kpi_val_ly,\n", + " '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " ta\n", + "FROM ta_base\n", + "\n", + "UNION ALL\n", + "\n", + "-- ════════════════════════════════════════════════════════════\n", + "-- KPI 7:企业 TA 排名(top_rank)— 字符串型,无同比\n", + "-- DISTINCT 去重,避免多条重复排名行\n", + "-- ════════════════════════════════════════════════════════════\n", + "SELECT DISTINCT\n", + " CORP_COD,\n", + " '' AS ytd,\n", + " ytd AS ytd_src,\n", + " platform,\n", + " store_type,\n", + " 'ROC' AS geo_key,\n", + " 'top_rank' AS KPI_name,\n", + " rank AS Kpi_val,\n", + " '' AS Kpi_val_ly,\n", + " '' AS str_kpi_val, '' AS str_kpi_val_ly,\n", + " '' AS str_kpi_vol, '' AS str_kpi_vol_ly,\n", + " total_flag,\n", + " ta\n", + "FROM ta_base;" ] }, { @@ -1612,49 +2076,78 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "77737fe1-cfb1-46d0-9624-7231e7c84821", + "nuid": "0c0fe2ec-f80e-4872-85bf-fd5d058cc8b8", "showTitle": false, + "submitTime": 1777537485097, "tableResultSettingsMap": {}, "title": "" } }, "outputs": [], "source": [ - "-- KPI最终输出(QTD粒度)\n", - "insert overwrite table dm.dm_zk_ec_sales_kpi\n", - "select\n", - " case when total_flag = 'Y' then 'TTL MKT' else nvl(CORP_COD,'') end CORP_COD ,\n", - " case\n", - " when ytd <> '' then concat(year(ytd), 'Q', quarter(ytd))\n", - " when ytd_src <> '' then concat(year(ytd_src), 'Q', quarter(ytd_src))\n", - " else ''\n", - " end as ytd,\n", - " case when ytd <> '' or ytd_src <> '' then 'Q' else 'N' end as freq,\n", - " nvl(platform,'') as platform,\n", - " case when store_type = '自营旗舰' then 'SO'\n", - " when store_type = '第三方' then 'POP' else nvl(store_type,'') end store_type,\n", - " nvl(geo_key,'') as geo_key,\n", - " nvl(KPI_name,'') as KPI_name,\n", - " nvl(cast(Kpi_val as double),'') Kpi_val,\n", - " nvl(cast(Kpi_val_ly as double),'') Kpi_val_ly,\n", - " nvl(str_kpi_val,'') as str_kpi_val,\n", - " nvl(str_kpi_val_ly,'') as str_kpi_val_ly,\n", - " nvl(str_kpi_vol,'') as str_kpi_vol,\n", - " nvl(str_kpi_vol_ly,'') as str_kpi_vol_ly,\n", - " nvl(total_flag,'') as total_flag,\n", - " case when ta = 'NIAD' then 'DM' when ta = 'RX Total' then '' else nvl(ta,'') end ta\n", - "from tmp.tmp_zk_ec_sales_kpi_tmp" + "-- ============================================================\n", + "-- 目标表:dm.dm_zk_ec_sales_kpi\n", + "-- 功能:从 KPI 临时宽表清洗入 DM 层\n", + "-- 处理:CORP_COD 合并 / 时间字段标准化 / 店铺类型映射 / TA 映射\n", + "-- ============================================================\n", + "INSERT OVERWRITE TABLE dm.dm_zk_ec_sales_kpi\n", + "SELECT\n", + "\n", + " -- CORP_COD:汇总行(total_flag = Y)统一写 'TTL MKT',否则取企业编码\n", + " CASE WHEN total_flag = 'Y' THEN 'TTL MKT'\n", + " ELSE NVL(CORP_COD, '')\n", + " END AS CORP_COD,\n", + "\n", + " -- 时间维度:yyyymm 优先,为空则降级取 ytd\n", + " -- 两者皆空时输出空字符串\n", + " NVL(NULLIF(yyyymm, ''), NVL(ytd, '')) AS yyyymm,\n", + "\n", + " -- YTD 标记:ytd 有值则为 Y,否则为 N\n", + " IF(ytd <> '', 'Y', 'N') AS ytd,\n", + "\n", + " NVL(platform, '') AS platform,\n", + "\n", + " -- 店铺类型标准化:自营旗舰 → SO,第三方 → POP,其余保留原值\n", + " CASE WHEN store_type = '自营旗舰' THEN 'SO'\n", + " WHEN store_type = '第三方' THEN 'POP'\n", + " ELSE NVL(store_type, '')\n", + " END AS store_type,\n", + "\n", + " NVL(geo_key, '') AS geo_key,\n", + " NVL(KPI_name, '') AS KPI_name,\n", + "\n", + " -- 数值型 KPI:先转 DOUBLE 再 NVL,兼容源字段为字符串的情况\n", + " NVL(CAST(Kpi_val AS DOUBLE), '') AS Kpi_val,\n", + " NVL(CAST(Kpi_val_ly AS DOUBLE), '') AS Kpi_val_ly,\n", + "\n", + " -- 字符串型 KPI(销售额/销量,含同比)\n", + " NVL(str_kpi_val, '') AS str_kpi_val,\n", + " NVL(str_kpi_val_ly, '') AS str_kpi_val_ly,\n", + " NVL(str_kpi_vol, '') AS str_kpi_vol,\n", + " NVL(str_kpi_vol_ly, '') AS str_kpi_vol_ly,\n", + "\n", + " NVL(total_flag, '') AS total_flag,\n", + "\n", + " -- TA 映射:NIAD → DM,RX Total → 空,其余保留原值\n", + " CASE WHEN ta = 'NIAD' THEN 'DM'\n", + " WHEN ta = 'RX Total' THEN ''\n", + " ELSE NVL(ta, '')\n", + " END AS ta\n", + "\n", + "FROM tmp.tmp_zk_ec_sales_kpi_tmp;" ] }, { "cell_type": "markdown", "metadata": { "application/vnd.databricks.v1+cell": { - "cellMetadata": {}, + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, "inputWidgets": {}, - "nuid": "32e83ce3-a648-4ccc-b376-3c4d88271ed7", + "nuid": "dc2bbed1-223b-4610-a55f-334e63050e68", "showTitle": false, "tableResultSettingsMap": {}, "title": "" @@ -1673,10 +2166,10 @@ "byteLimit": 2048000, "rowLimit": 10000 }, - "collapsed": true, "inputWidgets": {}, - "nuid": "8b126179-4e73-4802-94f4-1f8b42cc60d7", + "nuid": "6b591466-5af8-40ef-a9b9-c4f137843f18", "showTitle": false, + "submitTime": 1777537485111, "tableResultSettingsMap": {}, "title": "" } @@ -1785,8 +2278,9 @@ "rowLimit": 10000 }, "inputWidgets": {}, - "nuid": "a62efe20-3f58-4091-97c8-6762b7f96fe8", + "nuid": "20f3c0a6-f626-4e64-bce4-7653087adb16", "showTitle": false, + "submitTime": 1777537485118, "tableResultSettingsMap": {}, "title": "" } diff --git a/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql b/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql index d3bc52e..1a17bb7 100644 --- a/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql +++ b/EC/06 DM_TD_EXT_EC_PACK2MARKET.sql @@ -108,7 +108,7 @@ LEFT JOIN ( PACK_CODE, STRENGTH, MOLECULE_CODE - FROM DWD.DWD_GND_TBLMARKET_BYMONTH + FROM DWD.dwd_gnd_ec_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) @@ -189,7 +189,7 @@ LEFT JOIN ( PACK_CODE, STRENGTH, MOLECULE_CODE - FROM DWD.DWD_GND_TBLMARKET_BYMONTH + FROM DWD.dwd_gnd_ec_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) @@ -205,4 +205,4 @@ LEFT JOIN ( 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 +WHERE T2.MARKET IS NOT NULL; diff --git a/ORG/DM_TD_EXT_COUNTY_ORG.sql b/ORG/DM_TD_EXT_COUNTY_ORG.sql index 90c35ff..345fbb6 100644 --- a/ORG/DM_TD_EXT_COUNTY_ORG.sql +++ b/ORG/DM_TD_EXT_COUNTY_ORG.sql @@ -103,7 +103,7 @@ WHERE A.DATA_SOURCE = 'IQVIA-COUNTY(Quarterly)' --事实表与维度表来自于不同手工表,目前存在一部分audit_cod在事实表有销量,但是在维度表没有这个audit_cod,导致销量缺失。 --因此需要从事实表补全这部分audit_cod with sales as ( -select distinct PACK_COD,AUDIT_COD,DATA_SOURCE from dm.DM_TF_EXT_UNIONALL_SALES +select distinct PACK_CODE,AUDIT_CODE,DATA_SOURCE from dm.DM_TF_EXT_UNIONALL_SALES ) ,market_pack as ( select distinct PACK_COD,MARKET,DATA_SOURCE from dm.dm_td_external_market_pack_mapping @@ -157,7 +157,7 @@ select 'ROC' as rc_name_en, 'Vacant' as RC_Name, null as RegionCenter, -AUDIT_COD, +AUDIT_CODE, MARKET, null as bu_category, null as bu_name_en, diff --git a/Retail/01 load_tmp_data.py b/Retail/01 load_tmp_data.py index 4b9817a..66938c0 100644 --- a/Retail/01 load_tmp_data.py +++ b/Retail/01 load_tmp_data.py @@ -171,49 +171,53 @@ LEVEL_MARKET_RD = 'RD Market' # 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 -- chenwu +# MAGIC -- 2026年切调整20260430 +# MAGIC -- 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 +# 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 ---------- @@ -614,4 +618,4 @@ LEVEL_MARKET_RD = 'RD Market' # COMMAND ---------- -############################################################END############################################################## \ No newline at end of file +############################################################END##############################################################