使用 DirectQuery 过滤重复出现的值 Power BI

Filtering reoccuring values Power BI using DirectQuery

我有一个 table 包含来自机器的时间戳和错误代码。

机器有时会连续多次重复相同的错误,但我只想将这些计为一个错误。因此,我正在寻找一种方法来计算这些错误是否再次发生,并使用某种过滤器过滤掉这些错误。

我正在使用 DirectQuery,因此使用 EARLIER() 获取最后一个错误似乎不起作用。

我应该如何过滤这些重复出现的错误?

如果您想在数据库中执行此操作,Azure SQL 数据库支持 LAG function,因此将数据加载到 Power BI 的查询可能如下所示:

declare @t table([Time] time, [Error] int)
insert into @t([Time], [Error]) values
    ('11:01', 0),
    ('12:12', 0),
    ('13:31', 4),
    ('14:50', 0),
    ('15:10', 4),
    ('15:20', 4),
    ('15:30', 4),
    ('15:40', 4),
    ('17:01', 1),
    ('18:09', 1),
    ('19:41', 0)


select
    t.[Time]
    , t.[Error]
    , IIF(t.[Error] <> 0 and LAG(t.[Error], 1) OVER(ORDER BY t.[Time]) = t.[Error], 1, 0) as Reoccuring
from @t t
order by t.[Time]

请注意,该示例并未显示对数据进行分区,例如通过机器或其他东西,因为您的示例数据不包括它。如果需要做,必须在LAG函数中加上PARTITION BY clause。如果您使用确切的数据库架构更新您的问题,我也会更新我的答案。

正如 Andrey Nikolov 所假设的那样,我需要使用机器序列号来使用 PARTITION BY 子句。

SELECT TOP 100 PERCENT *,
       (CASE WHEN error = 0 OR error = LAG(error, 1, 0) OVER (PARTITION BY serial_nr ORDER BY event_time DESC)
       THEN 0
       ELSE 1
       END) AS error_is_new
FROM MyTable

我在 table 中添加了一个新列,其中包含是否有新错误。

我使用 error_is_new 只显示新的错误。