功能实践 | SQL数据集动态参数使用场景及功能详解

功能背景

如下图所示,用户在使用仪表板时,常会放置一些筛选组件搭配使用。而筛选组件选择了条件后,本质上是在图表的 SQL 外层再拼接一个 WHERE 条件。当数据量非常大时,这种方式就不是很友好,需要较大的查询时间。

不设置动态传参直接使用筛序条件效果如下:

-- 原始 SQL 数据集语句:
select * from table_demo;

-- 仪表板使用筛选条件无动态传参的拼接语句:
select * from (select * from table_demo) where condition = ‘仪表板筛选组件所选条件’;

设置动态传参,筛选条件直接替换预置参数效果如下:

-- SQL 数据集语句设置动态参数:
select * from table_demo where condition = ‘${condition}’;

-- 仪表板筛选条件使用动态参数做替换:
select * from table_demo where condition = ‘仪表板筛选组件所选条件’;

总结: SQL 动态传参的功能并没有直接体现在产品的使用操作上,而是通过这个方式将用户使用查询条件时的 SQL 由外传参转换为内传参从而提升查询效率。但大家不必过度使用,比如有些用户只要使用筛选条件必加动态传参,增加动态传参并非使用筛选条件的必要条件,如数据量较小,则无太大必要。同时,该功能并不能一劳永逸解决 SQL 查询效率问题,如使用了动态传参仍然查询较慢可进一步优化使用的 SQL 语句、数据库表、以及数据库等。

功能使用前提

功能使用详解

SQL 数据集的设置

这部分我们以一个示例做介绍,如下图所示,通过一个简单的 SQL 我们查询了华为云账单数据。

SELECT * FROM 云账单_华为云;

当我们在仪表板上使用它时,预备将产品作为筛选条件,并且希望该条件在 SQL 数据集中作为动态传参。

这时我们便可在 SQL 语句上补充 WHERE 条件,但是条件无需写死,而是使用 ${xxx} 替代,其中 xxx 为变量名。

SELECT * FROM 云账单_华为云  WHERE 产品 = '${Product}';

完成 SQL 语句的编写后,可以点击右上角【运行查询】进行预览,也是确认所写 SQL 执行没有问题。

注意: 虽然我们增加了 WHERE 条件,但未传入实际值到变量中时,并不会影响原始 SQL 的执行及使用。

如需要进一步验证传入实际的值后,SQL 查询结果是否符合我们的预期,可以点击右上角的【参数设置】。

根据下图所示配置参数相关情况,并点击【确认】。

再次点击右上角的【运行查询】,观察运行结果,如下图所示,此次查询结果均为我们已设置的产品类型为”弹性公网IP“的数据,由此证明动态参数是正常生效的。

特别补充一下,如下图所示,在【参数设置】时,该下拉选项两个参数的区别:

  • 仅编辑时生效:参数设置中所赋予的值仅用于在此数据集的编辑界面中的【运行查询】测试,离开数据集编辑界面后,该值无任何作用;
  • 数据集预览时全局生效:参数设置中所赋予的值不仅在此数据集编辑中的【运行查询】测试中生效,同时其值将作为该 SQL 数据集的默认条件,在外部预览数据集时同样生效。

设置了”数据集预览时全局生效“后预览数据集的效果如下:

仪表板中应用

使用上文中我们所配置的华为云云账单 SQL 数据集制作一些简单图表,以下是未做过滤时的原貌。

同时使用该数据集做一个筛选组件(此处使用的为文本下拉组件)。我们可以先不关联上文中所设置的参数。

正如上文所说,即使 SQL 数据集设置了动态参数,我们不使用也不会对 SQL 数据集本身有影响。只是最终形成的 SQL 不同。

我们重新进入到筛选组件的编辑界面下,这次我们将该组件与 SQL 数据集中预设置的参数进行关联,如下图所示,勾选对应参数即可。

保存参数的关联后,再次返回仪表板,这次使用下图所示的筛选条件后,我们所选的值将会传入到上文所设置的“Product”变量中。

原文引用自:【功能实践】SQL数据集动态参数使用场景及功能详解 - FIT2CLOUD 知识库

1 个赞