寻找一种在不折叠行的情况下计算聚合的方法

Looking for a way to calculate aggregates without collapsing rows

正如标题所说,我想找到一种有效的方法来计算多组行的聚合,而不会将这些行折叠在一起。例如,我想在下面的 table 中创建 mean 列。

|------------|---------|-------------|
|  category  |  value  | mean(value) |
|------------|---------|-------------|
|      A     |    1    |      3      |
|------------|---------|-------------|
|      A     |    3    |      3      |
|------------|---------|-------------|
|      A     |    5    |      3      |
|------------|---------|-------------|
|      B     |    1    |     1.5     |
|------------|---------|-------------|
|      B     |    2    |     1.5     |
|------------|---------|-------------|

到目前为止,我找到的最佳方法是:

T
| join kind=leftouter (T | summarize avg() by category) on category

这似乎导致了性能问题。我也知道使用 partition by 的方法,但需要支持超过 64 个类别。

我是否缺少完成此任务的好方法?

给你:

let MyTable = datatable(Category:string, value:long) [
   "A", 1,
   "A", 3,
   "A", 5,
   "B", 1,
   "B", 2
];
let Avgs = MyTable | summarize avg(value) by Category;
MyTable | lookup (Avgs) on Category 

这将输出您想要的内容。

解释:

  1. 首先,您创建一个名为 Avgs 的临时 table(使用 let 语句),您将在其中获得每个类别的平均值。
  2. 您的主要语句是输出 MyTable,但对于每个类别,您还希望显示来自 Avgs 的相关值,这是通过使用 lookup 运算符实现的。