Anónimo
Hola a todos,
Tengo JSON que contiene una representación de objetos de la tabla de registros.
El objeto JSON tiene dos propiedades, «campos» y «resultados».
La propiedad «fields» contiene una matriz de objetos que definen la lista de columnas y su tipo de datos
La propiedad «resultados» contiene registros, cada uno de los cuales consta de una matriz de valores correspondientes a las columnas en la matriz «campos».
{
"fields": [
{
"field": "field1",
"type": "string"
},
{
"field": "field2",
"type": "string"
},
{
"field": "field3",
"type": "integer"
},
{
"field": "eventTimestamp",
"type": "date"
}
],
"results": [
[
"field1value1",
"field2value1",
10,
"2018-05-31T22:55:31.187+0000"
],
[
"field1value2",
"field2value2",
20,
"2018-05-31T22:55:31.187+0000"
],
[
"field1value3",
"field2value3",
30,
"2018-05-31T22:55:31.187+0000"
]
]
}
Mi objetivo es analizar estos datos en un conjunto de datos con esa forma con la siguiente tabla:
field1 field2 field3 eventTimestamp field1value1 field2value1 10 2018-05-31T22:55:31.187+0000 field1value2 field2value2 20 2018-05-31T22:55:31.187+0000 field1value3 field2value3 30 2018-05-31T22:55:31.187+0000
Puedo expandir la tabla de «campos» sin ningún problema:
let Source = Json.Document(File.Contents("C:testTestJSON.json")), fields = Source[fields], #"Converted to Table" = Table.FromList(fields, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"label", "field", "type"}, {"label", "field", "type"}) in #"Expanded Column1"
Sin embargo, no estoy seguro de cómo expandir la matriz de valores en la tabla con las columnas.
puedo hacer Table.TransformColumns:
let Source = Json.Document(File.Contents("C:testTestJSON.json")), results = Source[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From)), type text}) in #"Extracted Values"
… y produce una sola columna con valores unidos:
yo también puedo hacer Tabla.ExpandListColumn:
let Source = Json.Document(File.Contents("C:testTestJSON.json")), results = Source[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandListColumn(#"Converted to Table", "Column1") in #"Expanded Column1"
pero produce varias filas para una sola columna, una para cada registro:
Lo que realmente quiero es crear varias columnas a partir de valores.
Si estuviera escribiendo esto en C #, crearía una tabla con columnas de «campos», y luego recorrería los objetos en la matriz de «resultados», y cargaría una tabla con columnas por posición.
Mi M no es muy bueno todavía. ¿Cómo puedo hacer esto aquí?
¡Gracias!
Daniel
v-shex-msft
Hola @Anonimo,
Puede consultar la muestra a continuación para convertir los datos de origen. (Adjunto el archivo de muestra a continuación)
Saludos,
Xiaoxin-sheng
v-shex-msft
Hola @Anonimo,
Puede consultar la muestra a continuación para convertir los datos de origen. (Adjunto el archivo de muestra a continuación)
Saludos,
Xiaoxin-sheng
Anónimo
En respuesta a v-shex-msft
Muchísimas gracias.
Muy interesante sobre el uso de «cada Table.Transpose» para crear una tabla a partir de la matriz de «valores».
Otra gran cosa nueva para mí es usar la función List.Zip para pasar la lista de nombres de columna de «campos» como entrada para nombres de columna para «valores».
Finalmente, me gusta la función personalizada para analizar el tipo de datos del valor en la lista de «valores» para usar como entrada para el tipo de datos de la columna.
¡Esto ayuda mucho!
Daniel