参数动态过滤是BI可视化分析使用过程中最常见的应用场景,灵活掌握参数动态过滤的应用可以帮助我们解决绝大部分的复杂数据过滤需求。
参数动态过滤之所以这么重要,主要是因为筛选器的定位是简单易用的数据过滤,拖拽即可使用;但缺点也很明显,筛选器只能进行最简单的唯一值、匹配、范围等筛选模式,对于稍微复杂的过滤场景就束手无策,如:
● 通过切换显示本年、本月的销售情况;
● 通过切换显示最近7天、最近30天、最近半年的销售情况;
● 选择一个日期,显示这个日期所在时间的上周的所有入职人员;
● 输入一个阈值数字,如果该数字小于10,则不返回数据;如果该数字大于10,则返回所有大于10且小于这个数字的数据;
● ......
类似场景还有很多,今天我们主要通过参数动态过滤解决可视化展示中通过切换显示本年、本月销售情况的场景(如下图左上角切换后,下方所有图形展示切换后的数据)。其他类型场景可能更复杂,但和该场景的实现方法并无本质区别。
参数动态过滤解决思路
新建一个参数,将该参数应用应用到SQL集(使用SQL集再作图),或者图形高级过滤中,通过改变参数值,使对应引用参数的地方重新计算,进行实现数据的动态计算和过滤。
● 参数机制:参数值改变时,所有应用到参数的地方(SQL集、高级过滤、计算列等)都会根据改变后的值重新计算,并返回计算后的值,最终实现参数值变化影响数据的动态变化(动态过滤);
● 参数特点:因使用参数的地方一般都能通过表达式构建复杂的计算、数据过滤规则,所以能够轻松实现复杂的数据动态过滤业务。
参数动态过滤操作说明
注:操作流程只针对动态过滤需求场景,过程中仅介绍参数动态过滤相关操作,其他在此不做说明。
对于该业务场景,很多用户上来之后会先用数据集做出下图看板中3个图形,然后再考虑在左上角加上年度、月度的筛选,这样是不一定正确的。今天我们通过参数和SQL集实现该业务场景。
注:直接使用数据集作图,然后在高级过滤中通过参数实现动态过滤也能实现该业务。但SQL集更加灵活,能解决更加复杂的业务场景。
首先我们需要新建一个参数,类型为字符,取值范围为列表,参数方向为内部,可选值类型为单变量,新增两个值分别为年度、月度,具体如下图:
接下来我们在左上角点击添加数据-SQL创建数据集,在弹窗中使用业务数据表【全国销售订单数据】生成如下SQL集:
SELECT * FROM [全国销售订单数据(tempoappexampledata)] T0 where IF( ${参数1}='年度',year(`日期` ) =year(now()) , year(`日期` ) =year(now()) and month(`日期` ) =month(now()) )
可以看到SQL集中我们对参数的值进行了判断,当参数值等于年度时,返回当年的数据;当不等于当年时(等于当月),返回当月的数据。
然后我们基于该SQL集,构建如下图形(为了业务表达清晰,此处用线图展示对应日期下的订单数量情况)
可以看到上图中显示了当年的数据,因为参数默认值是当年,但我们还要实现年、月的切换。所以我们将参数组件拖入画布,然后将创建好的参数拖入参数的图表数据中,再将参数的样式调整为单选导航条。此时我们切换参数的值时,线图的数据就发生了变化。
以下为切换到月度时,只显示当月数据的场景。
小T总结
参数动态过滤之所以这么强大,主要在于引用参数的地方一般都能实现逻辑自定义能力(SQL、表达式等)。
借助参数值在引用区域(SQL集、高级过滤、计算列等)动态变化的能力,我们能够实现非常复杂的数据过滤场景,包括但不限于上文中提到的以下内容:
● 通过切换显示最近7天、最近30天、最近半年的销售情况;
● 选择一个日期,显示这个日期所在时间的上周的所有入职人员;
● 输入一个阈值数字,如果该数字小于10,则不返回数据;如果该数字大于10,则返回所有大于10且小于这个数字的数据;
● ......