Soma Dinâmica em Power Query: Guia Completo

Tempo de leitura:

3–4 minutes

Neste artigo vou mostrar como podes somar várias colunas de uma tabela em Power Query de forma dinâmica, permitindo que a tua tabela possa ter mais ou menos colunas, mudar os nomes, e mesmo assim continuar a calcular sem erros!

Adicionar colunas calculadas em Power Query é um processo bastante simples, mas quando utilizado de forma incorreta, gera erros porque as colunas usadas para calcular são explicitamente definidas no cálculo. Quando a estrutura da tua tabela muda, vais ser confrontado com erros no passo onde o cálculo é definido.

Vamos então ver como podemos aplicar totais de forma dinâmica numa tabela.

Importar os dados

Vamos começar por importar os dados através do separador Dados

Screenshot of Microsoft Excel showing the 'Data' tab with options to import data from various sources, including 'From File' and 'From Workbook'.

Acedemos ao ficheiro

Excel interface displaying a data navigator panel with options for selecting data sheets. A preview of a data sheet titled 'Folha1' is shown, containing product descriptions and monthly data for various services.

Nas definições da consulta, alteramos o nome da Query e removemos o passo Tipo Alterado, que identifica cada coluna e coloca o tipo de dados. Este passo poderá ser feito no final da consulta.

Screenshot of a data analysis table showing monthly statistics with columns for January to April, detailing valid, error, and empty entries for each month.

Definir a Soma

Podemos aplicar a soma de uma forma simples, acedendo ao Menu Adicionar Colunas, com o conjunto de colunas selecionado, e escolher a opção Padrão -> Adicionar.

Screenshot of the Power Query editor in Excel, showing options to add columns, with a focus on statistical and standard functions.

Ao realizarmos esta operação obtemos a nova coluna de forma simples.

Mas a coluna é definida com um cálculo “estático”, onde as colunas a somar são explicitas na fórmula. Pretendemos mudar este comportamento!

Screenshot of an Excel table displaying a List.Sum function applied to specific columns over several months, with a focus on data validation status.

Vamos então perceber como podemos realizar o cálculo de forma dinâmica.

Passo 1 – Obter o nome das colunas da tabela

Voltamos ao passo anterior removendo esta soma, e vamos apenas alterar o nome do passo “Cabeçalhos Promovidos” para “Tabela” para simplificar a lógica.

Inserimos um novo passo para obter o nome das colunas de forma dinâmica.

Para esta opção vamos utilizar a função Table.ColumnNames onde é retornada uma lista com o nome das colunas da tabela.

= Table.ColumnNames ( Tabela )

Screenshot of an Excel interface showing a table with columns titled 'Mercado' and 'Descricao_Produto', along with months from 'Jan' to 'Set'. A formula '= Table.ColumnNames ( Tabela )' is displayed in the formula bar.

Nesta lista precisamos de realizar mais algumas alterações, nomeadamente retirar os itens (nomes dos campos) que não vão ser usados para somar.

Para esta lógica podemos usar a função List.Difference, que retira de uma lista, valores de outra lista. A lista é composta pelos nomes das colunas a retirar.

= List.Difference ( NomesColunas, {“Mercado”, “Descricao_Produto”} )

Screenshot of an Excel formula using List.Difference to compare column names 'Mercado' and 'Descricao_Produto', with a highlighted list of months on the left.

Agora que já temos a lista com as colunas a somar, necessitamos de voltar à tabela para adicionarmos a nova coluna.

Passo 2 – Criar a nova coluna calculada

Para adicionar a nova coluna vamos utilizar a função Table.AddColumn. Mas precisamos de trabalhar sobre a lista de campos, para conseguirmos obter os valores a somar. Precisamos de incluir mais 2 funções:

  • List.Transform: Para aplicarmos uma transformação a cada item da lista, neste caso cada campo com o mês.
  • Record.Field: Esta função permite obter o valor de um campo num registo.

Agora a parte complexa é a seguinte. A função Record.Field necessita de um registo. O registo faz parte de uma tabela, e não de uma lista, sendo que esta função deve ser calculada no contexto da tabela e não no contexto da lista. Por isso necessitamos de criar uma função personalizada para avaliar o contexto da coluna da tabela e não do item da lista.

Vamos então ver tudo aplicado na fórmula.

Para este cenário vou mostrar no Editor Avançado para ser mais fácil interpretar o código.

Power Query editor interface displaying a list of months, with an advanced editor showing a formula for calculating the difference between column names.

Já no editor avançado aplicamos a nossa fórmula. Na imagem podemos verificar o código comentado para ser mais fácil de interpretar.

Screenshot of a Power Query script in the M language, demonstrating data transformation methods, including Table.AddColumn and List.Sum functions.

SomaDinamica =

    Table.AddColumn (

    Tabela           

        “Total Dinamico”,

         each List.Sum (

             List.Transform (

             ColunasSoma,

             (coluna) => Record.Field ( _, coluna )

             )

         ),

         type number

    )

Esta lógica permite aplicar o cálculo independentemente do número de colunas a calcular.

Para além desta questão pode ser aplicada qualquer função de agregação para além da função List.Sum.

A data table in a software interface showing columns labeled for the months May, June, July, August, and September, along with validation status indicators such as 'Valid', 'Error', and 'Empty'.

Se atualizarmos os dados na origem, o cálculo funciona na perfeição.

A person pointing upward with the text 'TOTAIS DINÂMICOS EM POWER QUERY' prominently displayed, indicating a focus on dynamic totals in Power Query.

Próximo artigo:

Artigo Anterior:


Comments

Leave a Reply

Discover more from Exceldriven

Subscribe now to keep reading and get access to the full archive.

Continue reading