SQL中关联下钻参数
有关图表如何配置下钻功能,详见图表的下钻设置。
下钻参数在哪里看
对于下钻弹出的图表,最重要的就是如何知道下钻的参数有哪些?其实,在下钻弹出图表的右侧控制面板中「数据」下,单击「调试」,就能看到上层图表传递给本下钻图表的下钻参数。例如,一个饼图点击下钻弹出一个折线图:
1、点击饼图的某一区域
2、在弹出的折线图中,右侧控制面板中单击「调试」,如下图:
3、在「调试」窗口中就能看到drillDowns
字段即下钻参数,如下图:
SQL 中关联下钻参数
在绑定了图表的下钻功能之后,在下钻弹出图表中,请求下钻图表的数据时会额外附加上一些下钻的具体信息,例如,一个饼图有三个扇形区域,点击每个扇形区域时,我们在弹出的图表拉取数据时会加上drillDowns
参数用来描述用户到底是点击了哪一区域。并且Sugar BI支持在伪 SQL 语句中嵌入这些下钻的参数,从而达到点击不同的区域弹出的图表的数据不同。
后端接受到的drillDowns
参数的格式如下(由于Sugar BI支持多层下钻,因此drillDowns
参数是个数组,数组的每项分别表示每级下钻的信息):
{
"drillDowns": [
{ // 第一层下钻
"item": {
"type": "专家",
"type_sugar_origin": "zhuanjia",
"id": "1",
"link": "www.baidu.com",
"_sugar_dd_default_": "zhuanjia"
},
"fireKey": "type"
},
{ // 第二层下钻
"item": {
"name": "数据1",
"value": [
1218,
1461
],
"yVal": "123,457",
"category": "dot1",
"_sugar_dd_default_": "dot1",
},
"fireKey": ""
}
]
}
和查询条件类似,伪 SQL 语句中支持关联下钻参数,有两种关联格式,分别为简单模式和高级模式(下面的各个截图都是图表数据的『调试』时所展示的,左侧是原始的伪 SQL,右侧是生成的真正要在数据库上执行的 SQL 语句)。
1.简单模式
简单模式时,使用的伪语法格式为:{field = [drillDowns]}
或者 {field = [drillDowns(first)]}
- 其中
field
是 SQL 中的字段名(根据您的数据表结构来决定的,和具体 SQL 有关); =
号是 SQL 判断逻辑词,可以支持不写判断逻辑,Sugar BI会自动补全为=
,支持的逻辑词有:=
,!=
,<>
,>=
,<=
,>
,<
,in
,like
,between
,regexp
等;- 下钻参数需要使用
[]
包围,并且必须输入drillDowns
关键词; - 由于支持多层下钻,
(first)
是指第一层下钻的参数,当然我们支持不传(即{field = [drillDowns]}
)默认就是最后一层,Sugar BI支持(0)、(1)...
等数字取不同层,同样也支持(first)、(last)
取第一层和最后一层 - 使用简单模式时,我们默认取的是上图代码中的
_sugar_dd_default_
字段,这个参数是Sugar BI自动生成的,不同类型的图表在下钻时,生成这个默认字段的策略不太一样,例如饼图在下钻时,这个默认字段的取值是用户点击的饼图某一扇形区块的名称,再例如柱状图在下钻时,这个默认字段的取值是用户点击的柱体对应的 X 轴取值。
针对上面代码示例,我们可以这样取其中的默认参数(下图是下钻的下级图表数据的『调试』时所展示的,左侧是原始的伪 SQL,右侧是生成的真正的 SQL 语句):
在 95%的情况下使用简单模式就能解决您的问题,但是也有可能你需要取下钻参数中的其他数据(非_sugar_dd_default_
字段),此时就需要用到下面的高级模式:
2.高级模式
高级模式时,使用的伪语法格式为:{field = [drillDowns(last).key]}
- 其中
field
是 SQL 中的字段名(根据您的数据表结构来决定的,和具体 SQL 有关); =
号是 SQL 判断逻辑词,可以支持不写判断逻辑,Sugar BI会自动补全为=
,支持的逻辑词有:=
,!=
,<>
,>=
,<=
,>
,<
,in
,like
,between
,regexp
等;- 下钻参数需要使用
[]
包围,并且必须输入drillDowns
关键词; - 由于支持多层下钻,
(last)
是指最后一层下钻的参数,当然我们支持不传(即[drillDowns.key]
)默认就是最后一层,Sugar BI支持(0)、(1)...
等数字取不同层,同样也支持(first)、(last)
取第一层和最后一层; key
是映射到上面代码示例的item
中的字段名;- 支持扩充语法
(number)
,(raw)
; - 下钻的参数 item 中的字段有可能是个数组,Sugar BI允许你嵌入该数组的任意一个元素,语法为:
[drillDowns(0).value(1)]
,其中的1
表示数组的 index 号,他也支持扩充语法(number)
,格式为[drillDowns(0).value(1,number)]
; - 可以通过
{field = [drillDowns(0).sugar_fireKey]}
的方式取到某层的触发 ID,比如表格就可以判断是点击了哪列触发的下钻; - 如果 SQL 中要取的字段(
key
)在下钻参数中没有找到,则会用1=1
替换,保证 SQL 的正常运行
针对上面代码示例,我们可以这样取其中的参数(下图是下钻的下级图表数据的『调试』时所展示的,左侧是原始的伪 SQL,右侧是生成的真正的 SQL 语句):
每种图表在点击下钻时所传递到下层图表的参数格式不尽相同(例如父图表也是使用 SQL 方式绑定的数据,Sugar BI在一些情况下会额外增加一些参数的,如数据使用了数据值映射,Sugar BI会自动将映射之前的原始值也附加上,这样在展示时是使用的映射后的中文,而在下钻时有可以将原始的英文或编码传递到后端),一定要善用图表的「调试」,通过弹出图表的“控制面板”中的“调试”按钮来查看此时下钻的参数详情,从而可以很清晰的看到有哪些参数可以嵌入到自己的 SQL 语句中。
SQL 中硬嵌入下钻参数
通常情况下,我们可以通过上面的内容将下钻参数与 SQL 的 where 绑定在一起,例如{field = [drillDowns(last).key]}
如果我们希望下钻的参数的值直接嵌入到 SQL 语句中(例如嵌入到 select 或者 from 的后面),我们可以使用SQL中硬嵌入下钻参数
,语法可以如:
- 1:
{drillDowns}
- 2:
{drillDowns(0)}
- 3:
{drillDowns.key}
- 4:
{drillDowns(0).key}
- 5:
{drillDowns(first).key}
- 6:
{drillDowns(first).key(1)}
- 7:
{drillDowns(first).sugar_fireKey}
大家会发现硬嵌入和上面的关联用法很类似,下面分别解释一下:
- 第 1 种:最常用的语法,取最后一层下钻参数中的
_sugar_dd_default_
默认字段 - 第 2 种:取第一层下钻参数中的
_sugar_dd_default_
默认字段 - 第 3 种:等同于
{drillDowns(last).key}
- 第 4 种:由于Sugar BI支持
多层下钻
,因此drillDowns
参数是个数组, 所以 0 表示第 1 层下钻的,你可以修改这个数字 - 第 5 种:
first
值也可以写为last
,分别表示第 1 层和最后 1 层下钻的参数 - 第 6 种:对于下钻的数据如果是一个数组,比如上一节中的
散点图下钻
, key(1) 中的1
就是表示下钻的数据的 index - 第 7 种:可以通过这种方式取到某层的触发 ID,比如表格就可以判断是点击了哪列触发的下钻
- 注意:使用硬嵌入时,和关联用法不太一样的是,如果 SQL 中要取的字段(
key
)在下钻参数中没有找到,则会用空字符串
替换整个表达式,而不是之前的1=1
以本文上面的下钻参数为例(下图是下钻的下级图表数据的『调试』时所展示的,左侧是原始的伪 SQL,右侧是生成的真正的 SQL 语句):