Estou usando o Power Query no Excel para Microsoft 365.
Eu tenho os seguintes dados de origem:
Estou tentando determinar as transformações necessárias para obter o seguinte resultado desejado:
Os dados de origem possuem uma hierarquia de dados nas células de Col2 . Gostaria de manter os dados no primeiro nível de hierarquia em Col2 e gostaria de criar colunas separadas ( Col2.1 , Col2.2 , ..., Col2.N ) para o segundo nível de hierarquia e subsequentes.
Os valores individuais na célula são separados por um avanço de linha ( #(lf) ), e o nível de hierarquia de um determinado valor é determinado pelo seu nível de recuo (cada nível de recuo é representado por três caracteres de espaço).
O pai de um determinado valor na hierarquia é determinado por ordem. Por exemplo, String1.2
está no segundo nível de recuo. Com base apenas no nível de indentação, ele poderia, portanto, ser colocado hierarquicamente em String1
ou String2
. Porém, como aparece antes String1
e depois String2
, deve ser colocado hierarquicamente abaixo String1
.
Observe que os nomes String * que escolhi são nomes higienizados e foram escolhidos para ilustrar o que estou tentando realizar. Meus dados reais não possuem prefixos iniciais previsíveis e não implicam uma hierarquia por seu conteúdo lexical. Portanto, a lógica de divisão não deve basear-se nos próprios valores. Deve basear-se apenas no nível de recuo de um valor e na ordem relativa a outros valores e seus níveis de recuo.
Aqui está o código da linguagem M que tenho até agora:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Col1", type text}, {"Col2", type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Col2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Col2")
in
#"Split Column by Delimiter"
Este código da linguagem M produz este resultado real:
Exemplos adicionais de dados de origem/resultados desejados são mostrados a seguir.
Que etapas aplicadas adicionais devo adicionar ao meu código da linguagem M para transformar os exemplos de dados de origem fornecidos nos resultados desejados mostrados acima?
Editado de acordo com suas declarações de problemas atualizadas.
Código M
Amostra de dados
Resultado