什么是自定义 SQL 视图
如果您的数据模型需求比较复杂,例如需要使用子查询、union、复杂的数据过滤等,您可以通过 SQL 语句建立自定义 SQL 视图。
用户可书写 SQL 语句来创建自定义 SQL 视图,创建成功后会出现在页面左下侧的自定义 SQL 视图中,之后就可以像操作数据源中的数据表一样,可以通过拖拽到页面中心部分与数据源中的数据表或者其它自定义 SQL 视图进行关联分析。
通过将鼠标移入自定义 SQL 视图或者数据表上点击查看按钮即可预览对应的数据结构。
自定义 SQL 视图中嵌入用户邮箱
Sugar BI中支持在 自定义 SQL 语句中嵌入当前登录用户的邮箱(使用这种方式,您就可以让不同的用户看到不同的数据),您可以使用如下语法:
需要注意:如果您将大屏或报表页面进行了公开分享,并且页面中的某一个图表的 自定义 SQL 中使用上面的嵌入登录用户的邮箱,此时就会有问题,因为公开分享的页面是不需要用户登录Sugar BI账号就能直接浏览的,所以 自定义 SQL 就获取不到当前浏览的用户是谁,因此就会出错。总之,如果您的可视化页面是需要进行公开分享的,那么就不要在 自定义 SQL 中嵌入当前登录的用户邮箱。
自定义 SQL 视图中嵌入宏定义变量
自定义 SQL 视图中嵌入数据宏定义
Sugar BI中支持在 自定义 SQL 视图语句中嵌入数据宏定义变量(使用这种方式,您可以在 where 子句中嵌入动态参数),您可以使用如下语法:
在数据模型中创建自定义 SQL 视图,SQL 中关联宏定义变量的语法详见宏定义变量
注意:这里必须使用宏定义变量的默认值语法${_MACRO || default_value}为宏定义变量赋上默认值,防止宏定义变量不存在时引起sql语句报错
在图表中绑定该数据模型,并定义宏定义变量 _MACRO
的新值为'东北'
:
点击图表「调试」,可以看到:sql 中的宏定义变量${_MACRO || '华北'}
被替换为'东北'
, 如果未配置宏定义变量,宏定义变量${_MACRO || '华北'}
将被替换为默认值'华北'
。
自定义 SQL 视图中嵌入日期宏定义
Sugar BI中支持在 自定义 SQL 视图语句中嵌入日期宏定义变量(使用这种方式,您可以在 where 子句中嵌入动态日期时间参数),您可以使用如下语法:
日期宏定义变量的语法详见宏定义变量
点击图表「调试」,可以看到:sql 中的日期宏定义变量{DATE}
被替换为'2022-10-08'
。
自定义 SQL 视图中嵌入各类参数
在查询中,用户通常设置过滤条件来进行数据查询的过滤,过程如下:
- 创建一个自定义 SQL 视图
- 设置图表的过滤组件,例如:设置日期过滤组件,并关联相应的数据模型和字段:
- 选择日期,点击查询,点击图表「调试」,可以看到生成的 SQL 语句如下:
但是,如果您的数据量非常大,上图中,SQL 的 where 子句是加在外层,而外层加 where 无法阻止数据库扫描全表,因此需要将 where 加在 SQL 子句里面,从而达到优化 SQL 查询性能的效果,您可以使用如下方法:
自定义 SQL 视图中嵌入过滤条件
Sugar BI中支持在 自定义 SQL 视图语句中嵌入过滤条件参数(使用这种方式,您可以在 where 子句中嵌入过滤条件,从而达到优化查询性能的效果),您可以使用如下语法:
在数据模型中创建自定义 SQL 视图,SQL 中关联过滤条件的语法详见SQL 中关联过滤条件
在图表中绑定该数据模型,点击图表「调试」:
可以看到,自定义 SQL 视图中 where 子句的过滤条件参数{'订单日期'[conditions.date]}
被替换为了过滤条件的取值'订单日期'='2019-03-01'
,如果过滤条件没有取值,过滤条件参数将被替换为1=1
。
注意:以上生成的SQL中,内外均附带了where子句,这是因为您的过滤条件关联了数据模型,因此,SQL语句外层会自动生成where子句
如果您希望您的 SQL 语句中只包含 SQL 视图内部的 where 子句,那么您可以取消过滤条件与数据模型的关联,如下图:
选择过滤条件选项,点击表格的「调试」,可以看到,生成的 SQL 语句中只包含一个 where 子句,为 SQL 视图内部的 where 子句,并且被替换为了过滤条件的取值 '订单日期'='2022-09-10'
自定义 SQL 视图中嵌入联动参数
Sugar BI中支持在 自定义 SQL 视图语句中嵌入联动参数(使用这种方式,您可以在 where 子句中嵌入联动参数,从而在 sql 查询中关联联动参数),您可以使用如下语法:
在数据模型中创建自定义 SQL 视图,SQL 中关联联动参数的语法详见SQL 关联联动参数
在图表中绑定该数据模型,例如:下图中表格绑定了该数据模型,新建一个联动图表,例如:折线图,并配置图表联动,如下图所示:
点击触发图表联动的列,例如:上图中配置的是地区
列联动,那么,点击表格的华东
,可以看到:折线图的数据发生变化
点击折线图的「调试」,可以看到:sql 中的联动参数{'地区' = [dependence]}
被替换为'地区' = '华东'
, 如果未配置联动,联动参数将被替换为1=1
。
您还可以像这样使用默认值语法{'地区' = [dependence || 东北]}
,此时,如果没有联动参数取值,联动参数取值将被替换为默认值东北
。
自定义 SQL 视图中嵌入下钻参数
Sugar BI中支持在 自定义 SQL 视图语句中嵌入下钻参数(使用这种方式,您可以在 where 子句中嵌入下钻参数,从而在 sql 查询中关联下钻参数),您可以使用如下语法:
在数据模型中创建自定义 SQL 视图,SQL 中关联下钻参数的语法详见SQL 中关联下钻参数
在图表中绑定该数据模型,例如:下图中表格绑定了该数据模型,为该表格配置图表下钻,如下图所示:
点击触发图表下钻的列,例如:上图中配置的是地区
列下钻,那么,点击表格的华东
,在下钻图表绑定该数据模型:
点击下钻图表的「调试」,可以看到:sql 中的下钻参数{'地区' = [drillDowns]}
被替换为'地区' = '华东'
, 如果未配置联动,下钻参数将被替换为1=1
。
自定义 SQL 视图中嵌入 URL 参数
Sugar BI中支持在 自定义 SQL 视图语句中嵌入 URL 参数(使用这种方式,您可以在 where 子句中嵌入 URL 参数,从而在 SQL 查询中关联 URL 参数),您可以使用如下语法:
在数据模型中创建自定义 SQL 视图,SQL 中关联 URL 参数的语法详见SQL 中嵌入 URL 参数
在图表中绑定该数据模型,然后在报表 URL 中增加额外参数,例如:订单日期=2022-09-09,并刷新页面
点击图表「调试」:
可以看到,自定义 SQL 视图中 where 子句的过滤条件参数{querys.订单日期 || 2018-01-01}
被替换为了过滤条件的取值'订单日期' = 2022-09-09
,如果过滤条件没有取值,过滤条件参数将被替换为1=1
。
其中,2018-01-01 为参数默认值,如果 URL 中未添加该参数,{querys.订单日期 || 2018-01-01}
将被替换为'订单日期' = 2018-01-01
。
自定义 SQL 视图中使用 UNION、UNION ALL 合并结果集
- 应用场景
在 SQL 中,UNION 是用于合并两个或多个 SELECT 语句的结果集的操作符。它返回一个包含所有选定列的结果集,其中包括从各个 SELECT 语句中检索的所有行,去除了重复的行。
假设我们有两个表:table1 和 table2,它们包含相同的列 column1 和 column2,现在我们想将 table1 和 table2 做合并查询。
table1
的数据如下:
column1 | column2 |
---|---|
A | 1 |
B | 2 |
C | 3 |
table2
的数据如下:
column1 | column2 |
---|---|
D | 4 |
E | 5 |
F | 6 |
使用 UNION 查询来合并这两个表的结果集:
SELECT column1, column2
FROM table1
UNION
SELECT column1, column2
FROM table2
合并结果如下:
column1 | column2 |
---|---|
A | 1 |
B | 2 |
C | 3 |
D | 4 |
E | 5 |
F | 6 |
结果集按照列的顺序合并,并自动去除重复的行。在这个例子中,结果集中没有重复的行。
如果您想保留重复的行,将 UNION 换成 UNION ALL 即可。
- 示例
某公司华南和华北的销售数据分别存在两张表中,不方便分析。可以使用 UNION 将其合并到一起。
1)选择数据源,新建数据模型,预览数据表
2)在数据模型编辑界面左下角「自定义 SQL 视图」点击「添加」,填写名称和 SQL 语句
3)将新建的自定义 SQL 视图拖入上方模型编辑区域,然后点击「查看数据」,可以看到两张表合并后的数据
4)如果您想增加过滤条件,可以使用上面提到的嵌入过滤条件参数的语法,这样可以在 SQL 视图内部嵌入一个 where 子句,以提高查询效率。
如下图:新建一个柱状图,绑定刚才新建的数据模型,增加一个时间过滤条件,点击查询
「调试」查看生成的 SQL,可以看到,SQL 视图内部各嵌入了一个 where 子句