首页 > 解决方案 > 汇总在串联字符串中选择选项的次数 true/false

问题描述

我对 KQL 很陌生,而且我在使用它时遇到了困难(我没有统计背景,而且我也不太擅长 SQL)。我有来自 Microsoft AppCenter 的遥测数据,我想将其解析为一些图表,但我试图首先弄清楚如何拆分串联的字符串,该字符串本质上是一个具有两个可能值的字典:真和假。我想计算每个键的数量,因此每个键都有 2 个值(真/假),每个值也都有一个数字计数值。

我试图从中获取此数据的输入字符串的格式为Remove Splash/Main Menu Branding=True;Disable Aim Assist=False- 唯一项目被分割为 ; 并且每一对都被 = 分割。我试图弄清楚我的用户正在使用哪些选项。这里的示例字符串将被拆分为:

Remove Splash/Main Menu Branding = True (count 1)
Disable Aim Assist = False (count 1).

如果出现一个新项目,即Remove Splash/Main Menu Branding=True;Disable Aim Assist=True汇总数据将是

Remove Splash/Main Menu Branding = True (count 2)
Disable Aim Assist = False (count 1).
Disable Aim Assist = True (count 1).

到目前为止,我有一个选择单个项目的查询,但我不知道如何跨多行计算:

customEvents
| where timestamp > ago(7d)
| where name == "Installed a mod"
| extend Properties = todynamic(tostring(customDimensions.Properties))
| where isnotnull(Properties.["Alternate Options Selected"])
| extend OptionsStr = Properties.["Alternate Options Selected"] //The example string in above
| extend ModName = Properties.["Mod name"]
| where ModName startswith "SP Controller Support" //want to filter only to one mod's options
| extend optionsSplit = split(OptionsStr, ";")
| summarize any(optionsSplit)

不过,我不确定如何在字典中计算它。如果有人对此有任何建议或提示或示例,我将不胜感激,谢谢。

标签: azure-data-explorerkql

解决方案


干得好:

let MyTable = datatable(Flags:string) [
    "Remove Splash/Main Menu Branding=True;Disable Aim Assist=False",
    "Remove Splash/Main Menu Branding=True;Disable Aim Assist=True"
];
MyTable
| extend Flags = split(Flags, ";")
| mv-expand Flag = Flags to typeof(string)
| summarize Count = count() by Flag

这个的输出是:

| Flag                                  | Count |
|---------------------------------------|-------|
| Remove Splash/Main Menu Branding=True | 2     |
| Disable Aim Assist=False              | 1     |
| Disable Aim Assist=True               | 1     |

解释:

  1. 首先,您将每个输入字符串(包含多个标志)拆分为子字符串,以便每个子字符串只有一个标志 - 您可以通过使用split.
  2. 现在您的新Flags列有一个字符串列表(每个字符串都包含一个标志),并且您想为每个字符串创建一条记录,因此您使用mv-expand运算符
  3. 最后,您想计算每个 key=value 对出现的次数,然后使用summarize count() by Flag

如果您想查看每个键的一条记录(在输出中),则可以改用以下查询:

let MyTable = datatable(Flags:string) [
    "Remove Splash/Main Menu Branding=True;Disable Aim Assist=False",
    "Remove Splash/Main Menu Branding=True;Disable Aim Assist=True"
];
MyTable
| extend Flags = split(Flags, ";")
| mv-expand Flag = Flags to typeof(string)
| parse Flag with Key "=" Value
| project Key, Value
| evaluate pivot(Value, count(Value))

它的输出是:

| Key                              | False | True |
|----------------------------------|-------|------|
| Remove Splash/Main Menu Branding | 0     | 2    |
| Disable Aim Assist               | 1     | 1    |

您写道您是 KQL 的新手,因此您可能会发现以下免费的 Pluralsight 课程很有趣:

PS 以后请提供datatable格式的示例输入(如果您使用的是 Kusto Explorer,只需选择相关的查询结果,右键单击选择,然后单击Copy as datatable() literal),以及表格格式的预期输出,以便它将更容易理解您想要实现的目标。


推荐阅读