Propagación de Filtros al Desnudo: Lo que nadie te cuenta sobre DAX
– ¿Te leíste el artículo de iniciación en contextos en DAX?
Si tu respuesta es sí, sabes que:
«!»: Es el heraldo que anuncio un universo por conquistar.
Si tu respuesta es no.
¿Qué estas esperando? Es el peldaño que te llevará a dominar DAX: Contextos.
Dicho artículo es requisito para el estudio y buen desarrollo del presente, así que léelo y sobre todo empieza a dilucidar los destellos en contextos y pensar en términos de los tres pasos primordiales en DAX desde ahora y por siempre.
Ve y estúdialo
No te preocupes aquí te espero.
– ¿Listo?
Genial. Una de las preguntas que se planteaba al final para un siguiente paso era esta:
«?»: ¿Cómo funcionan los tres pasos cuando existen múltiples tablas relacionadas?
Eso es precisamente lo que te quiero revelar hoy, el día 3 en el Plan 365 para Cracks en DAX
Sin embargo, para entender cómo funcionan los contextos cuando existen varias tablas en el modelo de datos (Relacionadas o no) es imperativo hablarte sin tapujos de una temática de la que se dice menos que poco: La propagación de filtros
Y es que …
«!»: La Propagación de filtro es, de hecho, el agua que nutre el contexto.
– ¿Por qué?
Es el pináculo para entender el funcionamiento de las relaciones entre tablas verdaderamente, y embarcarse en dicha empresa no siempre es atractivo. No porque sea complejo, ya que verás una vez comprendido es bastante sencillo, sino porque es necesario una explicación de máxima finura.
– ¿Por qué no lo han explicado en Excel Free Blog? …
En realidad, sí que hemos surcado el temario: En uno y cada uno de los productos que hemos creado para ti explicamos el concepto de propagación de filtros, llámese: El ADN de Power Pivot, Master en DAX o Cuadros de Mando con Power BI.
No obstante, hoy lo quiero compartir con toda la comunidad
¡¡¡¡ Avancemos junto !!!
Propagación de Filtros
Igual que una flecha no puede lanzarse en una dirección aleatoria, no podemos dejar que este artículo corra libre sin un buen modelo de datos …
Así que te presento a la tabla Product Datail:
Los datos son los mismo que el utilizado el artículo de contextos, solo que aquí añadimos esta nueva tabla.
Lo que va suceder es que las dos tablas se relacionan automáticamente:
La guinda en el pastel, es que han quedado relacionados correctamente:
En este caso es sencillo para la funcionalidad porque los nombres en ambas tablas son idénticos:
La relación es un punto álgido para la propagación, no te preocupes, puntualizo más adealante. Lo que hay que rescatar es que han quedado relacionados correctamente.
– Configuración de la Matriz
En orden para entender la propagación de filtros, vamos a crear una matriz que involucre campos de las dos tablas
Añadimos el campo Product Name de la tabla Product Datail al área de filas y el campo Quantity de la tabla OrderHistoryOfJune2017 al área de columnas
– ¿Qué hace falta?
Exacto una medida
¿De qué tipo, implícita o explicita?
Me siento muy contento, porque juro que te he podido casi escuchar como respuesta explicita
En EFB es parte de nuestra filosofía la erradicación del las medidas implícitas.
La medida que vamos a realizar es una que nos retorne el promedio de entrega en horas, recordemos que en la tabla OrdeHistoryOfJune2017 tenemos el campo Order Delivery que corresponde al tiempo de entrega en minutos.
He aquí la medida:
Promedio Entrega :=
AVERAGE ( OrderHistoryOfJun2017[Order Delivery] ) / 60
Llevamos la medida Promedio de entrega al área de valores, nuestra matriz debe lucir:
– Tres Pasos Primordiales en DAX
Recapitulando del artículo de contextos:
Para cada valor en el área de valores de una medida DAX siempre:
- Identificar Filtros
- Aplicar Filtros
- Ejecutar Expresión DAX
Vamos a seguirlos, para ello debemos seleccionar una celda concreta para analizar
– ¿Qué tal 0,79?
De acuerdo, perfecto …
«!!!!!!!» No Lo Olvides: Estamos enfocados de ahora en adelante en el valor encerrado en rojo de la matriz en la imagen anterior, el cual corresponde al valor 0,79.
i. Identificar Filtros:
- Product Datail[Product Name]=»Hamburger»
- OrderHistoryOfJune2017[Quantity]=1
ii. Aplicar Filtros:
«!»: Antes de aplicar los filtros, debemos apreciar que estamos involucrando dos tablas en esta oportunidad
Para ello primero te presento las dos tablas resumidas, OrderHistoryOfJune2017:
… Y la tabla Product Datail:
Una vez captado nuestras tablas de ejemplo vamos aplicar los filtros en sus respectiva tablas.
El filtro Product Datail[Product Name]=»Hamburger» se aplica a la tabla Product Datail, por lo tanto queda:
Quiere decir que la expresión DAX únicamente tiene acceso al pedacito de tabla que se acaba de filtrar
Dicho de otro modo, la medida DAX verá que la tabla Product Dataial consta de una sola fila (Resaltada con fondo gris en la imagen anterior) y las demás filas (con fondo blanco y color de fuente gris tenue) no existen para la medida.
– Por si las moscas:
Ahora bien, tenemos otro filtro:
El filtro OrderHistoryOfJune2017[Quantity]=1 se aplica ala tabla OrderHistoryOfJune2017, por lo tanto queda:
Nuevamente, quiere decir que la expresión DAX únicamente tiene acceso al pedacito de tabla que se acaba de filtrar
Ok, filtros (directos) aplicados
Sería el momento de pasar al paso número tres y ejecutar la expresión DAX.
Pero algo está faltando …
Piénsalo
La medida:
Promedio Entrega :=
AVERAGE ( OrderHistoryOfJun2017[Order Delivery] ) / 60
Únicamente se basa en la tabla OrderHistoryOfJune2017 (La tabla Product Datail no se encuentra por ninguna parte en la expresión DAX)
Sin embargo …
La matriz sí que está involucrando la tabla Product Datail
Mejor dicho …
Si en este momento ejecutaramos el paso tres con el pedacito de tablas que es visible después del paso dos
– ¿Qué sucede?
Que si bien ejecutaría el promedio de Order Dilivery:
Lo cierto es que estaría teniendo en cuenta varios productos
Pero sabemos que únicamente debería ser el producto que corresponde a hamburger
– ¿Por qué?
Recuerda la matriz y la «celda» que estamos analizando
– Es decir, falta un (1) vínculo y una forma de (2) comunicación entre las dos tablas
Pues, el vínculo si que existe, ya que las dos tablas están relacionadas
– La cuestión es: ¿Cómo se comunican?
La relación (Vínculo) sirve para que las tablas propaguen (comuniquen) sus filtros
Aquí es donde entra la propagación de filtros
– Propagación de Filtros
Antes del paso tres: Ejecutar Expresión DAX ocurre la propagación de filtros o presentado de manera alterna:
Se aplican a los filtros (Indirectos o cruzados)
Funcionamiento de la Propagación de Filtros
Para ver el funcionamiento de la propagación de filtros es ineludible forjar la terminología estándar necesaria para tener congruencia tanto en este artículo como en los demás ámbitos.
- Tabla Transaccional (*aka: Tabla de hechos o Tabla Matriz)
- Tabla de Búsqueda (*aka: Tabla de Dimensión)
- Clave Primaria (*aka: Primarey Key)
- Clave Foránea (*aka: Foreign Key o Clave ajena)
- Columnas Equivalentes
* aka: Also Know As, También conocido como
Los conceptos 1,2,3 y 4 ya los hemos tratado aquí en EFB en diversos momentos
– ¡Para que reinventar la rueda!
1) Definición Tabla de Búsqueda: Es una tabla en la cual por lo menos uno de sus campos tiene elementos que no se repite (cada ítem o elementos es único identificando de forma univoca cada registro de la tabla).
2) Definición Tabla Transaccional: Es una tabla con alta densidad de datos, es decir, con una cantidad de filas considerables respecto a las otras del modelo de datos actual, dicha tabla contiene los valores de las medidas de negocio o dicho de otra forma los indicadores de negocio.
– Citando a Wikipedia
3) Definición Calve Primaria: Se llama clave principal a un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o conjunto de columnas.
4) Definición Clave Foránea: Es una limitación referencial entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada)
– Ejemplo:
Para nuestro caso:
- Tabla Transaccional: OrderHistoryOfJune2017
- Tabla de Búsqueda: Producta Datail
- Clave Primria: Columna Product ID de la tabla de búsqueda
- Clave Foráne: Columna Product ID de la tabla transaccional
– Propagación en Acción
La manera por la cual se van a comunicar las dos tablas es mediante la relación
Ahora bien, la comunicación va ir en una única dirección:
«!» Grábate esto a Fuego: La propagación de filtros ocurre siempre en una única dirección, desde las tablas de búsqueda a las tablas transsacionales (A menos que se indica lo contrario)
Teniendo en consideración lo anterior, sabremos de antemano que la propagación para escenario en este artículo ocurre desde la tabla Product Datail a la Tabla OrderHistoryOfJune2017
De hecho, la pequeña flecha que aparece en Power BI indica precisamente esto, de que tabla a que tabla ocurre la propagación de filtros
«!» Advertencia: La dirección de la flecha para Power Pivot 2013 es en dirección opuesta
– ¿Cómo ocurre la propagación?
Sabemos que el filtro de la tabla de búsqueda es: Product Datail[Product Name]=»Hamburger»
No afecta directamente a la tabla transaccional primero porque se ha dicho específicamente que sea para la tabla Product Datail y en segundo lugar porque el campo Product Name no existe en la tabla OrderHistoryOfJune2017
Entonces …
Lo primero que corre es una correspondencia entre el ítem o los ítems del campo que correponde al filtro (es decir, Product Datail[Product Name]=»Hamburger» ) y la calve primaria de la tabla de búsqueda (es decir, Product Datail[ProductID])
Lo segundo es que dicho elementos es el que se propaga ya que es el que estÁ relacionado con la tablas transaccional
Por lo tanto, el pedacito de tabla que es visible en la tabla transaccional es:
Y ahora si estamos listos para el tercer pasos primordial en un DAX: Ejecutar expresión DAX
iii. Ejecutar Expresión DAX
La expresión DAX de la medida se ejecutará hasta ahora
Recuérdalo
Y eso es todo, bueno podemos decir lo siguiente del contexto
« El contexto son los el pedacitos de tabla que son visibles y donde se calcula la expresión DAX.»
Tres Pasos (Internos) Primordiales en DAX con Propagación
En extensión, esos tres pasos los podemos actualizar de la siguiente para múltiples tablas
- Identificar Filtros
- Aplicar filtros y propagar
- Ejecutar Expresión DAX
Fíjate que la propagación va en el segundo paso, antes de la ejecución de la expresión DAX
– Ahora te pido tu participación, comenta que te ha parecido la explicación de propagación de filtros y si con ellos entiendes un poco mejor DAX
Bueno eso est odo de mi parte mil gracias por leerme
– Hasta la próxima oportunidad