2512 lines
96 KiB
Plaintext
2512 lines
96 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778478974793,
|
||
"inputWidgets": {},
|
||
"nuid": "86f0c1e4-9672-4b69-b7d7-e972573aa69d",
|
||
"showTitle": false,
|
||
"startTime": 1778478973655,
|
||
"submitTime": 1778478972034,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- 有几张表发生了变化\n",
|
||
"-- tmp.tmp_ec_temp_market\n",
|
||
"-- tmp.tmp_ec_temp_market_del \n",
|
||
"-- dws.dws_zk_ec_pack_property\n",
|
||
"\n",
|
||
"-- dm.dm_zk_ec_market_ratio"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778478975285,
|
||
"inputWidgets": {},
|
||
"nuid": "f319d145-a050-425c-b86f-c73d2e6f41ad",
|
||
"showTitle": false,
|
||
"startTime": 1778478974798,
|
||
"submitTime": 1778478972040,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"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
|
||
},
|
||
"finishTime": 1778478991545,
|
||
"inputWidgets": {},
|
||
"nuid": "a11838c0-855f-4fe6-95d7-790959cb6739",
|
||
"showTitle": false,
|
||
"startTime": 1778478975290,
|
||
"submitTime": 1778478972044,
|
||
"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\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\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",
|
||
"\t on COALESCE(t1.ATC1_COD,'') = COALESCE(t2.ATC1_COD,'')\n",
|
||
" and COALESCE(t1.ATC2_COD,'') = COALESCE(t2.ATC2_COD,'')\n",
|
||
" and COALESCE(t1.ATC3_COD,'') = COALESCE(t2.ATC3_COD,'')\n",
|
||
" and COALESCE(t1.ATC4_COD,'') = COALESCE(t2.ATC4_COD,'')\n",
|
||
" and COALESCE(t1.APP1_COD,'') = COALESCE(t2.APP1_COD,'')\n",
|
||
" and COALESCE(t1.APP2_COD,'') = COALESCE(t2.APP2_COD,'')\n",
|
||
" and COALESCE(t1.APP3_COD,'') = COALESCE(t2.APP3_COD,'')\n",
|
||
" and COALESCE(t1.CORP_COD,'') = COALESCE(t2.CORP_COD,'')\n",
|
||
" and COALESCE(t1.MANU_COD,'') = COALESCE(t2.MANU_COD,'')\n",
|
||
" and COALESCE(t1.PROD_COD,'') = COALESCE(t2.PROD_COD,'')\n",
|
||
" and COALESCE(t1.iqvia_pack_code,'') = COALESCE(t2.iqvia_pack_code,'')\n",
|
||
" and COALESCE(t1.STGH_DES,'') = COALESCE(t2.STGH_DES,'')\n",
|
||
" and COALESCE(t1.CMPS_COD,'') = COALESCE(t2.CMPS_COD,'')\n",
|
||
" and COALESCE(t1.market,'') = COALESCE(t2.market,'')\n",
|
||
"WHEN MATCHED THEN DELETE ;\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778478993866,
|
||
"inputWidgets": {},
|
||
"nuid": "85453796-9385-4a5a-bf20-6bfd459580ae",
|
||
"showTitle": false,
|
||
"startTime": 1778478991550,
|
||
"submitTime": 1778478972052,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"--处理 Extend_Market 有值得数据,用已有市场,定义新的市场,带上系数\n",
|
||
"insert into tmp.tmp_ec_temp_market\n",
|
||
"select\n",
|
||
"iqvia_lineno,iqvia_pack_code,prod_cod,iqvia_notes,new_pack_flag,is_exists_chpa,product_id,prescription_nature,medicine_type,zk_medicine_tier1,zk_medicine_tier2,zk_medicine_tier3,zk_medicine_tier4,common_name,dosage_form,user_type,category_name,product_name,brand_name,zk_manu_des,zk_corp_des,zk_pack_des,counting_unit_a,dosage_unit_a,unit_a,app1_cod,app1_des,app1_des_c,app2_cod,app2_des,app2_des_c,app3_cod,app3_des,app3_des_c,atc1_cod,atc1_des,atc1_des_c,atc2_cod,atc2_des,atc2_des_c,atc3_cod,atc3_des,atc3_des_c,atc4_cod,atc4_des,atc4_des_c,bio_desc,cmps_cod,cmps_des,cmps_des_c,corp_cod,corp_des,corp_des_c,edl_desc,eth_otc_desc,gene_orig_desc,gqce_desc,manu_cod,manu_des,manu_des_c,mnfl_cod,mnfl_des,nrdl_desc,pack_des,stgh_des,pack_lch,paed_desc,prod_des,prod_des_c,tcm_desc,vbp_desc,unit,counting_unit,dosage_unit,NRDL_ENTRY_DATE,t2.Market,t2.bu,nvl(t2.extend_market_ratio,1) as extend_market_ratio,is_az\n",
|
||
"from tmp.tmp_ec_temp_market t1\n",
|
||
"left join (select Market,BU,Extend_Market,Extend_Market_Ratio from dwd.dwd_gnd_ec_retail_tblmarket_rule where Extend_Market is not null )t2\n",
|
||
"on t1.Market = t2.Extend_Market\n",
|
||
"where t2.Market is not null"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778479009600,
|
||
"inputWidgets": {},
|
||
"nuid": "015ef590-887b-4dfa-bfa1-ebd05effc2cf",
|
||
"showTitle": false,
|
||
"startTime": 1778478993870,
|
||
"submitTime": 1778478972058,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-----------事实表数据处理:获取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, --right(concat('0000000',b.iqvia_pack_code),7)\n",
|
||
" a.platform,\n",
|
||
" a.store_name,\n",
|
||
" a.store_type,\n",
|
||
" sum(a.sales_amount) as sales_value,\n",
|
||
" sum(a.sales_qty) as sales_unit,\n",
|
||
" cast(sum(a.sales_qty*(b.counting_unit/coalesce(unit,1 ))) as decimal(30,10)) as counting_unit\n",
|
||
"from dwd.dwd_inc_gnd_ext_ec_nationnal_pack_union_all a\n",
|
||
"left join (\n",
|
||
" select DISTINCT product_id,iqvia_pack_code,counting_unit,unit,prod_des_c\n",
|
||
" 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",
|
||
" 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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557198314,
|
||
"inputWidgets": {},
|
||
"nuid": "339d06b1-1c67-4249-a105-aaafb352bb38",
|
||
"showTitle": false,
|
||
"startTime": 1778557189165,
|
||
"submitTime": 1778557188224,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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.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",
|
||
"group by\n",
|
||
" t1.yyyymm,t1.pack_id,t1.iqvia_pack_code,t1.platform,t1.store_name,t1.store_type"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"collapsed": true,
|
||
"finishTime": 1778557198321,
|
||
"inputWidgets": {},
|
||
"nuid": "c686ec31-8c18-4a4a-96ca-ce5a29f2f676",
|
||
"showTitle": false,
|
||
"startTime": 1778557198319,
|
||
"submitTime": 1778557188234,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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",
|
||
"-- t1.rank,\n",
|
||
"-- t1.corp_des,\n",
|
||
"-- t1.CORP_COD,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- sum(t1.sales_value) sales_value\n",
|
||
"-- from ( \n",
|
||
"-- select\n",
|
||
"-- a.ytd yyyymm,\n",
|
||
"-- a.ta,\n",
|
||
"-- a.rank,\n",
|
||
"-- a.corp_des,\n",
|
||
"-- b.CORP_COD,\n",
|
||
"-- a.platform,\n",
|
||
"-- 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",
|
||
"-- ) t1\n",
|
||
"-- group by 1,2,3,4,5,6,7"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"collapsed": true,
|
||
"finishTime": 1778557198329,
|
||
"inputWidgets": {},
|
||
"nuid": "7814d185-5883-4f00-b350-0d5cab1da7f5",
|
||
"showTitle": false,
|
||
"startTime": 1778557198326,
|
||
"submitTime": 1778557188239,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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",
|
||
"-- t1.rank,\n",
|
||
"-- t1.corp_des,\n",
|
||
"-- t1.CORP_COD,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- sum(t1.sales_value) sales_value\n",
|
||
"-- from( \n",
|
||
"-- select\n",
|
||
"-- a.ytd yyyymm,\n",
|
||
"-- a.ta,\n",
|
||
"-- a.rank,\n",
|
||
"-- a.corp_des,\n",
|
||
"-- b.CORP_COD,\n",
|
||
"-- a.platform,\n",
|
||
"-- 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",
|
||
"-- )t1\n",
|
||
"-- group by 1,2,3,4,5,6,7"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557203672,
|
||
"inputWidgets": {},
|
||
"nuid": "b576e313-2815-4991-a92e-82fe68cbaed9",
|
||
"showTitle": false,
|
||
"startTime": 1778557198332,
|
||
"submitTime": 1778557188244,
|
||
"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 "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"collapsed": true,
|
||
"finishTime": 1778557203681,
|
||
"inputWidgets": {},
|
||
"nuid": "5fdbf78f-228d-4e26-94b8-94565feb2ddf",
|
||
"showTitle": false,
|
||
"startTime": 1778557203677,
|
||
"submitTime": 1778557188250,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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",
|
||
"-- t1.pack_id,\n",
|
||
"-- t1.iqvia_pack_code,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- t1.store_name,\n",
|
||
"-- t1.sales_value,\n",
|
||
"-- t1.sales_unit,\n",
|
||
"-- t1.counting_unit,\n",
|
||
"-- max(t2.ta) ta\n",
|
||
"-- from dws.dws_zk_ec_sales t1\n",
|
||
"-- left join (select distinct iqvia_pack_code,ta from tmp.tmp_zk_ec_pack_property_corp) t2\n",
|
||
"-- on t1.iqvia_pack_code = t2.iqvia_pack_code\n",
|
||
"-- where t2.ta = 'CV'\n",
|
||
"-- group by 1,2,3,4,5,6,7,8,9\n",
|
||
"-- ),cv_corp_data as (\n",
|
||
"-- select\n",
|
||
"-- A.yyyymm,\n",
|
||
"-- A.pack_id,\n",
|
||
"-- A.iqvia_pack_code,\n",
|
||
"-- A.platform,\n",
|
||
"-- A.store_type,\n",
|
||
"-- A.store_name,\n",
|
||
"-- B.corp_cod,\n",
|
||
"-- A.sales_value,\n",
|
||
"-- 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",
|
||
"-- on A.pack_id = B.product_id\n",
|
||
"-- where B.corp_cod = 'A5Z'\n",
|
||
"-- union all \n",
|
||
"-- select\n",
|
||
"-- cv_az.yyyymm,\n",
|
||
"-- 'CV_AZ_OTHERS' as pack_id,\n",
|
||
"-- 'CV_AZ_OTHERS' as iqvia_pack_code,\n",
|
||
"-- cv_az.platform,\n",
|
||
"-- cv_az.store_type,\n",
|
||
"-- case when cv_az.store_type = '自营旗舰' then 'CV_AZ_OTHERS_SO' when cv_az.store_type = '第三方' then 'CV_AZ_OTHERS_POP' end store_name,\n",
|
||
"-- cv_az.corp_cod,\n",
|
||
"-- cv_az_total.sales_value - cv_az.sales_value as sales_value,\n",
|
||
"-- 0,0,\n",
|
||
"-- 'CV_AZ_OTHERS' as ta\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",
|
||
"-- on A.pack_id = B.product_id\n",
|
||
"-- where B.corp_cod = 'A5Z'\n",
|
||
"-- group by 1,2,3,4\n",
|
||
"-- )cv_az\n",
|
||
"-- left join(\n",
|
||
"-- select\n",
|
||
"-- yyyymm,\n",
|
||
"-- CORP_COD,\n",
|
||
"-- platform,\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",
|
||
"-- and cv_az.platform = cv_az_total.platform\n",
|
||
"-- and cv_az.store_type = cv_az_total.store_type\n",
|
||
"-- union all \n",
|
||
"-- select\n",
|
||
"-- A.yyyymm,\n",
|
||
"-- A.pack_id,\n",
|
||
"-- A.iqvia_pack_code,\n",
|
||
"-- A.platform,\n",
|
||
"-- A.store_type,\n",
|
||
"-- A.store_name,\n",
|
||
"-- B.corp_cod,\n",
|
||
"-- A.sales_value,\n",
|
||
"-- 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",
|
||
"-- on A.pack_id = B.product_id\n",
|
||
"-- where nvl(corp_cod,'') <>'A5Z'\n",
|
||
"-- )\n",
|
||
"-- ,all_cv_data 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",
|
||
"-- 'CV' flag,\n",
|
||
"-- ta\n",
|
||
"-- from cv_corp_data\n",
|
||
"-- union all \n",
|
||
"-- select\n",
|
||
"-- t1.yyyymm,\n",
|
||
"-- 'CV_OTHERS' as pack_id,\n",
|
||
"-- 'CV_OTHERS' as iqvia_pack_code,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- case when t1.store_type = '自营旗舰' then 'CV_OTHERS_SO' when t1.store_type = '第三方' then 'CV_OTHERS_POP' end store_name,\n",
|
||
"-- 'CV_OTHERS' as corp_cod,\n",
|
||
"-- t2.sales_value - t1.sales_value as sales_value,\n",
|
||
"-- 0,0,\n",
|
||
"-- 'CV' as flag,\n",
|
||
"-- 'CV_OTHERS' as ta\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",
|
||
"-- group by 1,2,3\n",
|
||
"-- )t1\n",
|
||
"-- left join(\n",
|
||
"-- select\n",
|
||
"-- yyyymm,\n",
|
||
"-- platform,\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 lower(rank) = '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",
|
||
"-- ),non_cv_all_data as (\n",
|
||
"-- select \n",
|
||
"-- t1.yyyymm,\n",
|
||
"-- t1.pack_id,\n",
|
||
"-- t1.iqvia_pack_code,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- t1.store_name,\n",
|
||
"-- t2.corp_cod,\n",
|
||
"-- t1.sales_value,\n",
|
||
"-- t1.sales_unit,\n",
|
||
"-- t1.counting_unit,\n",
|
||
"-- case when t2.ta in ('DM','RD') then 'CVRM' else '' end flag,\n",
|
||
"-- max(t2.ta) ta\n",
|
||
"-- from dws.dws_zk_ec_sales t1\n",
|
||
"-- left join (select distinct iqvia_pack_code,ta,corp_cod,product_id from tmp.tmp_zk_ec_pack_property_corp) t2\n",
|
||
"-- on t1.pack_id = t2.product_id\n",
|
||
"-- where nvl(t2.TA,'') <> 'CV'\n",
|
||
"-- 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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"collapsed": true,
|
||
"finishTime": 1778557203688,
|
||
"inputWidgets": {},
|
||
"nuid": "b1f69228-3a47-4a76-ab21-a10e52305a56",
|
||
"showTitle": false,
|
||
"startTime": 1778557203685,
|
||
"submitTime": 1778557188256,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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",
|
||
"-- 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_tmp\n",
|
||
"-- union all \n",
|
||
"-- select\n",
|
||
"-- t1.yyyymm,\n",
|
||
"-- 'CVRM_AZ_OTHERS' as pack_id,\n",
|
||
"-- 'CVRM_AZ_OTHERS' as iqvia_pack_code,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- case when t1.store_type = '自营旗舰' then 'CVRM_AZ_OTHERS_SO' when t1.store_type = '第三方' then 'CVRM_AZ_OTHERS_POP' end store_name,\n",
|
||
"-- t1.corp_cod,\n",
|
||
"-- t2.sales_value - t1.sales_value as sales_value,\n",
|
||
"-- 0,0,\n",
|
||
"-- 'CVRM' 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_tmp\n",
|
||
"-- where corp_cod = 'A5Z' and flag in ('CV','CVRM') \n",
|
||
"-- group by 1,2,3,4\n",
|
||
"-- )t1\n",
|
||
"-- left join (\n",
|
||
"-- select\n",
|
||
"-- yyyymm,\n",
|
||
"-- CORP_COD,\n",
|
||
"-- platform,\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 CORP_COD = 'A5Z' and ta = 'CVRM'\n",
|
||
"-- group by 1,2,3,4\n",
|
||
"-- )t2\n",
|
||
"-- on t1.yyyymm = t2.yyyymm and t1.platform = t2.platform and t1.store_type = t2.store_type\n",
|
||
"-- )\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",
|
||
"-- 'CVRM_OTHERS' as pack_id,\n",
|
||
"-- 'CVRM_OTHERS' as iqvia_pack_code,\n",
|
||
"-- t1.platform,\n",
|
||
"-- t1.store_type,\n",
|
||
"-- case when t1.store_type = '自营旗舰' then 'CVRM_OTHERS_SO' when t1.store_type = '第三方' then 'CVRM_OTHERS_POP' end store_name,\n",
|
||
"-- 'CVRM_OTHERS' as corp_cod,\n",
|
||
"-- t2.sales_value - t1.sales_value as sales_value,\n",
|
||
"-- 0,0,\n",
|
||
"-- 'CVRM' 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",
|
||
"-- where flag in ('CV','CVRM')\n",
|
||
"-- group by 1,2,3\n",
|
||
"-- )t1\n",
|
||
"-- left join(\n",
|
||
"-- select\n",
|
||
"-- yyyymm,\n",
|
||
"-- platform,\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 = 'CVRM' and lower(rank) = '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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557219728,
|
||
"inputWidgets": {},
|
||
"nuid": "2c5737c9-b8fe-4b8a-a4b6-f39be69af55c",
|
||
"showTitle": false,
|
||
"startTime": 1778557203693,
|
||
"submitTime": 1778557188260,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- [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",
|
||
" t1.platform,\n",
|
||
" case when t1.store_type = '第三方' then 'POP' when t1.store_type in ('平台店','品牌店','自营旗舰') then 'SO' end as store_type,\n",
|
||
" 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,t1.store_name\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"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557241785,
|
||
"inputWidgets": {},
|
||
"nuid": "9b43d6a9-6fd4-4568-bc48-7d7cb7ffe266",
|
||
"showTitle": false,
|
||
"startTime": 1778557219733,
|
||
"submitTime": 1778557188268,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"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",
|
||
"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
|
||
},
|
||
"finishTime": 1778557246541,
|
||
"inputWidgets": {},
|
||
"nuid": "ebb41c4f-a6d7-4dbd-bdb1-304f0c5abae4",
|
||
"showTitle": false,
|
||
"startTime": 1778557241789,
|
||
"submitTime": 1778557188277,
|
||
"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",
|
||
"union all\n",
|
||
"select\n",
|
||
"'' iqvia_lineno\n",
|
||
",iqvia_pack_code as iqvia_pack_code\n",
|
||
",'' prod_cod\n",
|
||
",'' iqvia_notes\n",
|
||
",'' new_pack_flag\n",
|
||
",'' is_exists_chpa\n",
|
||
",iqvia_pack_code as product_id\n",
|
||
",'' prescription_nature\n",
|
||
",'' medicine_type\n",
|
||
",'' zk_medicine_tier1\n",
|
||
",'' zk_medicine_tier2\n",
|
||
",'' zk_medicine_tier3\n",
|
||
",'' zk_medicine_tier4\n",
|
||
",'' common_name\n",
|
||
",'' dosage_form\n",
|
||
",'' user_type\n",
|
||
",'' category_name\n",
|
||
",'' product_name\n",
|
||
",'' brand_name\n",
|
||
",'' zk_manu_des\n",
|
||
",'' zk_corp_des\n",
|
||
",'' zk_pack_des\n",
|
||
",'' counting_unit_a\n",
|
||
",'' dosage_unit_a\n",
|
||
",'' unit_a\n",
|
||
",'' app1_cod\n",
|
||
",'' app1_des\n",
|
||
",'' app1_des_c\n",
|
||
",'' app2_cod\n",
|
||
",'' app2_des\n",
|
||
",'' app2_des_c\n",
|
||
",'' app3_cod\n",
|
||
",'' app3_des\n",
|
||
",'' app3_des_c\n",
|
||
",'' atc1_cod\n",
|
||
",'' atc1_des\n",
|
||
",'' atc1_des_c\n",
|
||
",'' atc2_cod\n",
|
||
",'' atc2_des\n",
|
||
",'' atc2_des_c\n",
|
||
",'' atc3_cod\n",
|
||
",'' atc3_des\n",
|
||
",'' atc3_des_c\n",
|
||
",'' atc4_cod\n",
|
||
",'' atc4_des\n",
|
||
",'' atc4_des_c\n",
|
||
",'' bio_desc\n",
|
||
",'' cmps_cod\n",
|
||
",'' cmps_des\n",
|
||
",'' cmps_des_c\n",
|
||
",corp_cod as corp_cod\n",
|
||
",'' corp_des\n",
|
||
",'' corp_des_c\n",
|
||
",'' edl_desc\n",
|
||
",'' eth_otc_desc\n",
|
||
",'' gene_orig_desc\n",
|
||
",'' gqce_desc\n",
|
||
",'' manu_cod\n",
|
||
",'' manu_des\n",
|
||
",'' manu_des_c\n",
|
||
",'' mnfl_cod\n",
|
||
",'' mnfl_des\n",
|
||
",'' nrdl_desc\n",
|
||
",'' pack_des\n",
|
||
",'' stgh_des\n",
|
||
",'' pack_lch\n",
|
||
",'' paed_desc\n",
|
||
",'Others' prod_des\n",
|
||
",'Others' prod_des_c\n",
|
||
",'' tcm_desc\n",
|
||
",'' vbp_desc\n",
|
||
",'' unit\n",
|
||
",'' counting_unit\n",
|
||
",'' dosage_unit\n",
|
||
",'' NRDL_ENTRY_DATE\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",
|
||
",from_utc_timestamp(current_timestamp(),'UTC+8' ) etl_insert_dt\n",
|
||
",from_utc_timestamp(current_timestamp(),'UTC+8' ) etl_update_dt\n",
|
||
"from (select distinct iqvia_pack_code,corp_cod from dm.dm_zk_ec_sales where iqvia_pack_code not in (select distinct iqvia_pack_code from tmp.tmp_ec_temp_market))\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557250987,
|
||
"inputWidgets": {},
|
||
"nuid": "25bd255c-597c-4bb0-9c7a-0577e28eefee",
|
||
"showTitle": false,
|
||
"startTime": 1778557246546,
|
||
"submitTime": 1778557188283,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"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",
|
||
",a.iqvia_notes\n",
|
||
",a.new_pack_flag\n",
|
||
",a.is_exists_chpa\n",
|
||
",a.product_id\n",
|
||
",a.prescription_nature\n",
|
||
",a.medicine_type\n",
|
||
",a.zk_medicine_tier1\n",
|
||
",a.zk_medicine_tier2\n",
|
||
",a.zk_medicine_tier3\n",
|
||
",a.zk_medicine_tier4\n",
|
||
",a.common_name\n",
|
||
",a.dosage_form\n",
|
||
",a.user_type\n",
|
||
",a.category_name\n",
|
||
",a.product_name\n",
|
||
",a.brand_name\n",
|
||
",a.zk_manu_des\n",
|
||
",a.zk_corp_des\n",
|
||
",a.zk_pack_des\n",
|
||
",a.counting_unit_a\n",
|
||
",a.dosage_unit_a\n",
|
||
",a.unit_a\n",
|
||
",a.app1_cod\n",
|
||
",a.app1_des\n",
|
||
",a.app1_des_c\n",
|
||
",a.app2_cod\n",
|
||
",a.app2_des\n",
|
||
",a.app2_des_c\n",
|
||
",a.app3_cod\n",
|
||
",a.app3_des\n",
|
||
",a.app3_des_c\n",
|
||
",a.atc1_cod\n",
|
||
",a.atc1_des\n",
|
||
",a.atc1_des_c\n",
|
||
",a.atc2_cod\n",
|
||
",a.atc2_des\n",
|
||
",a.atc2_des_c\n",
|
||
",a.atc3_cod\n",
|
||
",a.atc3_des\n",
|
||
",a.atc3_des_c\n",
|
||
",a.atc4_cod\n",
|
||
",a.atc4_des\n",
|
||
",a.atc4_des_c\n",
|
||
",a.bio_desc\n",
|
||
",a.cmps_cod\n",
|
||
",a.cmps_des\n",
|
||
",a.cmps_des_c\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",
|
||
",a.edl_desc\n",
|
||
",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(e.manu_des_c,a.manu_des_c) manu_des_c\n",
|
||
",a.mnfl_cod\n",
|
||
",a.mnfl_des\n",
|
||
",a.nrdl_desc\n",
|
||
",a.pack_des\n",
|
||
",a.stgh_des\n",
|
||
",a.pack_lch\n",
|
||
",a.paed_desc\n",
|
||
",a.prod_des\n",
|
||
",a.prod_des_c\n",
|
||
",a.tcm_desc\n",
|
||
",a.vbp_desc\n",
|
||
",a.unit\n",
|
||
",a.counting_unit\n",
|
||
",a.dosage_unit\n",
|
||
",a.NRDL_ENTRY_DATE\n",
|
||
",a.Market\n",
|
||
",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",
|
||
"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 "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557268253,
|
||
"inputWidgets": {},
|
||
"nuid": "d13a4ab2-9a37-4ac4-a886-3cf57cc9d41a",
|
||
"showTitle": false,
|
||
"startTime": 1778557250991,
|
||
"submitTime": 1778557188292,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"------将事实表倒减之后的维度信息补充到维度表里\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 ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS Market'\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",
|
||
",'' BrandType\n",
|
||
",'' AZ_MAIN \n",
|
||
",'' AZ_Related\n",
|
||
",t5.KEY_COMPETITOR\n",
|
||
",a.product_id\n",
|
||
",a.prescription_nature\n",
|
||
",a.medicine_type\n",
|
||
",a.zk_medicine_tier1\n",
|
||
",a.zk_medicine_tier2\n",
|
||
",a.zk_medicine_tier3\n",
|
||
",a.zk_medicine_tier4\n",
|
||
",a.common_name\n",
|
||
",a.dosage_form\n",
|
||
",a.user_type\n",
|
||
",a.category_name\n",
|
||
",a.product_name\n",
|
||
",a.brand_name\n",
|
||
",a.zk_manu_des\n",
|
||
",a.zk_corp_des\n",
|
||
",a.zk_pack_des\n",
|
||
",a.counting_unit_a\n",
|
||
",a.dosage_unit_a\n",
|
||
",a.unit_a\n",
|
||
",a.app1_cod\n",
|
||
",a.app1_des\n",
|
||
",a.app1_des_c\n",
|
||
",a.app2_cod\n",
|
||
",a.app2_des\n",
|
||
",a.app2_des_c\n",
|
||
",a.app3_cod\n",
|
||
",a.app3_des\n",
|
||
",a.app3_des_c\n",
|
||
",a.atc1_cod\n",
|
||
",a.atc1_des\n",
|
||
",a.atc1_des_c\n",
|
||
",a.atc2_cod\n",
|
||
",a.atc2_des\n",
|
||
",a.atc2_des_c\n",
|
||
",a.atc3_cod\n",
|
||
",a.atc3_des\n",
|
||
",a.atc3_des_c\n",
|
||
",a.atc4_cod\n",
|
||
",a.atc4_des\n",
|
||
",a.atc4_des_c\n",
|
||
",a.bio_desc\n",
|
||
",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",
|
||
"\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",
|
||
" CORP_DES_C\n",
|
||
",a.edl_desc\n",
|
||
",a.eth_otc_desc\n",
|
||
",a.gene_orig_desc\n",
|
||
",a.gqce_desc\n",
|
||
",a.manu_cod\n",
|
||
",a.manu_des\n",
|
||
",a.manu_des_c\n",
|
||
",a.mnfl_cod\n",
|
||
",a.mnfl_des\n",
|
||
",a.nrdl_desc\n",
|
||
",a.pack_des\n",
|
||
",a.stgh_des\n",
|
||
",a.pack_lch\n",
|
||
",a.paed_desc\n",
|
||
",a.prod_des\n",
|
||
",a.prod_des_c\n",
|
||
",a.tcm_desc\n",
|
||
",a.vbp_desc\n",
|
||
",a.unit\n",
|
||
",a.counting_unit\n",
|
||
",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 ('OTHERS_AZ_TA','OTHERS_TA') THEN 'OTHERS 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",
|
||
"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",
|
||
"and nvl(a.cmps_cod,'') = case when b.molecule_code is null then nvl(a.cmps_cod,'') else right(concat('000000',b.molecule_code),6) end\n",
|
||
"and nvl(a.corp_cod,'') = case when b.corporation_code is null then nvl(a.corp_cod,'') else b.corporation_code end\n",
|
||
"and nvl(a.manu_cod,'') = case when b.manufacturer_code is null then nvl(a.manu_cod,'') else b.manufacturer_code end\n",
|
||
"and nvl(a.app1_cod,'') = case when b.nfc1_code is null then nvl(a.app1_cod,'') else b.nfc1_code end\n",
|
||
"and nvl(a.app2_cod,'') = case when b.nfc2_code is null then nvl(a.app2_cod,'') else b.nfc2_code end\n",
|
||
"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.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",
|
||
"on a.market = t5.MARKET\n",
|
||
"and a.iqvia_pack_code = t5.PACK_COD\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557271279,
|
||
"inputWidgets": {},
|
||
"nuid": "8c861c10-773a-4449-a5dc-c0340e5ec97e",
|
||
"showTitle": false,
|
||
"startTime": 1778557268257,
|
||
"submitTime": 1778557188299,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"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 "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557275535,
|
||
"inputWidgets": {},
|
||
"nuid": "e39d8c66-7469-46db-a2f4-79976266bec2",
|
||
"showTitle": false,
|
||
"startTime": 1778557271284,
|
||
"submitTime": 1778557188306,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"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",
|
||
" a.prod_des,\n",
|
||
" a.cmps_des,\n",
|
||
" a.corp_cod,\n",
|
||
" a.Market,\n",
|
||
" a.extend_market_ratio as value_market_ratio,\n",
|
||
" a.extend_market_ratio as unit_market_ratio,\n",
|
||
" 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",
|
||
"left join (--pack\n",
|
||
" select\n",
|
||
"\t\tmarket,\n",
|
||
"\t\tcmps_cod,\n",
|
||
"\t\tcmps_des,\n",
|
||
"\t\tif( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,--right(concat('0000000',pack_cod ),7)\n",
|
||
"\t\tpack_des,\n",
|
||
"\t\tlevel,\n",
|
||
"\t\ttype,\n",
|
||
"\t\tcast(ratio as float) as ratio,\n",
|
||
"\t\tcast(starttime as int) starttime,\n",
|
||
"\t\tcast (endtime as int) endtime\n",
|
||
" from dwd.dwd_gnd_ims_tblbrandratio\n",
|
||
" where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'PACK'\n",
|
||
")c on a.Market = c.market and a.iqvia_pack_code = if( c.pack_cod REGEXP '^[0-9]',right(concat('000000000000',c.pack_cod),12),c.pack_cod)--right(concat('0000000',c.pack_cod),7)\n",
|
||
"left join(--molecule\n",
|
||
" select\n",
|
||
"\t\tmarket,\n",
|
||
"\t\tcmps_cod,\n",
|
||
"\t\tcmps_des,\n",
|
||
"\t\tif( pack_cod REGEXP '^[0-9]',right(concat('000000000000',pack_cod),12),pack_cod) pack_cod,--right(concat('0000000',pack_cod ),7)\n",
|
||
"\t\tpack_des,\n",
|
||
"\t\tlevel,\n",
|
||
"\t\ttype,\n",
|
||
"\t\tcast(ratio as float) as ratio,\n",
|
||
"\t\tcast(starttime as int) starttime,\n",
|
||
"\t\tcast (endtime as int) endtime\n",
|
||
" from dwd.dwd_gnd_ims_tblbrandratio\n",
|
||
" where UPPER(TYPE) = 'COUNTINGUNIT' and UPPER(Level) = 'MOLECULE'\n",
|
||
")d on a.Market = d.market and a.cmps_cod = right(concat('000000',d.cmps_cod ),6)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557278550,
|
||
"inputWidgets": {},
|
||
"nuid": "bbe40a04-e787-4133-9901-5f331baf912a",
|
||
"showTitle": false,
|
||
"startTime": 1778557275539,
|
||
"submitTime": 1778557188311,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"create or replace table dm.dm_zk_ec_geo\n",
|
||
"using delta as\n",
|
||
"select\n",
|
||
" 'ROC' as audit_cod,\n",
|
||
" '全国' as city_c,\n",
|
||
" 'national' as city_e,\n",
|
||
" '全国' as province_c,\n",
|
||
" 'national' as province_e;"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557278560,
|
||
"inputWidgets": {},
|
||
"nuid": "f8d0befe-3de4-48a8-ac53-cdc19c897d0f",
|
||
"showTitle": false,
|
||
"startTime": 1778557278555,
|
||
"submitTime": 1778557188317,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- -- ============================================================\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",
|
||
"-- -- left join ta_base c \n",
|
||
"-- -- on a.ytd = c.ytd + 100\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",
|
||
"-- 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;"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557283201,
|
||
"inputWidgets": {},
|
||
"nuid": "9e6100db-d97c-41a6-8b30-4f7a774c1903",
|
||
"showTitle": false,
|
||
"startTime": 1778557278565,
|
||
"submitTime": 1778557188322,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"---------------------------------------将直取部分数据处理成KPI形式-----------------------------------------\n",
|
||
"insert overwrite table tmp.tmp_zk_ec_sales_kpi_tmp \n",
|
||
"select\n",
|
||
" b.CORP_COD,\n",
|
||
" '' as yyyymm,\n",
|
||
" a.ytd ,\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 + 100\n",
|
||
"and a.platform = c.platform\n",
|
||
"and a.store_type = c.store_type\n",
|
||
"-- where upper(a.rank) <> 'TTL MKT' \n",
|
||
"union all\n",
|
||
"select\n",
|
||
" b.CORP_COD,\n",
|
||
" '' as yyyymm,\n",
|
||
" a.ytd ,\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 + 100\n",
|
||
"and a.platform = c.platform\n",
|
||
"and a.store_type = c.store_type\n",
|
||
"-- where upper(a.rank) <> 'TTL MKT' \n",
|
||
"union all\n",
|
||
"select\n",
|
||
" b.CORP_COD,\n",
|
||
" '' as yyyymm,\n",
|
||
" a.ytd ,\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",
|
||
"-- where upper(a.rank) <> 'TTL MKT' \n",
|
||
"union all \n",
|
||
"select \n",
|
||
" b.CORP_COD,\n",
|
||
" '' as yyyymm,\n",
|
||
" a.ytd ,\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",
|
||
"-- where upper(a.rank) <> 'TTL MKT' \n",
|
||
"union all\n",
|
||
"select \n",
|
||
" b.CORP_COD,\n",
|
||
" '' as yyyymm,\n",
|
||
" a.ytd ,\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 + 100\n",
|
||
"and a.platform = c.platform\n",
|
||
"and a.store_type = c.store_type\n",
|
||
"-- where upper(a.rank) <> 'TTL MKT' \n",
|
||
"union all \n",
|
||
"select\n",
|
||
" b.CORP_COD,\n",
|
||
" a.ytd yyyymm,\n",
|
||
" '' as ytd,\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 + 100\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",
|
||
"-- where lower(a.rank) <> 'total'\n",
|
||
"union all \n",
|
||
"select distinct\n",
|
||
" b.CORP_COD,\n",
|
||
" '' yyyymm,\n",
|
||
" a.ytd as ytd,\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",
|
||
"-- where lower(a.rank) <> 'total'\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557285684,
|
||
"inputWidgets": {},
|
||
"nuid": "0c0fe2ec-f80e-4872-85bf-fd5d058cc8b8",
|
||
"showTitle": false,
|
||
"startTime": 1778557283205,
|
||
"submitTime": 1778557188328,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- ============================================================\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 TA = 'RX Total' and total_flag = 'Y' THEN ''\n",
|
||
" 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 decimal(30,10)),0) AS Kpi_val,\n",
|
||
" nvl(CAST(Kpi_val_ly AS decimal(30,10)),0) 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": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"inputWidgets": {},
|
||
"nuid": "dc2bbed1-223b-4610-a55f-334e63050e68",
|
||
"showTitle": false,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"source": [
|
||
"## NIAD Date"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557292166,
|
||
"inputWidgets": {},
|
||
"nuid": "6b591466-5af8-40ef-a9b9-c4f137843f18",
|
||
"showTitle": false,
|
||
"startTime": 1778557285688,
|
||
"submitTime": 1778557188343,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"-- 计算NIAD的时间是否比其他数据源先来数据 chenwu\n",
|
||
"CREATE OR REPLACE TABLE tmp.tmp_dm_td_ext_ec_niad_month as\n",
|
||
"WITH all_ec_data (\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_hm_jd_2025before\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_hm_jd_2025after\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_hm_tm_2206after\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_hm_tm_2206before\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_gastritis_23after\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_gastritis_23before\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_re\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_dm_statins_xzk\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_dm_23before\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_dm_23after\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NOTNIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_hm_tm_2403after\n",
|
||
" UNION ALL\n",
|
||
" SELECT\n",
|
||
" MAX(TIME) month,\n",
|
||
" 'NIAD' AS DATATYPE\n",
|
||
" FROM\n",
|
||
" dwd.dwd_gnd_ec_zkb2c_dm_26after\n",
|
||
")\n",
|
||
"SELECT\n",
|
||
" MAX(t1.month) as NIAD_MONTH,\n",
|
||
" max(t2.month) OTHERS_MONTH\n",
|
||
"FROM\n",
|
||
" all_ec_data t1\n",
|
||
" LEFT JOIN (\n",
|
||
" SELECT\n",
|
||
" MAX(month) as month\n",
|
||
" FROM\n",
|
||
" all_ec_data\n",
|
||
" WHERE\n",
|
||
" datatype = 'NOTNIAD'\n",
|
||
" ) t2\n",
|
||
"WHERE\n",
|
||
" t1.datatype = 'NIAD'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 0,
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+cell": {
|
||
"cellMetadata": {
|
||
"byteLimit": 2048000,
|
||
"rowLimit": 10000
|
||
},
|
||
"finishTime": 1778557292715,
|
||
"inputWidgets": {},
|
||
"nuid": "20f3c0a6-f626-4e64-bce4-7653087adb16",
|
||
"showTitle": false,
|
||
"startTime": 1778557292171,
|
||
"submitTime": 1778557188353,
|
||
"tableResultSettingsMap": {},
|
||
"title": ""
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"select * from tmp.tmp_dm_td_ext_ec_niad_month"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"application/vnd.databricks.v1+notebook": {
|
||
"computePreferences": null,
|
||
"dashboards": [],
|
||
"environmentMetadata": null,
|
||
"inputWidgetPreferences": null,
|
||
"language": "sql",
|
||
"notebookMetadata": {
|
||
"pythonIndentUnit": 4
|
||
},
|
||
"notebookName": "03 ec_load_data",
|
||
"widgets": {}
|
||
},
|
||
"language_info": {
|
||
"name": "sql"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 0
|
||
}
|