Syndicate_Admin
Hola
Tengo un escenario en el que necesito eliminar el cero a la izquierda entre la cadena, ¿Podría por favor mirar y resolver amablemente?
texto real
25-EX000250B-2A
7-LMC045600A-A000045B
256-Z00256-00021A
resultado esperado
25-EX250B-2A
7-LMC45600A-A45B
256-Z256-21A
Syndicate_Admin
@k_mathana, es posible que desee probar
let
fn = (txt as text) =>
let
#"First 0" = Text.PositionOf(txt, "0"),
#"Last Number" = Text.PositionOfAny(txt, {"0".."9"}, Occurrence.Last),
#"Dropped Leading 0" = if #"First 0" = -1 then txt else Text.Range(txt, 0, #"First 0") & Text.From(Number.From(Text.Remove(txt, {"A".."Z", "a".."z"}))) & Text.Range(txt, #"Last Number"+1)
in
#"Dropped Leading 0",
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Unprocessed = _t]),
#"Added Custom" = Table.AddColumn(Source, "Processed", each Text.Combine(List.Transform(Text.Split([Unprocessed], "-"), fn), "-"))
in
#"Added Custom"
Syndicate_Admin
@k_mathana – Veo @CNENFRNL ya ha respondido, pero había comenzado a trabajar en esto, así que pensé en publicar.
Este parece ser un enfoque similar.
la funcion fnRemoveLeadingZeros divide el texto siempre que hay una transición de no izquierda dígito a «0», luego recorta los ceros a la de las subcadenas resultantes y se une de nuevo.
let
fnRemoveLeadingZeros =
(string as text) =>
let
Split = Splitter.SplitTextByCharacterTransition ( each not List.Contains({"0".."9"},_), {"0"})(string),
TrimZeros = List.Transform(Split, each Text.TrimStart(_,"0") ),
Join = Text.Combine(TrimZeros)
in Join,
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Input = _t]),
AddOutput = Table.AddColumn(Source, "Output", each fnRemoveLeadingZeros([Input]), type text )
in
AddOutput
saludos
Owen
Syndicate_Admin
En respuesta a Syndicate_Admin
No hay @k_mathana
Claro, aquí hay un PBIX que contiene las consultas pero se divide para que la función sea independiente de los datos de origen.
- fnRemoveLeadingZeros es una funcion que toma una cadena de texto y elimina los ceros a la izquierda segun sus requisitos.
- ExcelFuente es una consulta que carga una tabla desde un archivo de Excel. Por el momento está apuntando a un archivo de Excel en mi unidad local.
- Tabla Final toma ExcelSource y agrega una columna mediante fnRemoveLeadingZeros.
En realidad, solo puede copiar la función fnRemoveLeadingZeros en Power Query en el archivo PBIX y utilizarla para agregar una columna que aplique esta función, utilizando Agregar columna > Invocar función personalizada.
Esperemos que eso ayude a aplicar la función en su escenario.
saludos
Owen
Syndicate_Admin
@k_mathana – Veo @CNENFRNL ya ha respondido, pero había comenzado a trabajar en esto, así que pensé en publicar.
Este parece ser un enfoque similar.
la funcion fnRemoveLeadingZeros divide el texto siempre que hay una transición de no izquierda dígito a «0», luego recorta los ceros a la de las subcadenas resultantes y se une de nuevo.
let
fnRemoveLeadingZeros =
(string as text) =>
let
Split = Splitter.SplitTextByCharacterTransition ( each not List.Contains({"0".."9"},_), {"0"})(string),
TrimZeros = List.Transform(Split, each Text.TrimStart(_,"0") ),
Join = Text.Combine(TrimZeros)
in Join,
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Input = _t]),
AddOutput = Table.AddColumn(Source, "Output", each fnRemoveLeadingZeros([Input]), type text )
in
AddOutput
saludos
Owen
Syndicate_Admin
En respuesta a Syndicate_Admin
Hola @OwenAuger,
Me encanta el enfoque de la función en línea.
Syndicate_Admin
En respuesta a Syndicate_Admin
Estimado @OwenAuger, Muchas gracias por la solución dada, Cuando intento aplicar esto en la tabla de Excel, estoy recibiendo algún error, ¿Podría guiarme amablemente cómo cambiar el origen a la tabla de Excel en lugar de Json Documen.
Syndicate_Admin
En respuesta a Syndicate_Admin
No hay @k_mathana
Claro, aquí hay un PBIX que contiene las consultas pero se divide para que la función sea independiente de los datos de origen.
- fnRemoveLeadingZeros es una funcion que toma una cadena de texto y elimina los ceros a la izquierda segun sus requisitos.
- ExcelFuente es una consulta que carga una tabla desde un archivo de Excel. Por el momento está apuntando a un archivo de Excel en mi unidad local.
- Tabla Final toma ExcelSource y agrega una columna mediante fnRemoveLeadingZeros.
En realidad, solo puede copiar la función fnRemoveLeadingZeros en Power Query en el archivo PBIX y utilizarla para agregar una columna que aplique esta función, utilizando Agregar columna > Invocar función personalizada.
Esperemos que eso ayude a aplicar la función en su escenario.
saludos
Owen
Syndicate_Admin
En respuesta a Syndicate_Admin
@OwenAuger Muchas gracias por su tiempo, apreturado.
Syndicate_Admin
@k_mathana, es posible que desee probar
let
fn = (txt as text) =>
let
#"First 0" = Text.PositionOf(txt, "0"),
#"Last Number" = Text.PositionOfAny(txt, {"0".."9"}, Occurrence.Last),
#"Dropped Leading 0" = if #"First 0" = -1 then txt else Text.Range(txt, 0, #"First 0") & Text.From(Number.From(Text.Remove(txt, {"A".."Z", "a".."z"}))) & Text.Range(txt, #"Last Number"+1)
in
#"Dropped Leading 0",
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Unprocessed = _t]),
#"Added Custom" = Table.AddColumn(Source, "Processed", each Text.Combine(List.Transform(Text.Split([Unprocessed], "-"), fn), "-"))
in
#"Added Custom"
Syndicate_Admin
En respuesta a Syndicate_Admin
Estimado @CNENFRNL,
Muchas gracias por la solución dada, estaba tratando de aplicar esto en la tabla de Excel, pero no podía hacer, ¿Cómo aplicaría esto en la tabla de Excel.