Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago

Funciones IF con muchas condiciones

Hola

Soy un novato de PowerBI y necesito ayuda con las funciones de IF con muchas afecciones.

Tengo 7 columnas, cada una de las cuales tiene filas con diferentes puntajes de encuesta de 5. es decir, el usuario 1 calificó "liderazgo", el usuario 2 calificó "liderazgo como 4 y así sucesivamente (vea la captura de pantalla a continuación):

Quiero crear una columna personalizada adicional titulada "Puntuación general del proyecto" que se adhiera a las siguientes reglas:

−IF ("Liderazgo" Y "Estimación, Planificación y Plazos" Y "Satisfacción y Valor del Cliente" = 1 entonces "Puntuación General del Proyecto" = 1)

−IF ("Liderazgo" Y "Estimación, Planificación y Plazos" = 1 entonces "Puntuación General del Proyecto" = 1)

−Si ("Liderazgo" Y "Satisfacción y valor del cliente" = 1 entonces "Puntuación general del proyecto" = 1)

−Si ("Estimación, Planificación y Plazos" Y "Satisfacción y Valor del Cliente" = 1 entonces "Puntuación General del Proyecto" = 1)

−Si (Todas las categorías = 1 entonces "Puntuación general del proyecto" = 1)"Puntuación general del proyecto" = 1)

- Si (PROMEDIO de las 7 columnas está entre 3 y 4, entonces "Puntuación general del proyecto" = 3)

- Si ( Las 7 columnas = 5, entonces "Puntuación general del proyecto" = 5)

- Si ( Todas menos una categoría = 5, entonces "Puntuación general del proyecto" = 5)

El objetivo: Estoy tratando de crear un mapa de calor para diferentes proyectos dado el conjunto de reglas anterior. Quiero que la columna condicional devuelva valores que sean 1, 3 o 5. Una vez que tenga esto funcionando, usaré el formato condicional para crear un mapa de calor con "Rojo, Ámbar, Verde".

Si algo no está claro, por favor hágamelo saber. Es la primera vez que pido ayuda aquí. He estado luchando con lo anterior durante unos días, ¡así que cualquier ayuda sería genial!

11 Replies

  • @smoodley327 ,

    DAX tiene una función SWITCH que es mucho más limpia y fácil de usar que anidar múltiples instrucciones IF.

    La sintaxis básica es:

    SWITCH(, , [, , ]…[, ])  
    
    

    Entonces, en su caso, sería algo como esto:

    OverallProjectScore = SWITCH(
                              TRUE(),
    AND([Client Satisfaction]=1, AND( [Leadership]=1, [Estimation, Planning & Timelines] = 1 )),1,
    AND( [Leadership] = 1, [Estimation, Planning & Timelines] = 1 ), 1,
    999 )

    Acabo de hacer sus dos primeras condiciones, de lo contrario 999 como marcador de posición a medida que completa las otras condiciones.

    La condición promedio agrega cierta complejidad adicional. Imaginamos que podemos llegar a eso una vez que se sienta cómodo con esta primera parte.

    Espero que esto te ponga en marcha.

    Saludos

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @rsbin

      Muchas gracias por la ayuda. Así que he estado jugando con él, y sigo recibiendo un error que dice "Token Eof esperado".

      Aquí está el código:

      OverallProjectScore = SWITCH(
      VERDADERO(),
      AND([[#"SATISFACCIÓN Y VALOR DEL CLIENTE"]]=1, AND([LIDERAZGO]=1, [#"ESTIMACIÓN, PLANIFICACIÓN Y PLAZOS"] =1)),1, Y([LIDERAZGO]=1,[#"ESTIMACIÓN, PLANIFICACIÓN Y PLAZOS"]=1)),1,AND([[#"ESTIMACIÓN, PLANIFICACIÓN Y PLAZOS"]]=1, Y([[#"SATISFACCIÓN Y VALOR DEL CLIENTE"]]=1)),1,Y([LIDERAZGO]=1, Y([#"SOLUCIÓN Y ENTREGABLES"]=1,[ENFOQUE]=1,[#"ESTIMACIÓN, PLANIFICACIÓN Y PLAZOS"]=1,[#"MONITOR Y CONTROL"]=1, [DOTACIÓN DE PERSONAL]=1, [#"SATISFACCIÓN Y VALOR DEL CLIENTE"]=1)),1

      Traté de duplicar tu lógica de cómo creaste las primeras 2 condiciones, pero algo va mal ...

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        @smoodley327 ,

        Has traído personajes adicionales por alguna razón.

        1) En su primera condición, deshágase del corchete doble, las comillas dobles y el signo "#". No tengo esto en ninguna parte de mi ejemplo... no sé cómo o por qué terminaron allí.

        Todos los nombres de sus columnas deben decir [YourColumnName], es decir, [LIDERAZGO].

        Haz estas correcciones y vamos a partir de ahí.

  • @smoodley327 ,

    Para su condición promedio, crearía otra columna calculada. Suma las 7 columnas y divídelas por 7:

    AverageScore = ([Leadership] + [Client Satisfaction...] + .....) / 7 

    Luego, en la declaración SWITCH, su condición es algo como esto:

    AND( [AverageScore] >=3, [AverageScore] <=4]), 3,

    De vacaciones la semana que viene. Así que espero que podamos hacer esto esta mañana o puedes averiguarlo desde aquí.

    Saludos

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @rsbin Muchas gracias. Solo estaba pensando en la condición final (tener todas las categorías como una función anidada). Dado que estoy tratando de que cada fila en el "puntaje general del proyecto" refleje algún tipo de rojo, verde ámbar (de acuerdo con las reglas del FI), pensé que tendría más sentido usar el cálculo "promedio" en su lugar. Por lo tanto para la condición final, en lugar de tenerlo como:

      - Si Todas las categorías = 1 entonces la puntuación general del proyecto = 1

      Lo enmendaré a Si el promedio de todas las categorías está entre 1 y 3, entonces el puntaje general del proyecto = 1 (que será rojo).

      Luego usaré la misma lógica para el ámbar (si el promedio está entre 3 y 4) y el verde (si el promedio está entre 4 y 5). Piensa que esto funcionará y puedo evitar tener una función larga Y anidada.

      Muchas gracias por su ayuda. Utilizaré su código "Promedio" anterior y revisaré algunos otros tutoriales de Youtube en DAX si es necesario.

      Si hay alguna laguna evidente en mi proceso de pensamiento anterior, hágamelo saber. De lo contrario, disfrute de su merecida vacación.

      Todo lo mejor.