KQL 即使在不匹配的情况下也如何显示每种情况的默认行

问题描述 投票:0回答:1

使用 KQL,是否有一种方法可以在结果表中为 case 语句中的每种可能性生成额外的行,即使数据集中没有匹配项?这是为了让前端不必用逻辑来填补没有结果的空白,这可能不是最佳实践,但我被要求这么做,我完全是为了让人们的生活更轻松。

我的案例陈述是对之前的计算进行操作,并将结果放入<30, 30-90 and the default 90+. Furthermore, I am binning the results by day, so, for each day there should be three rows returned with the Total Count per bucket per day, even if they are 0 results for a bucket in a day.

的桶中

我尝试使用 make-series 并以不同的方式进行总结,尝试向案例中添加默认值 0 以确保结果,但显然这没有意义并且不起作用。

// delay is a calculation of datetimes
| summarize Total = count() by Duration = case(delay < 30, "< 30 days", delay <= 90, "30-90 days", "90+ days"), bin(timestamp, 1d)
| sort by timestamp

案例关闭后,我们会丢失存储桶的上下文,因此我无法抓住它们并检查它们的 0 状态。有没有办法人为地将这0个结果强行放入结果表中?

感谢您的宝贵时间,我希望这会很有趣!

编辑:我也持开放态度,目前正在对这些数据进行多次聚合,并可能为这些存储桶每行日添加额外的列,而不是额外的行。

case default resultset kql bucket
1个回答
0
投票

所以我通过改变答案的方法解决了这个问题。我发现尝试人为地将 0 个结果强制放入行中太难了,因此我彻底改变了结果。

我首先按天对数据进行分箱,将大小写交换为 count_ifs,并每天返回一行,并在其自己的列中返回我需要的总数。因此,默认情况下,当查询不计算结果时,预期结果为 0。

我的解决方案从 8 行减少到 4 行,我不再需要在查询之前进行初步搜索,不再需要存储要执行的结果表。

| summarize under_30=countif(delay<30), 30_90=countif(delay>=30 and delay <=90), over_90=countif(delay>90) by bin(timestamp, 1d)

抱歉,这并不能解决案例不匹配时如何显示默认行的问题,但有时在重构并以不同的方式思考后会找到最佳解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.