自定义SQL视图

更新时间:2022-08-19

什么是自定义 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 视图中嵌入各类参数

在查询中,用户通常设置过滤条件来进行数据查询的过滤,过程如下:

  1. 创建一个自定义 SQL 视图

图片

  1. 设置图表的过滤组件,例如:设置日期过滤组件,并关联相应的数据模型和字段:

图片

  1. 选择日期,点击查询,点击图表「调试」,可以看到生成的 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 合并结果集

  1. 应用场景

在 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 即可。

  1. 示例

某公司华南和华北的销售数据分别存在两张表中,不方便分析。可以使用 UNION 将其合并到一起。

1)选择数据源,新建数据模型,预览数据表

图片

图片

2)在数据模型编辑界面左下角「自定义 SQL 视图」点击「添加」,填写名称和 SQL 语句

图片

3)将新建的自定义 SQL 视图拖入上方模型编辑区域,然后点击「查看数据」,可以看到两张表合并后的数据

图片

4)如果您想增加过滤条件,可以使用上面提到的嵌入过滤条件参数的语法,这样可以在 SQL 视图内部嵌入一个 where 子句,以提高查询效率。

图片

如下图:新建一个柱状图,绑定刚才新建的数据模型,增加一个时间过滤条件,点击查询

图片

「调试」查看生成的 SQL,可以看到,SQL 视图内部各嵌入了一个 where 子句

图片

本页内容