【问题标题】:DAX/Power BI: How can I filter distinct rows conditionally on two (or more) columns?DAX/Power BI:如何有条件地在两列(或更多列)上过滤不同的行?
【发布时间】:2021-03-25 14:52:48
【问题描述】:

我有一个事件日志,记录所有用户会话的各种事件的时间戳。每个会话可以有许多不同事件类型的日志事件,如下:

sessionID time eventType
001 5:01:10 ready
001 5:01:14 denied
001 5:01:19 success
002 5:05:00 ready
003 5:06:14 ready
003 5:06:19 denied
002 5:07:20 success

我只需要找到每个会话的 latest 事件的计数。我必须:

deniedCount = COUNTAX(FILTER('sessions',
    [eventType] = "denied"
), [time])

但这会计算 sessionID 001,因为它有一个被拒绝的事件。由于该会话以成功结束,因此不应包括在内。什么表达式可以做这种独特的过滤?谢谢。

【问题讨论】:

  • 您期望的输出有什么帮助

标签: powerbi dax


【解决方案1】:

这里的关键是找到每个会话的最长时间。

这是我想到的最简单的版本:

deniedCount =
COUNTROWS (
    FILTER (
        sessions,
        sessions[time]
            = CALCULATE (
                MAX ( sessions[time] ),
                ALLEXCEPT ( sessions, sessions[sessionID] )
            )
            && sessions[eventType] = "denied"
    )
)

这会计算该会话的时间为最新的行,然后类型为“拒绝”。

虽然简单,但这并不是最有效的,因为它需要计算sessions 每一行的最大值。一种更有效的方法是先分组,这样您就可以遍历一个较小的表:

deniedCount =
COUNTROWS (
    FILTER (
        SUMMARIZE ( sessions, sessions[sessionID], "LastTime", MAX ( sessions[time] ) ),
        CALCULATE (
            SELECTEDVALUE ( sessions[eventType] ),
            sessions[time] = EARLIER ( [LastTime] )
        ) = "denied"
    )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2021-06-09
    • 2020-11-19
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多