As funções iteradoras do Power BI são uma poderosa ferramenta para análise de dados, executando uma determinada operação repetidamente em uma tabela, linha por linha, para retornar um resultado agregado ou, até mesmo, um filtro em tabela. Neste artigo, discutiremos as principais funções iteradoras do Power BI, suas características e como utilizá-las para realizar cálculos mais avançados.
Antes de prosseguir, é importante ressaltar que o uso dessas funções deve ser feito com cautela, uma vez que pode aumentar significativamente o tempo de processamento da análise. Portanto, é importante avaliar se a utilização dessas funções é realmente necessária e buscar otimizar o modelo de dados para que o cálculo seja realizado da maneira mais eficiente possível.
Dito isto, iremos utilizar a seguinte tabela, como exemplo, para o entendimento das funções:

Com isso em mente, vamos às funções iteradoras!
1. FILTER
Já iremos começar esse artigo quebrando um paradigma! Ao contrário do que muitos pensam, as funções iteradoras não são somente aquelas funções terminadas em "X". A função FILTER, apesar de não terminar com a letra "X", é uma função iteradora que permite filtrar um conjunto de dados baseado em uma condição. A condição especificada irá iterar linha a linha da tabela verificando se atende a esse critério determinado, que, nesse caso, será filtrar o Produto A.
É possível utilizar essa tabela filtrada para criar medidas que dependem desse subconjunto de dados específico. Por exemplo, podemos criar uma medida que calcule a soma das vendas para esse produto em particular. Porém, nesse caso, iremos apenas filtrar a tabela para mostrar a funcionalidade da função FILTER.
Sintaxe:
FILTER( Tabela , Filtro )
Parâmetros:
Tabela: A tabela a ser filtrada. A tabela também pode ser uma expressão que resulta em uma tabela.
Expressão: Uma expressão booliana a ser avaliada para cada linha da tabela.
Obs: Uma expressão booleana é uma expressão que avalia um valor do tipo de dados "Booleano": True ou False.
Exemplo:
FILTER( fVendas, fVendas[Produto] = "Produto A" )
Resultado da FILTER:

2. SUMX
A função SUMX calcula o valor de uma expressão para cada linha de uma tabela e retorna a soma de todas as linhas.
Sintaxe:
SUMX( Tabela , Expressão )
Parâmetros:
Tabela: A tabela que contém as linhas para as quais a expressão será avaliada.
Expressão: A expressão a ser avaliada para cada linha da tabela.
Exemplo:
SUMX( fVendas, (fVendas[Preço Unitário] - fVendas[Desconto Unitário]) * fVendas[Quantidade] )
De forma visual, o que acontece internamente é o seguinte:

O Power BI, internamente, "cria" um a coluna virtual "X" onde armazena o valor do resultado da expressão especificada para cada linha e, ao final do processo, realiza a soma dos valores.
Resultado da SUMX: R$ 6.743,47
Visualização em um cartão:

3. AVERAGEX
De forma análoga a função SUMX, a função AVERAGEX calcula o valor de uma expressão para cada linha de uma tabela e retorna a média de todas as linhas através do mesmo processo, utilizando a coluna "X" apresentada anteriormente.
Sintaxe:
AVERAGEX( Tabela , Expressão )
Parâmetros:
Tabela: Nome de uma tabela ou uma expressão que especifica a tabela sobre a qual a agregação pode ser executada.
Expressão: Uma expressão com um resultado escalar, que será avaliado para cada linha da tabela no primeiro argumento.
Exemplo:
AVERAGEX( fVendas, (fVendas[Preço Unitário] - fVendas[Desconto Unitário]) * fVendas[Quantidade] )
Resultado da AVERAGEX: R$ 354,92
Visualização em um cartão:

4. MINX e MAXX
As funções MINX e MAXX permitem encontrar o menor e o maior valor em um conjunto de dados, respectivamente. É possível utilizar essas funções para criar medidas que encontram o menor ou o maior valor em um conjunto ou subconjunto de dados específico.
Sintaxe:
MINX( Tabela , Expressão )
MAXX( Tabela , Expressão )
Parâmetros:
Tabela: A tabela que contém as linhas para as quais a expressão será avaliada.
Expressão: A expressão a ser avaliada para cada linha da tabela.
Exemplo:
MINX( fVendas, (fVendas[Preço Unitário] - fVendas[Desconto Unitário]) * fVendas[Quantidade] )
MAXX( fVendas, (fVendas[Preço Unitário] - fVendas[Desconto Unitário]) * fVendas[Quantidade] )
De forma visual, as funções MINX e MAXX, baseados na expressão definida em seu segundo argumento, conseguirão encontrar o menor e maior valor para a tabela especificada:

