top-nested 運算子
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
運算子 top-nested
會執行階層式匯總和值選取。
假設您有一個數據表,其中包含銷售資訊,例如區域、銷售人員,以及銷售金額。 操作員 top-nested
可協助您回答複雜的問題,例如「依銷售額排在前五個區域,以及每個區域中前三名銷售人員是誰?
源數據會根據第一個 top-nested
子句中所設定的準則進行分割,例如 region。 接下來,運算符會使用匯總來挑選每個分割區中的前幾筆記錄,例如新增銷售金額。 每個後續 top-nested
子句都會精簡先前子句所建立的數據分割,並建立更精確的群組階層。
結果是每個子句有兩個數據行的數據表。 一個數據行會保存數據分割值,例如區域,而另一個數據行則保存匯總計算的結果,例如銷售總和。
語法
T |
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Aggregation [asc
| desc
] [ ] [,
top-nested
... ]
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
T | string |
✔️ | 輸入表格式表達式。 |
否 | int |
要針對這個階層層級傳回的最上層值數目。 如果省略,則會傳回所有相異值。 | |
Expr | string |
✔️ | 輸入記錄上的表達式,指出要針對這個階層層級傳回的值。 一般而言,它是指 T 中的數據行,或涉及數據行上的 bin() 等計算。 或者,將輸出數據行名稱設定為 Name = Expr。 |
ConstExpr | string |
如果指定了每個階層層級,就會新增一筆記錄,其值為未設為頂端的所有記錄的匯總。 | |
彙總 | string |
套用至具有相同 Expr 值的記錄的 聚合函數 。 結果會決定前一筆記錄。 請參閱 支援的聚合函數。 或者,將輸出數據行名稱設定為 名稱 = 匯總。 |
支援的聚合函數
支援下列聚合函數:
注意
也支持匯總的任何代數組合。
傳回
每個子句都有兩個數據行的數據表。 一個數據行包含使用 Expr 計算的唯一值,另一個數據行會顯示從 匯總 計算取得的結果。
with
others
使用 子句
top-nested
使用運算子可with
others
新增在更廣泛的數據集中查看最上層內容的內容內容。 以可視化方式呈現數據時,以這種方式評估您的數據是有價值的。
包含來自其他數據行的數據
輸出數據表中只會顯示指定為 top-nested
Expr 子句 的數據 行。
若要在特定層級包含資料列的所有值:
- 請勿指定 N 的值。
- 使用數據行名稱作為Expr的值。
- 使用
Ignore=max(1)
做為匯總的值。 - 使用 project-away 移除不必要的
Ignore
數據行。
如需範例,請參閱 其他數據行數據的最新每個狀態事件。
效能考量
記錄數目可以隨著子句數目 top-nested
以指數方式成長,如果 未指定 N 參數,則記錄成長速度會更快。 此運算子可能會耗用大量的資源。
如果匯總分佈不規則,請藉由指定 N 來限制要傳回的相異值數目。然後,使用 with
=
others
ConstExpr 子句來瞭解所有其他案例的權數。
範例
依財產損毀的頂級損毀狀態、事件類型和結束位置
下列查詢會 StormEvents
依數據行分割數據表, State
並計算每個狀態的總屬性損毀。 查詢會選取前兩個狀態,其財產損失量最大。 在這些前兩個狀態中,查詢會依據 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 |
---|---|---|---|---|---|
加利福尼亞州 | 野火 | 1445937600 | 1326315000 | 1326315000 | |
加利福尼亞州 | HighWind | 1445937600 | 61320000 | 61320000 | |
加利福尼亞州 | DebrisFlow | 1445937600 | 48000000 | 48000000 | |
奧克拉荷馬州 | IceStorm | 915470300 | 826000000 | 826000000 | |
奧克拉荷馬州 | WinterStorm | 915470300 | 40027000 | 40027000 | |
奧克拉荷馬州 | 洪水 | 交易 | 915470300 | 21485000 | 20000000 |
財產損失with
others
分組的前五個州
下列範例會 top-nested
使用 運算符來識別具有最大財產損毀的前五個狀態,並使用 with
others
子句將損毀的屬性分組為所有其他狀態。 然後,它會使用 命令,將前五個狀態和所有其他狀態piechart
render
的損毀屬性可視化。
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
輸出
具有其他數據行數據的最新每個狀態事件
下列查詢會針對每個美國州擷取兩個最新的事件,其中包含相關的事件詳細數據。 它會在特定數據行內使用 max(1)
來傳播數據,而不需使用頂端巢狀選取邏輯。 產生的 Ignore
匯總數據行會使用 project-away
移除。
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 |
---|---|---|
巴拉克 | 2016-01-01T00:00:00Z | 2 |
Donald | 2017-01-19T00:00:00Z | 6 |
巴拉克 | 2017-01-20T00:00:00Z | 3 |
Donald | 2017-01-20T00:00:00Z | 4 |