Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

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 uti...
  • Anonymous's avatar
    Anonymous
    6 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 Nathani

    Apreciar con un Kudos!! (Haga clic en el botón Pulgares arriba)
    ¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

  • AntrikshSharma's avatar
    6 years ago

    @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.