Quick BI的SQL传参建模可以用在什么场景 阿里巴巴
程序员文章站
2022-06-11 10:35:28
...
Quick B的SQL传参建模功能提供基于SQL的数据加工处理能力,减轻了IT支撑人员的工作量。在即席查询SQL中,我们用物理字段![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Main/Regular/400/003A.png?V=2.7.2)显示别名来表示参数的占位符,配置完占位符后,就可以在查询控件中进行参数绑定。在![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0051.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0075.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0069.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0063.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/006B.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0042.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0049.png?V=2.7.2)的![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0053.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/0051.png?V=2.7.2)![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Math/Italic/400/004C.png?V=2.7.2)传参建模中,本质透传的是逻辑条件,执行过程中会将![](https://yqfile.alicdn.com/mathjax/2.7.2/fonts/HTML-CSS/TeX/png/Main/Regular/400/201C.png?V=2.7.2)物理字段:显示别名来表示参数的占位符,配置完占位符后,就可以在查询控件中进行参数绑定。在QuickBI的SQL传参建模中,本质透传的是逻辑条件,执行过程中会将“{物理字段:显示别名}”替换为“物理字段 > 查询值 ” 或 “物理字段 = 查询值 ” 或 “物理字段 in (查询值A、查询值B、查询值C) ” 或 “物理字段>= 查询值A and物理字段<= 查询值B”。下面我们来看看,哪些场景会用到Quick B的SQL传参建模功能吧!
场景一:任意时间段内的用户购买行为分析
1. 场景描述:在零售行业往往需要分析用户的活跃度和客户的忠诚度,那么通过分析任意时间段内用户购买频率是常用的分析思路。
2. 基于SQL传参如何实现:
1) SQL建模,这个场景就是典型的二次聚合分析,而且任意时间段,需要作用到子查询中,SQL建模语句如下:
select
sum(case when buy\_cnt = 1 then 1 else 0 end ) as buy\_cut\_1,
sum(case when buy\_cnt = 2 then 1 else 0 end ) as buy\_cut\_2,
sum(case when buy\_cnt >2 and buy\_cnt<=5 then 1 else 0 end ) as buy\_cut\_2\_5,
sum(case when buy\_cnt >5 and buy\_cnt<=10 then 1 else 0 end ) as buy\_cut\_5\_10,
sum(case when buy\_cnt >10 and buy\_cnt<=20 then 1 else 0 end ) as buy\_cut\_10\_20,
sum(case when buy\_cnt >20 then 1 else 0 end ) as buy\_cut\_up\_20
from
(SELECT a.customer\_name,
count(a.order\_id) as buy\_cnt
from company\_sales\_record\_copy a
WHERE ${a.report\_date : date\_test } /_定义查询时间参数_/
group by a.customer\_name
) b
2) 参数设置,在Quick BI中SQL传参本质上传逻辑条件,SQL传参需要选择为“日期-年月日”,供查询控件中识别数据类型。
![image](https://yqfile.alicdn.com/0ccee3234d12239a52f58cc7351131484d33e382.png)
3) 点击“创建数据集”,构建“任意时间多次购买客户数”数据集
![image](https://yqfile.alicdn.com/f0c6a041ef95319d83d2e5a822ef0fab364cbb71.png)
4) 仪表板配置,以交叉表配置为例。选择对应SQL传参建模数据集,拖拽选择需要展现的字段。如下所示:
![image](https://yqfile.alicdn.com/4a869bcd6d2e7e48752b4f37118899495d7dd286.png)
5) 查询项绑定配置,选择SQL参数项作为查询条件项,设置查询项与图表组件的关联关系和筛选项展现形式。如下图所示:
![image](https://yqfile.alicdn.com/9458cae1451ae3549e362c77c5f740488fa34c3c.png)
6) 数据验证:点击查询进行数据验证和SQL准确性验证。Quick BI的SQL引擎根据查询条件配置和SQL传参建模进行参数绑定。如下图所示:
![image](https://yqfile.alicdn.com/bb567584bb101145c78164400ef626ae06522107.png)
通过以上六步操作,就可以很好的实现SQL传参建模的全流程穿越,以此来支撑多次聚合的复杂分析场景。
场景二、销售库存类数据分析(SQL建模供参考)
1.场景描述:在零售行业分析任意时间段的库存和销量数据是比较常用的需求,通过该数据分析甄别某个商品近期销售情况和库存?针对这样的场景,如何构建Quick BI的SQL传参建模?
1) 数据样例,后台数据具体字段包括(统计日期、省份、城市、期初库存、进货量、出货量、期末库存等):
![image](https://yqfile.alicdn.com/59d062c19a7a32d3f6876ceec8fb24b36af297a4.png)
2) 需要实现结果说明,基于以上数据,假设需要分析20190801~20190820浙江杭州的销售库存数据,需要给出的结果为:(期初库存取汇总开始时间的期初库存值,期末库存取汇总结束时间的期末库存值,进货朗、出货量采用sum汇总),另外时间为筛选区间。
![image](https://yqfile.alicdn.com/d4bfd03d00339d2f647eaff195136755ae9c29f8.png)
3) Quick BI中SQL建模语句如下(供参考):
SELECT QBI\_T\_1\_.`COL_2` AS '省份',
```
QBI_T_1_.`COL_3` AS '城市',
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
sum( case when QBI\_T\_1\_.COL\_1 = start\_date then QBI\_T\_1\_.`COL_4`else 0 end) as '期初库存',
SUM(QBI\_T\_1\_.`COL_5`) AS '进货量',
SUM(QBI\_T\_1\_.`COL_6`) AS '出货量',
SUM(case when QBI\_T\_1\_.COL\_1 = end\_date then QBI\_T\_1\_.`COL_7` else 0 end ) as '期末库存'
FROM `quickbi_test`.`QBI_0808_1566542575222` AS QBI\_T\_1\_ /_每日库存销量表_/
left join (
select min(a.`COL_1`) as start\_date,
max(a.`COL_1`) as end\_date
FROM `quickbi_test`.`QBI_0808_1566542575222` AS a /_每日库存销量表_/
where ${a.`COL_1`:report\_date} /_查询项中绑定的SQL传参_/
```
) b /*获取待汇总的统计时间*/
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
on (
```
QBI_T_1_.COL_1 >= start_date
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
and QBI\_T\_1\_.COL\_1 <= end\_date
```
)
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
group by QBI\_T\_1\_.`COL_2`,
```
QBI_T_1_.`COL_3`
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
阿里巴巴数据中台团队,致力于输出阿里云数据智能的最佳实践,助力每个企业建设自己的数据中台,进而共同实现新时代下的智能商业!
阿里巴巴数据中台解决方案,核心产品:
Dataphin,以阿里巴巴大数据核心方法论OneData为内核驱动,提供一站式数据构建与管理能力;
Quick BI,集阿里巴巴数据分析经验沉淀,提供一站式数据分析与展现能力;
Quick Audience,集阿里巴巴消费者洞察及营销经验,提供一站式人群圈选、洞察及营销投放能力,连接阿里巴巴商业,实现用户增长。
[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/727597%3Futm_content%3Dg_1000089494)
本文为云栖社区原创内容,未经允许不得转载。
场景一:任意时间段内的用户购买行为分析
1. 场景描述:在零售行业往往需要分析用户的活跃度和客户的忠诚度,那么通过分析任意时间段内用户购买频率是常用的分析思路。
2. 基于SQL传参如何实现:
1) SQL建模,这个场景就是典型的二次聚合分析,而且任意时间段,需要作用到子查询中,SQL建模语句如下:
select
sum(case when buy\_cnt = 1 then 1 else 0 end ) as buy\_cut\_1,
sum(case when buy\_cnt = 2 then 1 else 0 end ) as buy\_cut\_2,
sum(case when buy\_cnt >2 and buy\_cnt<=5 then 1 else 0 end ) as buy\_cut\_2\_5,
sum(case when buy\_cnt >5 and buy\_cnt<=10 then 1 else 0 end ) as buy\_cut\_5\_10,
sum(case when buy\_cnt >10 and buy\_cnt<=20 then 1 else 0 end ) as buy\_cut\_10\_20,
sum(case when buy\_cnt >20 then 1 else 0 end ) as buy\_cut\_up\_20
from
(SELECT a.customer\_name,
count(a.order\_id) as buy\_cnt
from company\_sales\_record\_copy a
WHERE ${a.report\_date : date\_test } /_定义查询时间参数_/
group by a.customer\_name
) b
2) 参数设置,在Quick BI中SQL传参本质上传逻辑条件,SQL传参需要选择为“日期-年月日”,供查询控件中识别数据类型。
![image](https://yqfile.alicdn.com/0ccee3234d12239a52f58cc7351131484d33e382.png)
3) 点击“创建数据集”,构建“任意时间多次购买客户数”数据集
![image](https://yqfile.alicdn.com/f0c6a041ef95319d83d2e5a822ef0fab364cbb71.png)
4) 仪表板配置,以交叉表配置为例。选择对应SQL传参建模数据集,拖拽选择需要展现的字段。如下所示:
![image](https://yqfile.alicdn.com/4a869bcd6d2e7e48752b4f37118899495d7dd286.png)
5) 查询项绑定配置,选择SQL参数项作为查询条件项,设置查询项与图表组件的关联关系和筛选项展现形式。如下图所示:
![image](https://yqfile.alicdn.com/9458cae1451ae3549e362c77c5f740488fa34c3c.png)
6) 数据验证:点击查询进行数据验证和SQL准确性验证。Quick BI的SQL引擎根据查询条件配置和SQL传参建模进行参数绑定。如下图所示:
![image](https://yqfile.alicdn.com/bb567584bb101145c78164400ef626ae06522107.png)
通过以上六步操作,就可以很好的实现SQL传参建模的全流程穿越,以此来支撑多次聚合的复杂分析场景。
场景二、销售库存类数据分析(SQL建模供参考)
1.场景描述:在零售行业分析任意时间段的库存和销量数据是比较常用的需求,通过该数据分析甄别某个商品近期销售情况和库存?针对这样的场景,如何构建Quick BI的SQL传参建模?
1) 数据样例,后台数据具体字段包括(统计日期、省份、城市、期初库存、进货量、出货量、期末库存等):
![image](https://yqfile.alicdn.com/59d062c19a7a32d3f6876ceec8fb24b36af297a4.png)
2) 需要实现结果说明,基于以上数据,假设需要分析20190801~20190820浙江杭州的销售库存数据,需要给出的结果为:(期初库存取汇总开始时间的期初库存值,期末库存取汇总结束时间的期末库存值,进货朗、出货量采用sum汇总),另外时间为筛选区间。
![image](https://yqfile.alicdn.com/d4bfd03d00339d2f647eaff195136755ae9c29f8.png)
3) Quick BI中SQL建模语句如下(供参考):
SELECT QBI\_T\_1\_.`COL_2` AS '省份',
```
QBI_T_1_.`COL_3` AS '城市',
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
sum( case when QBI\_T\_1\_.COL\_1 = start\_date then QBI\_T\_1\_.`COL_4`else 0 end) as '期初库存',
SUM(QBI\_T\_1\_.`COL_5`) AS '进货量',
SUM(QBI\_T\_1\_.`COL_6`) AS '出货量',
SUM(case when QBI\_T\_1\_.COL\_1 = end\_date then QBI\_T\_1\_.`COL_7` else 0 end ) as '期末库存'
FROM `quickbi_test`.`QBI_0808_1566542575222` AS QBI\_T\_1\_ /_每日库存销量表_/
left join (
select min(a.`COL_1`) as start\_date,
max(a.`COL_1`) as end\_date
FROM `quickbi_test`.`QBI_0808_1566542575222` AS a /_每日库存销量表_/
where ${a.`COL_1`:report\_date} /_查询项中绑定的SQL传参_/
```
) b /*获取待汇总的统计时间*/
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
on (
```
QBI_T_1_.COL_1 >= start_date
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
and QBI\_T\_1\_.COL\_1 <= end\_date
```
)
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
group by QBI\_T\_1\_.`COL_2`,
```
QBI_T_1_.`COL_3`
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
阿里巴巴数据中台团队,致力于输出阿里云数据智能的最佳实践,助力每个企业建设自己的数据中台,进而共同实现新时代下的智能商业!
阿里巴巴数据中台解决方案,核心产品:
Dataphin,以阿里巴巴大数据核心方法论OneData为内核驱动,提供一站式数据构建与管理能力;
Quick BI,集阿里巴巴数据分析经验沉淀,提供一站式数据分析与展现能力;
Quick Audience,集阿里巴巴消费者洞察及营销经验,提供一站式人群圈选、洞察及营销投放能力,连接阿里巴巴商业,实现用户增长。
[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/727597%3Futm_content%3Dg_1000089494)
本文为云栖社区原创内容,未经允许不得转载。
上一篇: OJ ----- 牛客JZ30 : 连续子数组的最大和
下一篇: 【数据库】178. 分数排名