-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathExplodeTabelaDaColuna.txt
100 lines (80 loc) · 4.26 KB
/
ExplodeTabelaDaColuna.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
let
funcao =
// ------------------------------------------------------------------- INICIO DA FUNCAO -------------------------------------------------------------------
(
TabelaExplodir as table,
NomeColunaExplodir as text
) =>
try
let
NomeColunaExplodir = "det.imposto.ICMS",
Fonte = TabelaExplodir,
SelecionarSomenteColunaExplodir = Table.SelectColumns(Fonte,{NomeColunaExplodir}),
/*
Como cada futura utilização da formula vai mudar o nome da coluna
Usei essa técnica para não quebrar a formula
Com isso sembre que invocada, será "Column1"
*/
RebaixarCabecalhoPadronizarNome = Table.DemoteHeaders(SelecionarSomenteColunaExplodir),
RemoverExTitulo = Table.Skip(RebaixarCabecalhoPadronizarNome,1),
// Como cada linha tem uma subtabela, adicionamos uma coluna para pegar os nomes das colunas das "subtabelas"
ListaColunasNaTabela = Table.AddColumn(RemoverExTitulo, "NomesColunas", each Table.ColumnNames([Column1])),
// Unimos tudo em uma lista, com registros únicos, e aplicamos o Buffer para agiliar a consulta
NomesUnicosColunas =
List.Buffer(
List.Distinct(
Table.ExpandListColumn(
ListaColunasNaTabela,
"NomesColunas"
)[NomesColunas]
)
),
// adicionado o Nome da coluna explodir como prefixo
NomesUnicosColunas_ComPrefixo = List.Transform(NomesUnicosColunas, each NomeColunaExplodir &"."& _ ),
FonteExplodida =
Table.ExpandTableColumn(
Fonte,
NomeColunaExplodir,
NomesUnicosColunas,
NomesUnicosColunas_ComPrefixo
)
in
FonteExplodida
otherwise TabelaExplodir
// ------------------------------------------------------------------- FIM DA FUNCAO -------------------------------------------------------------------
, metadados = [
Documentation.Name = "ExplodeTabelaDaColuna",
Documentation.Description = "
by Joviano Silveira (www.joviano.com)
Se você tem uma tabela dentro de um registro, essa função vai pegar sua tabela e abrir essa coluna, explodindo as informações para N linhas",
Documentation.Examples = {
// exemplo 01
[
Description = "descricao do exemplo 1",
Code = "
| Cod | Descricao | Vendas |
| 001 | Alpha | table |
| 002 | Beta | table |
| 003 | Omega | table |
* obs: table = tabela com 2 colunas e varias linhas
",
Result = "
| Cod | Descricao | Vendas.Data | Vendas.Valor |
| 001 | Alpha | 01/01/2000 | 100,00 |
| 001 | Alpha | 02/01/2000 | 125,00 |
| 002 | Beta | 02/01/2000 | 300,00 |
| 002 | Beta | 03/01/2000 | 450,00 |
| 002 | Beta | 01/01/2000 | 234,00 |
| 002 | Beta | 02/01/2000 | 987,00 |
| 003 | Omega | 03/01/2000 | 123,00 |
"
]
}
]
in
Value.ReplaceType(
funcao,
Value.ReplaceMetadata(
Value.Type(funcao),metadados
)
)