Declaración IF/AND anidada

Un usuario Pregunto ✅

Stuznet

Me quedé atascado escribiendo la declaración IF/AND anidada.

A continuación se muestra la declaración que escribí en Excel, referencia!A1 es la fecha 31/08/2018

=SI(V2>ref!$A$1,»Futuro»,SI(Y(V2<=ref!$A$1, X2=0),"Tarde",SI(Y(V2<=ref!$A$1, X2<>0, Y2<=0),"a tiempo","tarde")))

Captura.PNG

Esta es la declaración que escribí en power bi pero recibo un error de sintaxis.

columna = SI(Datos[BL Date] > fecha(2018,8,31) = «Futuro», SI(Y(Datos[BL Date] <= fecha(2018,8,31), Datos[Actual Date]<>0 = «Tarde»), SI(Y(Datos[BL Date],Datos[Actual Date]<>0),Datos[Variance] <= 0),«Puntual», «Tarde» )))

¿Puede ayudarme alguien, por favor?

¡Muchas gracias!

sean

En respuesta a mfelix

La razón por la que su fórmula no funciona es que ¡Y acepta solo 2 argumentos!

Personalmente, prefiero el enfoque SWITCH de @MFelix usando && más fácil de preparar (al menos para mí)

Pero podrías probar esto…

Column =
IF (
    Data[BL Date] > DATE ( 2018, 8, 31 )
        = "Future",
    IF (
        AND ( Data[BL Date] <= DATE ( 2018, 8, 31 ), Data[Actual Date] <> 0 ),
        "Late",
        IF (
            AND ( AND ( Data[BL Date] <> 0, Data[Actual Date] <> 0 ), Data[Variance] <= 0 ),
            "On-Time",
            "Late"
        )
    )
)

@Stuznet ¡Déjame saber si esto realmente funciona! carita feliz

EDITAR: @MFelix, creo que debe agregar esta condición …

nested if =
IF (
    Data[BL Date] > DATE ( 2018, 8, 31 ),
    "Future",
    IF (
        Data[BL Date] <= DATE ( 2018, 8, 31 )
            && Data[Actual Date] <> 0,
        "Late",
        IF (
            Data[BL Date] <> 0
                && Data[Actual Date] <> 0
                && Data[Variance] <= 0,
            "On-Time",
            "Late"
        )
    )
)

Y…

SWITCH FORMULA =
SWITCH (
    TRUE (),
    Data[BL Date] > DATE ( 2018, 8, 31 ), "Future",
    Data[BL Date] <= DATE ( 2018, 8, 31 )
        && Data[Actual Date] <> 0, "Late",
    Data[BL Date] <> 0
        && Data[Actual Date] <> 0
        && Data[Variance] <= 0, "On-Time",
    "Late"
)

Stuznet

En respuesta a sean

Muchas gracias por su ayuda, pero la fórmula correcta que estoy buscando es esta. Ahora el resultado es coincidente.

Captura.PNG

Revelación

FÓRMULA DE CAMBIO =
CAMBIAR (
CIERTO (),
Datos[BL Date] > FECHA ( 31, 8, 2018 ), «Futuro»,
Datos[BL Date] <= FECHA (2018, 8, 31)
&& ES EN BLANCO (Datos[Actual Date]) , «Tarde»,
Datos[BL Date] <= FECHA (2018, 8, 31)
&& ES EN BLANCO (Datos[Actual Date]) = FALSO()
&& Datos[Variance] <= 0, "a tiempo",
«Tarde»
)

FÓRMULA DE CAMBIO = CAMBIO (VERDADERO (), Datos[BL Date] > FECHA ( 2018, 8, 31 ), «Futuro»,Datos[BL Date] <= FECHA ( 2018, 8, 31 )&& ESBLANCO(Datos[Actual Date]), "Tarde", Datos[BL Date] <= FECHA ( 2018, 8, 31 )&& ESBLANCO(Datos[Actual Date]) = FALSO()&& Datos[Variance] <= 0, "a tiempo", "tarde")

mfelix

Hola @Stuznet,

Tiene algunas correcciones en DAX SI no usa el = para definir los estados también los corchetes. He hecho algunos cambios para reducir el DAX. Puede usar una de las dos fórmulas a continuación:

nested if =
IF (
    Data[BL Date] > DATE ( 2018, 8, 31 ),
    "Future",
    IF (
        Data[BL Date] <= DATE ( 2018, 8, 31 )
            && Data[Actual Date] <> 0,
        "Late",
        IF (
            Data[BL Date] <> 0 
                && Data[Actual Date] <> 0
                && Data[Variance] <= 0,
            "On-Time",
            "Late"
        )
    )
)

