Linaje en DAX – R Marketing

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Nivel: IntermedioAvanzado

He cubierto el tema de Lineage en DAX varias veces en el pasado (en otros artículos). Hoy pensé en escribir un solo artículo dedicado al linaje.

Como sabrá, Power BI tiene varios modos de operación diferentes, algunos de los cuales no requieren que los datos se carguen en el modelo de datos. Este artículo no se refiere a modos de funcionamiento que no cargan los datos; se refiere específicamente al uso de Power BI cuando los datos se cargan en el modelo de datos.

¿Qué significa el linaje?

El linaje se pronuncia en 3 sílabas: lin-e-age (escúchalo pronunciado aquí). La palabra Linaje se usa con mayor frecuencia cuando se refiere a la línea de sangre, que significa “el descenso lineal de un antepasado; ascendencia o extracción ”. Con esta definición en mente, el linaje en DAX se refiere a tablas virtuales (creadas en la ejecución en tiempo de ejecución dentro de una fórmula) que conservan un enlace a su procedencia (conservan su linaje). Este concepto de linaje no existe en las herramientas de bases de datos tradicionales como SQL y, por lo tanto, es bastante exclusivo de DAX.

Tablas físicas y relaciones en DAX

Antes de pasar al tema del linaje, vale la pena dedicar un momento a reflexionar sobre las tablas físicas y las relaciones porque comprender cómo funcionan es fundamental para comprender el linaje. Cuando carga datos en Power BI o Power Pivot, los datos se cargan en tablas físicas mediante uno de varios enfoques diferentes, incluidos Power Query, Introducir datos y nueva tabla (Power BI), Power Query, Tablas vinculadas o datos de Power Pivot. cargar (Excel). Durante el proceso de carga, los datos primero se comprimen y luego se cargan en la memoria RAM dentro de Vertipaq Storage Engine.

Una vez que se cargan los datos, es posible crear relaciones entre las tablas como se muestra a continuación.

image_thumb-14-1353366

Estas relaciones son muy importantes en DAX; son los que permiten que los datos de las diferentes tablas actúen como si estuvieran en una sola tabla. La forma en que funcionan las relaciones puede ser engañosamente compleja de dominar y puede resultar bastante confusa para los recién llegados al lenguaje DAX. Los conceptos más importantes que debe comprender son

  • Cardinalidad
    • Las relaciones son siempre de 1 a muchos (también hay un tipo de relación de 1 a 1, pero su uso no es común).
    • No hay soporte para muchas o muchas relaciones en DAX.
  • Propagación de filtros
    • Las relaciones permiten que los filtros fluyan desde el lado 1 de la relación hasta el lado múltiple de la relación, pero no al revés.
    • Puede activar el filtrado cruzado bidireccional para una relación, sin embargo, eso está fuera del alcance de este artículo.

super-charge-power-bi-ad_1-1024x128-6595595

Filtrar la propagación en acción

Es mejor demostrar los puntos clave anteriores con un ejemplo. Usando el modelo de datos de Adventure Works que se muestra arriba, creé las siguientes 2 medidas:

Ventas totales = SUM (Ventas[ExtendedAmount])

Recuento de productos = COUNTROWS (productos)

Filtrado de una sola tabla

La matriz a continuación tiene los productos[Category] columna de la tabla de productos colocada en Filas en una matriz y [Count of Products] agregado a la sección de valores.

image_thumb-15-7764407

Los productos[Category] columna y el [Count of Products] medir ambos provienen de la tabla Productos. Los productos[Category] columna filtra la tabla Productos y luego la medida ‘cuenta’ cuántas filas. Técnicamente, la forma en que funciona el proceso es la siguiente:

  • Se crea un filtro y se aplica a los Productos[Category] columna. En este caso, el filtro proviene de Rows in the Matrix, pero podría provenir de un segmentador, otro elemento visual, la tarjeta de filtros o dentro de una función CALCULATE.
  • Después de filtrar la columna (y toda la tabla), el [Count of Products] cuenta cuántas filas existen en la copia filtrada de la tabla para cada fila de la matriz.

Filtrado de varias tablas de uno a varios

Las cosas se vuelven un poco más complejas cuando las columnas y las medidas provienen de diferentes tablas. En la imagen debajo del [Total Sales] La medida se relaciona con la tabla Ventas, pero los filtros (filas de la matriz) provienen de la tabla Productos.

image_thumb-16-5092548

