top-nested 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
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 計算から得られた結果が表示されます。
with
others
句の使用
with
others
で top-nested
演算子を使用すると、上位のコンテンツをより広範なデータ セットでコンテキスト化して表示できるようになります。 この方法でデータを評価することは、データを視覚的にレンダリングする際に重要です。
他の列のデータを含める
出力テーブルには、 top-nested
句として指定 Expr 列のみが表示されます。
特定のレベルで列のすべての値を含めるには:
- Nの値を指定しないでください。
- 列名を Expr の値として使用します。
Ignore=max(1)
を Aggregation の値として使用します。- project-awayで不要な
Ignore
列を削除します。
例については、「 他の列データを含む状態ごとの最新のイベント数を参照してください。
パフォーマンスに関する考慮事項
レコードの数は、 top-nested
句の数に応じて指数関数的に増加する可能性があり、 N パラメーターが指定されていない場合、レコードの増加はさらに速くなります。 このオペレーターは、大量のリソースを消費する可能性があります。
集計分布が不規則な場合は、 N を指定して、返す個別の値の数を制限します。次に、 with
others
=
ConstExpr 句を使用して、他のすべてのケースの重みを把握します。
例
破損した状態、イベントの種類、およびプロパティの損傷による終了位置の上位
次のクエリでは、State
列によってStormEvents
テーブルがパーティション分割され、各状態のプロパティの合計損害が計算されます。 このクエリでは、プロパティの損傷量が最も多い上位 2 つの状態が選択されます。 この上位 2 つの状態の中で、クエリはデータを EventType
別にグループ化し、最も損害が多い上位 3 つのイベントの種類を選択します。 次に、クエリは EndLocation
でデータをグループ化し、最も損害が大きい EndLocation
を選択します。 結果に表示される EndLocation
値は 1 つだけです。これは、storm イベントの性質が大きいか、終了場所が文書化されていないことが原因である可能性があります。
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 | Wildfire | 1445937600 | 1326315000 | 1326315000 | |
CALIFORNIA | HighWind | 1445937600 | 61320000 | 61320000 | |
CALIFORNIA | デブリフロー | 1445937600 | 48000000 | 48000000 | |
オクラホマ | IceStorm | 915470300 | 826000000 | 826000000 | |
オクラホマ | WinterStorm | 915470300 | 40027000 | 40027000 | |
オクラホマ | 洪水 | COMMERCE | 915470300 | 21485000 | 20000000 |
プロパティの損害 with
others
グループ化された上位 5 つの州
次の例では、 top-nested
演算子を使用して、プロパティの損傷が最も多い上位 5 つの状態を識別し、 with
others
句を使用して、他のすべての状態の破損したプロパティをグループ化します。 次に、render
コマンドを使用して、上位 5 つの状態とその他のすべての状態の破損したプロパティをpiechart
として視覚化します。
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
出力
他の列データを含む状態ごとの最新のイベント
次のクエリでは、関連するイベントの詳細を含む米国の状態ごとに、最新の 2 つのイベントを取得します。 特定の列内の 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.
他の列データを含む ID ごとの最新のレコード
次の top-nested
例では、ID ごとに最新のレコードを抽出し、前の例で紹介した概念に基づいています。 最初のtop-nested
句では、プレースホルダーとしてIgnore0=max(1)
を使用して、id
の個別の値によってデータをパーティション分割します。 id
ごとに、timestamp
に基づいて最新の 2 つのレコードが識別されます。 その他の情報は、カウントを指定せず、プレースホルダーとしてIgnore2=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 |