关于度量值的嵌套使用

将计算列作为参数在度量值中进行嵌套使用是非常常见的一种操作。反过来,在度量值表达式中使用度量值作为参数也挺常见。不过需要注意的是,当度量值中嵌套度量值时,DAX其实是会将参数度量值转译成一个计算列,之后再参与运算。也就是说,为了避免出现复杂的嵌套引用依赖关系, DAX内部逻辑处理上不允许使用度量值作为参数传递给函数使用,即使用户在书写中使用了度量值,DAX在运算上也会将其按照计算列的运算逻辑来进行处理。
例如假设在同一个项目内,某一阶段的起始时间是上一阶段的结束时间,则根据项目完成时间,可以创建一个计算列来获得项目起始时间。

Started Date =
IF (
    COUNTROWS (
        FILTER (
            ALL ( TimeLine ),
            TimeLine[Finished Date]
                < MAX ( TimeLine[Finished Date] )
                && TimeLine[Project]
                    = SELECTEDVALUE ( TimeLine[Project] )
        )
    ) = 0,
    DATE ( 2020, 1, 1 ),
    MAXX (
        FILTER (
            ALL ( TimeLine ),
            TimeLine[Finished Date]
                < MAX ( TimeLine[Finished Date] )
                && TimeLine[Project]
                    = SELECTEDVALUE ( TimeLine[Project] )
        ),
        TimeLine[Finished Date]
    )
)

在这里插入图片描述
然而,如果单独创建一个度量值来获取MAX ( TimeLine[Finished Date] ),之后将其作为参数带到Started Date表达式当中进行计算,则无法获得想要的Started Date值。
在这里插入图片描述

导致这个问题的原因在于当度量值Finished_Date_Measure以参数形式被Started Date表达式使用时,DAX会先将这个度量值强制转换成计算列再代入到表达式中。也就是说,在计算过程中,Finished_Date_Measure被换成了下图所示的计算列。这就导致FILTER函数的筛选条件实际上是要找寻符合Finished Date< 6/1/2020的数据。由于TimeLine表单中没有符合该条件的数据,因此Filter返回值为空,这样所有的Started Date都是1/1/2020,从而无法获取想要的计算结果。

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章