top-nested 演算子
top-nested
演算子は、階層的な集計と値の選択を実行します。
地域、営業担当者、販売金額などの売上情報を含むテーブルがあるとします。 top-nested
オペレーターは、"売上別の上位 5 つの地域とは何か、それらの各リージョンで上位 3 人の営業担当者は誰か" など、複雑な質問に答えるのに役立ちます。
ソース データは、リージョンなどの最初の top-nested
句で設定された条件に基づいてパーティション分割されます。 次に、オペレーターは、売上金額の追加などの集計を使用して、各パーティションの上位レコードを選択します。 後続の各 top-nested
句では、前の句によって作成されたパーティションが調整され、より正確なグループの階層が作成されます。
結果は、句ごとに 2 つの列を含むテーブルになります。 1 つの列にはリージョンなどのパーティション分割値が保持され、もう 1 つの列には売上の合計などの集計計算の結果が保持されます。
構文
T |
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Aggregation [asc
| desc
] [,
top-nested
... ]
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
✔️ | 表形式の入力式。 |
N | int |
この階層レベルで返される最上位の値の数。 省略すると、すべての個別の値が返されます。 | |
Expr | string |
✔️ | この階層レベルで返す値を示す入力レコードに対する式。 通常は、 T からの列を参照するか 列に対する bin() などの計算が含まれます。 必要に応じて、出力列名を Name = Expr として設定します。 |
ConstExpr | string |
指定した場合、階層レベルごとに 1 つのレコードが追加され、その値は最上位に設定されなかったすべてのレコードの集計になります。 | |
集約 | string |
同じ Expr 値を持つレコードに適用される集計関数。 結果によって上位レコードが決まります。 Supported 集計関数を参照してください。 必要に応じて、出力列名を Name = Aggregation として設定します。 |
サポートされている集計関数
サポートされている集計関数は次のとおりです。
Note
集計の代数の組み合わせもサポートされています。
返品
句ごとに 2 つの列を持つテーブル。 1 つの列には Expr を使用して計算された一意の値が含まれており、もう 1 つの列には Aggregation 計算から得られた結果が表示されます。
他の列のデータを含める
出力テーブルには、 top-nested
句として指定 Expr 列のみが表示されます。
特定のレベルで列のすべての値を含めるには:
- Nの値を指定しないでください。
- 列名を Expr の値として使用します。
Ignore=max(1)
を Aggregation の値として使用します。- project-awayで不要な
Ignore
列を削除します。
例については、「 他の列からの追加データを含む状態ごとの最新のイベントを取得するを参照してください。
パフォーマンスに関する考慮事項
レコードの数は、 top-nested
句の数に応じて指数関数的に増加する可能性があり、 N 制限が指定されていない場合、レコードの増加はさらに速くなります。 このオペレーターは、大量のリソースを消費する可能性があります。
集計の分布が大幅に均一でない場合は、 N を指定して、返す個別の値の数を制限します。次に、 with
others
=
ConstExpr 仕様を使用して、他のすべてのケースの重みを示す値を取得します。
例
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.
出力
都道府県 | aggregated_State | ソース | 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)
集計関数は単なるプレースホルダーであり、結果は無関係であるため、project-away 演算子は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
出力
都道府県 | aggregated_State | ソース | 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
仕様では、上位の結果から除外されたデータを集計する追加のレコードが導入されます。 次のクエリでは、 State
列と aggregated_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)
出力
都道府県 | aggregated_State | ソース | 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
出力
都道府県 | ソース | 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 つのイベントを取得する方法を示しています。 Ignore*
によって識別される特定の列内でmax(1)
が使用されていることに注意してください。これは、選択ロジックを適用せずにクエリを通じてデータを伝達する際に役立ちます。
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
のtimestamp
に基づいて、最新の 2 つのレコードを識別します。 その他の情報は、指定されていないカウントと任意の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 を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示