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。虽然它确实有效,但不出所料,刷新速度明显变慢。
我无法确定这两种方法是过于复杂、过于简化,还是完全偏离了基础,但我将不胜感激任何建议。
我想知道的是:
- 是否可以使用像 LOOKUPVALUES() 这样的简单函数来实现所需的输出?
- 如果不是,是否有比复制查询更有效的方法?
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]
)
这里有两个主要区别。
- 我只对特定员工 (
EmployeeRows
) 的行取最大日期。
- 我在查找函数中包含
Employee
,这样它
只匹配合适的员工。
其他可能的解决方案,请看这个问题:
我需要一个计算列(因为这将在切片器中使用)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。虽然它确实有效,但不出所料,刷新速度明显变慢。
我无法确定这两种方法是过于复杂、过于简化,还是完全偏离了基础,但我将不胜感激任何建议。
我想知道的是:
- 是否可以使用像 LOOKUPVALUES() 这样的简单函数来实现所需的输出?
- 如果不是,是否有比复制查询更有效的方法?
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]
)
这里有两个主要区别。
- 我只对特定员工 (
EmployeeRows
) 的行取最大日期。 - 我在查找函数中包含
Employee
,这样它 只匹配合适的员工。
其他可能的解决方案,请看这个问题: