Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Relación de uso con el filtro que no se muestra correctamente

Hola a todos

Tengo una tabla simple que tiene 2 columnas con fecha, una llamada Crear fecha y la otra llamada MQL Fecha. La fecha de creación tiene la relación activa con la tabla Fecha. Ver imagen #1.

Tengo dos medidas una con parámetro de filtro, ver imagen #2 y la otra sin parámetro de filtro, ver imagen #3.

El parámetro filter filtra para MQL Fecha posterior al 1/1/2022. El resultado debería ser el mismo, pero no lo es.

¿Por qué estoy obteniendo dos valores diferentes? Ver imagen #4

Imagen#1 - Modelo de datos

ysherriff_0-1670095436399.png

Imagen #2 - Con filtro

ysherriff_1-1670095465394.png

Imagen #3 - Sin filtro

ysherriff_2-1670095499911.png

Imagen#4 - Salida

¿Puede alguien ayudarme a ver lo que estoy haciendo mal? Gracias de antemano.

ysherriff_3-1670095527571.png

https://1drv.ms/u/s!AlTfdvX0WzaQ118wqvrLVBtgeCMV?e=3T7xrd

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

A continuación se muestra la solución a la consulta. Se trata de la transición de filtro y contexto.

Hola @ysherriff,

Gracias por publicar su consulta en el Foro.

La respuesta es: "No, el resultado no será el mismo".

La razón es que se aplican dos contextos diferentes dentro de la función "CALCULATE()", es decir, "FILTER()", que es una función iteradora y cuando hay una iteración, "CALCULATE()" ejecuta una transición de contexto. Y en segundo lugar, hay una función "USERELATIONSHIP()" que es un modificador de contexto.

Por lo tanto, la forma en que ocurre la ejecución en su medida, es decir, en "# de MQL con filtro" está en el siguiente orden:

CALCULATE parte del contexto actual

1). Luego comienza a "evaluar" los argumentos del filtro, es decir, tanto la fila como el contexto del filtro (en este caso, la función "FILTER()" ya que es un iterador y verifica la lógica fila por fila).

2). Dado que está iterando fila por fila, la "transición de contexto" está destinada a suceder. Es decir, agrega todo el filtro de columna al nuevo contexto (en este caso, "'Tabla de contactos' [Se convirtió en una fecha MQL]").

3). Ahora, comienza a evaluar los modificadores de contexto (en este caso, la función "USERELATIONSHIP()").

4). Y luego, por último, aplica los argumentos de filtro que se evalúan en el "Paso No. 1".

De una manera simple, así es como el motor evalúa la medida - "# de MQL con filtro" en el back-end -

# de MQL con Filtro = 
COUNTROWS(
    CALCULATETABLE(
        'Tabla de contactos' ,
        FILTRO( 'Tabla de contactos' ,
            'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022, 1 , 1 ) ) ,
        USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) ) )

Entonces, primero, crea una tabla, es decir, "Tabla de contactos" y luego comienza la evaluación del argumento de filtro, es decir, la función "FILTER()" que itera la lógica fila por fila sobre la tabla donde MQL Fecha > = 01/01/2022. Una vez que se realiza la iteración sobre esa columna, realiza la transición de contexto donde esa columna "MQL Date" se agrega a un nuevo contexto. Hasta ahora, el no. de filas generadas sigue siendo 74.

Ahora, el modificador comienza a funcionar, es decir, la función "USERELATIONSHIP()". Y aquí es donde, los resultados comienzan a cambiar. Crea la relación con la "'Fecha'[Fecha]" y convierte los resultados de la "Fecha MQL" que se almacena en un nuevo contexto. Así que ahora, cualquier fila anterior a la condición, es decir, 01/01/2022 se elimina por completo de la "Tabla de contactos". Estas son las filas que elimina de la tabla. A continuación se muestra la captura de pantalla proporcionada para la referencia:

Filas eliminadas durante la transición de contexto1539×265 27 KB

