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 utilizar en caso A?

DAX Operator.PNG

  • 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!

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

  • Anonymous's avatar
    Anonymous
    Not 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

  • Anonymous's avatar
    Anonymous
    Not 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 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!

  • 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

  • FrankAT's avatar
    FrankAT
    Community Champion

    Hola @JeanWang

    ambas medidas son las mismas en términos de contenido, pero la primera produce un error (véase figura).

    15-08-_2020_15-42-04.png

    La segunda medida está bien!

    Saludos FrankAT

  • AntrikshSharma's avatar
    AntrikshSharma
    Community 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.

    • Anonymous's avatar
      Anonymous
      Not applicable

      ¡Muchas gracias Antriksh!