練習 - 使用聯合運算子合併資料表結果

已完成

在此練習中 union ,您會使用 操作員來結合從各個國家/地區收集的銷售事實。

使用 union 運算子

您的銷售小組要求您建立單一資料表,以合併下列每個國家/地區的 10 個任意銷售結果:澳大利亞、英國和美國。

let使用語句來建立三個表格式表達式,每個運算式都有來自 SalesFact 數據表中特定國家/地區的 10 筆記錄,以代表來自三個國家/地區的銷售數據。 您可以將它們視為三個獨立的資料表。

檢查這些資料表,您可以看到它們具有相同的資料行。 唯一的差異在於數據行中的數據 RegionCountryNameunion使用 運算符,結合英國的銷售事實數據表和 美國 與澳大利亞的銷售事實數據表。

  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. 請注意,您會從三個資料表取得所有資料列。 嘗試修改查詢以新增法國的模擬資料,並將其與來自其他國家/地區的資料結合。

在下列各章節中,您會使用 let 陳述式來建立模擬資料的臨時資料表,具有案例所需的資料行。

在具有不同資料行的資料表中使用 union 運算子

下個月,您的銷售小組會再次要求您從三個國家/地區建立銷售資料。 當您這次檢查資料表時,您會注意到它們有不同的資料行。 運算子的 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. 請注意,您會從三個資料表取得所有資料列,以及從任何資料表中取得出現的所有資料行。 輸入數據列未定義的儲存格會設定為 null。 嘗試修改查詢以新增更多資料行,並查看其值如何填入結果中。

在具有不同資料行的資料表使用 union 運算子,並只傳回所有資料表中出現的資料行

下個月,您的銷售小組會再次要求您從三個國家/地區建立銷售資料,但這次他們只想要這三個資料表共同的資料行。 之前,您看到 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.

    請注意,您會從三個資料表取得所有資料列,以及僅在所有資料表中都出現的資料行。

  2. 現在嘗試修改查詢,藉由以相同名稱的數據行擴充每個數據表來新增更常見的數據行。 然後,查看其值如何在結果中填入。