azure-data-explorer - 汇总在串联字符串中选择选项的次数 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)
不过,我不确定如何在字典中计算它。如果有人对此有任何建议或提示或示例,我将不胜感激,谢谢。
解决方案
干得好:
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 |
解释:
- 首先,您将每个输入字符串(包含多个标志)拆分为子字符串,以便每个子字符串只有一个标志 - 您可以通过使用
split
. - 现在您的新
Flags
列有一个字符串列表(每个字符串都包含一个标志),并且您想为每个字符串创建一条记录,因此您使用mv-expand
运算符 - 最后,您想计算每个 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
),以及表格格式的预期输出,以便它将更容易理解您想要实现的目标。
推荐阅读
- php - 管理社交登录验证数据
- c# - C# int.ParseInt() 性能问题
- file-io - 在 Kotlin 中使用 BiPredicate 的 Files.find()
- r - R 正则表达式:找到一个字母作为一个词,没有别的
- php - Codeigniter - JSON 格式的 Img 值
- android - React-native Flatlist 数据发布到 Api
- git - 在没有 Visual Studio 的 nix 系统上构建和部署 Web 应用程序
- java - 升级的 Spring Boot Starter Parent - Thymeleaf 方言布局:装饰器坏了
- java - MongoDB 反应式无法发送完整的信号
- for-loop - 带小数增量的 For 循环 !=.5 会产生奇怪的结果