FILTER
FILTER devolve uma tabela com as linhas que atendem a uma condição. Ele é um iterador: percorre linha a linha. Por isso é poderoso e caro.
DAXQuando FILTER é obrigatório
-- Condição com duas colunasReceita Grandes Pedidos Sem Desconto =CALCULATE( [Receita Total], FILTER( fVendas, fVendas[Quantidade] > 10 && fVendas[Desconto] = 0 )) -- Condição que usa uma medidaClientes Acima da Média =VAR MediaGeral = AVERAGEX( ALL( dCliente ), [Receita Total] )RETURNCOUNTROWS( FILTER( VALUES( dCliente[IdCliente] ), [Receita Total] > MediaGeral ))DAXMesma lógica, custo muito menor
-- CaroCALCULATE( [Receita Total], FILTER( fVendas, fVendas[Quantidade] > 10 ) ) -- Barato: itera só os valores distintos de quantidadeCALCULATE( [Receita Total], FILTER( VALUES( fVendas[Quantidade] ), fVendas[Quantidade] > 10 ) ) -- Mais barato ainda quando possívelCALCULATE( [Receita Total], fVendas[Quantidade] > 10 )A família ALL
| Função | O que remove | Uso típico |
|---|---|---|
| ALL(Tabela) | Todos os filtros da tabela inteira | Total geral |
| ALL(Tabela[Coluna]) | Filtros apenas daquela coluna | Total dentro de uma hierarquia |
| ALLEXCEPT(Tabela, Col) | Todos menos os das colunas listadas | % dentro do grupo |
| ALLSELECTED() | O filtro do visual, preservando as segmentações | % do visível |
| ALLNOBLANKROW(Tabela) | Como ALL, mas sem a linha em branco de chave órfã | Contagens de dimensão |
| REMOVEFILTERS(...) | Sinônimo moderno de ALL dentro de CALCULATE | Legibilidade |
DAXALLSELECTED na prática
-- Matriz com Produto nas linhas e segmentação de Categoria.-- O usuário selecionou 3 categorias.% do Visível =DIVIDE( [Receita Total], CALCULATE( [Receita Total], ALLSELECTED( dProduto ) ))-- Denominador = total das 3 categorias selecionadas (não o total geral,-- e não o valor do próprio produto).