【问题标题】:Line and column contexts in PowerBI measures?Power BI 度量中的行和列内容?
【发布时间】:2020-12-08 02:27:15
【问题描述】:

我正在尝试使用 PowerBI 复制最初在 Excel 中进行的计算,虽然我已经阅读了一些关于度量中的上下文计算的文档,但我很难得到结果。

我的桌子想要如下一张

Date Weight Calculated_measure
01/01/2020 1 0
01/02/2020 3 31
01/03/2020 3 147

日期以 dd/mm/yyyy 为单位。

计算度量的想法如下:

  1. 对于每一行,我将当前“日期”值与所有其他“日期”值进行比较并进行减法。
  2. 如果减法的结果大于零,我保留结果。否则,我将结果设置为 0。
  3. 然后我将结果乘以权重

为了说明第三行的计算: (01/03/2020-01/01/2020)*1 + (01/03/2020-01/02/2020) *3 + (01/03/2020-01/03/2020) *2 =60 *​​ 1 + 29 * 3 + 0 = 147

Excel 中第一行的公式,例如: = { SUMPRODUCT(
如果 ( (A2-$A$2:$A$4)>0; (A2-$A$2:$A$4); 0 ) ; $B$2:$B$4 ) }

谢谢。理解这段代码对我学习 PowerBI 中的上下文过滤器有很大帮助

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    DAX 中令人困惑的一点是如何知道要使用哪个行上下文。

    您可以使用 EARLIER 函数从 sumproduct 行上下文移回之前的原始行上下文,并像这样定义您的度量:

    CALCULATED_COLUMN = 
    SUMX (
        Table1,
        IF (
            EARLIER ( Table1[DATE] ) > Table1[DATE],
            EARLIER ( Table1[DATE] ) - Table1[DATE]
        ) * Table1[WEIGHT]
    )
    

    如果您不想记住 EARLIER 的工作原理,可以使用变量将原始行上下文定义为常量并在迭代器中使用:

    CALCULATED_COLUMN = 
    VAR RowDate = Table1[DATE]
    RETURN
        SUMX (
            FILTER ( Table1, Table1[Date] < RowDate ),
            ( RowDate - Table1[DATE] ) * Table1[WEIGHT]
        )
    

    在上面,我应用了过滤器而不是使用 IF。如果适用,这通常会更有效。


    编辑:在上面,我在考虑计算列。作为衡量标准,情况略有不同,以下 OP 的评论是适当的调整:

    MEASURE =
    VAR RowDate = SELECTEDVALUE ( Table1[DATE] )
    RETURN
        SUMX (
            FILTER ( ALL ( Table1 ), Table1[Date] < RowDate ),
             ( RowDate - Table1[Date] ) * Table1[WEIGHT]
        )
    

    SELECTEDVALUE 是必需的,因为度量值不存在行上下文,并且需要 ALL 才能将 sum-product 应用于整个表,而不仅仅是过滤器上下文中的部分。

    【讨论】:

    • 谢谢你,亚历克西斯!我必须对公式进行一些调整才能工作(使用 SELECTEDVALUE 来捕获一个特定值而不是列中的所有值并添加一个 ALL 来过滤),但我可以理解逻辑并实现。非常感谢你。 ----------------- Dax_2 = VAR RowDate = SELECTEDVALUE(Table1[DATE]) RETURN SUMX( FILTER( ALL(Table1), Table1[Date]
    • 啊,好点子。表格设置让我想到了计算列。我已经编辑了我的答案,以便为未来的读者澄清这一点。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2021-09-17
    • 1970-01-01
    • 2022-06-21
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多