En lugar de usar el IF anidado, es mejor usar la función SWITHC, consulte la documentación aquí, vea a continuación la fórmula dax para su caso.

SWITCH FORMULA =
SWITCH (
    TRUE (),
    Data[BL Date] > DATE ( 2018, 8, 31 ), "Future",
    Data[BL Date] <= DATE ( 2018, 8, 31 )
        && Data[Actual Date] <> 0, "Late",
    Data[BL Date] <> 0
        && Data[Actual Date] <> 0
        && Data[Variance] <= 0, "On-Time",
    "Late"
)

Saludos,

mfelix

sean

En respuesta a mfelix

La razón por la que su fórmula no funciona es que ¡Y acepta solo 2 argumentos!

Personalmente, prefiero el enfoque SWITCH de @MFelix usando && más fácil de preparar (al menos para mí)

Pero podrías probar esto…

Column =
IF (
    Data[BL Date] > DATE ( 2018, 8, 31 )
        = "Future",
    IF (
        AND ( Data[BL Date] <= DATE ( 2018, 8, 31 ), Data[Actual Date] <> 0 ),
        "Late",
        IF (
            AND ( AND ( Data[BL Date] <> 0, Data[Actual Date] <> 0 ), Data[Variance] <= 0 ),
            "On-Time",
            "Late"
        )
    )
)

@Stuznet ¡Déjame saber si esto realmente funciona! carita feliz

EDITAR: @MFelix, creo que debe agregar esta condición …

nested if =
IF (
    Data[BL Date] > DATE ( 2018, 8, 31 ),
    "Future",
    IF (
        Data[BL Date] <= DATE ( 2018, 8, 31 )
            && Data[Actual Date] <> 0,
        "Late",
        IF (
            Data[BL Date] <> 0
                && Data[Actual Date] <> 0
                && Data[Variance] <= 0,
            "On-Time",
            "Late"
        )
    )
)

Y…

SWITCH FORMULA =
SWITCH (
    TRUE (),
    Data[BL Date] > DATE ( 2018, 8, 31 ), "Future",
    Data[BL Date] <= DATE ( 2018, 8, 31 )
        && Data[Actual Date] <> 0, "Late",
    Data[BL Date] <> 0
        && Data[Actual Date] <> 0
        && Data[Variance] <= 0, "On-Time",
    "Late"
)

Stuznet

En respuesta a sean

Muchas gracias por su ayuda, pero la fórmula correcta que estoy buscando es esta. Ahora el resultado es coincidente.

Captura.PNG

Revelación

FÓRMULA DE CAMBIO =
CAMBIAR (
CIERTO (),
Datos[BL Date] > FECHA ( 31, 8, 2018 ), «Futuro»,
Datos[BL Date] <= FECHA (2018, 8, 31)
&& ES EN BLANCO (Datos[Actual Date]) , «Tarde»,
Datos[BL Date] <= FECHA (2018, 8, 31)
&& ES EN BLANCO (Datos[Actual Date]) = FALSO()
&& Datos[Variance] <= 0, "a tiempo",
«Tarde»
)

FÓRMULA DE CAMBIO = CAMBIO (VERDADERO (), Datos[BL Date] > FECHA ( 2018, 8, 31 ), «Futuro»,Datos[BL Date] <= FECHA ( 2018, 8, 31 )&& ESBLANCO(Datos[Actual Date]), "Tarde", Datos[BL Date] <= FECHA ( 2018, 8, 31 )&& ESBLANCO(Datos[Actual Date]) = FALSO()&& Datos[Variance] <= 0, "a tiempo", "tarde")

mfelix

En respuesta a sean

Hola @Sean,

Tienes toda la razón sobre AND, solo estaba mirando el resultado final y prefiero &&, así que nunca mires la cantidad de argumentos, sin embargo, prefiero SWITCH en lugar de anidado, como muestro en la segunda medida.

Saludos
mfelix

sean

En respuesta a mfelix

Prefiero SWITCH, ya que es más fácil de leer y menos paréntesis de apertura y cierre para realizar un seguimiento.

SWITCH se convierte internamente en IF anidados de todos modos carita feliz

Por cierto, veo que agregaste el <>0 arriba guiño sonriente

mfelix

En respuesta a sean

Sí, gracias por señalarlo.

Esperemos que una de nuestras respuestas ayude.

Stuznet

En respuesta a mfelix

@MFelix @Sean ambos son estrellas de rock. Probé ambas fórmulas Nested IF y Switch y creo que usaré la función Switch, pero cuando comparé la nueva columna calculada «Fórmula de cambio» con mis datos originales Estado 2, no obtuve el resultado correcto.

Captura.PNG

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *