BASE DE CONOCIMIENTO

Extraer subcadenas delimitadas por caracteres de las cadenas


Publicado: 13 Dec 2013
Fecha de la última modificación: 11 Mar 2024

Pregunta

Extraer una cadena de caracteres delimitada por unos caracteres de inicio y final determinados entre una amplia cadena de caracteres.

Entorno

  • Tableau Desktop

Respuesta

Las siguientes instrucciones describen cómo extraer una subcadena de una amplia cadena de caracteres y se pueden consultar en el libro de trabajo adjunto.
  1. Seleccione Análisis > Crear campo calculado.
  2. En el cuadro de diálogo Campo calculado que aparece:
    • Asigne un nombre al campo calculado. En el libro de trabajo de ejemplo, el campo calculado se denomina Subcadena.
    • En el campo de fórmula, cree un campo calculado similar al siguiente:
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. Haga clic en Aceptar.
  4. Arrastre Subcadena al estante Filas.

Información adicional

  • Este cálculo no incluye los caracteres de identificación de la subcadena final. Para incluir los caracteres de identificación, elimine "+1" en los dos lugares en los que aparece en el cálculo anterior.
  • El comando IF que usa la condición CONTAINS([<Dimension>], '<Identifying Character 1>') filtra cualquier cadena que no contenga el primer carácter de identificación.Esto es necesario porque FIND() devolverá 0 si no se encuentra el carácter, que sigue siendo una posición inicial válida para MID().
  • "Identifying Character 1" (carácter de identificación 1) se encuentra al comienzo de la subcadena concreta.
  • "Identifying Character 2" (carácter de identificación 2) se encuentra al final de la subcadena concreta.
  • Al intentar encontrar la subcadena entre 2 instancias del mismo carácter (por ejemplo "perro" en la cadena "el *perro* es marrón"), use FINDNTH() en lugar de FIND() para la segunda instancia. Tendría este aspecto:
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
¿Fue de ayuda este artículo para resolver el problema?