报表分析-以最小颗粒的方式进行
近来时间,在做报表相关的东西,做个总结,数据量不太大,直接查的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 协议》,转载必须注明作者和本文链接