首页 > 解决方案 > 使用按 Z 排序的 top N 对 X 和 Y 进行汇总

问题描述

Kusto 允许我根据某些规则排序的表的行的顶部创建在某些列上切片的汇总统计信息。例如,如果我想使用最后 100 行计算每个位置的平均分数,我可以写

T | top 100 by Time | summarize avg(Score) by Location

但我希望顶部适用于汇总的每个箱。例如,我想计算每个位置可用的最后 10 个分数的平均值。我不明白我怎么能做到这一点。起初我以为我可以使用 top-nested 因为它只返回前 n 个位置;我想返回所有位置的记录,并使用每个位置的前 n 来计算聚合。我愿意通过有效地为每个位置重复查询的方法来做到这一点,但我需要将最终结果放在一个包含 Location 和 AvgOfLast10Scores 列的表中。

标签: azure-data-explorerkql

解决方案


这是一个选项(在此示例中,它将进行最后两次测量):

datatable(Time:datetime, Location: string, Score:int)[datetime(2021-01-10), "a", 6, 
    datetime(2021-01-10 01:00), "a", 7,
    datetime(2021-01-10 02:00), "a", 8,
    datetime(2021-01-10 03:00), "a", 10,
    datetime(2021-01-10), "b", 10,
    datetime(2021-01-10 01:00), "b", 20,
    datetime(2021-01-10 02:00), "b", 30,
    datetime(2021-01-10 03:00), "b", 40]
| order by Location asc, Time desc 
| extend rowNumber = row_number(0, Location != prev(Location))
| where rowNumber <= 1
| summarize avg(Score) by Location

结果: 在此处输入图像描述


推荐阅读