Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
5 years ago
Solved

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! 🙂

4 Replies

  • @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

    https://youtu.be/mZt0HJw4gjQ

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      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_Admin's avatar
        Syndicate_Admin
        Administrator

        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

  • No @avargas-- ,

    ¿Esto podría funcionar?

    _newField =
    SWITCH(
      TRUE(),
      CONTAINSSTRING(table1[Category], "Hair"), "Hair",
      CONTAINSSTRING(table1[Category], "Skin"), "Skin",
      ...
    )