Técnicamente, la forma en que funciona el proceso ahora es la siguiente:

  • Se crea un filtro y se aplica a los Productos[Category] columna (de Filas en la Matriz).
  • Porque existe una relación física de 1 a muchos entre los Productos
    tabla y la tabla Ventas, el filtro «se propaga» desde la tabla Productos
    a la mesa de ventas. Todos los productos que pertenecen a cada producto[Category]
    en la tabla Ventas, por lo tanto, también se filtran para cada fila de la Matriz.
  • La medida [Total Sales] Luego se evalúa para cada fila en la Matriz y
    devuelve las ventas solo para aquellos productos filtrados que tienen registros en el
    mesa de ventas.

Nota: hay 189 componentes en la tabla Productos que no tienen ventas para estos productos. Esto puede suceder, por supuesto.

Las tablas no filtran automáticamente al revés

Las relaciones siempre se filtran automáticamente desde un lado de la relación hasta el lado de muchos, como se muestra arriba, pero no se filtran en la otra dirección. Para demostrar el punto, he eliminado los Productos[Category] columna de la Matriz a continuación y Ventas agregadas[OrderDate] en su lugar.

image_thumb-17-6887968

Técnicamente, la forma en que funciona el proceso ahora es la siguiente:

  • Se crea un filtro y se aplica a las ventas[OrderDate] columna (de Filas en la Matriz).
  • Existe una relación física de muchos a 1 entre la tabla Ventas y la tabla Productos. Los filtros no se «propagan» en esta dirección y, por lo tanto, la tabla de Ventas se filtra pero la tabla de Productos no.
  • Las medidas [Count of Products] y [Total Sales] luego se evalúan en sus respectivas tablas y devuelven los resultados que se muestran arriba.

Por supuesto, es posible activar el filtrado cruzado bidireccional en Power BI Desktop y esto obligará a que los filtros se propaguen de un lado a otro, pero hay muchas razones para no hacerlo, incluidos los posibles impactos negativos en el rendimiento. como problemas potenciales con las relaciones circulares.

El lenguaje DAX

Tablas y valores escalares

  • Cuando escribe una medida o una columna calculada en DAX, el resultado siempre debe ser un valor escalar. Una medida y una columna calculada no pueden devolver una tabla como resultado final. Tenga en cuenta que puede mostrar los resultados de las medidas en un objeto visual como una tabla o una matriz, pero el valor devuelto por la medida es siempre un valor escalar.
  • Puede utilizar DAX como lenguaje de consulta mediante una herramienta de consulta adecuada, como DAX Studio. Al usar DAX como lenguaje de consulta, el resultado de la consulta es siempre una tabla. Una consulta DAX no puede devolver un valor escalar. Tenga en cuenta que puede mostrar un valor escalar como resultado de una consulta DAX creando primero una tabla de una sola fila y una sola columna y colocando el valor escalar en esa tabla.

Funciones de tabla en DAX

  • Hay muchas funciones que devuelven tablas en DAX incluso si no pueden devolverse como resultado final en una medida o columna. Los ejemplos incluyen TODOS, VALORES, FILTRO, RESUMEN, por nombrar algunos.
  • Las funciones de tabla forman la base de DAX como lenguaje de consulta y se pueden usar de forma nativa para devolver la tabla resultante en una herramienta de consulta.
  • También puede usar funciones de tabla con la característica Nueva tabla en Power BI para crear una nueva tabla física en el modelo de datos.
  • Puede utilizar las funciones de tabla dentro de las medidas y las columnas calculadas para ayudar a generar el resultado requerido siempre que el resultado sea un valor escalar.

Veamos un ejemplo. La siguiente medida devuelve un valor escalar: las ventas totales en Australia. Sin embargo, tenga en cuenta que la línea 4 a continuación es una función de tabla, en este caso FILTRO.

image_thumb-18-2179699

La función FILTRO toma una tabla como su primer parámetro (en este caso la Tabla de territorio) y luego aplica un filtro a la tabla. Luego, la función CALCULAR toma la copia filtrada de la tabla Territorio y propaga los filtros a la tabla Ventas (a través de la relación de 1 a muchos). La línea 4 de arriba es una mesa virtual. La tabla se crea en la memoria durante la ejecución de la fórmula. Se utiliza para realizar la tarea en cuestión. Cuando el trabajo está hecho, la mesa deja de existir.

Nota: Power BI tiene capacidades de almacenamiento en caché sofisticadas y las tablas virtuales pueden permanecer en la memoria caché para su reutilización en evaluaciones posteriores.

