在驾驭数据模型时,您是否常遇三大困惑:数据预处理找不到设置提前过滤的方法?参数设置无从下手?应用参数后数据不正确时排查缺乏解决思路?本文将一次性带你破解模型参数的使用密码!
一、模型参数定义
模型参数是指在数据模型中定义的参数,用于动态设定报表和查询条件的变量,我们可以根据需要设定参数值,从而灵活地调整数据模型的输出结果。
二、模型参数作用
在查询过程中,某些业务场景要求必须默认带上特定查询条件,以此减少查询数据量,进而提升查询性能。以银行或证券行业为例,常以日期作为分区字段,默认将日期设为查询条件,只有这样,命中分区时的性能才能得到提升。
例如:在 SQL 查询中,根据不同的参数值,从不同的表字段中筛选出内容作为输出字段

在一些复杂的使用场景中,例如计算度量、计算列、命名集、计算成员等,需要引用前端输入的参数值进行不同的运算,此时模型参数同样不可或缺。
示例:希望报表在切换日期参数后,能够返回近 15 天的累计销售额,实现如下:
- 新建模型参数;
- 新建计算度量,并在该计算度量中应用上述参数
- 当参数发生切换时,当前计算度量的结果便会随之动态变化

特别提醒:当模型设置为抽取模式(非查询动态抽取)时,查询操作仅能依据参数设置的默认值来进行。若未设置参数默认值,或者将其设为 '' ,系统会默认查询全部数据;若要查询实际的 '' 数据,需使用 $$$EMPTY_VALUE$$$ 来代表空字串进行查询。此外,目前产品暂不支持数据模型直接调用公共参数。
模型参数应用场景和常见问题解析:
应用场景:
仪表盘数据来源是数据模型,当数据模型查询的数据量过大时,我们可以先对一部分数据进行预先过滤,随后在报表层面切换参数加以使用。具体操作过程和效果如下示例:
目前数据模型查询类型除数据源表(HaNa数据库的表可以有参数)、导入文件、日期表 之外,其它几种类型子查询都支持带参数,具体设置方式见下表:
子查询类型
|
设置方式说明
|
SQL查询
|

|
可视化SQL查询
|

|
ETL高级查询
|
“数据查询”节点使用参数:
|

|
”关系数据源“节点使用参数:
|

|
存储过程查询
|

|
脚本查询
|

|
Java查询
|

|

界面说明:
- 参数支持的数据类型: 字符串、整型、浮点型、日期、时间、日期时间等。

- 参数支持的控件类型: 输入框单选/多选、列表单选/多选、下拉单选/多选、树形单选/多选、日期。

案例说明:订单表数据量较大,希望通过区域参数,默认东北地区提前过滤,并且报表可以动态切换参数查询:
(1)在数据模型编辑界面创建带参数的SQL查询:

(2)在”参数管理“面板中,点击左上方一键映射,检查参数预览是否有问题:
在私有查询(即SQL查询)中定义了参数,实际为参数占位,私有查询保存后,需要在数据模型的参数管理,才能实际对参数定义参数名称、数据类型、控件类型、默认值、备选值等。
- 在”参数面板“中单击 一键映射
按钮,系统自动创建模型参数,并建立好与 查询参数 的映射。
- 自动映射的参数,默认沿用查询参数的名称、数据类型、控件类型等属性,且默认值为静态列表,值为查询参数默认值。


(3)设置好参数后,保存数据模型,即可创建报表,报表界面上同时勾选参数应用后,可以根据参数查询订单信息,效果如下:


注意:
- 如果是数据模型是 直连模式,则可以根据切换参数值动态筛选;
- 如果数据模型是 抽取 模式,则只能根据设置的默认值筛选,无法动态切换,有需要得切换成查询动态抽取(原:按次抽取)模式,因为全量抽取是按照参数默认值抽取的,按次抽取才是结合用户登录生成的Session及查询的参数组合进行抽取。
- 补充,查询动态抽取(原:按次抽取】)使用说明可参考wiki文档:直连&抽取
三、应用场景:
1、跨数据模型如何实现参数联动
需求:有A、B两个数据模型,A中定义了一个参数a,在仪表盘中,设置参数a应用于B模型创建的组件,筛选不生效,需要如何实现联动?
需求实现方法:通过联动设置关联

