top-nested 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft 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 otherstop-nested 演算子を使用すると、上位のコンテンツをより広範なデータ セットでコンテキスト化して表示できるようになります。 この方法でデータを評価することは、データを視覚的にレンダリングする際に重要です。

他の列のデータを含める

出力テーブルには、 top-nested 句として指定 Expr 列のみが表示されます。

特定のレベルで列のすべての値を含めるには:

  1. Nの値を指定しないでください。
  2. 列名を Expr の値として使用します。
  3. Ignore=max(1)Aggregation の値として使用します。
  4. 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  

出力

プロパティが最も破損している上位 5 つの状態のスクリーンショット。その他のすべての状態は、個別に円グラフとして表示されます。

他の列データを含む状態ごとの最新のイベント

次のクエリでは、関連するイベントの詳細を含む米国の状態ごとに、最新の 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