DAX分享15:图表中标题变量的一点小心机

浏览: 1083

天气太热,在家吹空调刷手机好舒服。为了逃避做家务,所以假装学习。好羞愧~~还好,认识的人基本不关心我写的东西,所以,我还是在学习。

先说一个简单的。

当我们拉一个简单的图表的时候,如下图所示。默认是有标题和X轴,Y轴内容的。这个也没啥特别的。

如果想当我在左边的图上选择了Brand,能够在右边这个图上显示出来“Quantity by Color by XX Brand",是不是还挺有小心思的。矩阵表或者List表里面的设置是一样的,我就不多说了。只写下图里面的实现。

默认情况下,如果不做任何处理的话。打开属性部分,查看标题title,如下图所示

Power BI Desktop会根据你拉入的内容自动生成名字。但是他也预留了fx让你做些自定义的内容。这里我想显示”Quantity by Color by XX Brand".

所以新建Measures定义DAX如下:

Title_P1 = IF(HASONEFILTER('Product'[Brand]), "Quanlity by Color by "& SELECTEDVALUE('Product'[Brand]),"Quanlity by Color")

这里,我先判断了下是否选择了一个Brand,然后得到我要显示的内容。有且仅有我只选择了一个Brand的时候,才会显示”Quantity by Color by XX Brand"。当然你也可以罗列你选出来的所有Brand,用DAX分享12中提到

CONCATENATEX函数,这里就不再写了。主要是列出来也不一定好看。

然后找到Title text,点中fx.

确定,基本上就完成了。随便选了一个Brand,结果如下。

这个是比较简单的,完全没有体现到什么小心机。下面就是关键时刻了。

下面的内容是关于带Drill Down,Drill Up的图的标题title的变化。我不太确定别人有没有解决方案,不过我是用小心机做的。仅供参考。

随便拉一张组合图。内容如下

Category和SubCategory是有上钻下钻的关系的,柱子就是Quantity的数据,线的内容是根据Category或者Subcategory的内容做的Running total.

上钻下钻中的标题显示如下图:

虽然前面一大串不咋地,但是by 后面的变化,还是蛮好的。

看到上钻下钻的问题,我第一反应是ISINSCOPE函数。轻松写下Measure:

Title_P2 = SWITCH(TRUE(),ISINSCOPE('Product Category'[Category]),"Category",ISINSCOPE('Product Subcategory'[Subcategory]),"Sub Category","")

然后放在了title fx处。

悲伤的发现,不起作用。伤心一下,然后开始分析。

拉出一个矩阵表,内容如下

其中category quantity 的定义如下:

category quantity = VAR ct = CALCULATE(  SUM('Sales'[Quantity]),  FILTER(    ALLSELECTED('Product Category'[Category]),    ISONORAFTER('Product Category'[Category], MAX('Product Category'[Category]), DESC)  ))VAR sub_ct =CALCULATE(  SUM('Sales'[Quantity]),  FILTER(    ALLSELECTED('Product Subcategory'[Subcategory]),    ISONORAFTER('Product Subcategory'[Subcategory], MAX('Product Subcategory'[Subcategory]), DESC)  ))VAR Result = SWITCH(TRUE(),ISINSCOPE('Product Category'[Category]),ct,ISINSCOPE('Product Subcategory'[Subcategory]),sub_ct)Return Result

好像也没有错啊,怎么title没有变化呢?

后来我想明白了,因为我放在图里面或者矩阵表里面,都是有上下文的,但是放在title里面,这个title_p2这个measures没有上下文,这个ISINSCOPE没有办法起作用,如果我把这个title_p2修改下如下,估计一直都是“XXX”。

Title_P2 = SWITCH(TRUE(),ISINSCOPE('Product Category'[Category]),"Category",ISINSCOPE('Product Subcategory'[Subcategory]),"Sub Category","XXX")

结果也确实如我想的一样。

好了,此路不通。咋办呢?机智如我,当然就开始用小心机了。

这个心机有前提的:

  1. 我只是觉得by Category/by Subcategory之前的描述不太喜欢;

  2. 没有其他变量的要求。


有其他根据变量变化什么的需求的,这个心机就白费了,不能即保留by Category/by Subcategory又有其他特别要求。

仔细观察拉的字段和title之间的关系。

title的名字 = 两个度量的名字 by Category

那就直接rename这个度量的名字就可以了。

这个例子不太好。因为两个度量值,这个and是去不掉的。一个度量值的时候重命名会更好用一些。

不过也进一步确定一个事情,就是要好好定义自己度量值的名字。

谢谢关注!


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

0 个评论

要回复文章请先登录注册