Tablas virtuales y linaje en DAX

De acuerdo, ya basta de charlas sobre la relación, ¡¿qué tiene esto que ver con el linaje ?!

El linaje se refiere a una relación virtual que existe entre tablas virtuales y tablas físicas en DAX. Una vez más, un ejemplo es la mejor manera de explicar esto en detalle. Considera lo siguiente:

La tabla de territorio en Adventure Works tiene este aspecto.

image_thumb-19-6209700

Tenga en cuenta que País es una columna, no una tabla. No hay una tabla que contenga todos los países únicos en la base de datos.

Ahora considere la siguiente medida:

Valor medio de la factura = DIVIDIR ([Total Sales],[Total Invoices])

Cuando esta medida se agrega a una tabla con Territorio[Country] en Filas, los resultados se muestran a continuación.

image_thumb-20-4573286

Pero aquí está el punto. El total de $ 748,73 no es el promedio de todos los valores de cada país, pero es el promedio de todas las facturas en todos los países. Esto no es correcto o incorrecto, es solo una declaración de hecho de que el total en este ejemplo es el valor promedio de la factura en todos los países. ¿Y qué si quiero saber el valor medio de la factura por país y luego también el promedio de los valores del país. La respuesta se vería así.

image_thumb-21-8124041

Con esta segunda medida, el total de $ 758,76 es el promedio de todos los promedios del país arriba. No es correcto o incorrecto, solo es diferente a la primera medida. Si está familiarizado con las funciones X, sabrá que para obtener esta respuesta necesita revisar la lista de países, uno a la vez, y calcular el promedio de cada país antes de finalmente calcular el promedio de los promedios. . AVERAGEX es una gran función para hacer esto.

La fórmula DAX que utilicé para crear esta segunda medida anterior es la siguiente:

image_thumb-22-9659364

El primer parámetro dentro de una función X es siempre una tabla o función de tabla. En este caso, es una función de VALORES que devuelve una lista de todos los países únicos en el contexto de filtro actual (línea 3 arriba). Esta nueva tabla creada por VALUES es una tabla virtual que conserva el linaje de la tabla a partir de la cual se creó. Dicho de otra manera, se puede considerar que la mesa virtual tiene una relación virtual con el Territorio.[Country] columna de donde nació. Puede considerarlo así (tenga en cuenta que esta es una ilustración que le muestra cómo puede concebir la mesa virtual; en realidad, no puede verla allí y nunca existe físicamente).

image_thumb-23-4812736

En la ilustración anterior, la tabla virtual creada por VALUES se muestra en azul como 1, y la relación virtual (linaje) se muestra como 2. Ninguna de estas 2 cosas es físicamente visible en el modelo de datos, sin embargo, puede pensar en ellas conceptualmente como mostrado anteriormente.

Aquí está la fórmula de nuevo.

image_thumb-24-6222195

Con el modelo conceptual ilustrado anteriormente en mente, la fórmula DAX anterior funciona de la siguiente manera:

  • AVERAGEX crea un contexto de fila sobre la tabla virtual creada por VALUES en la línea 3.
  • Debido a que cada medida tiene un cálculo implícito envuelto, el [Average Invoice Value] La medida crea una transición de contexto y convierte el contexto de fila en un contexto de filtro.
  • Ahora hay un contexto de filtro en el país único para la primera iteración y, debido al linaje entre la tabla VALUES virtual y la tabla Territorio físico principal, el filtro se propaga a lo largo de la tabla Territorio hasta la Tabla de ventas.
  • A continuación, la medida se evalúa para la única fila de la tabla VALORES virtuales.
  • El proceso se repite para cada fila de la tabla virtual VALUES. Para cada paso, el cálculo implícito aprovecha el linaje entre la mesa virtual y la mesa física.
  • Una vez que se han evaluado todas las filas de la tabla virtual, AVERAGEX encuentra el promedio de todos los valores en los pasos anteriores.

Envolver

Ojalá puedas ver que el concepto de linaje es muy poderoso. Significa que no necesita cargar tablas de dimensiones físicas para todo lo que pueda necesitar en sus cálculos. En su lugar, puede crear tablas virtuales sobre la marcha dentro de sus fórmulas y, sin embargo, hacer que estas tablas virtuales se comporten exactamente como se comporta una tabla física y una relación.

!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘639916389503636’);
fbq(‘track’, ‘PageView’);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.