Y, por último, se aplican de nuevo los argumentos más adecuados que se mencionaron al principio, es decir, en el Paso No. 1. (Si crea una tabla física con la fórmula DAX proporcionada anteriormente eliminando la función "COUNTROWS()", verá que el número de filas generadas es 67 y no 74. Y luego, si verifica todas las columnas que contienen la información de fecha, observará que toda la información estará disponible solo a partir del 01/01/2022 y no antes de eso. Esto se debe a que MQL Date se evaluó en un nuevo contexto basado en la lógica y creó una tabla donde toda la información solo está disponible después de esa fecha / lógica. A continuación se muestra la captura de pantalla proporcionada para la referencia -)

Filas generadas en el back-end durante la transición de contexto2238×1202 337 KB

Mientras que en la medida - "# de MQLs sin filtro", "CALCULATE()" solo está modificando el contexto, es decir, "USERELATIONSHIP()" simplemente cambia la relación de "Crear fecha" a "Convertirse en una fecha MQL" al retener todas las filas de la tabla, es decir, no se realiza ninguna transisción de contexto ya que no hay iteración.

Así que en el back-end así es como el motor evalúa la medida introduciendo "ALL()" en la columna "Conviértete en una fecha MQL" -

# de MQLs sin Filtro = 
CALCULATE( COUNTROWS( 'Tabla de contactos' ) ,
    FILTRO( TODO( 'Tabla de contactos'[Became an MQL Fecha] ) , 
                'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022 , 1 , 1 ) ) ,
    USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) )

Puede verificarlo creando una tabla con la fórmula DAX proporcionada a continuación para verificar el número de filas generadas en el back-end. Vea esto -

Mesa = 
CALCULATETABLE(
    'Tabla de contactos' , 
    FILTRO( TODO( 'Tabla de contactos'[Became an MQL Fecha] ) , 
        'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022, 1 , 1 ) ) , 
    USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) )

Filas generadas en el back-end cuando solo el modificador de contexto está en su lugar2239×1198 346 KB

Como puede observar en la captura de pantalla anterior, en este caso, incluye la información anterior a la fecha - 01/01/2022 en las otras columnas relacionadas con la fecha.

Esperamos que encuentre útil esta explicación y le ayude a comprender cómo CALCULATE ejecuta las órdenes y, lo que es más importante, en qué orden.

Nota importante: Al verificar los resultados, he aplicado un filtro en la columna "Conviértete en una fecha MQL" donde el rango está entre "01/01/2022 - 31/01/2022" ya que ese es el mismo rango, has seleccionado en tu segmentación de datos en la página del informe Entonces, en caso de que, si desea verificarlo de forma cruzada, aplique el mismo rango y luego verifique los resultados.

Gracias y un cordial saludo,
Áspero

View solution in original post

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

A continuación se muestra la solución a la consulta. Se trata de la transición de filtro y contexto.

Hola @ysherriff,

Gracias por publicar su consulta en el Foro.

La respuesta es: "No, el resultado no será el mismo".

La razón es que se aplican dos contextos diferentes dentro de la función "CALCULATE()", es decir, "FILTER()", que es una función iteradora y cuando hay una iteración, "CALCULATE()" ejecuta una transición de contexto. Y en segundo lugar, hay una función "USERELATIONSHIP()" que es un modificador de contexto.

Por lo tanto, la forma en que ocurre la ejecución en su medida, es decir, en "# de MQL con filtro" está en el siguiente orden:

CALCULATE parte del contexto actual

1). Luego comienza a "evaluar" los argumentos del filtro, es decir, tanto la fila como el contexto del filtro (en este caso, la función "FILTER()" ya que es un iterador y verifica la lógica fila por fila).

2). Dado que está iterando fila por fila, la "transición de contexto" está destinada a suceder. Es decir, agrega todo el filtro de columna al nuevo contexto (en este caso, "'Tabla de contactos' [Se convirtió en una fecha MQL]").

3). Ahora, comienza a evaluar los modificadores de contexto (en este caso, la función "USERELATIONSHIP()").

4). Y luego, por último, aplica los argumentos de filtro que se evalúan en el "Paso No. 1".

De una manera simple, así es como el motor evalúa la medida - "# de MQL con filtro" en el back-end -

# de MQL con Filtro = 
COUNTROWS(
    CALCULATETABLE(
        'Tabla de contactos' ,
        FILTRO( 'Tabla de contactos' ,
            'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022, 1 , 1 ) ) ,
        USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) ) )

Entonces, primero, crea una tabla, es decir, "Tabla de contactos" y luego comienza la evaluación del argumento de filtro, es decir, la función "FILTER()" que itera la lógica fila por fila sobre la tabla donde MQL Fecha > = 01/01/2022. Una vez que se realiza la iteración sobre esa columna, realiza la transición de contexto donde esa columna "MQL Date" se agrega a un nuevo contexto. Hasta ahora, el no. de filas generadas sigue siendo 74.

Ahora, el modificador comienza a funcionar, es decir, la función "USERELATIONSHIP()". Y aquí es donde, los resultados comienzan a cambiar. Crea la relación con la "'Fecha'[Fecha]" y convierte los resultados de la "Fecha MQL" que se almacena en un nuevo contexto. Así que ahora, cualquier fila anterior a la condición, es decir, 01/01/2022 se elimina por completo de la "Tabla de contactos". Estas son las filas que elimina de la tabla. A continuación se muestra la captura de pantalla proporcionada para la referencia:

Filas eliminadas durante la transición de contexto1539×265 27 KB

Y, por último, se aplican de nuevo los argumentos más adecuados que se mencionaron al principio, es decir, en el Paso No. 1. (Si crea una tabla física con la fórmula DAX proporcionada anteriormente eliminando la función "COUNTROWS()", verá que el número de filas generadas es 67 y no 74. Y luego, si verifica todas las columnas que contienen la información de fecha, observará que toda la información estará disponible solo a partir del 01/01/2022 y no antes de eso. Esto se debe a que MQL Date se evaluó en un nuevo contexto basado en la lógica y creó una tabla donde toda la información solo está disponible después de esa fecha / lógica. A continuación se muestra la captura de pantalla proporcionada para la referencia -)

Filas generadas en el back-end durante la transición de contexto2238×1202 337 KB

Mientras que en la medida - "# de MQLs sin filtro", "CALCULATE()" solo está modificando el contexto, es decir, "USERELATIONSHIP()" simplemente cambia la relación de "Crear fecha" a "Convertirse en una fecha MQL" al retener todas las filas de la tabla, es decir, no se realiza ninguna transisción de contexto ya que no hay iteración.

Así que en el back-end así es como el motor evalúa la medida introduciendo "ALL()" en la columna "Conviértete en una fecha MQL" -

# de MQLs sin Filtro = 
CALCULATE( COUNTROWS( 'Tabla de contactos' ) ,
    FILTRO( TODO( 'Tabla de contactos'[Became an MQL Fecha] ) , 
                'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022 , 1 , 1 ) ) ,
    USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) )

Puede verificarlo creando una tabla con la fórmula DAX proporcionada a continuación para verificar el número de filas generadas en el back-end. Vea esto -

Mesa = 
CALCULATETABLE(
    'Tabla de contactos' , 
    FILTRO( TODO( 'Tabla de contactos'[Became an MQL Fecha] ) , 
        'Tabla de contactos'[Became an MQL Fecha] >= FECHA( 2022, 1 , 1 ) ) , 
    USERELATIONSHIP( 'Tabla de contactos'[Became an MQL Fecha] , 'Fecha'[Fecha] ) )

Filas generadas en el back-end cuando solo el modificador de contexto está en su lugar2239×1198 346 KB

Como puede observar en la captura de pantalla anterior, en este caso, incluye la información anterior a la fecha - 01/01/2022 en las otras columnas relacionadas con la fecha.

Esperamos que encuentre útil esta explicación y le ayude a comprender cómo CALCULATE ejecuta las órdenes y, lo que es más importante, en qué orden.

Nota importante: Al verificar los resultados, he aplicado un filtro en la columna "Conviértete en una fecha MQL" donde el rango está entre "01/01/2022 - 31/01/2022" ya que ese es el mismo rango, has seleccionado en tu segmentación de datos en la página del informe Entonces, en caso de que, si desea verificarlo de forma cruzada, aplique el mismo rango y luego verifique los resultados.

Gracias y un cordial saludo,
Áspero

Syndicate_Admin
Administrator
Administrator

Porque tiene una segmentación de datos que también filtra las fechas solo entre el 1/1/2011 y el 31/1/2022. Intente cambiar la rebanadora que cubre la fecha anterior al 1/1/2022, luego verá la diferencia.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.