“我正在参加「掘金·启航计划」”
前言
BI 业务中平常会很多数据分析的场景。作为前端可能只是传一些指定的参数给后端,至于这些业务场景究竟对数据做了哪些处理是一个黑盒。今天就来一探究竟,这些数据分析究竟做了啥。
什么是 BI
商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。
可以简单理解为对数据进行多种分析。常见的分析有:
- Filter,Sort等基本操作
- 联动,下钻
- 高级计算:同环比计算,百分比,TopN、累计计算
- 聚合方式: 求和、平均值、方差、标准差、自定义函数
- 预测分析、异常分析
基础的分析场景
简单了解了 BI,我们知道它是对数据进行分析处理,然后以图表的形式将数据展示给用户。再我们进行搭建图表前,还需要了解一个概念 数据集,它为我们搭建图表提供数据基础。
数据集是可视化分析的基础,您可以将需要分析的数据表创建为数据集
准备了数据集,我们现在可以开始搭建图表了。
新建图表
我们在数据面板上拖入了,区域、省份、订单金额。用户就可以查出各个区域,各个省份的订单金额。
来看下如何写这个 sql 查询
select
area,
province,
order_amt
from
company_sales
group by
area,
province
- 通过 select 查询我们想要的三个字段
- 需要看各个区域的数据对,area 字段进行 group by
- 需要看各个省份的数据(区域是大区,概念上范围大于省份),对 province 进行 group by
最终我们看到表中所有区域下所有的省份的订单金额。
排序
在上面搭建的图表基础上,如果想要看图表的排序后的数据。
select
area,
province,
order_amt
from
company_sales
group by
area,
province
order by
asc
在前端设置了升降序,查询数据时,通过 order by 可以对数据进行升序降序的处理。
聚合查询
维度/度量
简单介绍下维度和度量的概念。可以看到图1,拖拽了两个蓝色的字段(维度),一个绿色的字段(度量)。
维度和度量有什么区别吗?
维度:说明数据,维度是指可指定不同值的对象的描述性属性或特征。例如: 区域分为华东、华北...等区域。省份分为浙江、上海、山东等。通常是字符串描述一个维度。
度量:度量就是基于某个属性对其属性的指标进行衡量。例如月平均销售额度。通常是对数值的处理结果。例如平均计算、求和计算。
简单理解
- 维度是字符串或日期的字段如: province、订单号、产品名称。
- 度量是数值字段,如订单金额、订单数、成功率(可以对度量进行聚合处理)。
聚合查询
sql 中包含了很多聚合函数,在实际的业务分析场景中,我们会经常用到它们。来举个例子。
查询最大值 如果我们想要看到各个省单笔销最大值。
我们会对度量字段进行聚合函数处理,因为维度是文本/日期无法使用聚合函数,度量(数值)可以聚合处理。
select
province,
max(order_amt)
from
company_sales
group by
province
通过 max 对订单进行处理。获取到每个省内所有订单中最大的一笔。
查询平均值
select
province,
avg(order_amt)
from
company_sales
group by
province
高级计算
同环比
环比表示本次统计段与相连的上次统计段之间的比较。比如2010年中国第一季度GDP为G10-1亿元,第二季度GDP为G10-2亿元,则第二季度GDP环比增长(G10-2-G10-1)/G10-1;
同比,即同期相比,表示某个特定统计段今年与去年之间的比较。比如2009年中国第一季度GDP为G9-1亿元,则2010年第一季度的GDP同比增长为(G10-1-G9-1)/G9-1。
销售总额月环比
计算出每个月的销售总额相比于上个月增长了多少。
select
DATE_FORMAT(month,'%Y%m'),
sum(order_amt)
from
company_sales
group by
DATE_FORMAT(month,'%Y%m')
通过上面的 sql 拿到每个月的销售总额。然后根据拿到的结果运算出月环比。
联动下钻
下钻
- 查询出各个区域的销售额
- 当点击指定的区域,下钻后,查看具体区域下所有的省份的销售额
来看下下钻时,是如何查询具体的数据的
select
area,
sum(order_amt)
from
company_sales
where area = '华东'
group by
province
- 查询区域为华东的数据
- 然后对数据进行 province group by 获取各个省份的数据。
联动
- 查询出各个区域的销售额
- 点击华东联动,右侧图表展示华北相关的数据。
联动时本图表数据并未发生变化,被联动的图表发生了数据变化
select
sum(order_amt),
// ... 其他查询字段
from
company_sales
where area = '华东'
group by
area,
province
可以看出来,被联动图表在联动时增加了 where 查询条件。因此获取我们关注的华东数据。
过滤器
如果我们只想要查看东北、华北这两个区域的数据,这时候就可以使用过滤器
此时发现查询结果中只包含了这两个区域的数据。
select
area,
province,
sum(order_amt)
from
company_sales
where
area in ('东北', '华北')
group by
area,
province
在此基础上,想要查看订单金额超过 30w 的数据,可以再添加一个 order_amt 的过滤器。
select
area,
province,
sum(order_amt)
from
company_sales
where
area in ('东北', '华北')
having
order_amt >= 300000
group by
area,
province
其他
通过上述数据分析场景,理解业务场景对应的 sql,对业务理解也有所加深。
除了上述的分析场景,我们还可以通过动态条件,sql 参数动态注入 sql 参数。增加查询的灵活性。随着后续的学习和理解再做分享吧。