Value & Hasonevalue

2019-08-07 10:09:22 浏览数 (1)

开启DAX公式学习的第三部分。

1 Values

一般情况微软官网上对公式的翻译比较生涩,然而对于Values这个函数我觉得它解释得特别清楚:“返回由一列构成的一个表,该表包含来自指定表或列的非重复值”。换言之,重复值将被删除,仅返回唯一值。

在学习Filter公式时提到过虚拟表的概念,这个表存在我们的数据模型中,并与所筛选的原表关联。Values生成的表也是一张虚拟表。4.3章节中我们求季度销售数量超过200杯的分店的销售数量, [销售量7]=Calculate([销售量], filter('区域负责人名单', [销售量]>200) 实现这个计算的前提是我们有一张含有不重复城市名称列的区域负责人名单表,然而这是理想情况,如果模型中没有这张表呢?

试一下用Values来替换'区域负责人名单表',创建一个新的度量值[销售量9]。

你会看到销售量9=销售量7的结果,这是因为Values返回的这张虚拟表存在数据模型中并与源表即咖啡数据表关联,达到了同区域负责人名单表一样的效果。通过这个小例子我想你应该明白了Values虚拟表的功能。

记得学校学英语的时候老师经常教背各种句型,比如thank somebody for doing something.学习DAX也有很多经典句型,今天学习的 Calculate([度量值], filter(Values('表'[列名称]), ...)) 就是一款非常好用的。

2 HASONEVALUE

Hasonevalue, 顾名思义,只有一个值,它返回的是真或假,即判断是否只有一个值。你可以看作它的等效表达式为COUNTROWS(VALUES([列名称])) = 1。

比较常用的功能是禁止求总计。句型为 =If (Hasonevalue('表'[列], [度量值], blank()) 什么意思,我们还用上面展示的这张表来说明,如果细心的话,你会注意到总计不是列值的加总。

这个并不意外,因为3.4章节在讲度量值的工作原理中重要的一条是

B.每一个值都是独立计算的,即便是总计也是独立计算。

这里2015年[销售量7]的总计筛选上下文是2015年,所以 [销售量7]=Calculate([销售量],filter('区域负责人名单',[销售量]>200) 在这里计算了2015年全年销售数量超过200杯的分店的销售数量,与上面的季度值没有任何关系。

但是这样的话问题来了,这个数字在这里显得没有意义,而且容易误导读者去解读数据。对于这种情况,处理方法一般有两种:1)变为空白 2)把它更改为对季度求和,达到对显示数据求"总计"的效果。我们先用Hasonevalue玩第一种,变为空白。

第二种方法对显示数据求总计需要用到公式SUMX,我们会在下一个章节做具体讲解。

0 人点赞