Eu tenho JSON no formato assim:
{
"data": [
{
"date": "2021-01-01",
"data": 10
},
{
"date": "2021-01-02",
"data": 20
},
{
"date": "2021-01-03",
"data": 30
}
]
}
Eu sou capaz de escrever este código que faz exatamente o que eu quero:
let
Source = Json.Document(...),
data = Source[data],
#"ToTable" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// Block 1 Start
Column1 = #"ToTable"{0}[Column1], //Gets Record from 1st "data" Array item
#"ToTable1" = Record.ToTable(Column1), //Create table with two columns (key, value)
#"Transpose1" = Table.Transpose(#"ToTable1"), //Transpose the table
#"Headers1" = Table.PromoteHeaders(#"Transpose1", [PromoteAllScalars=true]), //Get headers from the 1st row (key names)
#"ChangeType1" = Table.TransformColumnTypes(#"Headers1",{{"date", type date}, {"value", Int64.Type}, type any}}), //Change Type
// Block 1 End
// Block 2 Start
Column2 = #"ToTable"{1}[Column1], //Gets Record from 2nd "data" Array item
#"ToTable2" = Record.ToTable(Column2),
#"Transpose2" = Table.Transpose(#"ToTable2"),
#"Headers2" = Table.PromoteHeaders(#"Transpose2", [PromoteAllScalars=true]),
#"ChangeType2" = Table.TransformColumnTypes(#"Headers2",{{"date", type date}, {"value", Int64.Type}, type any}}),
// Block 2 End
// Block 3 Start
Column3 = #"ToTable"{2}[Column1], //Gets Record from 3rd "data" Array item
#"ToTable3" = Record.ToTable(Column3),
#"Transpose3" = Table.Transpose(#"ToTable3"),
#"Headers3" = Table.PromoteHeaders(#"Transpose3", [PromoteAllScalars=true]),
#"ChangeType3" = Table.TransformColumnTypes(#"Headers3",{{"date", type date}, {"value", Int64.Type}, type any}}),
// Block 3 End
TheTable = Table.Combine({ChangeType1, ChangeType2, ChangeType3}) //Combines tables together
in
TheTable
MAS
Isso tudo está OK para 3 itens no Array "data", não quando existem centenas deles.
Existe algum truque como repetir Code block
para cada linha em data[Column1]
, obter um List
de Tabelas (ChangeTypeX) para usar em Table.Combine
?
Vamos começar do começo
Agora temos
List
deRecord
s armazenados em#"ToTable1"[Column1]
. (Porque as colunas da tabela sãoList
s.)Assim, podemos usar a
List.Transform
função para manipular com cadaItem
umList
.A sintaxe é
Portanto, precisamos de alguma função de transformação que funcione com cada item da lista separadamente. Vamos modificar um bloco de código da pergunta original.
Assim, todo o
List.Tranform
código de função se parece comIsso retorna um
List
deTable
s que pode ser usado emTable.Combine
function .Coloque tudo junto
Parece que você deseja ter um resultado com duas colunas
date
edata
. Se for esse o caso, tudo o que você precisa fazer é expandir a tabela resultante da Etapa 3.Basta clicar na seta de duas pontas na parte superior da coluna
Código M
Resultado
Você também deve definir os tipos de dados depois de expandir as colunas