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.
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?
Solved! Go to Solution.
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.
Proud to be a Super User!
Paul on Linkedin.
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! |
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! |
@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,
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! |
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?
?
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).
Proud to be a Super User!
Paul on Linkedin.
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?
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.
Proud to be a Super User!
Paul on Linkedin.
@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.
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.
Proud to be a Super User!
Paul on Linkedin.
@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?
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").
Proud to be a Super User!
Paul on Linkedin.
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.
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.
Proud to be a Super User!
Paul on Linkedin.
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! |
*Bump* - no puede encontrar la solución a esto en cualquier lugar
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |