Forum Discussion
Operador DAX
Hola
Tengo otra pregunta de la prueba de práctica de Power BI. La respuesta correcta se dice que es B, creo que las dos medidas siguientes son exactamente las mismas, o tal vez "a " no se puede utilizar en caso A?
- Anonymous6 years ago
Hola @JeanWang ,
Ambos son iguales, pero una A será más rentable.
Vea este video de Jeffery Wang - el equipo que creó el motor DAX
https://www.youtube.com/watch?v=bJtRB86n9tk
La diferencia se explica en 37:540 en el video.
saludos
Harsh NathaniApreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! @JeanWang Ambas medidas son diferentes, y la primera es incorrecta aquí es por qué:
Cuando se escribe una lógica de predicado/booleano en el argumento de filtro de CALCULATE, se expande internamente a una construcción FILTER y ALL. Producto[Color] - "Rojo" se convierte en
= FILTER ( ALL ( Product[Color] ), Product[Color] = "Red" )En la primera opción los dos predicados hacen referencia a 2 columnas diferentes de Products en el mismo argumento de filtro de CALCULATE, es decir, Color y Tamaño, ya que ambos serán expandidos por el motor, pero el motor no podrá crear una combinación de Color y Tamaño existentes únicos a partir de los predicados, es por eso que no se le permite usar predicados que hacen referencia a más de 1 columna en el argumento de filtro único de CALCULATE. , Producto[Color] á "Rojo" && Producto[Color] - "Azul" está bien y no producirá un error
si desea utilizar 2 columnas en el mismo argumento de filtro CALCULATE, tendrá que utilizar esto:
= CALCULATE ( [Measure], FILTER ( ALL ( Product[Color], Product[Size] ), Product[Color] = "Red" || Product[Size] = 50 ) )en la segunda opción, la referencia desnuda a la tabla Producto respetará cualquier filtro procedente de cualquier parte del informe, pero cuando utilice predicados, ALL elimina esos filtros. así que en caso de que desee tener un filtro de 2 columnas mientras se asegura de que el nuevo filtro se interseca con el filtro fuera de CALCULATE sin sobrescribirlo, entonces debe utilizar KEEPFILTERS.
= CALCULATE ( [Measure], KEEPFILTERS ( FILTER ( ALL ( Product[Color], Product[Size] ), Product[Color] = "Red" || Product[Size] = 50 ) ) )Además, no utilice un filtro de tabla donde el filtro de columna hará el trabajo es mucho más eficaz, ya que no hay necesidad de aplicar cada columna de la tabla de productos al contexto de filtro cuando no es necesario, también si no es consciente de las tablas expandidas, los valores devueltos por una medida podrían ser sorprendentes.
6 Replies
- AnonymousNot applicable
Hola @JeanWang
Sí, oye, ambos están iguales.
¿Resolví tu problema? ¡Marca mi puesto como una solución!
Apreciamos sus Felicitaciones, Pulse el botón pulgares hacia arriba !!
saludos
Pranit - AnonymousNot applicable
Hola @JeanWang ,
Ambos son iguales, pero una A será más rentable.
Vea este video de Jeffery Wang - el equipo que creó el motor DAX
https://www.youtube.com/watch?v=bJtRB86n9tk
La diferencia se explica en 37:540 en el video.
saludos
Harsh NathaniApreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución! - Sujit_ThakurSolution Sage
Estimado @JeanWang ,
Ambos son iguales en la lectura
pero DAX A tendrá error
Y B se ejecutará Ok
Se aprecia un kudos
Si esto ayuda a aceptar como solución
- AntrikshSharmaCommunity Champion
@JeanWang Ambas medidas son diferentes, y la primera es incorrecta aquí es por qué:
Cuando se escribe una lógica de predicado/booleano en el argumento de filtro de CALCULATE, se expande internamente a una construcción FILTER y ALL. Producto[Color] - "Rojo" se convierte en
= FILTER ( ALL ( Product[Color] ), Product[Color] = "Red" )En la primera opción los dos predicados hacen referencia a 2 columnas diferentes de Products en el mismo argumento de filtro de CALCULATE, es decir, Color y Tamaño, ya que ambos serán expandidos por el motor, pero el motor no podrá crear una combinación de Color y Tamaño existentes únicos a partir de los predicados, es por eso que no se le permite usar predicados que hacen referencia a más de 1 columna en el argumento de filtro único de CALCULATE. , Producto[Color] á "Rojo" && Producto[Color] - "Azul" está bien y no producirá un error
si desea utilizar 2 columnas en el mismo argumento de filtro CALCULATE, tendrá que utilizar esto:
= CALCULATE ( [Measure], FILTER ( ALL ( Product[Color], Product[Size] ), Product[Color] = "Red" || Product[Size] = 50 ) )en la segunda opción, la referencia desnuda a la tabla Producto respetará cualquier filtro procedente de cualquier parte del informe, pero cuando utilice predicados, ALL elimina esos filtros. así que en caso de que desee tener un filtro de 2 columnas mientras se asegura de que el nuevo filtro se interseca con el filtro fuera de CALCULATE sin sobrescribirlo, entonces debe utilizar KEEPFILTERS.
= CALCULATE ( [Measure], KEEPFILTERS ( FILTER ( ALL ( Product[Color], Product[Size] ), Product[Color] = "Red" || Product[Size] = 50 ) ) )Además, no utilice un filtro de tabla donde el filtro de columna hará el trabajo es mucho más eficaz, ya que no hay necesidad de aplicar cada columna de la tabla de productos al contexto de filtro cuando no es necesario, también si no es consciente de las tablas expandidas, los valores devueltos por una medida podrían ser sorprendentes.
- AnonymousNot applicable
¡Muchas gracias Antriksh!