寻找一种在不折叠行的情况下计算聚合的方法
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
这将输出您想要的内容。
解释:
- 首先,您创建一个名为
Avgs
的临时 table(使用 let
语句),您将在其中获得每个类别的平均值。
- 您的主要语句是输出
MyTable
,但对于每个类别,您还希望显示来自 Avgs
的相关值,这是通过使用 lookup
运算符实现的。
正如标题所说,我想找到一种有效的方法来计算多组行的聚合,而不会将这些行折叠在一起。例如,我想在下面的 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
这将输出您想要的内容。
解释:
- 首先,您创建一个名为
Avgs
的临时 table(使用let
语句),您将在其中获得每个类别的平均值。 - 您的主要语句是输出
MyTable
,但对于每个类别,您还希望显示来自Avgs
的相关值,这是通过使用lookup
运算符实现的。