Sherville
¡Hola tios! Solo quiero saber si hay alguna forma de ordenar un valor dentro de una celda que esté separada por comas.
Como por ejemplo, mi columna tiene un valor de 4,5,2,3,7,8,6,1
¿Hay alguna forma de que pueda ordenar esto y convertirlo en 1,2,3,4,5,6,7,8 o al revés como 8,7,6,5,4,3,2,1?
¡Gracias! Espero que alguien pueda ayudarme con esto.
Greg_Deckler
Puede hacerlo en el Editor de consultas:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtEx1THSMdYx17HQMdMxVIqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]), #"Added Custom" = Table.AddColumn(Source, "Custom", each List.Sort(List.RemoveItems(Text.ToList([Column1]),{","}))), #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}) in #"Extracted Values"
Para invertir la ordenación, utilice el segundo parámetro opcional para su List.Sort «, Order.Descending»
v-shex-msft
Hola @sherville,
Para su escenario, creo que puede agregar una columna personalizada con ‘Text.Split’, ‘List.Sort’, ‘Text.Combine’ para lograr su requisito.
Muestra:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Descending),",")) #"Added Custom1" = Table.AddColumn(#"Added Custom", "Sort ASC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Ascending),","))
Consulta completa:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQx1THSMdMx17HQMVCK1YlWstQx0TEG8sDiSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Value = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Descending),",")), #"Added Custom1" = Table.AddColumn(#"Added Custom", "Sort ASC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Ascending),",")) in #"Added Custom1"
Función | Descripción |
---|---|
List.Sort | Devuelve una lista ordenada utilizando un criterio de comparación. |
Text.Combine | Devuelve un valor de texto que es el resultado de unir todos los valores de texto con cada valor separado por un separador. |
Text.Split | Devuelve una lista que contiene partes de un valor de texto que están delimitadas por un valor de texto separador. |
Saludos,
Xiaoxin Sheng
ImkeF
En caso de que desee ordenar números con más de 1 dígito, se necesita la transformación a número (para la clasificación) y luego volver al texto (para volver a combinar en un campo):
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjTQMTTVMdIx0zHXsdAxUIrVAYpZ6hiZ6BgaAwXAUkqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Transform(List.Sort(List.Transform(Text.Split([Value],","), Number.From),Order.Descending), Text.From),","))
in
#"Added Custom"
jorgheo
En respuesta a ImkeF
Hola Imke,
Perdón por la pregunta, pero soy nuevo en esto.
Necesito aplicar este script pero no sé cómo. ¿Podría informarme o consultar otra publicación en la que pueda aprender a ejecutar esto en power bi?
Gracias por adelantado,
Jorge
ImkeF
En respuesta a jorgheo
Hola jorge
por favor haga clic en el enlace en mi firma para el video-tutorial:
FMC
En respuesta a ImkeF
Cómo convertir el texto de una columna de «zzz abc | aaa abc» a columna personalizada «aaa abc | zzz abc» ?
Estoy usando el siguiente código
let
Source = Table.FromRows([ResultDetails], let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Transform(List.Sort(List.Transform(Text.Split([Value],"|"), Number.From),Order.Descending), Text.From),"|"))
in
#"Added Custom"
Pero recibo el siguiente error.
v-shex-msft
Hola @sherville,
Para su escenario, creo que puede agregar una columna personalizada con ‘Text.Split’, ‘List.Sort’, ‘Text.Combine’ para lograr su requisito.
Muestra:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Descending),",")) #"Added Custom1" = Table.AddColumn(#"Added Custom", "Sort ASC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Ascending),","))
Consulta completa:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQx1THSMdMx17HQMVCK1YlWstQx0TEG8sDiSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Value = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Sort DESC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Descending),",")), #"Added Custom1" = Table.AddColumn(#"Added Custom", "Sort ASC", each Text.Combine(List.Sort(Text.Split([Value],","),Order.Ascending),",")) in #"Added Custom1"
Función | Descripción |
---|---|
List.Sort | Devuelve una lista ordenada utilizando un criterio de comparación. |
Text.Combine | Devuelve un valor de texto que es el resultado de unir todos los valores de texto con cada valor separado por un separador. |
Text.Split | Devuelve una lista que contiene partes de un valor de texto que están delimitadas por un valor de texto separador. |
Saludos,
Xiaoxin Sheng
Greg_Deckler
Puede hacerlo en el Editor de consultas:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtEx1THSMdYx17HQMdMxVIqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]), #"Added Custom" = Table.AddColumn(Source, "Custom", each List.Sort(List.RemoveItems(Text.ToList([Column1]),{","}))), #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}) in #"Extracted Values"
Para invertir la ordenación, utilice el segundo parámetro opcional para su List.Sort «, Order.Descending»