演習 - union 演算子を使ってテーブルの結果を結合する

完了

この演習では、union 演算子を使用して、さまざまな国/地域から収集された売上ファクトを結合します。

union 演算子を使用します

営業チームから、オーストラリア、英国、米国のそれぞれから任意の売上結果を 10 件結合した単一のテーブルを作成するよう求められたとします。

let ステートメントを使用して、3 つの表形式の式を作成します。これらにはそれぞれ SalesFact テーブル内の特定の国/地域からの 10 個のレコードが含まれており、3 つの国/地域の売上データを表します。 これらを 3 つの別のテーブルと考えることができます。

これらのテーブルを調べると、同じ列があることがわかります。 唯一の違いは、RegionCountryName 列のデータです。 union 演算子を使用して、英国と米国の売上ファクト テーブルを、オーストラリアの売上ファクト テーブルと結合します。

  1. 次のクエリを実行します。

    クエリを実行する

    let AustraliaSales = SalesFact // Sales facts from Australia
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10;
    let UnitedKingdomSales = SalesFact // Sales facts from United Kingdom
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10;
    let UnitedStatesSales = SalesFact // Sales facts from United States
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10;
    AustraliaSales
    | union UnitedKingdomSales, UnitedStatesSales
    

    結果は次の図のようになるはずです。

    Screenshot of the union operator with tables that have the same columns, query, and results.

  2. 3 つのテーブルからすべての行を取得していることに注目してください。 クエリを変更し、フランスのシミュレートされたデータを追加し、他の国/地域からのデータと結合してみてください。

次のセクションでは、let ステートメントを使用して、シナリオに必要な列でデータをシミュレートするアドホック テーブルを作成します。

異なる列があるテーブルで union 演算子を使用する

翌月、営業チームから再び 3 つの国/地域の売上データを作成するように求められました。 今回は、テーブルを調べると、異なる列があることがわかりました。 union 演算子の優れた点は、列が異なっていてもテーブルが結合されることです。 このクエリでは、パイプ入力を必要としない、union 演算子の代替構文を使用します。

  1. 次のクエリを実行します。

    クエリを実行する

    let AustraliaSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName;
    let UnitedKingdomSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation;
    let UnitedStatesSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName;
    union AustraliaSales, UnitedKingdomSales, UnitedStatesSales
    

    結果は次の図のようになるはずです。

    Screenshot of the union operator, with tables that have different columns, query, and results.

  2. 3 つのテーブルからすべての行を取得し、いずれかのテーブルで発生するすべての列を取得していることに注目してください。 入力行で定義されていないセルは null に設定されます。 クエリを変更して列をさらに追加し、その値がどのように結果に取り込まれるかを確認してみてください。

列が異なるテーブルで union 演算子を使用し、すべてのテーブルで発生する列のみを返す

翌月、営業チームから再び 3 つの国/地域の売上データを作成するように求められましたが、今回は 3 つのテーブルすべてに共通する列のみが必要です。 以前は、いずれかのテーブルで発生するすべての列が union 演算子によって返されることを確認しました。 これは外部共用体と呼ばれる union 演算子の既定の動作ですが、わかりやすくするために常に共用体の種類を明示的に指定することをお勧めします。

すべてのテーブルで発生する列のみを返すには、kind=inner 引数を指定して、同じシミュレートされたデータに対して内部共用体を使用します。

  1. 次のクエリを実行します。

    クエリを実行する

    let AustraliaSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'Australia'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, CityName;
    let UnitedKingdomSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United Kingdom'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, Occupation;
    let UnitedStatesSales = SalesFact
        | lookup Customers on CustomerKey
        | where RegionCountryName == 'United States'
        | take 10
        | project SalesAmount, TotalCost, DateKey, RegionCountryName, StateProvinceName;
    union kind=inner AustraliaSales, UnitedKingdomSales, UnitedStatesSales
    

    結果は次の図のようになるはずです。

    Screenshot of the union operator, returning common columns from tables that have different columns, query, and results.

    3 つのテーブルからすべての行を取得し、すべてのテーブルで発生する列のみを取得していることに注目してください。

  2. ここで、クエリを変更し、同じ名前の列で各テーブルを拡張することでさらに共通の列を追加してみてください。 その後、結果に値がどのように設定されるかを確認します。