Tengo dos columnas A y B, ambas columnas contienen texto y, a veces, texto y números.
Me gustaría generar una nueva columna de cálculo usando DAX basado en la columna A y B con las reglas mencionadas a continuación.
Si la columna A es igual a DNK y B es igual a Apple, entonces el resultado es correcto
Si la columna A es igual a DNK y B no es igual a Apple, el resultado no es correcto
Si la columna A es igual a DNK y B es NA, el resultado es XX.
DNK espera tres resultados diferentes basados en las columnas A y B con múltiples escenarios y lo mismo para ADNK y BJB.
Si la columna A es igual a ADNK y B es igual a Orange, entonces el resultado es correcto
Si la columna A es igual a ADNK y B no es igual a Orange, el resultado no es correcto
Si la columna A es igual a ADNK y B es NA, el resultado es XX.
Si la columna A es igual a BJB y B es igual a Apple1, entonces el resultado es correcto
Si la columna A es igual a BJB y B no es igual a Apple1, el resultado no es correcto
Si la columna A es igual a BJB y B es NA, el resultado es XX.
AB RESULT DNK APPLE OK DNK APPLE OK DNK ORANGE NOT OK DNK ORANGE NOT OK DNK APPLE OK DNK APPLE OK DNK NA XX DNK NA XX ADNK ORANGE OK ADNK ORANGE OK ADNK ORANGE OK ADNK ORANGE OK ADNK NA XX ADNK APPLE NOT OK ADNK APPLE NOT OK BJB APPLE1 OK BJB ORANGE1 NOT OK BJB APPLE1 OK BJB ORANGE1 NOT OK BJB APPLE1 OK BJB APPLE1 OK BJB NA XX BJB NA XX BJB ORANGE1 NOT OK BJB APPLE1 OKEn base a lo que pediste, puedes lograrlo de dos formas
una. optimizando SWITCH como sigue
desiredColumn1 = SWITCH ( TRUE (), [A] <> BLANK () && [B] = "NA", "XX", [A]="DNK"&&[B]="Apple"||[A]="ADNK"&&[B]="Orange"||[A]="BJB"&&[B]="Apple1","ok", "not ok" )b. construyendo una tabla de lista blanca e iterando eso en el hecho
desiredColumn2 = VAR _whiteList = DATATABLE ( "a1", STRING, "b1", STRING, "c1", STRING, { { "DNK", "Apple", "ok" }, { "DNK", "NA", "XX" }, { "ADNK", "Orange", "ok" }, { "ADNK", "NA", "XX" }, { "BJB", "Apple1", "ok" }, { "BJB", "NA", "XX" } } ) VAR _fromList = MAXX ( FILTER ( _whiteList, [a1] = EARLIER ( 'Table'[A] ) && [b1] = EARLIER ( 'Table'[B] ) ), [c1] ) RETURN IF ( _fromList = BLANK (), "not ok", _fromList )