根据另一列中的条件查找先前的值

时间:2019-02-20 18:59:34

标签: powerbi dax

目标:

根据条件获取先前的值。

情况:

我有一个表,其组编号为1,2。我想查看每个组的先前值(指的是先前的日期)。

所需的输出:

我的输出应该像这样

+------------+-------+-------+----------------+
|    date    | group | value | previous value |  
+------------+-------+-------+----------------+
| 2019-02-02 |     2 |    50 |             45 |  
| 2019-02-02 |     1 |    60 |             80 |  
| 2019-01-18 |     2 |    45 |                |  
| 2019-01-18 |     1 |    80 |                |  
+------------+-------+-------+----------------+

我尝试过的事情:

previous value = 
LOOKUPVALUE(
    Table[value],
    Table[date],
    CALCULATE(
        MAX(Table[date]),
        FILTER(
            Table,
            Table[group]=EARLIER(Table[group]) &&  Table[date]<EARLIER(Table[date])
        )
    )
)

1 个答案:

答案 0 :(得分:1)

据我了解,您希望将此作为计算列而不是度量。试试:

Previous Value =
  VAR Current_Date = Table[date]
  VAR Previous_Date =
      CALCULATE (
          MAX ( Table[date] ),
          Table[date] < Current_Date,
          ALLEXCEPT ( Table, Table[group] )
      )
  RETURN
      CALCULATE (
          MAX ( Table[value] ),
          Table[Date] = Previous_Date,
          ALLEXCEPT ( Table, Table[group] )
      )

工作原理:

  1. 我们迭代表的每个记录,并将其日期存储在“ Current_Date”变量中。
  2. 对于每个记录,找到上一个日期,该日期是小于我们要迭代的记录日期的最大日期。为此,我们需要访问所有日期,而不仅是当前记录的日期,因此我们需要使用ALL函数。但是,由于我们需要按组进行操作,因此我们使用ALLEXCEPT来保留当前组的过滤器。
  3. 一旦找到先前的日期,您就可以使用完全相同的模式来查找先前的值-在记录的日期等于先前的日期的同时,找到MAX值,同时保留组过滤器。