通过对列中的值进行分组来显示数据

Show data by grouping values in a column

我正在从事 PowerBI 项目,以分析我们的一个应用程序生成的一些警报日志数据。为了简洁起见,如果您摆脱了所有混乱,这就是典型日志的样子。

TimeStamp,Unit,Alarm,Machine
2020/02/25 13:33:45,A,Error,M1
2020/02/25 13:33:46,B,Error,M1
2020/02/25 13:33:47,C,Serious Error,M2
2020/02/25 13:33:48,A,Warning,M4
2020/02/25 13:33:49,C,Information,M3
2020/02/25 13:33:50,B,Information,M1
2020/02/25 13:33:51,D,Warning,M1
2020/02/25 13:33:52,E,Error,M2
2020/02/25 13:33:53,A,Serious Error,M4
2020/02/25 13:33:54,C,Dead Serious Error,M5
2020/02/25 13:33:55,B,Serious Error,M2
2020/02/25 13:33:56,B,Warning,M1
2020/02/25 13:33:57,D,Information,M3
2020/02/25 13:33:58,A,Warning,M2
2020/02/25 13:33:59,C,Error,M1
2020/02/25 13:34:00,E,Error,M2
2020/02/25 13:34:01,C,Critical Error,M4
2020/02/25 13:34:02,A,Critical Error,M5
2020/02/25 13:34:03,B,Error,M4
2020/02/25 13:34:04,C,Warning,M2

在设计器中,如果我想按计数显示警报,我可以简单地创建一个带有 Axis = AlarmValue = Count of Alarm 的柱形图,这将得到以下内容。

这绝对没问题。 但是,如果我想生成一个类似的图表,但警报按警报文本分组怎么办?例如,假设这些是我的群组。

Errors - Any alarm that contains the word 'error'.

Warnings - Any alarm that contains the word 'warning'.

Other - Everything else.

这意味着上面的日志将分为 3 类,它应该如下所示。

我通过手动创建另一个日志文件生成了上面的内容,我不想在我的真实项目中这样做。我将如何实现这一目标?

我知道 GroupBy 函数存在于查询编辑器中,但它似乎没有提供我需要的结果。


编辑

请注意,在我的真实日志中有数百个(如果不是数千个)不同的警报,而且我还可能从不同的地方获取每日日志,其中每个新日志都可能包含以前不存在的警报。不幸的是,我没有全面的警报列表,因此创建静态 table 并分组警报不是一个选项。

您可以在查询编辑器中创建计算列或使用 DAX 对这些列进行分组,然后使用该计算列代替 Alarm 作为您的轴。

以下是如何使用 DAX 执行此操作的示例:

Group =
SWITCH (
    TRUE (),
    CONTAINSSTRING ( 'Table'[Alarm], "Error" ), "Errors",
    CONTAINSSTRING ( 'Table'[Alarm], "Warning" ), "Warnings",
    "Other"
)

SWITCH returns 第一行的值等于 TRUE()。此处有更多详细信息:

DAX – The Diabolical Genius of “SWITCH TRUE”


您也可以使用 M 代码在查询编辑器中使用自定义列,如下所示:

if Text.Contains([Alarm], "Error") then "Errors"
else if Text.Contains([Alarm], "Warning") then "Warnings"
else "Other"

注意:M代码区分大小写,而DAX不区分大小写。