首页 > 解决方案 > Azure Kusto 查询语言将两个行值计为一个

问题描述

几周前我的应用程序日志中的一个值发生了变化,现在当我查询日志时,我的计数中收到了两个不同的值。我正在使用 Azure Logs 进行绘图,所以这相当痛苦。

如何查询一个行值作为另一行值(或同时查询两个行值)?

例如,我正在计算水果列值('PinkLadyApple'、'Orange'、'Banana'),PinkLadyApple 现在是 JazzApple,当我计算 90 天的结果时,我会收到

Name          | Sum  
PinkLadyApple | 100 
JazzApple     | 20 
Orange        | 150 
Banana        | 80

我正在寻找一种解决方案,可以将响应中的值重命名为仅 Apple,或者可以在 JazzApple 下组合这两个值,然后将结果呈现在图表中。

我的查询看起来像

fruits
| where timestamp > ago(90d)
| where fruitname in ('PinkLadyApple', 'Orange', 'Banana')
| summarize FruitCount = sum(OtherColumn) by name

标签: azureazure-log-analyticskql

解决方案


您可以使用函数将旧值更改为新值iff(),如下所示:

fruits
| where timestamp > ago(90d)
| where fruitname in ('JazzApple', 'PinkLadyApple', 'Orange', 'Banana')
| extend fruitname = iff(fruitname == 'JazzApple', 'PinkLadyApple', fruitname)
| summarize FruitCount = sum(OtherColumn) by name

请注意,为了获得最佳性能,我过滤旧值和新值(使用索引),然后才将旧值更改为新值,就在summarize运算符之前。

如果您有多个重命名的值,则可以改用该case()函数,如下所示:

fruits
| where timestamp > ago(90d)
| where fruitname in ('JazzApple', 'PinkLadyApple', 'Orange', 'Banana', 'OldValue2', 'OldValue3')
| extend fruitname = case(
   fruitname == 'JazzApple', 'PinkLadyApple',
   fruitname == 'OldValue2', 'NewValue2',
   fruitname == 'OldValue3', 'NewValue3',
   fruitname)
| summarize FruitCount = sum(OtherColumn) by name

推荐阅读