(1)数据模型“订单模型-带参数”是有区域参数的:

(2)数据模型“订单模型”没有区域参数:

(3)创建报表勾选不同模型的字段展示,可以看到参数它自己所在的模型相关数据:

(4)此时,我们可以点击工具栏——三个点——联动设置:

(5)进入联动设置界面,选择自定义,新增关联关系:订单模型-带参数的区域参数=订单模型的区域字段:

(6)右键筛选器组件,设置好应用关系:

(7)联动效果如下:

2、参数是否需勾选“默认生效”选项问题
需求:在 数据模型-参数设置 处,这个 ”默认生效“ 的选择项,它起到的是一个什么作用,应该在什么情况下勾选呢?

当前数据模型和参数说明:
(1)数据模型涉及订单明细表、订单表、产品表、产品类别表4个子查询,关联情况如下:


(2)参数默认值是“东北”:

(3)当前数据模型的各个私有查询子图有:
- 产品类别表的子图:产品类别表
- 产品表的子图:产品表、产品类别表
- 订单明细表:订单明细表、订单表(参数所在的子查询)、产品表、产品类别表
- 订单表的子图:订单表
注意:此处涉及子图的概念,因为涉及展示的字段是否在同个子图,参数对其影响范围不一样,若关于子图的定义和影响仍有所不理解,建议可先看关于子图的内容:【上篇】99% 的人都忽略了!强大模型的崛起秘密在于设置正确关系
报表查询结果分析说明:
(1)勾选“默认生效”:
- 选择的字段不在同个子图内,切换参数不生效
- 选择的字段在同个子图内,切换参数生效
①选择产品类别表的产品类别、产品表的产品名称、订单明细表的单价3个子查询的字段展示
- 勾选了参数显示,因为订单明细表的子图包含订单表(参数所在的子查询),所以选择的字段在同个子图内,参数设置勾选上“默认生效”时,切换参数时,单价的值会受参数值影响;但产品类别和产品名称因为不在子图内,则不受参数影响,如下图:

- 即使在报表的“过滤条件区”中没有勾选参数,数据模型中参数设置勾选上“默认生效”时,因为订单明细表的子图包含订单表(参数所在的子查询),数据模型的参数默认值也会默认对订单明细表的字段生效,如下图:

(2)不勾选“默认生效”:
- 选择的字段不在同个子图内,切换参数不生效
- 选择的字段在同个子图内,切换参数也不生效,只影响参数所在子查询的结果
①选择产品类别表的产品类别、产品表的产品名称、订单明细表的单价3个子查询的字段展示。
- 没有勾选“默认生效”时,若取数子图中没有选择与参数相关的表或查询,该参数不会生效。即“产品类别”、“产品名称“、”订单“都不是参数所在的子查询【订单表】,则参数不会对这3个字段筛选生效,如下图:

②选择产品类别表的产品类别、产品表的产品名称、订单明细表的单价、订单表的运维4个子查询的字段展示。
- 没有勾选“默认生效”时,在同一个子图内的字段切换参数也不生效,只会影响参数所在的子查询结果。即“产品类别”、“产品名称“、”订单“都不是参数所在的子查询【订单表】,则参数不会对选择这三个字段筛选生效;“运维”是参数所在子查询【订单表】的字段,则参数会对该字段筛选生效,如下图:

另外,在没有勾选参数作为条件时,也仅对参数所在的子查询生效,即只对“运费”生效,如下图:

影响逻辑总结
(1)选择“默认生效”—— 与子图有关
- 参数对所选同一个子图内的子查询字段筛选生效;
- 不管报表是否拖入参数,参数都会使用默认值来过滤,实现了参数的强制生效;
(2)没有勾选“默认生效”—— 与子图无关
- 不管报表是否拖入参数,参数只对参数所在子查询的字段筛选生效;
在本篇文章里,我们循序渐进,详细探究了数据模型参数,从含义、设置方法到实际作用,还对应用过程中的常见问题进行了深入解析。现在,不妨回顾一下文章开头提出的三大困惑,您是否已经能自行找到答案了呢?要是还有其他疑问,或是有新的想法,欢迎在留言区畅所欲言,我们一起交流探讨。
下一期,我们将开启可视化报表的全新篇章,精彩内容不容错过,记得持续关注我们的更新! |