总结在连接字符串中选择对/错选项的次数

问题描述

我对KQL还是很陌生,并且很难过(我没有统计方面的知识,而且我也不擅长sql)。我有来自Microsoft AppCenter的遥测数据,我想将其解析为一些图表,但是我试图首先弄清楚如何拆分连接的字符串,该字符串本质上是一个具有两个可能值的字典:true和false。我想计算每个数字,所以每个键都有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)

我不确定如何在字典中对其进行计数。如果有人对这样的事情有任何建议,技巧或例子,我将非常感谢,谢谢。

解决方法

您在这里:

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. 最后,您要计算每个键=值对出现的次数,并使用summarize count() by Flag

如果您希望每个键看到一个记录(在输出中),则可以使用以下查询代替:

let MyTable = datatable(Flags:string) [
    "Remove Splash/Main Menu Branding=True;Disable Aim Assist=False",";")
| 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课程:

P.S。以后,请以datatable格式提供示例输入(如果您使用的是Kusto Explorer,只需选择相关的查询结果,右键单击所选内容,然后单击Copy as datatable() literal),然后输入预期的以表格格式输出,以便更轻松地了解您要实现的目标。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...