销售需求丨借贷记账法(补充)

小伙伴们,还记得之前的《销售需求丨借贷记账法》的文章么?当时的最后结果展示如下:

这个动图展示的就是最终的动态结果,但是很明显有点问题,就是当切片器没有选择任何对象的时候,数据模型会呈现错误的提示,这是什么原因造成的呢?
先来看看之前的代码:

借贷记账法 = 
VAR HQ =
    CALCULATETABLE (
        VALUES ( '示例'[订单编号] ),
        '示例'[项目名称] = ALLSELECTED ( '维度表'[项目名称] )
    )
RETURN
    CALCULATE ( SUM ( '示例'[金额] ), HQ )

这是之前采用的代码。其实不只是这一期,还有很多期的实际例子都存在这种情况:
当需要构建维度作为筛选条件,来为数据模型提供上下文进行计算的时候,都会遇到这个问题,就是无筛选状态下,没有数据来提供上下文,这就导致没有结果。那么该如何处理呢?
IN函数
IN函数本身是一个“逻辑”函数。按照微软的解释,当提供的标量值,在相对应的表格中至少有一行的情况,结果都是TRUE。什么意思?
比如说:**5 IN {5,15,25}**这个结果返回就是正确可以显示的,因为5在后面的表中;**10 IN {5,15,25}**这个结果返回就是错误的,因为表中没有符合10的选项。
这里有两种方法,方法1修改代码如下:

优化借贷记账法1 = 
VAR HQ =
    CALCULATETABLE (
        VALUES ( '示例'[订单编号] ),
        '示例'[项目名称] IN ALLSELECTED ( '维度表'[项目名称] )
    )
RETURN
    CALCULATE ( SUM ( '示例'[金额] ), HQ )

方法2代码如下:

优化借贷记账法2 = 
VAR HQ =
    CALCULATETABLE ( VALUES ( '示例'[订单编号] ), '示例'[项目名称] IN VALUES ( '维度表'[项目名称] ) )
RETURN
    CALCULATE ( SUM ( '示例'[金额] ), HQ )

先来看看结果,白茶再解释代码:

上面两个图用的是之前的代码,下面三个图用的是修改之后的代码,小伙伴们看出来区别了么?这里面的关键就在于**“IN”“=”的区别。“=”的情况下,需要提供一个具体的标量值。也就是说在非筛选状态下,等号右边的默认条件是“空”**,这种情况下数据模型肯定会报错。
“IN”的情况下,右边提供的是一个范围表。非筛选状态下,没有任何选项右边默认的条件是“整个表”,IN左边的选项肯定都包含在维度表里面,因为之前我们用VALUES提取的维度,那么结果返回就必然是TRUE的。
这就是提供值,与提供一张表的区别。

基本上当满足条件时,都可以使用IN函数:
1、非筛选情况下,左边的值全部在IN右边的表中有对应项目。
2、特别是根据需求自己构建维度的情况,基本都适用。

本期案例数据在下面的知识星球中,点击可加入白茶的星球。
小伙伴们,GET了么?
(白茶:Biu~❤)

这里是白茶,一个PowerBI的初学者。

下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。
(这个星球里面有白茶之前所有的案例文件。)

ID:Storysming

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值