SQL中关联下钻参数

更新时间:2020-02-10

有关图表如何配置下钻功能,详见图表的下钻设置

下钻参数在哪里看

对于下钻弹出的图表,最重要的就是如何知道下钻的参数有哪些?其实,在下钻弹出图表的右侧控制面板中「数据」下,单击「调试」,就能看到上层图表传递给本下钻图表的下钻参数。例如,一个饼图点击下钻弹出一个折线图:

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 语句):

图片

本页内容