美文网首页DAX从入门到精通
DAX从入门到精通 5-3-3 理解上下文转换的顺序

DAX从入门到精通 5-3-3 理解上下文转换的顺序

作者: PowerBI入门到实践 | 来源:发表于2019-08-11 22:32 被阅读0次

    按目前我们学习的内容,我们知道以下两个product表的计算列的区别:

    Product[SumOfUnitPrice] = CALCULATE ( SUM ( Product[Unit
    Price] ) )
    Product[SumOfAllUnitPrice] = CALCULATE ( SUM ( Product[Unit
    Price] ), ALL ( Product ) )
    

    这两个都是计算列,都使用了calculate函数,因此,两个都会发生上下文转换。

    sumofunitprice是只包含当前行产品的计算值,但是,sumofallunitprice呢?直观看,因为使用了all(product),你会期望列中包含了所有的unitprice。的确,结果是这样的。但是,如果你仔细思考下我们之前说的规则,似乎这里又有些问题。

    事实上,all(product)返回了整个product表,移除了筛选上下文产生的过滤器。但是,同时,上下文的转换会使得product的筛选条件是只有一个产品,也就是当前行。如果你把两个条件用AND连接例来,那么上下文转换的限制更细,所以,结果就是上下文转换的条件获胜。但是,为什么结果却是全部的产品呢,而不是当前的产品。

    因为这里对于上下文转换而产生的筛选上下文,以及由calculate产生的筛选上下文,两者有先后顺序。calculate先执行了上下转换,然后才执行筛选参数产生的条件。因此,calculate的条件会覆盖由上下文转换而产生的筛选条件。

    这个过程相比于描述,通过使用来解释会更加直观。事实上,对于上面这种情况,只有一种执行顺序是正确的,对于结果,我们要知道为什么,结果是如何计算出来的。最重要的就是:calculate中的筛选条件,会覆盖来自于上下文转换的条件。(换句话说,就是筛选参数的条件后执行。)

    相关文章

      网友评论

        本文标题:DAX从入门到精通 5-3-3 理解上下文转换的顺序

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