有奖捉虫:行业应用 & 管理与支持文档专题 HOT

使用场景

在数据分析的过程中,若您的数据量较大,期望在分析时提升查询速度,可在 SQL 建表时创建参数,并与报表的过滤筛选器绑定。在查看报表时 BI 将会把筛选内容传到 SQL 参数中,在 SQL 查询时就预先过滤,以提升查询速度。

例如您的数据表中包含2020 ~ 2023年3年的数据,日常分析时只需要分析2023年数据。若不使用参数,在报表查看时使用时间筛选器筛选2023年数据,系统会先查询2020 ~ 2023年这3年的数据再取2023年数据展示。若使用参数并与时间筛选器绑定,则报表查看时使用时间筛选器筛选2023年数据,系统会将2023年作为查询条件替换掉 SQL 中的参数,仅查询2023年的数据。因此使用参数后查询数据量为原先的三分之一,速度是原来的三倍。

说明:
版本功能限制说明:本功能仅支持专业版用户使用。

SQL 参数的创建

在 SQL 建表界面,SQL 语句输入框中,以输入${参数名}来定义参数,例如输入${A}则代表定义了一个参数名为A的参数。



假设有一张统计全国商品销售情况的数据表(如下图),希望在制作报表时配置地区、时间、销售额的筛选器(地区是单选筛选器、时间是时间区间筛选器,销售额是数值区间筛选器)筛选器的筛选的值能直接作用在 SQL 中,提升查询速率



此时在输入框中如下图所示书写语句,定义好 A、B、C、D、E 五个参数。注意语句的写法需和筛选器的用法搭配,例如 area 即地区字段后续使用的是单选筛选器,仅传一个值,就写法为“area = '${A}'”。若计划使用的是多选筛选器,传多个值,则写法应为“area in '${A}'”。



写法如下供复制及参考
select * FROM dataSales_1000000
where area = '${A}'
and subscriptionDate >= '${B}' and subscriptionDate <= '${C}' and salesAmount >= '${D}' and salesAmount <= '${E}'
书写完 SQL 后单击参数配置,可在此确认定义的参数。并设置参数的类型和查询默认值。



参数类型分“字符”、“数值”、“时间”三种,当选择类型为时间时还会拓展对时间格式的选择,默认是“YYYY-MM-DD”。参数类型的定义会影响后续能绑定的筛选器类型,如数值类型仅能绑定数值筛选器,字符类型仅能绑定文本筛选器,时间类型仅能绑定时间筛选器。在此例子中,A后续绑定文本筛选器,所以设置为字符型;B、C绑定时间筛选器,所以设置为时间类型;D、E绑定数值筛选器,所以设置为数值类型。



查询默认值指没有通过筛选器给参数传值的场景下,数据查询时参数的默认值。例如SQL建表时下方的数据预览、数据表查看页、报表页面筛选器未进行设置等场景。此字段非必填,未填会用“1=1”的恒等式替代。数据量过大时推荐配置,减少查询时间。例如在这个例子中的数据表有百万行,若未设置默认值查询会较慢如下图所示



此时建议可以给 B、C 设置默认值,默认仅查询22年3月份数据,如下图一所示。这样默认仅查询22年3月份数据,如下图二所示,速度便会快很多。







在配置弹窗中设置完参数的类型和默认值后,需单击“确定”提交才可生效,否则不生效。

若您想查看最终执行的 SQL,可单击查看 SQL 进行查看。此时您将看到参数被默认值替换(若未设置默认值,则是用恒等式替换)的最终结果,如下图二。







若需新增或删除参数,需在 SQL 语句框内新增或删除参数后,进入“参数配置”单击确定提交修改结果

SQL 参数的绑定

假设在画布页中已经配好一个全国销售概况的图表。接下来讲解如何配置与参数绑定的筛选器。需配置地区的单选筛选器、时间区间筛选器,销售额的数值区间筛选器。



首先配置地区的单选筛选器。从左侧拖出文本筛选器



在关联图表时选择关联参数



SQL 语句中的写法是“area = '${A}'”,所以我们选择关联参数A,选择方式改为单选(若选择多选,则 SQL 写法应该是in不是=),然后保存即配置完成。



此时筛选“华北”,则参数A会被替换为“华北”,进而呈现筛选结果



