美文网首页DAX从入门到精通
DAX从入门到精通 5-2-3 使用calculatetable

DAX从入门到精通 5-2-3 使用calculatetable

作者: PowerBI入门到实践 | 来源:发表于2019-07-23 21:47 被阅读0次

    calculatetable的工作方式和calculate相同。区别在于它们返回的结果。calculate返回一个值,而calculatetable计算一个表表达式,返回一个表。下面这函数就是我们想要的。它移除了brand和color,但是保留了其他的filter条件。

    [CalcTable Version] :=
    CALCULATE (
    SUM ( Sales[SalesAmount] ),
    FILTER (
    CALCULATETABLE (
    Product,
    ALL ( Product[Brand] ),
    ALL ( Product[Color] )
    ),
    AND (
    Product[Brand] = "Tailspin Toys",
    Product[Color] = "Black"
    )))
    

    如下图:最后一个函数calctable版本的计算结果和calculate 版本的一致。

    image.png

    这里讨论的使用两种写法,布尔值和filter,来写等效的计算表达式,对你需要处理复杂条件的时候,非常重要,例如,如果你要表达一个or的条件而不是and,那么你就需要知道这个知识。

    例如:如果你要计算所有brands和colors的产品,brand等于Tailspin Toys或者color是Black的产品,然后你要使用calculatetable定义函数,下面是代码

    [CalcTable Version OR] :=
    CALCULATE (
    SUM ( Sales[SalesAmount] ),
    FILTER (
    CALCULATETABLE (
    Product,
    ALL ( Product[Brand] ),
    ALL ( Product[Color] )
    ),
    OR (
    Product[Brand] = "Tailspin Toys",
    Product[Color] = "Black"
    )))
    

    实际上,使用Calculatetable是清除brand和color,并且保持其他筛选器不变的一种好方法。因此,多列使用and的时候,很简单的只使用calculate解决,因为calculate自动把多个条件用and集合起来,而另一方面,or连接多个列,就复杂多了。因为你不能依赖默认为and的calculate,你需要手工的写复杂的DAX函数。

    另外,作为备选函数,你也可以使用下面的代码,用all函数带两个列的参数:

    [ALL Version OR] :=
    CALCULATE (
    SUM ( Sales[SalesAmount] ),
    FILTER (
    ALL ( Product[Brand], Product[Color] ),
    OR (
    Product[Brand] = "Tailspin Toys",
    Product[Color] = "Black"
    )))
    

    这种写法看起来优雅多了,但是对于初学者,这个看起来不那么直观。

    这节中,我们看到只要使用了多个列的条件,就会使结果变得难以理解。即使是有经验的DAX使用者,往往都难以完全把握上下文评估的路径。因此,不要被这章节的复杂吓到,只有不断的累积经验,才能使你做到快速准确的理解函数的计算。

    相关文章

      网友评论

        本文标题:DAX从入门到精通 5-2-3 使用calculatetable

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