通过 sql 理解业务

892 阅读5分钟

“我正在参加「掘金·启航计划」”

前言

BI 业务中平常会很多数据分析的场景。作为前端可能只是传一些指定的参数给后端,至于这些业务场景究竟对数据做了哪些处理是一个黑盒。今天就来一探究竟,这些数据分析究竟做了啥。

什么是 BI

商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。

可以简单理解为对数据进行多种分析。常见的分析有:

  • Filter,Sort等基本操作
  • 联动,下钻
  • 高级计算:同环比计算,百分比,TopN、累计计算
  • 聚合方式: 求和、平均值、方差、标准差、自定义函数
  • 预测分析、异常分析

基础的分析场景

简单了解了 BI,我们知道它是对数据进行分析处理,然后以图表的形式将数据展示给用户。再我们进行搭建图表前,还需要了解一个概念 数据集,它为我们搭建图表提供数据基础。

数据集是可视化分析的基础,您可以将需要分析的数据表创建为数据集

准备了数据集,我们现在可以开始搭建图表了。

新建图表

image.png 我们在数据面板上拖入了,区域、省份、订单金额。用户就可以查出各个区域,各个省份的订单金额。

来看下如何写这个 sql 查询

select 
    area, 
    province,
    order_amt 
from 
    company_sales 
group by 
    area,
    province
  1. 通过 select 查询我们想要的三个字段
  2. 需要看各个区域的数据对,area 字段进行 group by
  3. 需要看各个省份的数据(区域是大区,概念上范围大于省份),对 province 进行 group by

最终我们看到表中所有区域下所有的省份的订单金额。

排序
在上面搭建的图表基础上,如果想要看图表的排序后的数据。

select 
    area, 
    province,
    order_amt 
from 
    company_sales 
group by 
    area,
    province
order by 
    asc

image.png 在前端设置了升降序,查询数据时,通过 order by 可以对数据进行升序降序的处理。

聚合查询

维度/度量

简单介绍下维度和度量的概念。可以看到图1,拖拽了两个蓝色的字段(维度),一个绿色的字段(度量)。

维度和度量有什么区别吗?

维度:说明数据,维度是指可指定不同值的对象的描述性属性或特征。例如: 区域分为华东、华北...等区域。省份分为浙江、上海、山东等。通常是字符串描述一个维度。

度量:度量就是基于某个属性对其属性的指标进行衡量。例如月平均销售额度。通常是对数值的处理结果。例如平均计算、求和计算。

简单理解

  • 维度是字符串或日期的字段如: province、订单号、产品名称。
  • 度量是数值字段,如订单金额、订单数、成功率(可以对度量进行聚合处理)。

聚合查询

sql 中包含了很多聚合函数,在实际的业务分析场景中,我们会经常用到它们。来举个例子。

查询最大值 如果我们想要看到各个省单笔销最大值。

image.png 我们会对度量字段进行聚合函数处理,因为维度是文本/日期无法使用聚合函数,度量(数值)可以聚合处理。

select 
    province,
    max(order_amt)
from 
    company_sales
group by 
    province

通过 max 对订单进行处理。获取到每个省内所有订单中最大的一笔。

查询平均值

image.png

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。

销售总额月环比

image.png 计算出每个月的销售总额相比于上个月增长了多少。

select 
    DATE_FORMAT(month,'%Y%m'),
    sum(order_amt)
from 
    company_sales
group by 
     DATE_FORMAT(month,'%Y%m')

通过上面的 sql 拿到每个月的销售总额。然后根据拿到的结果运算出月环比。

联动下钻

下钻

image.png

  1. 查询出各个区域的销售额
  2. 当点击指定的区域,下钻后,查看具体区域下所有的省份的销售额

来看下下钻时,是如何查询具体的数据的

select 
    area,
    sum(order_amt)
from 
    company_sales
where area = '华东'
group by 
    province
  1. 查询区域为华东的数据
  2. 然后对数据进行 province group by 获取各个省份的数据。

联动

  1. 查询出各个区域的销售额
  2. 点击华东联动,右侧图表展示华北相关的数据。

联动时本图表数据并未发生变化,被联动的图表发生了数据变化

select 
    sum(order_amt),
    // ... 其他查询字段
from 
    company_sales
where area = '华东'
group by 
    area,
    province

可以看出来,被联动图表在联动时增加了 where 查询条件。因此获取我们关注的华东数据。

过滤器

如果我们只想要查看东北、华北这两个区域的数据,这时候就可以使用过滤器

image.png 此时发现查询结果中只包含了这两个区域的数据。

image.png

image.png

select 
    area,
    province,
    sum(order_amt)
from 
    company_sales
where 
    area in ('东北', '华北')
group by 
    area,
    province

在此基础上,想要查看订单金额超过 30w 的数据,可以再添加一个 order_amt 的过滤器。

image.png

select 
    area,
    province,
    sum(order_amt)
from 
    company_sales
where 
    area in ('东北', '华北')
having
    order_amt >= 300000
group by 
    area,
    province

其他

通过上述数据分析场景,理解业务场景对应的 sql,对业务理解也有所加深。
除了上述的分析场景,我们还可以通过动态条件,sql 参数动态注入 sql 参数。增加查询的灵活性。随着后续的学习和理解再做分享吧。