欢迎光临散文网 会员登陆 & 注册

PowerBI之DAX神功:答网友问02.if函数如何用到度量值中

2021-08-14 19:53 作者:孙兴华zz  | 我要投稿

网友提问:IF函数只能用在新建列中吗?如何将它使用在度量值中呢?


其实,不只是IF函数,switch函数也是同理。

例如我们有一张表,表的名字:Sheet1

需求:新增一列,商品是switch显示已买,商品是PS5显示准备买

新建列 = if('Sheet1'[商品]="PS5","准备买","已买")

如果直接将公式   if('Sheet1'[商品]="PS5","准备买","已买")  写成度量值,100%是错的,因为度量值只能将行上下文转换成筛选上下文,但是它不能创建行上下文。


如果是多个数值列的计算,我们可以通过《DAX神功》第1卷12回学习的知识,通过多个列度量值的计算完成,例如下表名字是Sheet2

我们需要A列-B列写成新建列:

新建列='Sheet2'[A]-'Sheet2'[B]

我们需要写成度量值:相当于两个度量值在计算,度量值是筛选上下文,这是筛选上下文内部的计算

度量值=sum('Sheet2'[A])-sum('Sheet2'[B])

也可以写成:使用sumx生成行上下文,放到度量值里,因为度量值天生具有筛选功能,同时度量值将行上下文转化成了筛选上下文件

度量值=sumx('Sheet2','Sheet2'[A]-'Sheet2'[B])

但是如果您写成下面的公式就错了,因为两个列相减是生成行上下文,度量值不能生成行上下文,只能转换行上下文

度量值='Sheet2'[A]-'Sheet2'[B]

现在回归我们这个案例,表名为:Sheet1

我们需要将下面的新建列写成度量值:

 新建列 = if('Sheet1'[商品]="PS5","准备买","已买")

现在的情况不一样,它不是数值,是文本类型。

我们回忆一下《DAX神功》第1卷第5回,我们学习的聚合函数与迭代函数

现在我们发现一个问题,聚合函数除了计数以外,只有max和min支持文本。MaxX和MinX与max和min聚合规则是一样的,只是迭代函数运行方式不同,迭代函数是逐行扫描

 所以我们可以将度量值写成:

度量值 = MINX('Sheet1',if('Sheet1'[商品]="PS5","准备买","已买"))

度量值 = MAXX('Sheet1',if('Sheet1'[商品]="PS5","准备买","已买"))

将度量值放到矩阵或表中:

如果想让总计为空:IF+HASONEVALUE    具体方法详见《DAX神功》第1卷第10回

《DAX神功》视频版同步更新中....

https://www.bilibili.com/video/BV1YE411E7p3


PowerBI之DAX神功:答网友问02.if函数如何用到度量值中的评论 (共 条)

分享到微博请遵守国家法律