top-nested 运算符
top-nested
运算符将执行分层聚合和值选择。
假设你有一个表,其中包含区域、销售人员和销售金额等销售信息。 top-nested
运算符可以帮助你回答复杂的问题,例如“按销售额排名前五的区域是什么,以及每个区域中排名前三的销售人员是谁?”
源数据将基于第一个 top-nested
子句中设置的条件(例如区域)进行分区。 接下来,该运算符将使用聚合(如将销售额相加)来挑选每个分区中排名靠前的记录。 每个后续 top-nested
子句都会优化由上一个子句创建的分区,从而创建更精确的组的层次结构。
最终每个子句都可得到一个包含两列的表。 一列保存分区值(如区域),另一列保存聚合计算的结果,如总销售额。
语法
T |
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Aggregation [asc
| desc
] [,
top-nested
... ]
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
T | string |
✔️ | 输入表格表达式。 |
N | int |
要为此层次结构级别返回的排在前面的值的数目。 如果省略,将返回所有非重复值。 | |
Expr | string |
✔️ | 针对输入记录的表达式,指示要为此层次结构级别返回的值。 通常,它会引用来自 T 的列,或涉及一列上类似 bin() 的计算。 (可选)将输出列名称设置为 Name = Expr。 |
ConstExpr | string |
如果指定,则为每个层次结构级别添加一条记录,且该记录的值是所有未能排在前面的记录的聚合值。 | |
聚合 | string |
应用于具有相同 Expr 值的记录的聚合函数。 其结果将确定排名靠前的记录。 请参阅支持的聚合函数。 (可选)将输出列名称设置为 Name = Aggregation。 |
支持的聚合函数
支持以下聚合函数:
注意
还支持聚合的任何代数组合。
返回
每个子句都可得到一个包含两列的表。 一列包含使用 Expr 计算的唯一值,另一列显示通过 Aggregation 计算获得的结果。
使用with
others
条款
使用top-nested
运算符跟with
others
增加了在更广泛的数据集设置看顶级内容的能力。 在以可视化方式渲染数据时,以这种方式评估数据非常有价值。
添加来自其他列的数据
输出表中仅显示指定为 top-nested
子句 Expr 的列。
若要包含特定级别的列的所有值:
- 请勿指定 N 的值。
- 使用列名称作为 Expr 的值。
- 使用
Ignore=max(1)
作为 Aggregation 的值。 - 使用 project-away 移除不必要的
Ignore
列。
想看例如,请参阅每个州的最新事件以及其他列数据。
性能注意事项
记录的数量可以随着 top-nested
条款的数量呈指数增长,如果没有指定N 参数,记录增长会更快。 这个运算符会消耗相当多的资源。
如果聚合分布不规则,请通过指定N来限制要返回的不同值的数量。然后使用with
others
=
ConstExpr条款了解所有其他案件的权重。
示例
受灾最严重的州、事件类型和属性损失的结束地区
以下查询按State
列对StormEvents
表并计算各州的总财产损失。 该查询选择属性损失最热门的两个州。 在这两个热门州内,查询按EventType
对数据进行分组,并选择造成损失最热门的三种事件类型。 然后查询按EndLocation
对数据进行分组并选择损坏程度最高的EndLocation
。 结果中仅显示一个 EndLocation
值,可能是由于风暴事件的较大性质或未记录结束位置导致。
StormEvents // Data source.
| top-nested 2 of State by sum(DamageProperty), // Top 2 States by total damaged property.
top-nested 3 of EventType by sum(DamageProperty), // Top 3 EventType by total damaged property for each State.
top-nested 1 of EndLocation by sum(DamageProperty) // Top 1 EndLocation by total damaged property for each EventType and State.
| project State, EventType, EndLocation, StateTotalDamage = aggregated_State, EventTypeTotalDamage = aggregated_EventType, EndLocationDamage = aggregated_EndLocation
输出
状态 | EventType | EndLocation | StateTotalDamage | EventTypeTotalDamage | EndLocationDamage |
---|---|---|---|---|---|
CALIFORNIA | 野火 | 1445937600 | 1326315000 | 1326315000 | |
CALIFORNIA | HighWind | 1445937600 | 61320000 | 61320000 | |
CALIFORNIA | DebrisFlow | 1445937600 | 48000000 | 48000000 | |
OKLAHOMA | IceStorm | 915470300 | 826000000 | 826000000 | |
OKLAHOMA | WinterStorm | 915470300 | 40027000 | 40027000 | |
OKLAHOMA | 洪水 | 商务 | 915470300 | 21485000 | 20000000 |
属性损失最多的五个州with
others
分组
以下示例使用top-nested
操作员确定属性损失热门的五个州,并使用with
others
条款将所有其他州的受损属性归为一组。 然后,它使用 render
命令将前五个州和所有其他周的损失财产可视化为 piechart
。
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
输出
每个州的最新事件以及其他列数据
以下查询检索美国各州最近的两个事件以及相关事件详细信息。 它使用 max(1)
在某些列内传播数据而不使用顶部嵌套的选择逻辑。 已使用 project-away
移除生成的 Ignore
聚合列。
StormEvents
| top-nested of State by Ignore0=max(1), // Partition the data by each unique value of state.
top-nested 2 of StartTime by Ignore1=max(StartTime), // Get the 2 most recent events in each state.
top-nested of EndTime by Ignore2=max(1), // Append the EndTime for each event.
top-nested of EpisodeId by Ignore3=max(1) // Append the EpisodeId for each event.
| project-away Ignore* // Remove the unnecessary aggregation columns.
| order by State asc, StartTime desc // Sort results alphabetically and chronologically.
每个标识的最新记录以及其他列数据
以下的top-nested
例如提取每个标识的最新记录,并基于上一个示例中介绍的概念 第一top-nested
条款按不同的id
值对数据进行分区使用Ignore0=max(1)
作为占位符。 每个id
,它根据timestamp
识别最近的两条记录。 使用top-nested
运算符附加其他信息,不指定计数,并使用Ignore2=max(1)
作为占位符。 最后,使用 project-away
运算符删除了不必要的聚合列。
datatable(id: string, timestamp: datetime, otherInformation: string) // Create a source datatable.
[
"Barak", datetime(2015-01-01), "1",
"Barak", datetime(2016-01-01), "2",
"Barak", datetime(2017-01-20), "3",
"Donald", datetime(2017-01-20), "4",
"Donald", datetime(2017-01-18), "5",
"Donald", datetime(2017-01-19), "6"
]
| top-nested of id by Ignore0=max(1), // Partition the data by each unique value of id.
top-nested 2 of timestamp by Ignore1=max(timestamp), // Get the 2 most recent events for each state.
top-nested of otherInformation by Ignore2=max(1) // Append otherInformation for each event.
| project-away Ignore0, Ignore1, Ignore2 // Remove the unnecessary aggregation columns.
输出
id | timestamp | otherInformation |
---|---|---|
Barak | 2016-01-01T00:00:00Z | 2 |
Donald | 2017-01-19T00:00:00Z | 6 |
Barak | 2017-01-20T00:00:00Z | 3 |
Donald | 2017-01-20T00:00:00Z | 4 |