Ćwiczenie — łączenie wyników tabeli przy użyciu operatora unii

Ukończone

W tym ćwiczeniu używasz union operatora do łączenia faktów sprzedaży zebranych z różnych krajów/regionów.

union Korzystanie z operatora

Zespół sprzedaży prosi o utworzenie pojedynczej tabeli, która łączy 10 dowolnych wyników sprzedaży z każdego z następujących krajów/regionów: Australia, Wielka Brytania i Stany Zjednoczone.

let Użyj instrukcji , aby utworzyć trzy wyrażenia tabelaryczne, z których każdy ma 10 rekordów z określonego kraju/regionu w tabeli SalesFact, aby reprezentować dane sprzedaży z trzech krajów/regionów. Można je traktować jako trzy oddzielne tabele.

Sprawdzając te tabele, można zobaczyć, że mają one te same kolumny. Jedyną różnicą jest dane w kolumnie RegionCountryName . union Użyj operatora , aby połączyć tabele faktów sprzedaży dla Zjednoczonego Królestwa i Stany Zjednoczone z tabelą faktów sprzedaży dla Australii.

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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
    

    Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:

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

  2. Zwróć uwagę, że wszystkie wiersze z trzech tabel są wyświetlane. Spróbuj zmodyfikować zapytanie, aby dodać symulowane dane dla Francji i połączyć je z danymi z innych krajów/regionów.

W poniższych sekcjach użyjesz let instrukcji , aby utworzyć tabele ad hoc, które symulują dane, z kolumnami wymaganymi w scenariuszach.

union Używanie operatora z tabelami, które mają różne kolumny

W następnym miesiącu zespół ds. sprzedaży ponownie prosi o utworzenie danych sprzedaży z trzech krajów/regionów. Podczas badania tabel tym razem zauważysz, że mają one różne kolumny. Dobrą rzeczą w operatorze union jest to, że łączy tabele, nawet jeśli mają różne kolumny. W przypadku tego zapytania należy użyć alternatywnej składni operatora union , która nie wymaga potokowych danych wejściowych.

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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
    

    Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:

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

  2. Zwróć uwagę, że wszystkie wiersze z trzech tabel i wszystkie kolumny, które występują w dowolnej z tabel. Komórki, które nie są zdefiniowane przez wiersz wejściowy, są ustawione na wartość null. Spróbuj zmodyfikować zapytanie, aby dodać więcej kolumn i zobaczyć, jak ich wartości są wypełniane w wynikach.

union Użyj operatora z tabelami, które mają różne kolumny i zwracają tylko kolumny występujące we wszystkich tabelach

W następnym miesiącu zespół ds. sprzedaży ponownie prosi o utworzenie danych sprzedaży z trzech krajów/regionów, ale tym razem chcą tylko kolumn, które są wspólne dla wszystkich trzech tabel. Wcześniej zobaczyliśmy, że union operator zwraca wszystkie kolumny występujące w dowolnej z tabel. To zachowanie jest domyślnym union operatorem nazywanym unii zewnętrznej, chociaż najlepszym rozwiązaniem jest zawsze jawne określenie rodzaju unii w celu uzyskania jasności.

Aby zwrócić tylko kolumny występujące we wszystkich tabelach, użyj unii wewnętrznej na tych samych symulowanych danych, określając kind=inner argument:

  1. Uruchom poniższe zapytanie.

    Uruchamianie zapytania

    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
    

    Wyniki powinny wyglądać podobnie do tych na poniższej ilustracji:

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

    Zwróć uwagę, że wszystkie wiersze z trzech tabel są wyświetlane i tylko te kolumny, które występują we wszystkich tabelach.

  2. Teraz spróbuj zmodyfikować zapytanie, aby dodać bardziej typowe kolumny, rozszerzając każdą tabelę o taką samą nazwę. Następnie zobacz, jak ich wartości są wypełniane w wynikach.