Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Convertir una lista en una tabla de varias columnas

Hola

Estoy usando AdGuardHome en casa como DNS, por extraño que parezca, no hay forma de exportar los datos de registro como una tabla sino como una lista, es por eso que estoy buscando la manera de convertir una lista (tabla de una sola columna) en una tabla de varias columnas.

Los datos exportados tienen el siguiente aspecto, donde las primeras 4 filas son los nombres de las futuras columnas de la tabla.

Hora

Pedir
Respuesta
Cliente
07:05:24
9/16/2024
proxy.myCia.com
Tipo: AAAA, DNS plano
Procesado
0,06 ms
10.26.32.43
MyNodeID
07:05:24
9/16/2024
proxy.myCia.com
Tipo: A, DNS simple
Procesado
0,06 ms
10.26.32.43
MyNodeID

El resultado debería ser algo como esto:

KelvinUceta_0-1726592074703.png

Cualquier ayuda es bienvenida

Thx

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

@KelvinUceta la primera línea que se muestra como JSON es solo una fila de entrada de datos manual, puede copiar la línea desde el origen en adelante y copiarla en su tabla real.

Claro, muchas gracias

Syndicate_Admin
Administrator
Administrator

Gracias por la preocupación de parry2k sobre este tema.

Hola, @KelvinUceta

Estaré encantado de ayudarte.

Tal vez puedas referirte a mi código M.
Abra Power BI Desktop-->seleccione transformar datos-->haga clic con el botón derecho en Nueva consulta en blanco en el panel Consultas->-seleccione Editor avanzado mientras copia el siguiente código M:

vfenlingmsft_0-1726821531418.png

vfenlingmsft_1-1726821643983.png

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCsnMTVWK1YlWCkotLE0tLoGyiwvy84ohEs45mal5EHFzKwNTKyMTMNtS39BM38gAyisoyq+o1MutdM5M1EvOzwWLhVQWpFopOAKBjkJATmJmnoKLXzBYJqAoPzm1uDg1Bcwz0DMwU8gtBrMNDfSMzPSMjfRMjMF830q//JRUTxfyraeG3bEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
    tolist = Table.ToList(Source),
    columnnames = List.FirstN(tolist,4),
    values = List.Range(tolist,4),
    IndexedList = List.Zip({values, List.Positions(values)}),
    AssignToSublist = (list, sublistCount) =>
        List.Transform(
            {0..sublistCount-1},
            each List.Select(list, (x) => Number.Mod(x{1}, sublistCount * 2) >= _ * 2 and Number.Mod(x{1}, sublistCount * 2) < (_ + 1) * 2)
        ),
    Result = List.Transform(AssignToSublist(IndexedList, 4), each List.Transform(_, each _{0}))
in
    Table.FromColumns(Result,columnnames)


Este es el resultado:

vfenlingmsft_2-1726821688113.png

Espero que mis sugerencias le den buenas ideas, si tiene más preguntas, aclare en una respuesta de seguimiento.
Saludos
Fen Ling,
Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Hola

Genial pero lo siento, estoy confundido, ¿cómo? Lo vi también en la solución @parry2k su fuente es un Json.Document? Entonces, primero necesito convertir los datos a .json?

De ahora necesito ejecutar esto con datos reales ... ¿Podría explicarme, por favor?

No lo entiendo.

Syndicate_Admin
Administrator
Administrator

@KelvinUceta la salida que mostró no corresponde a sus datos de muestra, de todos modos aquí está el código M, inicie una nueva consulta, haga clic en editor avanzado y pegue el código. Ajusta los datos para probarlo.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCsnMTVWK1YlWCkotLE0tLoGyiwvy84ohEs45mal5EHFzKwNTKyMTMNtS39BM38gAyisoyq+o1MutdM5M1EvOzwWLhVQWpFopOAKBjkJATmJmnoKLXzBYJqAoPzm1uDg1Bcwz0DMwU8gtBrMNDfSMzPSMjfRMjMF830q//JRUTxfyraeG3bEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 4, 1, Int64.Type),
    #"Added Group" = Table.AddColumn(#"Added Index", "Group", each if  Number.Mod([Index],4) = 0 then [Index] else null, Int64.Type 
),
    #"Filled Down" = Table.FillDown(#"Added Group",{"Group"}),
    #"Added Column Number" = Table.AddColumn(#"Filled Down", "Column Number", each [Index]-[Group], Int64.Type),
    #"Removed Columns" = Table.RemoveColumns(#"Added Column Number",{"Index"}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns", {{"Column Number", type text}}, "en-CA"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {{"Column Number", type text}}, "en-CA")[#"Column Number"]), "Column Number", "Column"),
    #"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Group"}),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Columns1", [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Time", type text}, {"Request", type text}, {"Response", type text}, {"Client", type text}})
in
    #"Changed Type1"

Hola @parry2k

Muchas gracias por esto, en realidad los datos se corresponden, vea la siguiente foto, el mayor problema que tengo es que hay 2 líneas para cada ocurrencia, por ejemplo, si tomamos "Tiempo" no es solo la hora sino también la fecha

KelvinUceta_1-1726633065625.png

Su consulta es un punto de partida sólido para mí, realmente lo agradezco.

Saluda

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors