1
resposta

[Projeto] Mão na massa: explorando os contextos no DAX

Queria entender o por que não esta dando certo

QntVendasBigData = 
SUMX(
    FILTER(
        Vendas, 
        RELATED( Produtos[Categoria] ) = "Big Data"
    ),
           Vendas[Quantidade]
  )
1 resposta

Olá, Edson. Como vai?

O seu código utiliza uma lógica de iteração para chegar ao resultado, o que é tecnicamente possível no DAX, mas existem alguns pontos que podem estar impedindo o funcionamento correto ou afetando a performance do seu relatório.

Para que a função RELATED funcione dentro do FILTER, é obrigatório que exista um relacionamento de um para muitos entre a tabela Produtos (lado um) e a tabela Vendas (lado muitos). Se esse relacionamento não estiver ativo ou configurado corretamente na aba de Modelagem, o Power BI não conseguirá buscar a categoria correspondente para cada linha de venda.

Além disso, embora o SUMX com FILTER funcione, a boa prática no Power BI para realizar cálculos com filtros específicos é utilizar a função CALCULATE. Ela é otimizada para o motor de busca do DAX e lida de forma mais eficiente com a transição de contextos.

Aqui estão algumas sugestões para resolver o problema:

  • Verifique o Relacionamento: Vá até a visualização de Modelo e confirme se existe uma linha ligando a coluna de identificação do produto na tabela Vendas à mesma coluna na tabela Produtos.
  • Atenção ao Texto: Verifique se na sua base de dados o texto "Big Data" está escrito exatamente dessa forma, sem espaços extras antes ou depois das palavras, pois o DAX diferencia espaços.
  • Utilize a Função CALCULATE: Esta função simplifica o processo, pois ela transforma o contexto de filtro automaticamente.

Veja como o seu código ficaria utilizando as melhores práticas:

QntVendasBigData = 
CALCULATE(
    SUM(Vendas[Quantidade]),
    Produtos[Categoria] = "Big Data"
)

Por que usar CALCULATE em vez de SUMX + FILTER?

  • Legibilidade: O código fica muito mais limpo e fácil de manter.
  • Performance: O CALCULATE consegue aplicar o filtro diretamente na coluna da tabela de dimensão, enquanto o SUMX com FILTER precisa percorrer a tabela de vendas linha por linha para testar a condição, o que pode deixar o relatório lento se houver milhões de registros.
  • Transição de Contexto: O CALCULATE ignora o contexto de linha e aplica o contexto de filtro de forma mais robusta, garantindo que o resultado seja consistente em diferentes tipos de visuais (gráficos, cartões ou tabelas).

Caso você ainda queira usar o SUMX, verifique se não há erros de sintaxe nos nomes das tabelas ou colunas, garantindo que eles correspondam exatamente ao que está no seu painel de Dados.

Espero que possa ter lhe ajudado!