Declaración IF / AND anidada

Un usuario Pregunto ✅

Stuznet

Me atasqué al escribir una declaración IF / AND anidada.

A continuación se muestra la declaración que escribí en Excel, ref! A1 es la fecha 31/8/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")))

Capture.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),«A tiempo», «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 intentar 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¡Dime si esto realmente funciona! Smiley feliz

EDITAR: @MFelix Creo que necesitas 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 los resultados coinciden.

Capture.PNG

Revelación

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

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

MFelix

Hola @Stuznet,

Tiene algunas incorrecciones en DAX SI no usa = para definir los estados también los corchetes He realizado 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, verifique 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 intentar 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¡Dime si esto realmente funciona! Smiley feliz

EDITAR: @MFelix Creo que necesitas 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 los resultados coinciden.

Capture.PNG

Revelación

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

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

MFelix

En respuesta a Sean

Hola @Sean,

Está absolutamente en lo correcto sobre el Y Yo solo estaba mirando el resultado final y prefiero el &&, así que nunca mire el número de argumentos, sin embargo, prefiero el INTERRUPTOR en lugar del anidado si como lo 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 Smiley feliz

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

MFelix

En respuesta a Sean

Sí, gracias por señalarlo.

Con suerte, una de nuestras respuestas ayudará.

Stuznet

En respuesta a MFelix

@MFelix @Sean ustedes dos son estrellas de rock. Probé ambas fórmulas Nested IF y Switch y creo que iré con la función Switch, pero cuando comparé la nueva columna calculada «Switch Formula» con mis datos originales Estado 2, no obtengo el resultado correcto.

Capture.PNG

Deja un comentario

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