LOOKUPVALUE 基于 DAX 中的聚合函数

LOOKUPVALUE based upon aggregate function in DAX

我需要一个计算列(因为这将在切片器中使用)returns 员工最近的主管。

数据样本(table 'Performance'):

EMPLOYEE    |   DATE        |   SUPERVISOR
--------------------------------------------
Jim         |   2018-11-01  |   Bob
Jim         |   2018-11-02  |   Bob
Jim         |   2018-11-03  |   Bill
Mike        |   2018-11-01  |   Steve
Mike        |   2018-11-02  |   Gary

期望的输出:

EMPLOYEE    |   DATE         |  SUPERVISOR  |   LAST SUPER
---------------------------------------------------------------
Jim         |   2018-11-01   |  Bob         |   Bill
Jim         |   2018-11-02   |  Bob         |   Bill
Jim         |   2018-11-03   |  Bill        |   Bill
Mike        |   2018-11-01   |  Steve       |   Gary
Mike        |   2018-11-02   |  Gary        |   Gary

我尝试使用

LAST SUPER =
LOOKUPVALUE (
    Performance[SUPERVISOR],
    Performance[DATE], MAXX ( Performance, [DATE] )
)

但我收到错误:

Calculation error in column 'Performance'[]: A table of multiple values was supplied where a single value was expected.

经过更多研究,这种方法似乎从一开始就注定要失败。根据 this,搜索值不能引用正在搜索的同一 table 中的任何列。但是,即使我将搜索值更改为 TODAY() 或静态日期作为测试,我也遇到了关于多个值的相同错误。 MAXX() 还返回整个 table 中的最大日期,而不仅仅是该员工的最大日期。

我想知道这是否是多对多问题,所以我回到 Power Query,复制原始查询,按 EMPLOYEE 分组以获得 MAX(DATE),将两个字段与原始查询匹配以获得 SUPERVISOR在 MAX(DATE) 上,并且可以将其视为常规查找 table。虽然它确实有效,但不出所料,刷新速度明显变慢。

我无法确定这两种方法是过于复杂、过于简化,还是完全偏离了基础,但我将不胜感激任何建议。

我想知道的是:

  1. 是否可以使用像 LOOKUPVALUES() 这样的简单函数来实现所需的输出?
  2. 如果不是,是否有比复制查询更有效的方法?

LOOKUPVALUE 给出特定错误的原因是它正在对整个 table 进行查找,而不仅仅是与该特定员工关联的行。因此,如果您有多个主管匹配相同的最大日期,那么您就有问题了。

如果你想为此使用 LOOKUPVALUE 功能,我建议如下:

Last Super = 
VAR EmployeeRows =
    FILTER( Performance, Performance[Employee] = EARLIER( Performance[Employee] ) )
VAR MaxDate = MAXX( EmployeeRows, Performance[Date] )
RETURN
LOOKUPVALUE(
    Performance[Supervisor],
    Performance[Date], MaxDate,
    Performance[Employee], Performance[Employee]
)

这里有两个主要区别。

  1. 我只对特定员工 (EmployeeRows) 的行取最大日期。
  2. 我在查找函数中包含 Employee,这样它 只匹配合适的员工。

其他可能的解决方案,请看这个问题: