Forum Discussion
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
- Syndicate_Admin
Administrator
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
Administrator
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)),1Traté de duplicar tu lógica de cómo creaste las primeras 2 condiciones, pero algo va mal ...
- Syndicate_Admin
Administrator
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í.
- Syndicate_Admin
Administrator
Para su condición promedio, crearía otra columna calculada. Suma las 7 columnas y divídelas por 7:
AverageScore = ([Leadership] + [Client Satisfaction...] + .....) / 7Luego, 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
Administrator
@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.