FabrPrado
Hola buen dia para todos
Necesito más una ayuda:
Cómo extraer solo números de una columna
| columna que tengo | columna que necesito
No hay un valor predeterminado, los caracteres numéricos pueden estar en cualquier parte del texto.
TomMartens
Oye,
en el Editor de consultas agregue una columna personalizada y use esta fórmula
Text.Combine(List.RemoveNulls(List.Transform(Text.ToList([Column1]),each if Value.Is(Value.FromText(_), type number) then _ else null)))
reemplace Column1 con el nombre de su columna.
La idea, poner el texto de la columna de origen en una lista de caracteres, marcar cada carácter si es de tipo número, si es así conservarlo, de lo contrario omitir el carácter.
Quizás no sea tan obvio, pero es el patrón cómo lo haría la expresión regular.
Una pequeña foto de mi muestra
Saludos
Tomás
MKI_GPCG
En respuesta a TomMartens
MKI_GPCG
Estoy usando Power query en Power BI
@TomMartens
TomMartens
En respuesta a MKI_GPCG
Hola @MKI_GPCG,
proporcione un pbix que permita recrear el error, cargue el pbix en onedrive o dropbox y comparta el enlace.
Saludos,
Tomás
MKI_GPCG
En respuesta a TomMartens
@TomMartens
https://1drv.ms/u/s!AkW0uPpG3fk6km0GoVAbJBw_LiQ7?e=TGbQ1K
Por favor mira arriba
TomMartens
En respuesta a MKI_GPCG
Hola @MKI_GPCG,
también debe cargar el xlsx, ya que sin la fuente de datos no es posible hacer ninguna Power Query.
Considere agregar un parámetro al pbix que apunte al directorio donde se encuentra el xlsx y permita un ajuste más rápido a diferentes entornos: https://docs.microsoft.com/en-us/power-query/power-query-query -parámetros
Saludos,
Tomás
Anónimo
@FabrPrado escribió:
Hola buen dia para todos
Necesito más una ayuda:
Cómo extraer solo números de una columna
| columna que tengo | columna que necesito
No hay un valor predeterminado, los caracteres numéricos pueden estar en cualquier parte del texto.
Éste no aborda el punto decimal. Por otro lado, la otra solución lo hace.
TomMartens
Oye,
en el Editor de consultas agregue una columna personalizada y use esta fórmula
Text.Combine(List.RemoveNulls(List.Transform(Text.ToList([Column1]),each if Value.Is(Value.FromText(_), type number) then _ else null)))
reemplace Column1 con el nombre de su columna.
La idea, poner el texto de la columna de origen en una lista de caracteres, marcar cada carácter si es de tipo número, si es así conservarlo, de lo contrario omitir el carácter.
Quizás no sea tan obvio, pero es el patrón cómo lo haría la expresión regular.
Una pequeña foto de mi muestra
Saludos
Tomás
unishine247
En respuesta a TomMartens
Hola Tom,
Tu código funciona perfectamente. Sin embargo, ¿cómo puedo revisar su código para que haya un espacio entre 1 y 2 en la tercera fila para mostrar que hay otros textos entre estos 2 números en la celda original?
Text.Combine(List.RemoveNulls(List.Transform(Text.ToList([Column1]),each if Value.Is(Value.FromText(_), type number) then _ else null)))
aravindsampath
En respuesta a TomMartens
Hola Tom,
Gracias por este código, funcionó. pero tengo una pequeña extensión de esto.
Mis datos también tienen decimales, quiero decir
6
6.5 números
10,4 kilogramos, etc.
aquí estoy recibiendo
6
sesenta y cinco
104.
Cualquier ayuda para que el decimal se mantenga en la salida.
¿Alguien con alguna sugerencia? TIA.
TomMartens
En respuesta a aravindsampath
Hola @aravindsampath, tal vez quieras probar una simple transformación Dividir por delimitador
entonces
Tada
Ojalá sea esto lo que usted está buscando.
Saludos,
Tomás
aravindsampath
En respuesta a TomMartens
Gracias Tom por ayudarme.
Denle
En respuesta a TomMartens
Hola Tom,
Código muy útil que proporcionaste aquí. Sin embargo, ¿le sería posible enviar una versión DAX de esto?
Tengo dificultades para convertirlo de M a DAX.
Atentamente,
Denis
TomMartens
En respuesta a Denle
Hola @denle,
para crear una columna calculada, puede usar este DAX para extraer los números de una cadena:
a Column with only numbers =
var __string = 'Table'[The text]
var __stringLength = LEN( __string )
var thenumbers =
CONCATENATEX(
FILTER(
ADDCOLUMNS(
ADDCOLUMNS(
GENERATESERIES( 1 , __stringLength , 1 )
, "@char" , MID( __string , ''[Value] , 1 )
)
, "isnumber" , IF( ISERROR( VALUE( [@char] ) ) , 0 , 1 )
)
, [isnumber] = 1
)
, [@char]
)
return
thenumbers
Aquí hay una pequeña captura de pantalla:
Con suerte, esto proporciona lo que está buscando. Sin embargo, recomiendo extraer los números usando Power Query en lugar de DAX.
Saludos,
Tomás
MKI_GPCG
En respuesta a TomMartens
TomMartens
En respuesta a MKI_GPCG
Hola @MKI_GPCG,
debe tener en cuenta que mi solución solo se puede usar dentro de Power Query, ya que usa funciones M. Menciono esto porque hace referencia a DAX.
Describa con mucho más detalle dónde está intentando utilizar mi fórmula, proporcione capturas de pantalla
Saludos,
Tomás
MKI_GPCG
En respuesta a TomMartens
augustindelaf
En respuesta a TomMartens
¡Tu fórmula funciona perfectamente @TomMartens!
Gracias por compartir 😉
estupendo
FrancésPower
En respuesta a TomMartens
¡Funciona perfectamente!
muchas gracias
Giavo
En respuesta a TomMartens
Tom, esta es una gran solución, la probé y funcionó, pero en mi caso tengo un pequeño problema: los números contenidos en mi columna de texto son números DECIMAL y tu solución extrae los números y borra el «.» y da un número entero como resultado (por lo que 1.0.2.1 se devuelve como 1021). ¿Cómo sería posible mantener el formato original de los números?
JPNegro
En respuesta a Giavo
Giavo, prueba esto
Text.Select ([SourceColumn], {«0» .. «9», «.»})
Y una forma sencilla de extraer solo números de una columna sería Text.Select ([SourceColumn], {«0» .. «9»})
FabrPrado
En respuesta a TomMartens
Muy bien, funcionando;
Gracias, TomMartens
Mira como está mi tabla: