Ejercicio: Combinación de resultados de tabla mediante el uso del operador unión

Completado

En este ejercicio, usará el operador union para combinar los datos de ventas recopilados de varios países o regiones.

Use el operador union.

El equipo de ventas le pide que cree una sola tabla en la que se combinen 10 resultados de ventas arbitrarias de cada uno de los países o regiones siguientes: Australia, Reino Unido y Estados Unidos.

Usa la instrucción let para crear tres expresiones tabulares, cada una con 10 registros de un país o región específico de la tabla SalesFact, a fin de representar datos de ventas de tres países o regiones. Puede considerarlas como tres tablas independientes.

Al examinar estas tablas, puede observar que tienen las mismas columnas. La única diferencia son los datos de la columna RegionCountryName. Use el operador union para combinar las tablas de hechos de ventas del Reino Unido y Estados Unidos con la tabla de hechos de ventas de Australia.

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    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
    

    Los resultados deberían ser similares a los que aparecen en la imagen siguiente:

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

  2. Observe que obtiene todas las filas de las tres tablas. Intente modificar la consulta para agregar datos simulados de Francia y combinarlos con los datos de otros países o regiones.

En las secciones siguientes, usará la instrucción let a fin de crear tablas ad hoc que simulan datos con las columnas necesarias para los escenarios.

Uso del operador union con tablas que tienen columnas distintas

Al mes siguiente, el equipo de ventas le vuelve a pedir que cree los datos de ventas de los tres países o regiones. Al examinar las tablas esta vez, verá que tienen columnas diferentes. Lo bueno del operador union es que combina tablas incluso si tienen columnas distintas. Para esta consulta, usará la sintaxis alternativa del operador union que no requiere una entrada con canalización.

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    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
    

    Los resultados deberían ser similares a los que aparecen en la imagen siguiente:

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

  2. Observe que obtiene todas las filas de las tres tablas y todas las columnas que se producen en cualquiera de las tablas. Las celdas que no las define una fila de entrada se establecen en null. Intente modificar la consulta para agregar más columnas y vea cómo se rellenan sus valores en los resultados.

Use el operador union con tablas que tienen columnas diferentes y devuelva solo aquellas que aparecen en todas las tablas.

El mes siguiente, el equipo de ventas le vuelve a pedir que cree los datos de ventas de los tres países o regiones, pero esta vez solo quieren las columnas que sean comunes a las tres tablas. Anteriormente, vio que el operador union devuelve todas las columnas que aparecen en cualquiera de las tablas. Este comportamiento es el predeterminado del operador union, denominado unión externa, aunque se recomienda especificar siempre explícitamente el tipo de unión para una mayor claridad.

Para devolver solo las columnas que aparecen en todas las tablas, use una unión interna en los mismos datos simulados especificando el argumento kind=inner:

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    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
    

    Los resultados deberían ser similares a los que aparecen en la imagen siguiente:

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

    Observe que obtiene todas las filas de las tres tablas y solo las columnas que aparecen en todas las tablas.

  2. Ahora intente modificar la consulta para agregar más columnas comunes mediante la extensión de cada tabla con una columna con el mismo nombre. A continuación, vea cómo se rellenan sus valores en los resultados.