¿Equivalente DAX condicional de M?

Un usuario Pregunto ✅

Anónimo

Hola, estoy tratando de obtener el equivalente del siguiente código M en DAX.

METRO:

if Text.Contains(Text.Lower([prod_name]),"purple") then "purple" else if Text.Contains(Text.Lower([prod_name]),"black") then "black" else if Text.Contains(Text.Lower([prod_name]),"white") then "white" else if Text.Contains(Text.Lower([prod_name]),"green") then "green"
else if Text.Contains(Text.Lower([prod_name]),"yellow") then "green" else if Text.Contains(Text.Lower([prod_name]),"blue") then "Blue" else if Text.Contains(Text.Lower([prod_name]),"red") then "Red" else Null.Type

Intenté esto en DAX pero solo imprime la condición final

DAX:

Flavors = if(CONTAINS(table,table[prod_name],"purple"),"purple",IF(CONTAINS(table,table[prod_name],"black"),"black",IF(CONTAINS(table,table[prod_name],"white"),"white",if(CONTAINS(table,table[prod_name],"yellow",table[prod_name],"green"),"green",if(CONTAINS(table,v[prod_name],"red"),"Red","Blue")))))

¿Alguna idea de cómo podría hacer esto? ¡Gracias!

Anónimo

Esto funcionó

Flavors = SWITCH(
    TRUE(),
    ISERROR( FIND("purple", table[prod_name]))<> TRUE(), "purple",
    ISERROR( FIND("white", table[prod_name]))<> TRUE(), "white",
    ISERROR( FIND("black", table[prod_name]))<> TRUE(), "black",
    ISERROR( FIND("yellow", table[prod_name]))<> TRUE(), "green",
    ISERROR( FIND("green", table[prod_name]))<> TRUE(), "green",
    ISERROR( FIND("blue", table[prod_name]))<> TRUE(), "Blue",
    ISERROR( FIND("red", table[prod_name]))<> TRUE(), "Red",""
)

Karlos

En respuesta a Anónimo

Lo siguiente también habría funcionado.
Asegúrese de aceptar una solución para cerrar el tema.

Column 2 =
IF (
    CONTAINSSTRING ( 'Table (2)'[prod_name], "purple" ),
    "purple",
    IF (
        CONTAINSSTRING ( 'Table (2)'[prod_name], "black" ),
        "black",
        IF (
            CONTAINSSTRING ( 'Table (2)'[prod_name], "white" ),
            "white",
            IF (
                CONTAINSSTRING ( 'Table (2)'[prod_name], "green" ),
                "green",
                IF (
                    CONTAINSSTRING ( 'Table (2)'[prod_name], "yellow" ),
                    "green",
                    IF (
                        CONTAINSSTRING ( 'Table (2)'[prod_name], "blue" ),
                        "Blue",
                        IF ( CONTAINSSTRING ( 'Table (2)'[prod_name], "red" ), "Red", "null" )
                    )
                )
            )
        )
    )
)

Anónimo

Esto funcionó

Flavors = SWITCH(
    TRUE(),
    ISERROR( FIND("purple", table[prod_name]))<> TRUE(), "purple",
    ISERROR( FIND("white", table[prod_name]))<> TRUE(), "white",
    ISERROR( FIND("black", table[prod_name]))<> TRUE(), "black",
    ISERROR( FIND("yellow", table[prod_name]))<> TRUE(), "green",
    ISERROR( FIND("green", table[prod_name]))<> TRUE(), "green",
    ISERROR( FIND("blue", table[prod_name]))<> TRUE(), "Blue",
    ISERROR( FIND("red", table[prod_name]))<> TRUE(), "Red",""
)

Karlos

En respuesta a Anónimo

Lo siguiente también habría funcionado.
Asegúrese de aceptar una solución para cerrar el tema.

Column 2 =
IF (
    CONTAINSSTRING ( 'Table (2)'[prod_name], "purple" ),
    "purple",
    IF (
        CONTAINSSTRING ( 'Table (2)'[prod_name], "black" ),
        "black",
        IF (
            CONTAINSSTRING ( 'Table (2)'[prod_name], "white" ),
            "white",
            IF (
                CONTAINSSTRING ( 'Table (2)'[prod_name], "green" ),
                "green",
                IF (
                    CONTAINSSTRING ( 'Table (2)'[prod_name], "yellow" ),
                    "green",
                    IF (
                        CONTAINSSTRING ( 'Table (2)'[prod_name], "blue" ),
                        "Blue",
                        IF ( CONTAINSSTRING ( 'Table (2)'[prod_name], "red" ), "Red", "null" )
                    )
                )
            )
        )
    )
)

Karlos

Prueba la función de cambio

https://docs.microsoft.com/en-us/dax/switch-function-dax

Algo parecido a

Column = SWITCH([prod_name], 
"purple", "purple",
"black", "black",
"white", "white",
"green", "green",
"yellow", "green",
"blue", "Blue",
"red", "Red",
"null")

Anónimo

En respuesta a Karlos

@Karlos ¿El valor tiene que ser un número, porque esto solo devuelve la condición «else»?

Karlos

En respuesta a Anónimo

Deberia trabajar

Karlos_0-1596115393958.png

Column = SWITCH([prod_name], 
"purple", "purple",
"black", "black",
"white", "white",
"green", "green",
"yellow", "green",
"blue", "Blue",
"red", "Red",
"null")

Anónimo

En respuesta a Karlos

@Karlos Oh ok, creo que esto no funciona en mi caso porque hay varios detalles en el [prod_name] columna, por lo que en lugar de púrpura dirá «púrpura (S)» o «púrpura[M]». ¿Hay alguna forma de integrar CONTAINS?

Karlos

En respuesta a Karlos

Es importante tener en cuenta que TODO distingue entre mayúsculas y minúsculas + incluirá los espacios iniciales o finales. por ejemplo

«negro» NO es igual a «negro» o «negro» o «negro», etc.

Deja un comentario

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