美文网首页BI学习笔记
销售需求丨借贷记账法(补修版)

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

作者: Fabric丨白茶 | 来源:发表于2020-09-08 22:16 被阅读0次

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


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

    借贷记账法 = 
    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的初学者。

    相关文章

      网友评论

        本文标题:销售需求丨借贷记账法(补修版)

        本文链接:https://www.haomeiwen.com/subject/hlfsektx.html