SarWal
Hola, estoy tratando de dividir «Nombre» en «Nombre» y «Apellido». ¿Cómo hago esto?
Encontré la función DAX «izquierda», pero debe proporcionar un recuento de caracteres para dividir, en lugar de un carácter para dividir, también conocido como espacio en este caso. También probé:
First Name = LEFT( 'Table1'[Name], SEARCH(" ", 'Table1'[Name], 0, LEN('Table1'[Name]) ) )
¡Gracias de antemano por su ayuda!
v-qiuyu-msft
Hola @SarWal,
En su escenario, como desea dividir una columna en función del espacio en lugar de un carácter, debe reemplazar el espacio con una función SUSTITUIR () de uso de carácter, luego dividir el valor usar la función Buscar (). Consulte las capturas de pantalla a continuación:
Nombre = IZQUIERDA(SUSTITUIR(Tabla1[Name],» «,»-«),BUSCAR(«-«,SUSTITUIR(Tabla1[Name],» «,»-«))-1)
Apellido = DERECHO(SUSTITUTO(Tabla1[Name],» «,»-«),LARGO(SUSTITUIR(Tabla1[Name],» «,»-«))-BUSCAR(«-«,SUSTITUIR(Tabla1[Name],» «,»-«)))
Si tiene alguna pregunta, no dude en preguntar.
Atentamente,
qiuyun yu
TimMarsh
Soy un principiante de DAX, por lo que esta es probablemente una forma ineficiente de hacer esto.
Método suponiendo que tiene un delimitador como ,. Suponga que el esquema es LNAME, FNAME (cambie los nombres de las columnas a continuación para que se adapten)
1. Encuentra la posición de la coma, luego resta uno. Esa es la longitud de LNAME.
2. Recorte desde la posición inicial izquierda 1 el número anterior.
=TRIM(
//trim from left, the number of chars in FIND
LEFT(Table,
//this find finds the comma position from the start char on left, then subtracts one for last name length
FIND(",",Table[NameCol],1)-1))
3. Encuentra Len de nombre completo (por ejemplo, LNAME, FNAME), resta 1 para la coma (aprendí que los espacios no se cuentan al hacer este ejercicio).
4. Resta el nombre completo de Len-1 del apellido de Len para obtener FNAME Len
5. Recorte a la derecha en esa lente
=TRIM(
//trim from right the name col,
RIGHT(Table[NameCol],
//the length of whole name
LEN(Table[NameCol])
//minus the length of the last name
-(FIND(",",Table[NameCol],1))-1)
//to get the first name
)
Construí esta lógica en unas pocas columnas para determinar la longitud de las cadenas, la posición de la coma, etc.
fsfmendonca
Nombre = PATHITEM(SUSTITUTO(‘fTable'[FullName];» «;»|»);1)
Apellido = PATHITEMREVERSE(SUSTITUTO(‘fMesa‘[FullName];» «;»|»);1)
geddadac
En respuesta a fsfmendonca
=PATHITEMREVERSE(SUSTITUTO(Rendimiento[Performance Review Rating],»-«,»|»),1)
muchas gracias gurú
v-qiuyu-msft
Hola @SarWal,
En su escenario, como desea dividir una columna en función del espacio en lugar de un carácter, debe reemplazar el espacio con una función SUSTITUIR () de uso de carácter, luego dividir el valor usar la función Buscar (). Consulte las capturas de pantalla a continuación:
Nombre = IZQUIERDA(SUSTITUIR(Tabla1[Name],» «,»-«),BUSCAR(«-«,SUSTITUIR(Tabla1[Name],» «,»-«))-1)
Apellido = DERECHO(SUSTITUTO(Tabla1[Name],» «,»-«),LARGO(SUSTITUIR(Tabla1[Name],» «,»-«))-BUSCAR(«-«,SUSTITUIR(Tabla1[Name],» «,»-«)))
Si tiene alguna pregunta, no dude en preguntar.
Atentamente,
qiuyun yu
chang
En respuesta a v-qiuyu-msft
Hola,
Tu solución es excelente y útil para mí. ¿Tiene alguna idea si hay un primer y segundo apellido de alguien y solo desea obtener el apellido?
Por ejemplo, si hay un texto llamado «John George Washington Bosh Wang» y solo quieres sacar el Wang, ¿tienes alguna idea?
Anónimo
En respuesta a chang
Una solución elegante para navegar por los delimitadores en Vertipaq es aprovechar las funciones PATHITEM() y PATHLENGTH() mediante SUBSTITUTE().
Por ejemplo, si su delimitador fuera «.» y quería devolver «Simon» (el sexto elemento) de «Hello.Friend.My.Name.Is.Simon.Nuss»:
PATHITEM( SUBSTITUTE( [Column1], ".", "|" ), 6 )
Si desea devolver la última aparición, es decir, «Nuss», puede realizar:
Result = VAR Nodes = SUBSTITUTE( [Column1], ".", "|" ) RETURN PATHITEM( Nodes, PATHLENGTH( Nodes ) )
Si desea devolver la tercera última ocurrencia, es decir, «Es», puede realizar:
Result = VAR Nodes = SUBSTITUTE( [Column1], ".", "|" ) RETURN PATHITEM( Nodes, PATHLENGTH( Nodes ) - 3 )
¡Buena suerte!
Simón
amtanner
En respuesta a v-qiuyu-msft
Hola @v-qiuyu-msft,
Estoy tratando de lograr lo mismo que se menciona en la publicación inicial; sin embargo, tengo problemas con la fórmula que proporcionó en torno a la función de BÚSQUEDA. Aparece un mensaje de error que dice: «El texto de búsqueda proporcionado para la función ‘BUSCAR’ no se pudo encontrar en el texto dado». Aquí hay un ejemplo:
La descripción del artículo es «NOMBRE DEL PRODUCTO DE LA EMPRESA» y necesito dividirlo en dos columnas separadas que lean la columna n.º 1 «EMPRESA» y la columna n.º 2 «NOMBRE DEL PRODUCTO». La fórmula que estoy usando es:
Tipo de módulo = DERECHO (SUSTITUTO (WFR_New_Module_View[Item Description],»»,»-«),LEN(SUSTITUIR(WFR_New_Module_View[Item Description],»»,»-«))-BUSCAR(«-«,SUSTITUIR(WFR_New_Module_View[Item Description]»,»-«)))
¿Alguna idea de por qué esto no funciona?
Vvelarde
En respuesta a amtanner
@amtanner
El La columna NOMBRE DEL PRODUCTO DE LA EMPRESA tiene un «-» ?. El error que indica es que no puedo encontrar esto – en su columna
mateoc15
En respuesta a Vvelarde
Tuve que hacer un if/else por alguna razón.
SI(el valor contiene «:», mid(el valor, «:»), «»)
De lo contrario, vomitó como lo describiste.
amtanner
En respuesta a Vvelarde
@Vvelarde Lo tengo, eso tiene sentido. Entonces digamos que, usando el mismo ejemplo, tLa descripción del artículo es «NOMBRE DE LA COMPAÑÍA NOMBRE DEL PRODUCTO» y necesito dividirlo en dos columnas separadas que lean la columna n.º 1 «NOMBRE DE LA COMPAÑÍA» y la columna n.º 2 «NOMBRE DEL PRODUCTO». En este momento, la fórmula funciona con la solución que sugirió, pero la está dividiendo para que la columna n. ° 1 lea «COMPAÑÍA» y la columna n. ° 2 lea «NOMBRE NOMBRE DEL PRODUCTO». Esperemos que eso tenga sentido.
Vvelarde
En respuesta a amtanner
@amtanner
Debe comenzar a buscar después de encontrar el primer espacio:
BUSCAR(» «,columna,BUSCAR(» «;columna)+1)
amtanner
En respuesta a Vvelarde
@Vvelarde
Aquí está la cadena actual que estoy usando:
Tipo de módulo = DERECHO (SUSTITUTO (WFR_New_Module_View[Item Description],»»,» «),LEN(SUSTITUIR(WFR_New_Module_View[Item Description],»»,» «)) – BUSCAR(» «,SUSTITUIR(WFR_New_Module_View[Item Description],»»,» «)))
Con esta cadena, tomará el texto «FUERZA DE TRABAJO HORARIO LISTO» y lo transformará en la columna n.º 1 «FUERZA DE TRABAJO» y la columna n.º 2 «HORARIO DE LISTA».
Dada su sugerencia, ¿dónde estaría la cadena revisada? BUSCAR(» «,columna,BUSCAR(» «;columna)+1) cabe en la cadena anterior?
Lo he intentado: Tipo de módulo = DERECHO (SUSTITUTO (WFR_New_Module_View[Item Description],»»,» «),LEN(SUSTITUIR(WFR_New_Module_View[Item Description],»»,» «)) – BUSCAR(» «,columna,BUSCAR(» «;columna)+1)))
… pero recibo un mensaje de error. ¿Pensamientos?
Vvelarde
En respuesta a amtanner
hola @amtanner
Reemplazar
BUSCAR(» «,columna,BUSCAR(» «;columna)+1
a
BUSCAR(» «,WFR_New_Module_View[Item Description],BUSCAR(» «;WFR_New_Module_View[Item Description])+1
amtanner
En respuesta a Vvelarde
@Vvelarde ¡Gracias!
cantor
¿Ha considerado hacer esto en el Editor de consultas? Puede simplemente seleccionar la columna, seleccionar la columna dividida de la cinta y elegir dividir por delimitador. Luego seleccione el espacio.
Creará dos nuevas columnas.