Ir para conteúdo
  • 0

table.replacevalue para "Outras Colunas"


Luciano Silva
Ir para solução Solucionado por Dums ,

Pergunta

  • Alunos

Olá pessoal!

Anexei uma base fictícia representando a minha fato como exemplo, a qual na primeira aba possuo a estrutura inicial colunar contendo matrícula, centro de custo e início lotação. Eu aplico uma pivot e posteriormente uma unipivot, e aqui esta o meu problema, pois utilizo a função table.replacevalue selecionando todas as colunas (neste caso os meses transformaram-se em colunas) e sempre quando vira o mês, preciso incluir manualmente o mês vigente na linha de código - por exemplo 01/11/2023. Existe alguma forma de realizar um table.replacevalue similar ao Table.UnpivotOtherColumns?

 

Desde já, agradeço!

dúvida_m.pbix duvida_M_mes.xlsx

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Ops, vê se este script te ajuda:

let
    Fonte = Excel.Workbook(File.Contents("C:\Users\afdum\Downloads\duvida_M_mes.xlsx"), null, true),
    Estrutura_Inicial_Sheet = Fonte{[Item="Estrutura_Inicial",Kind="Sheet"]}[Data],
    #"Cabeçalhos Promovidos" = Table.PromoteHeaders(Estrutura_Inicial_Sheet, [PromoteAllScalars=true]),
    #"Coluna em pivô" = Table.Pivot(Table.TransformColumnTypes(#"Cabeçalhos Promovidos", {{"INICIO_LOTACAO", type text}}, "pt-BR"), List.Distinct(Table.TransformColumnTypes(#"Cabeçalhos Promovidos", {{"INICIO_LOTACAO", type text}}, "pt-BR")[INICIO_LOTACAO]), "INICIO_LOTACAO", "CENTRO_CUSTO", List.Sum),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Coluna em pivô",{{"01/10/2023", type text}, {"01/09/2023", type text}, {"01/08/2023", type text}, {"01/07/2023", type text}, {"01/06/2023", type text}, {"01/05/2023", type text}, {"01/04/2023", type text}, {"01/03/2023", type text}, {"01/02/2023", type text}, {"01/01/2023", type text}, {"MATRÍCULA", type text}}),
    ReplaceTodasColunas = (DataTable as table, DataTableColumns as list) =>
     let
        Contador = Table.ColumnCount(DataTable),
        ReplaceCol = (DataTableTemp, i) =>
            let
                colName = DataTableColumns{i},
                ReplaceTable = Table.ReplaceValue(DataTableTemp,each Record.Field(_, colName), each if Record.Field(_, colName) is null then "n/a" else Record.Field(_, colName),Replacer.ReplaceValue,{colName})
            in
                if i = Contador-1 then ReplaceTable else @ReplaceCol(ReplaceTable, i+1)
     in
        ReplaceCol(DataTable, 0),
    todasColunas = Table.ColumnNames(#"Tipo Alterado"),
    #"Apos Replace" = ReplaceTodasColunas(#"Tipo Alterado", todasColunas)
in
    #"Apos Replace"

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
15 minutos atrás, Luciano Silva disse:

Dums, deu certo! muito obrigado!

 

Você incluiu toda essa lógica do loop e contador diretamente pelo editor avançado ou utilizou a opção "invocar função personalizada"?

Direto pelo editor avançado, se quiser podes criar ela em uma consulta nula e chamar ela "por fora" pra deixar o código mais clean, mas não muda nada em questão de execução...

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...