672 lines
22 KiB
Python
672 lines
22 KiB
Python
# 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############################################################## |