¿JS como un comparador de igualdad estricto y flexible en DAX?

Un usuario Pregunto ✅

smpa01

Hola,

Basado en lo que descubrí aquí @https: //community.powerbi.com/t5/Desktop/DAX-to-return-seperate-values-for-0-and-BLANK/mp/1081709#M …

xs.PNG

testing if blank previous = IF([Value]=BLANK(),"true","false")

testing if blank now = IF([Value]==BLANK(),"true","false")

y gracias a

@harshnathani

@ruthpozuelo

¿DAX tiene el mismo JS como un comparador de igualdad estricto y flexible?

Capture.PNG

Greg_Deckler

Bueno, esto es extraño. Pensé que esto podría resolverse haciendo algo como:

Loose = 
    IF(
        ISERROR(IF([Column1]=[Column3],TRUE(),FALSE())),
        IF([Column1]+0=[Column2]+0,TRUE(),FALSE()),
        IF([Column1]=[Column3],TRUE(),FALSE())
    )

o

Strict = 
    IFERROR(
        IF([Column1]=[Column3],TRUE(),FALSE()),
        FALSE()
    )

Pero si las cosas están envueltas en declaraciones IFERROR o pruebas para ISERROR, aún obtiene el error de que los operadores de comparación DAX no admiten la comparación de enteros y texto. Entonces, eso parece un error …

Pero, podría implementarlos de esta manera:

Loose1 = 
    IF( (ISTEXT([Column1]) && ISNUMBER([Column2])) || (ISTEXT([Column2]) && ISNUMBER([Column1])),
        IF([Column1]+0 = [Column2]+0,TRUE(),FALSE()),
        IF([Column1] = [Column2],TRUE(),FALSE())
    )

Strict1 = 
    IF( (ISTEXT([Column1]) && ISNUMBER([Column3])) || (ISTEXT([Column3]) && ISNUMBER([Column1])),
        FALSE(),
        IF([Column1] = [Column2],TRUE(),FALSE())
    )

Greg_Deckler

Bueno, esto es extraño. Pensé que esto podría resolverse haciendo algo como:

Loose = 
    IF(
        ISERROR(IF([Column1]=[Column3],TRUE(),FALSE())),
        IF([Column1]+0=[Column2]+0,TRUE(),FALSE()),
        IF([Column1]=[Column3],TRUE(),FALSE())
    )

o

Strict = 
    IFERROR(
        IF([Column1]=[Column3],TRUE(),FALSE()),
        FALSE()
    )

Pero si las cosas están envueltas en declaraciones IFERROR o pruebas para ISERROR, aún obtiene el error de que los operadores de comparación DAX no admiten la comparación de enteros y texto. Entonces, eso parece un error …

Pero, podría implementarlos de esta manera:

Loose1 = 
    IF( (ISTEXT([Column1]) && ISNUMBER([Column2])) || (ISTEXT([Column2]) && ISNUMBER([Column1])),
        IF([Column1]+0 = [Column2]+0,TRUE(),FALSE()),
        IF([Column1] = [Column2],TRUE(),FALSE())
    )

Strict1 = 
    IF( (ISTEXT([Column1]) && ISNUMBER([Column3])) || (ISTEXT([Column3]) && ISNUMBER([Column1])),
        FALSE(),
        IF([Column1] = [Column2],TRUE(),FALSE())
    )

smpa01

En respuesta a Greg_Deckler

Hola @ Greg_Deckler,

Gracias, pusiste mucho trabajo en esto y yo aprendí mucho de aquí.

Mi experiencia trabajando con DAX me dice que la siguiente prueba

Entero = 1 no es igual a Texto = «1»

DAX considera BLANK () = 0, cuando estaba tratando de distinguir BLANK () de 0, no funcionó con = hasta que usé ==.

Me pregunto por qué DAX hizo eso como si DAX tuviera un comportamiento similar al de JS cuando pone 0 en su punto ciego mientras hace la comparación de calidad con = pero no con ==.

Greg_Deckler

En respuesta a smpa01

Sí, recientemente agregaron el operador == como en la versión de febrero o marzo, ha sido realmente reciente.

Greg_Deckler

En respuesta a Greg_Deckler

Publiqué esto en el foro de Problemas aquí: https: //community.powerbi.com/t5/Issues/IFERROR-and-ISERROR-do-not-work-with-comparisons-between-typ …

Deja un comentario

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