Ordenar el número dentro de una celda separada por comas

Un usuario Pregunto ✅

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»

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),","))

7.PNG

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:

ImkeF_0-1627581533696.png

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.

FMC_0-1635767334132.png

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),","))

7.PNG

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»

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *