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

Completado

En este ejercicio, aprenderá a usar el operador join. Recuerde que el operador join combina las filas de dos tablas haciendo coincidir los valores de las columnas especificadas de cada una.

Vamos a usar los resultados del operador join para responder a preguntas sobre las ventas.

Use el operador join.

En el escenario de la empresa minorista, el equipo le pide una lista de los tres países o regiones que tienen más ventas.

Al comenzar a inspeccionar la tabla SalesFact verá que las cifras que necesita están disponibles en la columna SalesAmount, pero la tabla no contiene ningún dato de país o región. Al examinar las demás tablas, observará que los datos de país o región están disponibles en la columna RegionCountryName de la tabla Customers. También observará que ambas tablas tienen una columna CustomerKey.

Dado que los datos se distribuyen en dos tablas, debe obtener tanto los datos del cliente como de las ventas para escribir una consulta que proporcione la información solicitada. Para escribir la consulta, use el operador join y la columna CustomerKey para que coincidan con las filas de ambas tablas.

Ahora ya puede escribir la consulta. Use una join interna para obtener todas las filas coincidentes de ambas tablas. Para obtener el mejor rendimiento, use la tabla de dimensiones de cliente como la tabla izquierda y la tabla de hechos de ventas como tabla derecha.

En el procedimiento siguiente, compilará la consulta en fases para comprender mejor el resultado del uso del operador join.

  1. Ejecute la consulta siguiente para obtener 10 filas arbitrarias coincidentes de la tabla Customers y la tabla SalesFact.

    Ejecución de la consulta

    Customers
    | join kind=inner SalesFact on CustomerKey
    | take 10
    

    Eche un vistazo la lista resultante. Observe que la tabla contiene columnas de la tabla Customers seguidas de columnas coincidentes de la tabla SalesFact.

  2. Ejecute la consulta siguiente para resumir las tablas combinadas y obtener los tres países o regiones que tienen más ventas.

    Ejecución de la consulta

    Customers
    | join kind=inner SalesFact on CustomerKey
    | summarize TotalAmount = round(sum(SalesAmount)) by RegionCountryName
    | top 3 by TotalAmount
    

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

    Captura de pantalla de la consulta del operador de combinación, en la que se muestran los tres países o regiones principales por ventas.

  3. Eche un vistazo la lista resultante. Intente modificar la consulta para mostrar también el costo total y el beneficio correspondientes para estos países o regiones.

Después, el equipo le pide que identifique los países o regiones con los ingresos más bajos del último año registrado, por mes. Para obtener estos datos, use una consulta similar. Esta vez usará la función startofmonth() para facilitar la agrupación por mes. También usará la función de agregación arg_min() para buscar los países o regiones con menores ingresos de cada mes.

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    Customers
    | join kind=inner SalesFact on CustomerKey
    | summarize TotalAmount = round(sum(SalesAmount))
        by Month = startofmonth(DateKey), RegionCountryName
    | summarize arg_min(TotalAmount, RegionCountryName) by Month
    | top 12 by Month desc
    

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

    Captura de pantalla de la consulta del operador de combinación, en la que se muestran los países o regiones con ingresos más bajos.

  2. Examine cada una de las filas. Observe que en la primera columna se muestran los meses del último año en orden descendente, seguidos de columnas en las que se muestran las ventas totales del país o región con los números de ventas mínimas de ese mes.

Usar el tipo de join rightouter

El equipo de ventas quiere conocer el total de ventas por categoría de producto. Al comenzar a revisar los datos disponibles, se dará cuenta de que necesitará la tabla Products para obtener la lista de categorías de productos y la tabla SalesFact para los datos de ventas. También se da cuenta de que quiere contar las ventas de cada categoría y enumerar todas las categorías de productos.

Después de analizar la solicitud, decide usar el join rightouter, ya que devuelve todos los registros de ventas de la tabla derecha, enriquecidos con la categoría de producto de datos coincidente de la tabla izquierda. La consulta se escribe mediante la tabla Products como la tabla de dimensión izquierda, los datos coincidentes de la tabla de hechos SalesFact y la agrupación del resultado por categoría de producto.

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    Products
    | join kind=rightouter SalesFact on ProductKey
    | summarize TotalSales = count() by ProductCategoryName
    | order by TotalSales desc
    

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

    Captura de pantalla de la consulta del operador de combinación, en la que se muestra el total de ventas por producto.

  2. Tenga en cuenta que el tiempo de ejecución es de 0,834 segundos, aunque el tiempo puede variar entre ejecuciones. Esta consulta es una forma de obtener esta respuesta y es un buen ejemplo de una consulta que no está optimizada para el rendimiento. Más adelante, puede comparar la duración de esta consulta con el tiempo de ejecución de una consulta equivalente mediante el operador lookup, que está optimizado para este tipo de datos.

Utilice el tipo join rightanti

Asimismo, el equipo de ventas quiere conocer el número de productos que no se venden en cada categoría de producto. Puede usar un join rightanti para obtener todas las filas de la tabla Products que no coinciden con ninguna fila de la tabla SalesFacts y, después, agrupar los resultados por categoría de producto.

  1. Ejecute la consulta siguiente.

    Ejecución de la consulta

    SalesFact
    | join kind=rightanti Products on ProductKey
    | summarize Count = count() by ProductCategoryName
    | order by Count desc
    

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

    Captura de pantalla de la consulta del operador de combinación, en la que se muestra el número de productos que no se venden en cada categoría de producto.

    Examine cada una de las filas. Los resultados muestran el número de productos sin vender por categoría de producto. Observe que rightanti join solo selecciona productos que no tienen hechos de ventas, lo que indica que no había ventas para los productos devueltos por el operador join.