接下来配置时间区间筛选器,从左侧拉取出时间筛选器。相关语句写法为 subscriptionDate >= '${B}' and subscriptionDate <= '${C}',所以将时间筛选的起始值绑到B参数,结束值绑到C参数上






确定保存后,时间筛选器即可生效。



最后对销售额的数值区间筛选器,从左侧拖出数值筛选器。相关语句写法是 salesAmount >= '${D}' and salesAmount <= '${E}',所以选择类型为数值区间,然后起始值绑定D参数,结束值绑定E参数。



确定后即可生效,可筛选例如销售额大于15万,小于16万的数据。




时间函数和偏移量

1. BI 的 SQL 参数,支持时间函数,例如 ${yyyyMMdd}、${yyyy-MM-dd} 等。其中,yyyy 表示4位的年份,yy 表示2位的年份,MM 表示月,dd 表示天,HH 表示时,mm 表示分,ss 表示秒。各部分之间支持灵活组合,如下表:
时间参数
替换值示例(假设当前时间是2021年7月10号8:00:00)
${yyyy}
2021
${yyyyMMdd}
20210710
${yyyy-MM-dd}
2021-07-10
${yyyy/MM/dd}
2021/07/10
${yyyyMMddHHmmss}
20210710080000
${yyyyMMddHHmm}
202107100800
${yyyyMMddHH}
2021071008
${yyyy-MM-dd HHmmss}
2021-07-10 080000
${yyyy-MM-dd HHmm}
2021-07-10 0800
${yyyy-MM-dd HH}
2021-07-10 08
2. 支持偏移量的写法,如下表
时间
时间参数格式
替换值示例(假设当前时间是2021年7月10号8:00:00)
后 N 年
${yyyyMMdd+Ny}
若引用 dt=${yyyyMMdd-1M},将执行替换:dt=20210610
若引用 dt=${yyyyMMdd-1d},将执行替换:dt=20210709
若引用 dt=${yyyy-MM-dd-1d},将执行替换:dt=2021-07-09
若引用 dt=${yyyyMMddHHmmss-3h},将执行替换:dt=20210710050000
若引用 dt=${yyyyMMddHHmmss-25m},将执行替换:dt=20210710073500
前 N 年
${yyyyMMdd-Ny}
后 N 月
${yyyyMMdd+NM}
前 N 月
${yyyyMMdd-NM}
后 N 周
${yyyyMMdd+Nw}
前 N 周
${yyyyMMdd-Nw}
后 N 天
${yyyyMMdd+Nd}
前 N 天
${yyyyMMdd-Nd}
3. 支持常见的日期的转换表达式,如下:
时间参数格式
说明
示例(假设当前时间是2021年7月10号8:00:00)
${yyyyMMdd+ME}
MONTH END 数据日期对应月末
20210731
${yyyyMMdd+MS}
MONTH START 数据日期对应月初
20210701
${yyyyMMdd+QE}
QUARTER END 数据日期对应季末
20210930
${yyyyMMdd+QS}
MONTH START 数据日期对应季初
20210701
${yyyyMMdd+YE}
YEAR END 数据日期对应年末
20211231
${yyyyMMdd+YS}
YEAR START 数据日期对应年初
20210101
${yyyyMMdd+PME}
PRI MONTH END 数据日期对应上月月末
20210630
${yyyyMMdd+PYE}
PRI YEAR END #数据日期上年年末
20201231
4. 支持组合使用,例如(假设当前时间是2021年7月10号8:00:00):
偏移量的组合,如 ${yyyyMMdd-1M-1d}=20210609
时间函数和偏移量的组合,如 ${yyyyMMdd+ME-1d}=20210730,如${yyyyMMdd-1d+ME}=20210731
5. 由时间函数和偏移量组成的 SQL 参数,在绑定筛选器时依然能被时间类型的筛选器所绑定,绑定后在查看报表时,筛选器筛选的值,将替换掉的是整个花括号里的内容,而不仅只是前面的 yyyyMMdd 的部分,例如当前时间是2021年7月10号8:00:00,则参数${yyyyMMdd+ME-1d}绑定了筛选器后,筛选器选择的起始日期和结束日期都是T-1,则最终筛选出来的数据是2021年7月9号 - 2021年7月9号。