top-nested 演算子
演算子は top-nested
、階層的な集計と値の選択を実行します。
地域、営業担当者、販売金額などの売上情報を含むテーブルがあるとします。 オペレーターは top-nested
、"売上別の上位 5 つの地域とは何か、各地域の上位 3 人の営業担当者" など、複雑な質問に答えるのに役立ちます。
ソース データは、region などの最初 top-nested
の句で設定された条件に基づいてパーティション分割されます。 次に、オペレーターは、売上金額の追加など、集計を使用して各パーティションの上位レコードを選択します。 後続 top-nested
の各句では、前の句によって作成されたパーティションが調整され、より正確なグループの階層が作成されます。
結果は、句ごとに 2 つの列を含むテーブルになります。 1 つの列にはリージョンなどのパーティション分割値が保持され、もう 1 つの列には売上の合計などの集計計算の結果が保持されます。
構文
T|
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
集計 [asc
| desc
] [,
top-nested
... ]
構文規則について詳しく知る。
パラメーター
名前 | 型 | 必須 | 説明 |
---|---|---|---|
T | string |
✔️ | 表形式の入力式。 |
N | int |
この階層レベルで返される上位値の数。 省略すると、すべての個別の値が返されます。 | |
Expr | string |
✔️ | この階層レベルで返す値を示す入力レコードに対する式。 通常、 T の列を参照するか、列の bin() などの計算を行います。 必要に応じて、出力列名を NameExpr に設定します= 。 |
ConstExpr | string |
指定した場合、階層レベルごとに 1 つのレコードが追加され、最上位に設定されなかったすべてのレコードに対する集計値が追加されます。 | |
集計 | string |
同じ Expr 値を持つレコードに適用される集計関数。 結果によって上位レコードが決まります。 「サポートされている集計関数」を参照してください。 必要に応じて、出力列名を [名前の集計] に設定します= 。 |
サポートされている集計関数
サポートされている集計関数は次のとおりです。
注意
集計の代数の組み合わせもサポートされています。
戻り値
句ごとに 2 つの列を持つテーブル。 1 つの列には Expr を使用して計算された一意の値が含まれており、もう 1 つの列には 集計 計算から得られた結果が表示されます。
他の列のデータを含める
Expr 句としてtop-nested
指定された列のみが出力テーブルに表示されます。
特定のレベルの列のすべての値を含めるには:
- N の値を指定しないでください。
- 列名を Expr の値として使用します。
- 集計の値として を使用
Ignore=max(1)
します。 - 不要な
Ignore
列を project-away で削除します。
例については、「 他の列から追加のデータを含む状態ごとの最新のイベントを取得する」を参照してください。
パフォーマンスに関する考慮事項
句の数に応じてレコードの数が指数関数的に増加する可能性があり、N 個のtop-nested
制限が指定されていない場合は、レコードの増加がさらに速くなります。 この演算子は、かなりの量のリソースを消費する可能性があります。
集計の分布がかなり均一でない場合は、N を指定して返す個別の値の数を制限します。次に、ConstExpr 仕様をwith
others
=
使用して、他のすべてのケースの重みを示す値を取得します。
例
演算子の使用を開始するtop-nested
次のクエリでは、テーブルを StormEvents
列で State
パーティション分割し、各状態の総緯度を計算します。 クエリでは、緯度の合計が最も高い上位 2 つの状態が選択されます。 これらの上位 2 つの状態内では、クエリによってデータがグループ化 Source
され、緯度の合計が最も高い上位 3 つのソースが選択されます。 上位 2 つの状態の上位 3 つのソースごとに、クエリによって EndLocation
データがグループ化され、緯度の合計が最も高い を EndLocation
選択します。
StormEvents // Data source.
| top-nested 2 of State by sum(BeginLat), // Top 2 States by total latitude.
top-nested 3 of Source by sum(BeginLat), // Top 3 Sources by total latitude in each State.
top-nested 1 of EndLocation by sum(BeginLat) // Top 1 EndLocation by total latitude in each Source and State.
出力
State | aggregated_State | source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | 法執行機関 | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | パブリック | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | 訓練を受けた観測員 | 21279.7083 | SHARON SPGS | 388.7404 |
テキサス州 | 123400.5101 | パブリック | 13650.9079 | AMARILLO | 246.2598 |
テキサス州 | 123400.5101 | 法執行機関 | 37228.5966 | PERRYTON | 289.3178 |
テキサス州 | 123400.5101 | 訓練を受けた観測員 | 13997.7124 | CLAUDE | 421.44 |
別の列のデータを使用して、入れ子になった上位の結果を強化する
次のクエリは、追加 top-nested
の句を導入することで、前の例に基づいています。 この新しい句では、数値指定がない場合、パーティション全体で のすべての個別の EventType
値が抽出されます。 max(1)
集計関数は単なるプレースホルダーであり、結果は無関係であるため、プロジェクトアウェー演算子は列をIgnore
削除します。 結果には、以前に集計されたデータに関連付けられているすべてのイベントの種類が表示されます。
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation by sum(BeginLat),
top-nested of EventType by Ignore = max(1)
| project-away Ignore
出力
State | aggregated_State | source | aggregated_Source | EndLocation | aggregated_EndLocation | EventType |
---|---|---|---|---|---|---|
テキサス州 | 123400.51009999994 | パブリック | 13650.907900000002 | AMARILLO | 246.25979999999998 | ひょう |
テキサス州 | 123400.51009999994 | パブリック | 13650.907900000002 | AMARILLO | 246.25979999999998 | 雷雨風 |
KANSAS | 87771.235500000068 | パブリック | 22855.6206 | BUCKLIN | 488.2457 | 洪水 |
KANSAS | 87771.235500000068 | パブリック | 22855.6206 | BUCKLIN | 488.2457 | 雷雨風 |
KANSAS | 87771.235500000068 | パブリック | 22855.6206 | BUCKLIN | 488.2457 | ひょう |
テキサス州 | 123400.51009999994 | 訓練を受けた観測員 | 13997.712400000009 | CLAUDE | 421.44 | ひょう |
KANSAS | 87771.235500000068 | 法執行機関 | 18744.823000000004 | FT SCOTT | 264.858 | 鉄砲水 |
KANSAS | 87771.235500000068 | 法執行機関 | 18744.823000000004 | FT SCOTT | 264.858 | 雷雨風 |
KANSAS | 87771.235500000068 | 法執行機関 | 18744.823000000004 | FT SCOTT | 264.858 | 洪水 |
テキサス州 | 123400.51009999994 | 法執行機関 | 37228.596599999961 | PERRYTON | 289.3178 | ひょう |
... | ... | ... | ... | ... | ... |
を使用して with
others
除外されたデータを探索する
句内に top-nested
組み込まれると、上位の with
others
結果から除外されたデータを集計する追加のレコードが仕様に導入されます。 次のクエリでは、 列と aggregated_State
列にState
追加のレコードが作成され、Kansas と Texas を除くすべての州の集合的な緯度が表されます。 さらに、 EndLocation
列と aggregated_EndLocation
列には追加の 9 つのレコードがあります。 これらのレコードは、各状態とソース内の最上位の場所として修飾されていない終了位置の結合された緯度を示します。
StormEvents
| top-nested 2 of State with others = "All Other States" by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation with others = "All Other End Locations" by sum(BeginLat)
出力
State | aggregated_State | source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | 法執行機関 | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | パブリック | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | 訓練を受けた観測員 | 21279.7083 | SHARON SPGS | 388.7404 |
テキサス州 | 123400.5101 | パブリック | 13650.9079 | AMARILLO | 246.2598 |
テキサス州 | 123400.5101 | 法執行機関 | 37228.5966 | PERRYTON | 289.3178 |
テキサス州 | 123400.5101 | 訓練を受けた観測員 | 13997.7124 | CLAUDE | 421.44 |
KANSAS | 87771.2355000001 | 法執行機関 | 18744.823 | その他すべての終了場所 | 18479.965 |
KANSAS | 87771.2355000001 | パブリック | 22855.6206 | その他すべての終了場所 | 22367.3749 |
KANSAS | 87771.2355000001 | 訓練を受けた観測員 | 21279.7083 | その他すべての終了場所 | 20890.9679 |
テキサス州 | 123400.5101 | パブリック | 13650.9079 | その他すべての終了場所 | 13404.6481 |
テキサス州 | 123400.5101 | 法執行機関 | 37228.5966 | その他すべての終了場所 | 36939.2788 |
テキサス州 | 123400.5101 | 訓練を受けた観測員 | 13997.7124 | その他すべての終了場所 | 13576.2724 |
KANSAS | 87771.2355000001 | その他すべての終了場所 | 24891.0836 | ||
テキサス州 | 123400.5101 | その他すべての終了場所 | 58523.2932000001 | ||
他のすべての州 | 1149279.5923 | その他すべての終了場所 | 1149279.5923 |
次のクエリは、前の例で使用した最初のレベルと同じ結果を示しています。
StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)
出力
sum_BeginLat |
---|
1149279.5923 |
階層的な結果を並べ替える
包括的な並べ替え順序を実現するために、次のクエリでは、グループごとに、現在の階層レベル内の値ごとにインデックスベースの並べ替えを使用します。 この並べ替えは、最終的な入れ子になったレベル (この場合は ) に従って結果を配置するように調整されます EndLocation
。
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 2 of Source by sum(BeginLat),
top-nested 4 of EndLocation by sum(BeginLat)
| sort by State, Source, aggregated_EndLocation
| summarize
EndLocations = make_list(EndLocation, 10000),
endLocationSums = make_list(aggregated_EndLocation, 10000)
by State, Source
| extend indicies = range(0, array_length(EndLocations) - 1, 1)
| mv-expand EndLocations, endLocationSums, indicies
出力
State | source | EndLocations | endLocationSums | インデックス |
---|---|---|---|---|
テキサス州 | 訓練を受けた観測員 | CLAUDE | 421.44 | 0 |
テキサス州 | 訓練を受けた観測員 | AMARILLO | 316.8892 | 1 |
テキサス州 | 訓練を受けた観測員 | DALHART | 252.6186 | 2 |
テキサス州 | 訓練を受けた観測員 | PERRYTON | 216.7826 | 3 |
テキサス州 | 法執行機関 | PERRYTON | 289.3178 | 0 |
テキサス州 | 法執行機関 | LEAKEY | 267.9825 | 1 |
テキサス州 | 法執行機関 | BRACKETTVILLE | 264.3483 | 2 |
テキサス州 | 法執行機関 | GILMER | 261.9068 | 3 |
KANSAS | 訓練を受けた観測員 | SHARON SPGS | 388.7404 | 0 |
KANSAS | 訓練を受けた観測員 | ATWOOD | 358.6136 | 1 |
KANSAS | 訓練を受けた観測員 | LENORA | 317.0718 | 2 |
KANSAS | 訓練を受けた観測員 | SCOTT CITY | 307.84 | 3 |
KANSAS | パブリック | BUCKLIN | 488.2457 | 0 |
KANSAS | パブリック | ASHLAND | 446.4218 | 1 |
KANSAS | パブリック | 保護 | 446.11 | 2 |
KANSAS | パブリック | MEADE STATE PARK | 371.1 | 3 |
他の列から追加のデータを使用して、状態ごとの最新のイベントを取得する
次のクエリは、関連するイベントの詳細と共に、米国の状態ごとに 2 つの最新のイベントを取得する方法を示しています。 で識別される特定の列内での の max(1)
使用に 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.
他の列から追加のデータを含む ID ごとに最新のレコードを取得する
次のクエリでは、ID ごとに最新のレコードを抽出し、前の例で導入した概念に基づいて構築する方法を示します。 最初 top-nested
の句は、 の個別の値によってデータを id
パーティション分割します。 後続の 句は、 ごとに id
に基づいて、最新の 2 つのレコードをtimestamp
識別します。 その他の情報は、指定されていないカウントと任意max(1)
の集計と共に演算子を使用してtop-nested
追加されます。 最後に、 演算子を使用して不要な集計列が 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 |
ドナルド | 2017-01-19T00:00:00Z | 6 |
バラクオバマ | 2017-01-20T00:00:00Z | 3 |
ドナルド | 2017-01-20T00:00:00Z | 4 |
関連コンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示