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
Anonymous
Not applicable

¿Por qué funciona esta fórmula? Filtro(todo(...

Hola

La siguiente fórmula me permite sumar las ventas de YTD a una semana seleccionada en mi segmentación de fecha:

Semana YTD á CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Número de semana]<-max('Fecha'[Número de semana]) && 'Fecha'[Año de semana]- max('Fecha'[Año de semana])))

Así que cuando selecciono la semana 5 en la cortadora, se resumirá semanas 1 a 5. Sin embargo, pensé que la parte 'FILTER(ALL('date')' de la fórmula eliminaría mi filtro de segmentación de datos porque elimina todos los filtros de tabla, ¿ahora? Por lo tanto, espero que devuelva ytd al número máximo de la semana.

¿Qué estoy malinterpretando?

1 ACCEPTED SOLUTION

@rodderslad

Sí, sé que es confuso... Se tarda un tiempo para conseguir su cabeza alrededor de ella (He estado en esto durante más de 3 años y aprendo cosas todos los días!).

Volvemos a una etapa anterior en la explicación. Toda la expresión FILTER contiene 2 partes:

1) TODOS elimina los filtros de la tabla de fechas

2) Entonces la segunda expresión de filtro entra en acción. Lo que está haciendo es ver una tabla de fechas sin filtrar (ya que ALL ha quitado los filtros) y, a continuación, devuelve los valores establecidos en la segunda expresión en toda la tabla de fechas. Puesto que la segunda expresión de filtro comprueba la columna de número de semana, que tiene un valor "seleccionado", aplica el nuevo filtro en función de ese valor seleccionado.

La segunda expresión hace referencia al valor seleccionado en la columna de número de semana y un año. Por lo tanto, aplica los filtros en consecuencia sobre toda la tabla de fechas.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






View solution in original post

18 REPLIES 18
CNENFRNL
Community Champion
Community Champion

Hola, @rodderslad

Al formatear a través de daxformatter.com,la medida es mucho más fácil de analizar.

YTD Week =
CALCULATE (
    SUM ( 'order'[Qty] ),
    FILTER (
        ALL ( 'Date' ),
        'Date'[Week Number] <= MAX ( 'Date'[Week Number] )
            && 'Date'[Week Year] = MAX ( 'Date'[Week Year] )
    )
)

Hasta cierto punto, tienes razón sobre ALL('Date'); devuelve toda una tabla 'Date' eliminando los filtros; pero luego se filtra por las condiciones "'Fecha'[Número de semana] < MAX ( 'Fecha'[Número de semana] ) && 'Fecha'[Año de semana] - MAX ( 'Fecha'[Año de semana] ) ".


Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

Anonymous
Not applicable

Pero si esto no vuelve todas las semanas en la mesa... todas las 52 semanas y no sólo a la semana 5 que la cortadora de filtros a?

@rodderslad crees que MAX ( 'Fecha'[Número de semana] ) devuelve la 52a semana del año? Lo que te decepciona es que NO es el caso.

Como MAX ( 'Fecha'[Número de semana] ) corresponses to to

MAXX( 'Date', 'Date'[Week Number] )

obtienes el número de semana que has elegido. Se trata de contexto de filtro en DAX. Suena un poco fuera del tema de su problema, pero es la piedra conerina de cualquier calcación DAX. Aquí hay un artículo clásico sobre un tema de este tipo; uno nunca se puede leer demasiadas veces.

http://mdxdax.blogspot.com/2011/03/


Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

Anonymous
Not applicable

@CNENFRNL Gracias por el artículo, lo leeré más tarde hoy.

En realidad estoy contento con la solución original, simplemente no entendí por qué funcionó. es decir, por qué la all('tabla de fechas') no eliminó el filtro de segmentación de eventos aunque el filtro de segmentación utiliza la columna de semana en la tabla de fechas! ¡Todavía no lo sé!

@rodderslad Me parece que no envolvió su cabeza alrededor del orden de cálculo aquí. Para FILTER func,

  1. evalúa en primer lugar ALL('Date'), la tabla completa de 'Fecha'
  2. en segundo lugar, todos esos criterios de filtrado, es decir, 'Fecha'[Número de semana]<'max('Fecha'[Número de semana]) && 'Fecha'[Año de semana]- max('Fecha'[Año de semana]) se aplica a la tabla 'Fecha' completa.

Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

Anonymous
Not applicable

@CNENFRNL

Gracias por la rápida respuesta. Lo sentimos si estoy siendo denso, pero sin duda esto significa que al borrar los filtros de mi tabla proporciona la lista completa de semanas, no sólo los filtrados en la segmentación de datos?

  1. evalúa en primer lugar ALL('Date'), la tabla completa de 'Date' - por lo que elimina el filtro de segmentación que se filtró a la semana 5
  2. en segundo lugar, todos esos criterios de filtrado, es decir, 'Fecha'[Número de semana]<'max('Fecha'[Número de semana]) && 'Fecha'[Año de semana]- max('Fecha'[Año de semana]) se aplica a la tabla 'Fecha' completa. y por lo tanto debe traer de vuelta la semana 1 a 52 ya que hay 52 semanas en la tabla

?

@rodderslad

La lógica sigue el orden que ha indicado. Lo que parece confundirle es la función MAX utilizada en la segunda expresión. MAX devolverá el valor "max" en el contexto del filtro. Por lo tanto, si el contexto del filtro es una fecha/semana/año, devuelve ese valor. Piense en ello como actuar como SELECTEDVALUE. (de hecho, puede utilizar SELECTEDVALUE en lugar de MAX).





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

@PaulDBrown @CNENFRNL

Gracias a ambos por su paciencia. El día 3 de Power BI y mi cabeza se está derritiendo. Así que mi malentendido es donde se aplica el contexto del filtro.

Así que max devuelve 5 porque el contexto del filtro lo establece la segmentación de datos que se establece en la semana 5. ¿Puedo preguntar por qué el contexto de filtro no es 52 en este punto porque ALL se ejecuta primero eliminando así el contexto del filtro de segmentación de datos? ¿Por qué el contexto del filtro sigue siendo 5?

@rodderslad

Piénsalo de esta manera:

Mediante all, se quitan los filtros de la tabla o columna especificada. Al agregar la expresión de filtro, ahora está especificando o agregando un nuevo filtro en la tabla de fechas determinada por las expresiones en ella. Un poco como "primero eliminar el filtro en la tabla de fechas y ahora aplicar este filtro en su lugar".
Una vez más, la función MAX actúa como SELECTEDVALUE. Por lo tanto, "mira" la segmentación de datos (a la que ha hecho referencia en la expresión de filtro), ve la semana 5 y establece ese valor como la referencia para la nueva expresión de filtro.

Algo que tiendo a hacer para ver lo que está pasando es configurar una tabla visual con la columna filtrada y la medida. A continuación, puede ver lo que devuelve la medida para cada contexto de filtro ("fila", aunque nunca debe pensar en él como una fila de tipo Excel si está utilizando la columna en un objeto visual; el concepto de "fila" en el sentido de Excel es SOLAMENTE aplicable en el contexto de una tabla de datos/dimensiones en el modelo) de la tabla.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

@PaulDBrown Ok, así que eliminamos el filtro en la columna de la semana (y todas las columnas de la tabla porque hace referencia a la tabla en su totalidad) lo que permite la exposición de todas las semanas en la tabla de datos. Pero como estamos usando la función max, hace referencia a la segmentación de datos para la referencia de filtro.

Supongo que entonces ¿por qué se utiliza la segmentación de datos como referencia de filtro y no la semana máxima en la tabla (52) sin el filtro? ¿Por qué vuelve a jugar la cortadora? Si quisiéramos eliminar el rol de la segmentación, ¿qué harías de manera diferente?

Gracias por esta recomendación - me ayudará a desglosar el problema avanzando:

