本案例非常简单,不过,这是一个为满足业务方的刁钻需求而思考的整个过程,诸多报告中都可以采用相同或相似思路。
在几乎每一个报告中,都有切片器的存在,而这,也正是DAX能够展示其精髓的外部条件之一。
而报告,或者说可视化,永远是为业务而存活。
业务的需求是各式各样,多种多样,随时变化。只有深入了解业务,甚至是只有直接参与业务,才能够做出真正适合使用者的报告。
有这么一个业务需求:用户打开报告时,地区切片器默认是无选择的,此时树状图不显示数据;只有当用户选择了地区后,树状图展示分析结果。
我们知道,默认情况下,切片器不选择相当于全选。也就是说,此时,可视化对象会显示全部的数据:
所以,我们稍作调整,加一个判断条件,如果用户选择了一个“地区”的值,那么就显示这个度量值,否则为空白,即blank,那么度量值可以这么写:
代码语言:javascript复制销售额判定选择1 = IF(HASONEFILTER(data[地区]),[本期销售额],BLANK())
当然我们也可以这样写:
代码语言:javascript复制销售额判定选择2 = IF(HASONEVALUE(data[地区]),[本期销售额],BLANK())
结果是相同的。
用户没有进行筛选时,视觉对象是空的:
用户选择了一个地区后,可视化对象出现了数据:
可是这样仍然会出现问题,一旦用户想要查看两个及以上的地区,那么由于HAS“ONE”FILTER和HAS“ONE”VALUE只能是单选,所以结果还是空:
这显然不是我们想要的。
所以,我们需要一个新的函数:ISFILTERED来判断该字段是否被直接筛选:
代码语言:javascript复制销售额判定选择3 = IF(ISFILTERED(data[地区]),[本期销售额],"")
这样,当我们选择两个地区时,树状图是显示数据的:
这样,就达到了业务方的需求。
不过,有个小问题:当用户打开报告时,空白处的用户体验不是很好:
很有可能会让用户一时不知所措:
反应半天才会想起来在左侧点击地区进行筛选。
所以我们可以在空白的可视化对象处添加一个卡片图:
代码语言:javascript复制销售额判定背景 = IF(ISFILTERED(data[地区]),"","请至少选择一个地区")
这样,当用户打开报告时,映入眼帘的是让他选择一个地区,他就会很自然地在左侧找到地区切片器进行筛选,然后就能看到分析数据了:
这样是不是会让业务方感觉更舒服?是不是会更卖力地工作?是不是会为企业创造更高的价值?
记住,一切可视化都是为业务服务。