Add EXTERNAL SQL scripts

This commit is contained in:
2026-04-20 14:55:25 +08:00
parent c05ba7ec7e
commit b4979eed82
344 changed files with 61619 additions and 0 deletions

View File

@@ -0,0 +1,672 @@
# Databricks notebook source
### constant
DATA_TYPE_MARKET = 'MARKET'
DATA_TYPE_MOLECULE = 'MOLECULE'
DATA_TYPE_BRAND = 'BRAND'
DATA_TYPE_MULTI_MARKET = 'MULTI_MARKET'
DATA_TYPE_MULTI_MOLECULE = 'MULTI_MOLECULE'
DATA_TYPE_MULTI_BRAND = 'MULTI_BRAND'
DATA_TYPE_DUPLICATE = 'DUPLICATE'
DATA_TYPE_HEDGE_TA = 'HEDGE_TA'
DATA_TYPE_HEDGE_MARKET = 'HEDGE_MARKET'
DATA_TYPE_HEDGE_MOLECULE = 'HEDGE_MOLECULE'
DATA_TYPE_HEDGE_BRAND = 'HEDGE_BRAND'
DATA_FLAG_RAW = 0 ### final pack_flag = 1
DATA_FLAG_SUB = 1 ### final pack_flag = 2
DATA_FLAG_ADD = 2 ### final pack_flag = 2
DATA_FLAG_RATIO = 3 ### final pack_flag = 2
DATA_FLAG_AVG = 4 ### final pack_flag = 2 ### The current version is not in use
DATA_FLAG_HEDGE = 5 ### final pack_flag = 2
BRAND_FLAG_NATIVE = 1 ### final brand_flag = 1
BRAND_FLAG_CALCULATE = 2 ### final brand_flag = 2
BRAND_FLAG_NONE = 3 ### final brand_flag = 2
DATA_OTHER_TA = 'OTHER_TA'
DATA_OTHER_MARKET = 'OTHER_MARKET'
DATA_OTHER_MOLECULE = 'OTHER_MOLECULE'
DATA_OTHER_BRAND = 'OTHER_BRAND'
DATA_AREA_TYPE_ROC = 'ROC'
DATA_LABEL_AREA_ALL = '全国'
# COMMAND ----------
############################################################START##############################################################
### STEP-1: load data to tmp table
### STEP-2: substract data from level market to brand
### STEP-3: accumulate data from level brand to market
### STEP-4: calculate brand ratio
# COMMAND ----------
# MAGIC %md
# MAGIC ## STEP-1: load data to tmp table
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.1 load LEVEL_MARKET data to tmp.tmp_retail_level_market
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC insert overwrite table tmp.tmp_retail_level_market
# MAGIC
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC b.level_ta,
# MAGIC b.level_market,
# MAGIC a.sales_val,
# MAGIC a.sales_vol,
# MAGIC 0
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level = 'MARKET'
# MAGIC
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.2 load LEVEL_MOLECULE data to tmp.tmp_retail_level_molecule
# MAGIC -------------------------------------------------------------------------------------
# MAGIC insert overwrite table tmp.tmp_retail_level_molecule
# MAGIC
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC b.level_ta,
# MAGIC b.level_market,
# MAGIC b.level_molecule,
# MAGIC a.sales_val,
# MAGIC a.sales_vol,
# MAGIC 0
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level = 'MOLECULE'
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.3 load LEVEL_BRAND(BRAND & MULTI_BRAND) data to tmp.tmp_retail_level_brand
# MAGIC -------------------------------------------------------------------------------------
# MAGIC insert overwrite table tmp.tmp_retail_level_brand
# MAGIC
# MAGIC with exploded_data as (
# MAGIC select
# MAGIC ta,
# MAGIC market,
# MAGIC brand,
# MAGIC ifnull(common_name,'' ) as common_name,
# MAGIC level,
# MAGIC split(level_ta,',') array_ta,
# MAGIC split(level_market,',') array_market,
# MAGIC split(level_molecule,',') array_molecule,
# MAGIC split(level_brand,',') array_brand
# MAGIC from dwd.dwd_gnd_retail_split_automatic
# MAGIC where level like '%MULTI_BRAND%'
# MAGIC ), tmp_config as (
# MAGIC select
# MAGIC ta,
# MAGIC market,
# MAGIC brand,
# MAGIC common_name,
# MAGIC level,
# MAGIC array_ta[idx] as level_ta,
# MAGIC array_market[idx] as level_market,
# MAGIC array_molecule[idx] as level_molecule,
# MAGIC array_brand[idx] as level_brand
# MAGIC from exploded_data
# MAGIC lateral view posexplode(array_ta) AS idx, split_ta
# MAGIC )
# MAGIC ----------------brand data---------------------
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC b.level_ta,
# MAGIC b.level_market,
# MAGIC b.level_molecule,
# MAGIC b.level_brand,
# MAGIC a.sales_val,
# MAGIC a.sales_vol,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC 0
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level = 'BRAND'
# MAGIC
# MAGIC union all
# MAGIC ----------------multi brand data---------------------
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC b.level_ta,
# MAGIC b.level_market,
# MAGIC b.level_molecule,
# MAGIC b.level_brand,
# MAGIC a.sales_val,
# MAGIC a.sales_vol,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC 0
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join tmp_config b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.4 append HEDGE_TA data to every level
# MAGIC -- 1.4.1 append HEDGE_MARKET data to LEVEL_MARKET
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC with tmp_hedge as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC 0 - sum(a.sales_val) as hedge_val,
# MAGIC 0 - sum(a.sales_vol) as hedge_vol
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level like '%HEDGE_TA%'
# MAGIC group by a.quarter,a.province_city
# MAGIC )
# MAGIC
# MAGIC insert into tmp.tmp_retail_level_market
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC 'HEDGE_TA',
# MAGIC 'HEDGE_MARKET',
# MAGIC hedge_val,
# MAGIC hedge_vol,
# MAGIC 5
# MAGIC from tmp_hedge
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.4 append HEDGE_TA data to every level
# MAGIC -- 1.4.2 append HEDGE_MOLECULE data to LEVEL_MOLECULE
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC with tmp_hedge as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC 0 - sum(a.sales_val) as hedge_val,
# MAGIC 0 - sum(a.sales_vol) as hedge_vol
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level like '%HEDGE_TA%'
# MAGIC group by a.quarter,a.province_city
# MAGIC )
# MAGIC insert into tmp.tmp_retail_level_molecule
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC 'HEDGE_TA',
# MAGIC 'HEDGE_MARKET',
# MAGIC 'HEDGE_MOLECULE',
# MAGIC hedge_val,
# MAGIC hedge_vol,
# MAGIC 5
# MAGIC from tmp_hedge
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.4 append HEDGE_TA data to every level
# MAGIC -- 1.4.3 append HEDGE_BRAND data to LEVEL_BRAND
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC with tmp_hedge as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC 0 - sum(a.sales_val) as hedge_val,
# MAGIC 0 - sum(a.sales_vol) as hedge_vol
# MAGIC from tmp.tmp_retail_brand_rawdata a
# MAGIC inner join dwd.dwd_gnd_retail_split_automatic b
# MAGIC on a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.brand_category = b.brand
# MAGIC and ifnull(a.common_name, '') = ifnull(b.common_name, '')
# MAGIC where b.level like '%HEDGE_TA%'
# MAGIC group by a.quarter,a.province_city
# MAGIC )
# MAGIC
# MAGIC insert into table tmp.tmp_retail_level_brand
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC 'HEDGE_TA',
# MAGIC 'HEDGE_MARKET',
# MAGIC 'HEDGE_MOLECULE',
# MAGIC 'HEDGE_BRAND',
# MAGIC hedge_val,
# MAGIC hedge_vol,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC 5
# MAGIC from tmp_hedge
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-1: load data to tmp table
# MAGIC -- 1.5 load data from pack, balance level_brand
# MAGIC -- add regional data that is included in the pack but not in the brand
# MAGIC -------------------------------------------------------------------------------------
# MAGIC with tmp_pack_to_brand as (
# MAGIC select distinct a.quarter,a.level_ta,a.level_market, c.cmps_des_c,c.prod_des_c,a.product_id
# MAGIC from tmp.tmp_retail_pack_rawdata a
# MAGIC inner join dwd.dwd_gnd_ext_retail_pack_property c
# MAGIC on a.product_id = c.product_id
# MAGIC where exists (
# MAGIC select distinct b.level_ta, b.level_market
# MAGIC from dwd.dwd_gnd_retail_split_automatic b
# MAGIC where b.level_ta is not null
# MAGIC and a.level_ta = b.level_ta
# MAGIC and a.level_market = b.level_market
# MAGIC ) and a.data_flag = 0
# MAGIC and a.zk_regin <> '全国'
# MAGIC order by a.quarter,a.level_ta,a.level_market, c.cmps_des_c,c.prod_des_c
# MAGIC ), tmp_pack_sum as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.zk_regin,
# MAGIC a.level_ta,
# MAGIC a.level_market,
# MAGIC b.cmps_des_c as molecule_desc,
# MAGIC nvl(b.prod_des_c,concat(b.cmps_des_c,'_OTHER_PROD')) as product_desc,
# MAGIC sum(a.sales_value) as sales_val,
# MAGIC round(sum(a.sales_unit * (c.counting_unit/ coalesce(c.unit,1)) ) ,4) as sales_vol
# MAGIC from tmp.tmp_retail_pack_rawdata a
# MAGIC inner join tmp_pack_to_brand b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.level_ta = b.level_ta
# MAGIC and a.level_market = b.level_market
# MAGIC and a.product_id = b.product_id
# MAGIC inner join dwd.dwd_gnd_ext_retail_pack_property c
# MAGIC on a.product_id = c.product_id
# MAGIC where a.data_flag = 0 and zk_regin <> 'ROC'
# MAGIC group by a.quarter, a.zk_regin,a.level_ta,a.level_market,b.cmps_des_c,b.prod_des_c
# MAGIC order by a.quarter,a.zk_regin,a.level_ta
# MAGIC ), tmp_brand as (
# MAGIC select * from tmp.tmp_retail_level_brand where data_flag = 0
# MAGIC ),tmp_final as (
# MAGIC select
# MAGIC a.*,
# MAGIC null as ratio_val,
# MAGIC null as ratio_vol,
# MAGIC null as total_val,
# MAGIC null as total_vol,
# MAGIC 0 as data_flag --从pack聚合出来的brand数据也是真实的原生数据
# MAGIC from tmp_pack_sum a
# MAGIC where not exists (
# MAGIC select 1 from tmp_brand b
# MAGIC where a.quarter = b.quarter
# MAGIC and a.zk_regin = b.province_city
# MAGIC and a.level_ta = b.ta
# MAGIC and a.level_market = b.market
# MAGIC and a.molecule_desc = b.molecule
# MAGIC and a.product_desc = b.brand
# MAGIC )
# MAGIC )
# MAGIC
# MAGIC insert into table tmp.tmp_retail_level_brand
# MAGIC select * from tmp_final
# COMMAND ----------
# MAGIC %md
# MAGIC ## STEP-2: substract data from level market to brand
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-2: substract data from level market to brand
# MAGIC -- 2.1 substract level market data and add 'OTHER_MOLECULE' data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC with tmp_aggregate_market as (
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC sum(sales_val) as sales_val,
# MAGIC sum(sales_vol) as sales_vol
# MAGIC from tmp.tmp_retail_level_molecule
# MAGIC group by quarter, province_city , ta ,market
# MAGIC ),tmp_molecule as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC a.ta,
# MAGIC a.market,
# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val,
# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol
# MAGIC from tmp.tmp_retail_level_market a
# MAGIC left join tmp_aggregate_market b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC )
# MAGIC
# MAGIC -------append OTHER_MOLECULE to tmp.tmp_retail_level_molecule
# MAGIC insert into tmp.tmp_retail_level_molecule
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC 'OTHER_MOLECULE',
# MAGIC sales_val,
# MAGIC sales_vol,
# MAGIC 1
# MAGIC from tmp_molecule
# MAGIC where sales_val > 0 or sales_vol > 0
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-2: substract data from level market to brand
# MAGIC -- 2.2 substract level molecule data and add 'OTHER_BRAND' data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC with tmp_aggregate_molecule as (
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC molecule,
# MAGIC sum(sales_val) as sales_val,
# MAGIC sum(sales_vol) as sales_vol
# MAGIC from tmp.tmp_retail_level_brand
# MAGIC group by quarter,province_city ,ta ,market,molecule
# MAGIC ),tmp_brand as (
# MAGIC select
# MAGIC a.quarter,
# MAGIC a.province_city,
# MAGIC a.ta,
# MAGIC a.market,
# MAGIC a.molecule,
# MAGIC a.sales_val - ifnull(b.sales_val, 0) as sales_val,
# MAGIC a.sales_vol - ifnull(b.sales_vol, 0) as sales_vol
# MAGIC from tmp.tmp_retail_level_molecule a
# MAGIC left join tmp_aggregate_molecule b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.molecule = b.molecule
# MAGIC )
# MAGIC
# MAGIC -------append OTHER_BRAND to tmp.tmp_retail_level_brand
# MAGIC insert into tmp.tmp_retail_level_brand
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC molecule,
# MAGIC 'OTHER_BRAND',
# MAGIC sales_val,
# MAGIC sales_vol,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC null,
# MAGIC 1
# MAGIC from tmp_brand
# MAGIC where sales_val > 0 or sales_vol > 0
# COMMAND ----------
# MAGIC %md
# MAGIC ## STEP-3: accumulate data from level brand to market
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-3: accumulate data from level brand to market
# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND' & 'OTHER_MOLECULE' data
# MAGIC -- 3.1.1 accumulate level molecule data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC with tmp_aggregate_molecule as (
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC molecule,
# MAGIC sum(sales_val) as sales_val,
# MAGIC sum(sales_vol) as sales_vol
# MAGIC from tmp.tmp_retail_level_brand
# MAGIC group by quarter,province_city ,ta ,market,molecule
# MAGIC ), tmp_append_molecule as (
# MAGIC select a.*
# MAGIC from tmp_aggregate_molecule a
# MAGIC where not exists (
# MAGIC select 1
# MAGIC from tmp.tmp_retail_level_molecule b
# MAGIC where a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.molecule = b.molecule
# MAGIC )
# MAGIC )
# MAGIC -------append level molecule data accumulate from level brand
# MAGIC insert into tmp.tmp_retail_level_molecule
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC molecule,
# MAGIC sales_val,
# MAGIC sales_vol,
# MAGIC 2
# MAGIC from tmp_append_molecule
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-3: accumulate data from level brand to market
# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data
# MAGIC -- 3.1.2 balance 'OTHER_MOLECULE' data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC merge into tmp.tmp_retail_level_molecule a
# MAGIC using(
# MAGIC select * from tmp.tmp_retail_level_molecule
# MAGIC where data_flag = 2
# MAGIC ) as b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.molecule = 'OTHER_MOLECULE'
# MAGIC and a.data_flag = 1
# MAGIC when matched then
# MAGIC update set
# MAGIC a.sales_val = a.sales_val - b.sales_val,
# MAGIC a.sales_vol = a.sales_vol - b.sales_vol
# MAGIC
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-3: accumulate data from level brand to market
# MAGIC -- 3.1 accumulate level molecule data and balance 'OTHER_BRAND'& 'OTHER_MOLECULE' data
# MAGIC -- 3.1.3 balance 'OTHER_BRAND' data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC merge into tmp.tmp_retail_level_brand a
# MAGIC using(
# MAGIC select * from tmp.tmp_retail_level_molecule
# MAGIC where data_flag = 2
# MAGIC ) as b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.molecule = 'OTHER_MOLECULE'
# MAGIC and a.brand = 'OTHER_BRAND'
# MAGIC and a.data_flag = 1
# MAGIC when matched then
# MAGIC update set
# MAGIC a.sales_val = a.sales_val - b.sales_val,
# MAGIC a.sales_vol = a.sales_vol - b.sales_vol
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-3: accumulate data from level brand to market
# MAGIC -- 3.2 accumulate level market data and balance 'OTHER_MOLECULE' data
# MAGIC -- 3.2.1 accumulate level market data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC with tmp_aggregate_market as (
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC sum(sales_val) as sales_val,
# MAGIC sum(sales_vol) as sales_vol
# MAGIC from tmp.tmp_retail_level_molecule
# MAGIC group by quarter,province_city ,ta ,market
# MAGIC ), tmp_append_market as (
# MAGIC select a.*
# MAGIC from tmp_aggregate_market a
# MAGIC where not exists (
# MAGIC select 1
# MAGIC from tmp.tmp_retail_level_market b
# MAGIC where a.quarter = b.quarter
# MAGIC and a.province_city = b.province_city
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC )
# MAGIC )
# MAGIC -------append level market data accumulate from level molecule
# MAGIC insert into tmp.tmp_retail_level_market
# MAGIC select
# MAGIC quarter,
# MAGIC province_city,
# MAGIC ta,
# MAGIC market,
# MAGIC sales_val,
# MAGIC sales_vol,
# MAGIC 2
# MAGIC from tmp_append_market
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-3: accumulate data from level brand to market
# MAGIC -- 3.2 accumulate level market data and balance 'OTHER_MOLECULE' data
# MAGIC -- 3.2.2 balance 'OTHER_MOLECULE' data
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC ---------not using in this case, beacuse level ta has no data------------------------
# MAGIC --merge into tmp.tmp_retail_level_market a
# MAGIC --using(
# MAGIC -- select * from tmp.tmp_retail_level_molecule
# MAGIC -- where data_flag = 2
# MAGIC --) as b
# MAGIC --on a.quarter = b.quarter
# MAGIC --and a.province_city = b.province_city
# MAGIC --and a.ta = b.ta
# MAGIC --and a.market = 'OTHER_MARKET'
# MAGIC --and a.data_flag = 1
# MAGIC --when matched then
# MAGIC -- update set
# MAGIC -- a.sales_val = a.sales_val - b.sales_val,
# MAGIC -- a.sales_vol = a.sales_vol - b.sales_vol
# COMMAND ----------
# MAGIC %md
# MAGIC ## STEP-4: calculate brand ratio
# COMMAND ----------
# MAGIC %sql
# MAGIC -------------------------------------------------------------------------------------
# MAGIC -- STEP-4: calculate brand ratio
# MAGIC -- update total_val&total_vol and ratio_val&ratio_vol
# MAGIC -------------------------------------------------------------------------------------
# MAGIC
# MAGIC merge into tmp.tmp_retail_level_brand a
# MAGIC using(
# MAGIC select * from tmp.tmp_retail_level_brand
# MAGIC where province_city = '全国'
# MAGIC ) as b
# MAGIC on a.quarter = b.quarter
# MAGIC and a.ta = b.ta
# MAGIC and a.market = b.market
# MAGIC and a.molecule = b.molecule
# MAGIC and a.brand = b.brand
# MAGIC when matched then
# MAGIC update set
# MAGIC a.total_val = b.sales_val,
# MAGIC a.total_vol = b.sales_vol,
# MAGIC a.ratio_val = round(a.sales_val/b.sales_val,10),
# MAGIC a.ratio_vol = round(a.sales_vol/b.sales_vol,10)
# COMMAND ----------
############################################################END##############################################################