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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Extracción de pares clave/valor de json

Hola Comunidad,

Estoy leyendo algunos datos de una tabla en Big Query y una de las columnas es una columna anidada que se extrae en PQ en formato JSON como este:

{"v":[{"v":{"f":[{"v":"MANUFACTURER"},{"v":"DUMMY GROUP"}]}},{"v":{"f":[{"v":"OPRINDELSESLAND"},{"v":"EUROPA"}]}},{"v":{"f":[{"v":"LØSVÆGT"},{"v":"FALSE"}]}},{"v":{"f":[{"v":"INSERTID"},{"v":"D8A2CEE5-7278-40F0-AFCD-21A9B3D0E12B"}]}}]}


Estos son pares clave/valor y estoy tratando de extraerlos en dos columnas separadas.

Puedo analizar el col como JSON y luego expandir record -> unpack list un montón de veces y termino con una larga lista de claves y valores, pero no puedo encontrar la manera de obtenerlo como columnas separadas.

Aquí está mi editor avanzado:

let
    Source = GoogleBigQuery.Database(),
    database = Source{[Name=#"project"]}[Data],
    PBI_Schema = database{[Name="anonName",Kind="Schema"]}[Data],
    DimProduct_Table1 = PBI_Schema{[Name="anonName2",Kind="Table"]}[Data],
    #"Removed Other Columns" = Table.SelectColumns(DimProduct_Table1,{"Id", "Metadata"}),
    #"Parsed JSON" = Table.TransformColumns(#"Removed Other Columns",{{"Metadata", Json.Document}}),
    #"Expanded Metadata" = Table.ExpandRecordColumn(#"Parsed JSON", "Metadata", {"v"}, {"v"}),
    #"Expanded v" = Table.ExpandListColumn(#"Expanded Metadata", "v"),
    #"Expanded v1" = Table.ExpandRecordColumn(#"Expanded v", "v", {"v"}, {"v.1"}),
    #"Expanded v.1" = Table.ExpandRecordColumn(#"Expanded v1", "v.1", {"f"}, {"f"}),
    #"Expanded f" = Table.ExpandListColumn(#"Expanded v.1", "f"),
    #"Expanded f1" = Table.ExpandRecordColumn(#"Expanded f", "f", {"v"}, {"v"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded f1", each ([v] <> null))
in
    #"Filtered Rows"



2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Una vez que llegue al último nivel de la lista, que tiene la clave como un registro y el valor como otro, puede crear 2 nuevas columnas, una para tomar cada registro y luego expandir los registros.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wqo5RKotRsoqG0kAqDYkbo+Tr6Bfq5ugcEhrkGhSjVKsDl3AJ9fWNVHAP8g8NAIrH1sKlMIzwDwjy9HNx9Ql2DfZx9HNBMcU1NMg/wJGAAT6HZwSHHW5zD0HR6uYINJGATk+/YNegEE9UO10sHI2cXV1Ndc2NzC10TQzcDHQd3ZxddI0MHS2djF0MXA2NnCDmxtYqxcYCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Parsed JSON" = Table.TransformColumns(#"Changed Type",{},Json.Document),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Parsed JSON", "Column1", {"v"}, {"Column1.v"}),
    #"Expanded Column1.v" = Table.ExpandListColumn(#"Expanded Column1", "Column1.v"),
    #"Expanded Column1.v1" = Table.ExpandRecordColumn(#"Expanded Column1.v", "Column1.v", {"v"}, {"Column1.v.v"}),
    #"Expanded Column1.v.v" = Table.ExpandRecordColumn(#"Expanded Column1.v1", "Column1.v.v", {"f"}, {"Column1.v.v.f"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Column1.v.v", "key", each [Column1.v.v.f]{0}),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Value", each [Column1.v.v.f]{1}),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"Column1.v.v.f"}),
    #"Expanded key" = Table.ExpandRecordColumn(#"Removed Columns", "key", {"v"}, {"key"}),
    #"Expanded Value" = Table.ExpandRecordColumn(#"Expanded key", "Value", {"v"}, {"value"})
in
    #"Expanded Value"

Gracias por su respuesta.

De hecho, terminé resolviéndolo usando la función BQ TO_JSON_STRING() al leer el col de db. Esto funcionó como un encanto, pero también probaré su solución, aunque solo sea para aprender cómo en otro momento.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

Check out the May 2024 Power BI update to learn about new features.