Algo que tiendo a hacer para ver lo que está pasando es configurar una tabla visual con la columna filtrada y la medida. A continuación, puede ver lo que devuelve la medida para cada contexto de filtro ("fila") de la tabla.

@rodderslad

La segmentación de datos vuelve a jugar porque la expresión de filtro hace referencia a la columna (Fecha [Número de semana]) utilizada en la segmentación de datos

La forma más fácil de ignorar una segmentación de datos es quitar la interacción visual en Formato en la cinta de opciones, "Editar interacciones". (Pero esto afectará a todas las medidas en el objeto visual)

Por supuesto, puede ignorar una selección de segmentación de datos simplemente usando ALL por sí mismo en la expresión de filtro.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

@PaulDBrown con frecuencia debe golpearse la cabeza de una mesa en la frustración tratando con estudiantes como yo!

"La segmentación de datos vuelve a jugar porque la expresión de filtro hace referencia a la columna (Fecha [Número de semana]) utilizada en la segmentación de datos" - por lo que nuestra función ALL nunca elimina el papel de la segmentación de datos, desfiltra la tabla de datos pero la segmentación sigue siendo 'viva' por lo que cuando se utilizan expresiones de filtro se filtra con la segmentación de nuevo?

@rodderslad

Correcto. La función ALL quita un filtro especificado en una tabla/columna (no "borra" un filtro)

La columna filtrada ("Slicer") entra en juego de nuevo porque la expresión de filtro hace referencia explícitamente a esa columna. En este caso, la función MAX devuelve el valor seleccionado en la columna filtrada ("Slicer").





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

@PaulDBrown

Lo siento Paul, este es el bit que todavía no suma:

La columna filtrada ("Slicer") entra en juego de nuevo porque la expresión de filtro hace referencia explícitamente a esa columna - esta columna no debería tener un filtro ahora porque 'ALL' lo quitó. Este tema específico es lo que me está causando la confusión.

Lo sentimos si ya has respondido a esto de una manera diferente anteriormente.

@rodderslad

Sí, sé que es confuso... Se tarda un tiempo para conseguir su cabeza alrededor de ella (He estado en esto durante más de 3 años y aprendo cosas todos los días!).

Volvemos a una etapa anterior en la explicación. Toda la expresión FILTER contiene 2 partes:

1) TODOS elimina los filtros de la tabla de fechas

2) Entonces la segunda expresión de filtro entra en acción. Lo que está haciendo es ver una tabla de fechas sin filtrar (ya que ALL ha quitado los filtros) y, a continuación, devuelve los valores establecidos en la segunda expresión en toda la tabla de fechas. Puesto que la segunda expresión de filtro comprueba la columna de número de semana, que tiene un valor "seleccionado", aplica el nuevo filtro en función de ese valor seleccionado.

La segunda expresión hace referencia al valor seleccionado en la columna de número de semana y un año. Por lo tanto, aplica los filtros en consecuencia sobre toda la tabla de fechas.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Anonymous
Not applicable

Gracias @PaulDBrown y @CNENFRNL, realmente apreciamos su ayuda!

@rodderslad

  1. evalúa en primer lugar ALL('Date'), la tabla completa de 'Date' - por lo que elimina el filtro de segmentación que se filtró a la semana 5 - Sí, así es
  2. en segundo lugar, todos esos criterios de filtrado, es decir, 'Fecha'[Número de semana]<'max('Fecha'[Número de semana]) && 'Fecha'[Año de semana]- max('Fecha'[Año de semana]) se aplica a la tabla 'Fecha' completa. y por lo tanto debe traer de vuelta la semana 1 a 52 ya que hay 52 semanas en la tabla - max('Date'[Número de semana]) devuelve el número de semana en la cortadora, es decir, la semana 5, porque está sujeto al contexto del filtro

Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

Anonymous
Not applicable

*Bump* - no puede encontrar la solución a esto en cualquier lugar

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.