medida de última data (LASTNONBLANK) em DAX: como calcular
Medida de última data com LASTNONBLANK em DAX: como pegar o último valor com dado, ideal para saldo de estoque e posição, com semântica non-additive e exemplos.
Somar o saldo de estoque de vários dias dá um número que não significa nada
Algumas métricas não podem ser somadas ao longo do tempo, e essa é uma das armadilhas mais sutis do DAX. Se você tem o saldo de estoque de cada dia e soma os saldos do mês, obtém um número gigante e sem sentido, porque o estoque de hoje não se acumula com o de ontem; ele substitui. O mesmo vale para saldo bancário, número de assinantes ativos, posição de contratos. Para essas métricas, o total do período não é a soma, é o último valor disponível. Calcular a medida de última data com LASTNONBLANK em DAX é a forma correta de tratar esses casos. Este guia explica por que somar está errado aqui e como pegar o último valor com dado de forma robusta.
Métricas semi-aditivas não somam ao longo do tempo
O conceito por trás disso tem nome: são as métricas semi-aditivas. Elas podem ser somadas em algumas dimensões, mas não na dimensão de tempo. O saldo de estoque, por exemplo, pode ser somado entre produtos ou entre depósitos, faz sentido saber o estoque total de vários produtos, mas não pode ser somado entre dias, porque o saldo de cada dia já é a posição completa naquele momento. Para o total do mês, o que interessa é o saldo do último dia do mês, não a soma dos saldos diários. Reconhecer que uma métrica é semi-aditiva é o primeiro passo, porque muda completamente como você a agrega. Tratar uma métrica de posição como se fosse aditiva é um erro clássico que produz números absurdos sem gerar nenhum aviso.
LASTNONBLANK encontra a última data que realmente tem dado
A função central para esse cálculo é LASTNONBLANK. Ela percorre as datas e retorna a última em que a expressão avaliada não está em branco, ou seja, a última data com movimento ou registro. A diferença para outras funções de última data é justamente o não em branco: ela ignora dias sem dado e pega o último que de fato tem valor, o que é essencial quando o estoque não é registrado todos os dias. A estrutura básica combina LASTNONBLANK com CALCULATE para trazer o valor daquela data:
Estoque Final =
CALCULATE (
SUM ( Estoque[Quantidade] ),
LASTNONBLANK ( Calendario[Data], SUM ( Estoque[Quantidade] ) )
)
Assim, para qualquer recorte de tempo, a medida devolve o saldo da última data com dado dentro daquele recorte, que é o valor correto da posição no fim do período.
As funções de última data têm diferenças que importam
| Função | O que retorna | Quando preferir |
|---|---|---|
| LASTNONBLANK | Última data com valor não vazio | Estoque registrado de forma irregular |
| LASTDATE | Última data do contexto | Quando todos os dias têm dado |
| CLOSINGBALANCEMONTH | Saldo no fim do mês | Fechamento mensal direto |
LASTDATE e as funções de fechamento são alternativas para cada caso
LASTNONBLANK não é a única ferramenta, e escolher a certa depende do dado. LASTDATE simplesmente devolve a última data do contexto atual, sem se importar se há valor nela; funciona bem quando você tem certeza de que todos os dias relevantes têm registro, mas pode trazer um resultado vazio se o último dia do período não tiver movimento. Por isso, para estoques registrados de forma irregular, LASTNONBLANK costuma ser mais segura. Há ainda funções de fechamento como CLOSINGBALANCEMONTH, que já trazem o saldo no fim do mês diretamente, encapsulando parte dessa lógica para os casos mais comuns de fechamento mensal. Conhecer as três permite escolher a mais adequada ao seu dado: LASTNONBLANK para robustez com dados irregulares, LASTDATE quando o dado é contínuo, e as funções de fechamento quando você quer um atalho para saldos de fim de período.
O comportamento correto aparece nos totais e subtotais
O sinal de que você acertou a medida semi-aditiva está nos totais. Com uma medida de última data bem construída, o valor de um dia é o saldo daquele dia, o valor de um mês é o saldo do último dia do mês, e o valor do ano é o saldo do último dia do ano, e não a soma de tudo. Os subtotais deixam de inflar e passam a fazer sentido de negócio. Esse é justamente o comportamento que uma soma comum erraria, mostrando totais absurdos. Vale conferir sempre o resultado em diferentes níveis de tempo para garantir que a lógica está correta: o total mensal deve bater com o saldo do fechamento daquele mês. Quando isso acontece, você tem uma medida de posição confiável, pronta para painéis de estoque, saldo e assinantes ativos, que são casos onde o erro de somar passaria despercebido e comprometeria a decisão. Para modelos e medidas corretas, veja nossos serviços de Power BI, os dashboards e o guia completo de Power BI para empresas.
Perguntas frequentes
O que é uma métrica semi-aditiva? É uma métrica que pode ser somada em algumas dimensões, mas não na de tempo. O saldo de estoque, por exemplo, pode somar entre produtos, mas não entre dias, porque o saldo de cada dia já é a posição completa naquele momento.
Por que não posso somar o saldo de estoque no mês? Porque o estoque de cada dia não se acumula com o do dia anterior; ele substitui. Somar os saldos diários gera um número gigante e sem sentido. O total do mês deve ser o saldo do último dia, não a soma.
O que a função LASTNONBLANK faz? Ela retorna a última data em que a expressão avaliada não está em branco, ou seja, a última data com valor de fato. Isso a torna ideal quando o dado, como o estoque, não é registrado todos os dias.
Qual a diferença entre LASTNONBLANK e LASTDATE? LASTDATE devolve a última data do contexto, mesmo que não haja valor nela. LASTNONBLANK devolve a última data que tem valor. Para dados registrados de forma irregular, LASTNONBLANK é mais segura por ignorar dias sem dado.
Existe uma função pronta para saldo de fim de mês? Sim, funções como CLOSINGBALANCEMONTH trazem o saldo no fim do mês diretamente, encapsulando parte da lógica de última data. São um atalho útil para os casos comuns de fechamento mensal de saldos.
Como sei que a medida está correta? Conferindo os totais em diferentes níveis de tempo. O total mensal deve bater com o saldo de fechamento daquele mês, e o anual com o último dia do ano, em vez de inflar como faria uma soma. Se os subtotais fazem sentido, a lógica está certa.
Trate posição como posição, não como soma
Saldo de estoque, banco e assinantes são métricas semi-aditivas: o total do período é o último valor, não a soma. Com LASTNONBLANK, ou LASTDATE e as funções de fechamento conforme o dado, a medida fica correta. Se quiser medidas de posição confiáveis, fale com a gente.
Quer aplicar isso na sua empresa?
A Fynx implementa BI, Power BI e Power Platform de ponta a ponta. Conte seu cenário e devolvemos um diagnóstico direto ao ponto.
Falar com um especialista