查找最小值过滤两列

时间:2019-01-30 13:41:27

标签: dax powerpivot

在PowerPivot中,我尝试基于两个列值在表中找到最小值。我的数据包含多个日期,多个时间段的多个人。对于每个日期的每个人,我需要确定数据中最早的时间段。

我每天都可以在数据中使用此数据,它可以很好地工作,但是当我在数据中添加多天时,它只能确定每个人的最短时间段,而不是列出每个日期的每个人的最短时间段。

>
=
IF (
    CALCULATE (
        MIN ( [start] ),
        FILTER ( actual, [Agent_User_Name] = EARLIER ( [Agent_User_Name] ) )
    )
        = [start],
    TRUE (),
    FALSE ()
)

    Agent_User_Name     date      start
    Susan               1/1/19    08:00
    Susan               1/1/19    08:45
    Susan               1/1/19    10:00
    Susan               1/2/19    08:30
    Susan               1/2/19    09:00
    Timothy ....

我试图确定Susan在1/1/19的最早时间是08:00,在1/2/19的最早时间是08:30,并将该记录最早记为真或假。

1 个答案:

答案 0 :(得分:1)

如果要创建计算列:

=
VAR Min_Time =
    CALCULATE (
        MIN ( Actual[Start] ),
        ALLEXCEPT ( Actual, Actual[Agent_User_Name], Actual[date] )
    )
RETURN
    IF ( Actual[Start] = Min_Time, TRUE (), FALSE () )

在这里,对于每一行,我们在整个开始列中找到min start(这就是我们使用ALL的原因),但是保留当前行的Agent_User_Name和Date过滤器(这就是EXCEPT的原因)。实际上,它将开始列按当前用户和日期分组。

结果:

enter image description here


您也可以将其设为动态指标:

=
MINX (
    SUMMARIZE (
        Actual,
        Actual[Agent_User_Name],
        Actual[date],
        "Min_Time", MIN ( Actual[start] )
    ),
    [Min_Time]
)

结果:

enter image description here

编辑:

VAR适用于Excel 2016或更高版本。如果您使用的是旧版Excel,请重新编写不带变量的公式:

= IF (
        Actual[Start]
            = CALCULATE (
                MIN ( Actual[Start] ),
                ALLEXCEPT ( Actual, Actual[Agent_User_Name], Actual[date] )
            ),
        TRUE (),
        FALSE ()
    )

不像VAR那样清晰易读,但应该可以。如果可以,请尽快切换到Excel 2016-Power Pivot引擎要好得多。