近來時間,在做報表相關的東西,做個總結,資料量不太大,直接查的mysql。正在調研,轉出mysql,有經驗的夥伴,還請指點一二
1 資料的最小顆粒
最小顆粒就是能用一條sql給查出來,且能和其他最小顆粒進行合併在一起作為最小顆粒
最小顆粒
的特性是 可被搜尋
,最終會反映到 最終顆粒
中
Laravel
如何優雅的被搜尋,可參考資料分析-基礎維度
比如
- 區域顆粒
- 品牌顆粒
- 門店顆粒
- 商品顆粒
- sku顆粒
- 訂單顆粒
- 訂單明細顆粒
- 支付方式顆粒
- 訂單優惠顆粒(在訂單中會有一個總優惠,可分開儲存,也可不分開,看業務邏輯的複雜度)
- 訂單明細優惠顆粒 (在訂單明細中會有一個總優惠,可分開儲存,也可不分開,看業務邏輯的複雜度)
2 最小顆粒的組合
什麼樣的顆粒可以組合起來呢,在同一維度上的可以組合起來,這維度可以以需求(之前區分更像現在的顆粒
)來區分(所有維度都是圍繞著訂單來的)。比如可以分為
- 以訂單維度(各個門店的營業額)
區域顆粒
、品牌顆粒
和門店顆粒
可以組合為地址顆粒
(因為門店在某一區域下,門店在某一品牌下)地址顆粒
和訂單顆粒
組合為最終顆粒
(應為訂單在某一地址(門店)下)- 之後就是對
最終顆粒
的聚合分析
//最終顆粒中有以下欄位
area_id //區域id
brand_id //品牌id
store_id //門店id
order_id //訂單id
pay_time //支付時間
pay_money //支付金額
//可分析以下資料
//某一時段內各個門店的營業額=門店營業額
select area_id,brand_id,store_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY store_id
//某一時段內每天各個門店的營業額=每天門店營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id,brand_id,store_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY store_id
//某一時間段內每天各個區域的營業額=每天區域營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY area_id
//某一時間段內每天各個品牌的營業額=每天品牌營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,brand_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY brand_id
//某一時間段內每天各個區域下各個品牌的營業額=每天區域下品牌營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id,brand_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY area_id GROUP BY brand_id
以商品sku維度(每個商品的sku賣了多少錢)
區域顆粒
、品牌顆粒
和門店顆粒
可以組合為地址顆粒
(因為門店在某一區域下,門店在某一品牌下)地址顆粒
和訂單明細顆粒
組合為最終顆粒
(訂單明細如果沒有store_id
和pay_time
,可通過訂單顆粒
作為橋接)
//最終顆粒中有以下欄位 area_id //區域id brand_id //品牌id store_id //門店id goods_id //商品id sku_id // sku_id pay_time //支付時間 pay_money //訂單明細顆粒的支付金額 //可分析以下資料 //某一時段內每天各個sku的營業額 select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,sku_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY sku_id //某一時間段內每天各個區域下各個品牌的各個門店的各個商品的各個sku營業額營業額(和上面等效,因為每個sku的字首都一樣,即area_id,brand_id,store_id,goods_id 一樣) select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id,brand_id,store_id,goods_id,sku_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY area_id GROUP BY brand_id GROUP BY store_id GROUP BY goods_id GROUP BY sku_id //某一時間段內每天各個區域下各個品牌的各個門店的各個商品的營業額 select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id,brand_id,store_id,goods_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY area_id GROUP BY brand_id GROUP BY store_id GROUP BY goods_id
- 以支付方式維度(每個支付方式多少錢)
區域顆粒
、品牌顆粒
和門店顆粒
可以組合為地址顆粒
(因為門店在某一區域下,門店在某一品牌下)地址顆粒
和支付方式顆粒
組合為最終顆粒
(支付方式可加store_id 和pay_time欄位,也可通過訂單顆粒
作為橋接)
//最終顆粒中有以下欄位
area_id //區域id
brand_id //品牌id
store_id //門店id
pay_type //支付方式 一條訂單可對應多個支付方式
pay_time //支付時間
pay_money //支付方式的支付金額
//可分析以下資料
//某一時段內每天各個支付方式的營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,pay_type, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY pay_type
//某一時間段內每天各個區域下各個品牌的各個門店的各個支付方式的營業額
select DATE_FORMAT(pay_time, '%Y-%m-%d') as pay_date_time ,area_id,brand_id,store_id,goods_id, sum(pay_money) as total_pay_money from `最終顆粒` where pay_time BETWEEN time1 and time2 GROUP BY pay_date_time GROUP BY area_id GROUP BY brand_id GROUP BY store_id GROUP BY pay_type
本作品採用《CC 協議》,轉載必須註明作者和本文連結