Forum Discussion
Sentencia CASE Complex en DAX
¡Hola! 🙂
Estoy tratando de "traducir" una declaración de caso compleja en DAX. He intentado 'Cambiar función' y está bien:
Nuevo campo : SWITCH (
VERDADERO (),
table1[CategorÃa] - "color de pelo", "LUXE",
table1[CategorÃa] - "cuidado del cabello", "LUXE",
table1[CategorÃa] - "estilo de pelo", "LUXE",
... etcetera
"Muy"
)
¿Cuál es el problema? Cuando dentro de la instrucción case tengo más opciones para la misma cadena:
Caso
CUANDO REGEXP_MATCH (Campo 1, ".*Color del cabello.*|. *Cuidado del cabello.*|. *Estilo de pelo.*") ENTONCES "Hair"
CUANDO REGEXP_MATCH (Campo 1, ".*Piel-Sol.*|. *Cara de piel.*|. *Piel-Cuerpo.*") ENTONCES "Piel"
... etcetera
ELSE "Otros"
Final
¿Cómo puedo traducir cada una de estas opciones: ".*Skin-Sun.*|. *Cara de piel.*|. *Piel-Cuerpo.*"|... etc" dentro de mi función Switch en DAX?
¡Muchas gracias de antemano! 🙂
@avargas-- , Usted puede probar como
Nuevo campo : SWITCH (
VERDADERO (),
table1[CategorÃa] en ("color de pelo","cuidado del cabello","estilo de pelo"), "LUXE",
"Muy"
)Pero si necesita buscar, entonces necesita usar la búsqueda, compruebe
4 Replies
- Syndicate_AdminAdministrator
@avargas-- , Usted puede probar como
Nuevo campo : SWITCH (
VERDADERO (),
table1[CategorÃa] en ("color de pelo","cuidado del cabello","estilo de pelo"), "LUXE",
"Muy"
)Pero si necesita buscar, entonces necesita usar la búsqueda, compruebe
- Syndicate_AdminAdministrator
Hola Amit,
Está lanzando un error de Operador o expresiones '()' no se suportó en este contexto.
Las maneras siguientes pueden sin embargo trabajar:
NEW_FIELD = CAMBIAR (
VERDADERO (),
CONTAINSSTRING(Tabla1[CategorÃa],"color de pelo"), "LUXE",
CONTAINSSTRING(Tabla1[CategorÃa],"cuidado del cabello"),"LUXE",
CONTAINSSTRING(Tabla1[CategorÃa],"estilo de pelo"), "LUXE"
)y
NEW_FIELD = CAMBIAR (
VERDADERO (),
CONTAINSSTRING(Tabla1[CategorÃa],"color de pelo")|| CONTAINSSTRING(Tabla1[CategorÃa],"cuidado del cabello")||
CONTAINSSTRING(Tabla1[CategorÃa],"estilo de pelo"), "LUXE"
)Pero me gustarÃa ver , si podemos dar varios valores en la declaración "IN" para evitar dar el nombre de la columna, usando la función CONTAINSSTRING una y otra vez, como funciona en Tableau mediante el sÃmbolo "|" y no es necesario dar el nombre de la columna repetidamente CUANDO REGEXP_MATCH (Campo 1, "*. Hair-Color.*|*. Hair-Care.*|. *Hair-Style.*") THEN "Hair"
- Syndicate_AdminAdministrator
Hola @6283710270 ,
Puede usar la respuesta de Amit, pero debe usar llaves (no paretheses estándar) alrededor de la lista 'IN', ya que es una lista. El cálculo de Amit actualizado se verÃa asÃ:
New field = SWITCH ( TRUE (), table1[Category] IN {"hair-color", "hair-care", "hair-style"}, "LUXE", table1[Category] IN {"Skin-Sun", "Skin-Face", "Skin-Body"}, "SKIN", "Other" )Ya sugerà la opción CONTAINSSTRING, pero el método de Amit, correctamente implementado, es mucho más eficaz, creo.
Pete
- Syndicate_AdminAdministrator
No @avargas-- ,
¿Esto podrÃa funcionar?
_newField = SWITCH( TRUE(), CONTAINSSTRING(table1[Category], "Hair"), "Hair", CONTAINSSTRING(table1[Category], "Skin"), "Skin", ... )