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使用運算子可withothers新增在更廣泛的數據集中查看最上層內容的內容內容。 以可視化方式呈現數據時,以這種方式評估您的數據是有價值的。

包含來自其他數據行的數據

輸出數據表中只會顯示指定為 top-nested Expr 子句 的數據 行。

若要在特定層級包含資料列的所有值:

  1. 請勿指定 N 的值
  2. 使用數據行名稱作為Expr的值
  3. 使用 Ignore=max(1) 做為匯總的值
  4. 使用 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

財產損失withothers分組的前五個州

下列範例會 top-nested 使用 運算符來識別具有最大財產損毀的前五個狀態,並使用 with others 子句將損毀的屬性分組為所有其他狀態。 然後,它會使用 命令,將前五個狀態和所有其他狀態piechartrender的損毀屬性可視化。

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子句會使用 做為佔位元的相異值idIgnore0=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