Resultado da MINX: R$ 13,97
Visualização em um cartão:

Resultado da MAXX: R$ 1.566,57
Visualização em um cartão:

5. COUNTX
A função COUNTX retorna o número de linhas não vazias em uma coluna ou o número de resultados não vazios da expressão especificada em um conjunto de dados.
Sintaxe:
COUNTX( Tabela , Expressão )
Parâmetros:
Tabela: A tabela que contém as linhas a serem contadas.
Expressão: Uma expressão que retorna o conjunto de valores que contém os valores que você deseja contar.
Exemplo:
COUNTX( fVendas, (fVendas[Preço Unitário] - fVendas[Desconto Unitário]) * fVendas[Quantidade] )
De forma visual:

Resultado da COUNTX: 19 (contagem de linhas não vazias)
Visualização em um cartão:

6. CONCATENATEX
A função CONCATENATEX permite concatenar valores de um conjunto de dados. É possível utilizar essa função para criar medidas que concatenam valores de um conjunto ou subconjunto de dados específico. Por exemplo, podemos criar uma medida que concatena os nomes de produtos vendidos.
Sintaxe:
CONCATENATEX( Tabela , Expressão , Delimitador , Expressão de Ordenação , Ordenação )
Parâmetros:
Tabela: A tabela que contém as linhas a serem contadas.
Expressão: Uma expressão que retorna o conjunto de valores que contém os valores que você deseja contar.
Delimitador: (Opcional) Um separador a ser usado durante a concatenação.
Expressão de Ordenação: (Opcional) Qualquer expressão DAX em que o valor de resultado é usado para classificar os valores concatenados na cadeia de caracteres de saída. A avaliação é realizada para cada linha da "Tabela".
Ordenação: (Opcional) Um valor que especifica como classificar valores "Expressão de Ordenação" em ordem crescente ou decrescente.
Exemplo 1:
CONCATENATEX( fVendas, // Tabela fVendas[Produto], // Expressão: Valor da coluna "Produto" ", " // Delimitador entre as ocorrências da coluna "X" )
De forma visual:

Resultado: Produto E, Produto E, Produto E, Produto E, Produto E, Produto E, Produto E, Produto E, Produto C, Produto C, Produto C, Produto A, Produto A, Produto A, Produto A, Produto D, Produto F, Produto B, Produto B
Visualização em um cartão:

No caso da CONCATENATEX o resultado pode parecer um pouco mais confuso ou não intuitivo. Porém está sendo verificado para cada linha, da tabela de vendas, o nome do produto (expressão aplicada no segundo argumento) e concatenando com os outros valores presentes na "coluna X" criada virtualmente. No entanto, não há ordenação, porque omitimos o 4º argumento, que é opcional.
Exemplo 2:
Tabela: dVendedores (3 linhas)

CONCATENATEX( dVendedores, // Tabela dVendedores[Nome] & " " & dVendedores[Sobrenome], // Nome Completo ", " // Delimitador )
De forma visual:

Resultado: Caio Oliveira, Maria Silva, Lucas Rodrigues
Visualização em um cartão:

IMPORTANTE!
Note que as funções iteradoras utilizam de uma tabela em seu primeiro argumento, entretanto, não é necessário que utilizemos tabelas que estejam materializadas em nosso modelo. Podemos recorrer a funções que retornam tabelas para realizar cálculos ainda mais personalizados.
Tabela: VALUES(fVendas[Produto])

Neste exemplo retornaremos a lista de produtos vendidos, sem repetição (porque não há necessidade) e ordenados alfabeticamente.
CONCATENATEX( VALUES(fVendas[Produto]), // Retorna uma tabela com os valores distintos do campo utilizado fVendas[Produto], ", ", fVendas[Produto] // Ordenando pelo produto (ordem alfabética) )
Resultado: Produto A, Produto B, Produto C, Produto D, Produto E, Produto F (Os 6 produtos presentes na fVendas)
Visualização em um cartão:

De forma semelhante, podemos utilizar todas a funções iteradoras apresentadas anteriormente associadas a VALUES(fVendas[Produto]) e obter o seguinte resultado:

As colunas evidenciam os resultados das medidas, criadas anteriormente, com cada uma das funções apresentadas nesse artigo para cada um dos produtos vendidos na tabela fVendas.
Espero que esse artigo possa ajudá-los de alguma forma no entendimento e aplicação das funções e me encontro à disposição para quaisquer dúvidas que possam surgir após a leitura.
Caso necessitem do PBIX para um melhor entendimento do artigo, podem solicitar através dos comentários.
Grande abraço a todos e até a próxima dica! 🚀
Parabéns André, artigo claro e bem explicativo.
Como sempre artigos muito bem escritos de forma simples e de fácil entendimento. Parabéns André!