DAX分享8:PowerBI中HASONEVALUE在图表中的应用

浏览: 62

今天天气不错,加更一篇以敬美好的天气~~

图8.2.png

先来了解下我们要实现的功能。(小视频要审核发布出去,这次先放弃吧。)

请注意在不选择任何Color的情况下和选择不同的Color的情况下:

Table(表格)里面Target的在Total里面的值

组合图(Line and stacked Column)中的黄色的线显示的值。

随便选了一个Black结果如下:

是不是很炫酷吊炸天呢?看完本文呢,其实很简单。so easy!

先把源数据了解一下:

还是那张熟悉Product产品表。

外加一个sales事实表。因为我只是随便取这个表的一个Sales Amount的

数值作为图中的柱子,不是很重要,就不放图了。

思考如下:

首先介绍一下这个target的来历。每个Color有一个要达到的指标,假如Azure是1,Black是2,Blue是3,Brown是4,Gold是5,Green是6,但是如果不选择任何Color的时候,我要看到这个总的指标,总指标是11.

其实这个数据做的太简单粗暴了。不太好。数据不重要,请关注我的实现功能。只是随便造个数据,举个例子而已。

(换个有点意义的解释,我们一个IT部门年底考核要求是要4分,但是每个人的级别不一样,要求也不一样,有的是3有的是5有的是4什么的。在不选择是哪个人的时候,要显示一个部门的要求,也就是4分,选择具体的人了,就看到这个人的要求分数。)

首先得到不同Color的Target的数据。

1. 建了一个calculate column。表达式如下

target =

SWITCH(

'Product'[Color],

"Azure",1,

"Black",2,

"Blue",3,

"Brown",4,

"Gold",5,

"Green",6)

2. 然后用HASONEVALUE函数,创建这个表中的Target值。

target_total = IF(HASONEVALUE('Product'[target]),AVERAGE('Product'[target]),11)


我在table中把这个target_total改名成了Target。

如果不加入HASONEVALUE的话,列表中’Total‘那个位置就会汇总列出的所有Color的总和,或者你要求不计算,他就是一个空值。

我想控制Slicer在默认的All和不同的Color的时候及时的捕捉到变化。什么是一定变化的呢?

当然是Color的数量了,是不是很简单。默认All的时候是6个元素啊,选择任意一个的时候是1个元素啊。所以我们就用COUNTROWS这个函数来数一数到底有几个元素。

我本来打算把这个All的情况和各个Color的情况做到一个字段里。太麻烦了,所以就简单点做成两个互斥的measure了。所以就做了两个数据值m1和M2。(名字随便起了。)

m1就只在默认All的时候显示,其他情况下就是空。M2则是在选择了Color的时候显示,其他情况下为空。

具体的DAX表达式如下:


m1 = IF(

        (COUNTROWS(

        FILTER(ALLSELECTED('Product'[Color]),HASONEFILTER('Product'[Color]))

        )>=6)&&TRUE(),11,"")


M2 = IF(

(COUNTROWS(

        FILTER(ALLSELECTED('Product'[Color]),HASONEFILTER('Product'[Color]))

        )>=6)&&TRUE()

,"" , AVERAGE('Product'[target]))


是不是很神奇。敲黑板!不要试图去拆开里面的表达式在不同的visilization验证的结果。在默认Slicer是All的时候,(COUNTROWS(FILTER(ALLSELECTED('Product'[Color]),HASONEFILTER('Product'[Color])))这个表达式的结果是6,所以m1就是11。当你选择了某一个Color的时候,这个值就是1,所以判断就是False。是不是很简单。

这个例子中是针对预算target比较少,而且简单的情况。如果你有一个target的表,也很简单的。直接多建一个关系。然后其他的思路和方法都是一样。

周末愉快!


关注DAX Share,所有的问题都是so easy!

推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册