Capa do Ebook gratuito Power BI para Pequenos Negócios: Dashboards de Vendas, Caixa e Estoque com Indicadores que Importam

Power BI para Pequenos Negócios: Dashboards de Vendas, Caixa e Estoque com Indicadores que Importam

Novo curso

25 páginas

Medidas essenciais em DAX para faturamento, descontos e devoluções

Capítulo 9

Tempo estimado de leitura: 16 minutos

Audio Icon

Ouça em áudio

0:00 / 0:00

O que são medidas em DAX e por que elas são essenciais para faturamento

Medidas em DAX (Data Analysis Expressions) são cálculos avaliados dinamicamente conforme os filtros do relatório (período, produto, cliente, canal, vendedor, loja). Diferente de colunas calculadas, que são calculadas linha a linha e “gravadas” na tabela, medidas são recalculadas no momento da visualização, respeitando o contexto de filtro. Para pequenos negócios, isso é crucial porque faturamento, descontos e devoluções mudam de interpretação dependendo do recorte: o faturamento do mês pode ser diferente por loja; o desconto médio pode variar por canal; e devoluções podem “comer” a receita de um produto específico.

Ilustração em estilo flat e corporativo de um dashboard de BI com filtros (data, produto, cliente, canal, loja) e gráficos de faturamento, descontos e devoluções mudando conforme os filtros; cores neutras, visual limpo, sem texto legível, alta resolução

O objetivo deste capítulo é construir um conjunto de medidas essenciais e confiáveis para: (1) faturamento bruto e líquido, (2) descontos (valor e percentual), (3) devoluções (valor e impacto), e (4) indicadores derivados como ticket médio e margem de desconto. As medidas serão apresentadas com exemplos práticos e com atenção a armadilhas comuns (sinais, duplicidade, devolução parcial, desconto por item vs por pedido).

Pré-requisitos mínimos para as medidas funcionarem bem

Sem repetir capítulos anteriores, vamos assumir que você já tem um modelo com uma tabela fato de vendas (por exemplo, F_Vendas) contendo, no mínimo, colunas como: Data, Qtd, PrecoUnit, ValorBrutoItem (ou equivalente), ValorDescontoItem (ou equivalente), ValorLiquidoItem (opcional), TipoMovimento (Venda/Devolucao) ou um campo de sinal, e chaves para dimensões (Produto, Cliente, Loja etc.). Se você não tem ValorBrutoItem e ValorDescontoItem prontos, ainda dá para calcular via medida, mas é recomendável que o valor bruto por item exista como coluna numérica consistente (por exemplo, Qtd * PrecoUnit) para reduzir ambiguidade.

Também vamos assumir que existe uma tabela calendário já relacionada à fato de vendas, para que filtros por data funcionem corretamente. As medidas abaixo não dependem de funções avançadas de tempo, mas dependem de um campo de data consistente.

Padronização de sinais: a base para não “quebrar” o faturamento

O erro mais comum em faturamento com devoluções é misturar sinais: algumas bases registram devolução com quantidade negativa, outras com valor negativo, outras com um campo “TipoMovimento”. Antes de criar medidas, defina uma regra única para o modelo: devolução deve reduzir faturamento líquido. Você pode implementar isso em medidas usando um fator de sinal.

Continue em nosso aplicativo

Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

ou continue lendo abaixo...
Download App

Baixar o aplicativo

Opção A: existe coluna TipoMovimento (Venda/Devolucao)

Nesse caso, crie uma medida de fator de sinal:

Fator Sinal = IF( SELECTEDVALUE(F_Vendas[TipoMovimento]) = "Devolucao", -1, 1 )

Essa medida funciona bem quando o visual está no nível de linha? Na prática, medidas com SELECTEDVALUE podem retornar em branco quando há múltiplos tipos no contexto. Para somatórios, é mais seguro aplicar o sinal dentro de um SUMX iterando as linhas.

Opção B: devolução já vem com valores negativos

Se a base já traz devolução negativa em ValorLiquidoItem ou ValorBrutoItem, você pode somar diretamente. Ainda assim, recomendo criar medidas explícitas de devolução para facilitar leitura e auditoria.

Medidas essenciais: faturamento bruto, descontos, devoluções e faturamento líquido

1) Faturamento Bruto (sem descontos, sem devoluções)

Definição: soma do valor bruto vendido (antes de descontos) considerando apenas movimentos de venda. É útil para entender o “potencial” de receita e para comparar política de descontos.

Se você tem ValorBrutoItem como coluna:

Faturamento Bruto = CALCULATE( SUM(F_Vendas[ValorBrutoItem]), F_Vendas[TipoMovimento] = "Venda" )

Se você não tem ValorBrutoItem e precisa calcular:

Faturamento Bruto = CALCULATE( SUMX(F_Vendas, F_Vendas[Qtd] * F_Vendas[PrecoUnit]), F_Vendas[TipoMovimento] = "Venda" )

Observação prática: se houver itens com preço unitário já líquido (após desconto), não use Qtd * PrecoUnit como bruto. Nesse caso, o “bruto” não existe e você deve renomear o indicador para “Receita antes de devoluções” ou ajustar a origem.

2) Descontos (valor)

Definição: soma do valor de desconto concedido em vendas. O desconto deve ser positivo como “valor concedido”, mesmo que na base venha negativo. Se na sua base desconto vem como valor negativo, use ABS para padronizar.

Descontos = CALCULATE( SUMX(F_Vendas, ABS(F_Vendas[ValorDescontoItem])), F_Vendas[TipoMovimento] = "Venda" )

Se o desconto estiver em percentual e você quiser valor, calcule por item:

Descontos = CALCULATE( SUMX(F_Vendas, (F_Vendas[Qtd] * F_Vendas[PrecoUnit]) * F_Vendas[PercDesconto] ), F_Vendas[TipoMovimento] = "Venda" )

Dica de auditoria: crie um visual de tabela com Produto e as colunas Bruto, Descontos e Líquido para validar se Bruto - Descontos faz sentido.

3) Faturamento Líquido (após descontos, antes de devoluções)

Definição: receita efetiva de vendas após descontos, sem considerar devoluções. Ajuda a medir performance comercial sem misturar o efeito de logística/qualidade (devoluções).

Faturamento Líquido (sem devolução) = [Faturamento Bruto] - [Descontos]

Se você já tem uma coluna ValorLiquidoItem confiável (após desconto), pode usar:

Faturamento Líquido (sem devolução) = CALCULATE( SUM(F_Vendas[ValorLiquidoItem]), F_Vendas[TipoMovimento] = "Venda" )

Por que preferir a fórmula Bruto - Descontos? Porque facilita identificar divergências: se o líquido “não bate”, você sabe se o problema está no bruto ou no desconto.

4) Devoluções (valor)

Definição: valor devolvido (impacto negativo na receita). Aqui há duas abordagens: (a) devolver pelo valor líquido (após desconto), ou (b) devolver pelo valor bruto e também devolver o desconto proporcional. A abordagem mais comum em varejo é considerar devolução pelo valor efetivamente estornado (normalmente líquido). Se sua base traz devolução com valores positivos, aplique sinal negativo na medida para que devolução reduza o resultado.

Cena corporativa de varejo mostrando um fluxo de devolução: seta retornando do cliente para a loja e um gráfico de receita diminuindo; estilo flat minimalista, cores sóbrias, sem texto legível, alta resolução

Devolução pelo valor líquido (recomendado quando existe ValorLiquidoItem ou quando você calcula líquido por item):

Devoluções = CALCULATE( SUMX(F_Vendas, F_Vendas[ValorLiquidoItem]), F_Vendas[TipoMovimento] = "Devolucao" )

Se a devolução vem positiva e você quer que apareça como valor negativo no resultado:

Devoluções (negativo) = -1 * CALCULATE( SUMX(F_Vendas, ABS(F_Vendas[ValorLiquidoItem])), F_Vendas[TipoMovimento] = "Devolucao" )

Se você não tem ValorLiquidoItem, pode estimar líquido por item como Qtd*PrecoUnit - Desconto (desde que o desconto seja por item):

Devoluções (negativo) = -1 * CALCULATE( SUMX(F_Vendas, (F_Vendas[Qtd] * F_Vendas[PrecoUnit]) - ABS(F_Vendas[ValorDescontoItem]) ), F_Vendas[TipoMovimento] = "Devolucao" )

Armadilha: devolução parcial de um pedido com desconto “no total do pedido” (não por item). Se o desconto não está alocado por item, o cálculo proporcional pode ficar errado. Nesse cenário, o ideal é tratar a alocação do desconto antes (na origem/Power Query) ou ter uma tabela de pagamentos/ajustes. Se isso não for possível, prefira usar o valor de estorno real registrado na devolução.

5) Faturamento Líquido Final (após descontos e devoluções)

Definição: receita líquida que realmente ficou, considerando devoluções como redução. Essa é a medida mais usada em painéis de resultado de vendas.

Faturamento Líquido Final = [Faturamento Líquido (sem devolução)] + [Devoluções (negativo)]

Se a sua medida Devoluções já retorna negativo, some. Se retorna positivo, subtraia. O importante é padronizar: devolução deve reduzir o faturamento final.

Indicadores derivados que ajudam a tomar decisão

6) Percentual de Desconto sobre o Bruto

Esse indicador mostra o quanto do faturamento bruto está sendo “cedido” em descontos. Excelente para comparar canais e vendedores.

% Desconto = DIVIDE( [Descontos], [Faturamento Bruto] )

Boa prática: formate como percentual com 1 ou 2 casas. Use DIVIDE para evitar erro de divisão por zero.

7) Taxa de Devolução sobre o Líquido (sem devolução)

Mostra o quanto das vendas líquidas está voltando como devolução. Como devolução geralmente está negativa, use ABS no numerador para obter taxa positiva.

% Devolução = DIVIDE( ABS([Devoluções (negativo)]), [Faturamento Líquido (sem devolução)] )

Interpretação prática: se a taxa de devolução sobe em um produto, pode indicar problema de qualidade, descrição incorreta, tamanho/variação errada, ou falha no processo de entrega.

8) Receita Média por Venda (Ticket Médio)

Ticket médio pode ser calculado por pedido, por cupom, por nota fiscal ou por transação. A medida depende do identificador disponível (por exemplo, IdPedido ou NumeroDocumento). A ideia é dividir o faturamento líquido final pela quantidade de pedidos (apenas vendas, sem devolução).

Qtd Pedidos (venda) = CALCULATE( DISTINCTCOUNT(F_Vendas[IdPedido]), F_Vendas[TipoMovimento] = "Venda" )
Ticket Médio = DIVIDE( [Faturamento Líquido Final], [Qtd Pedidos (venda)] )

Se você não tem IdPedido, mas tem documento fiscal, use esse campo. Se só tem linhas de item sem identificador de pedido, o “ticket” vira receita média por linha, o que não é a mesma coisa. Nesse caso, renomeie para evitar interpretação errada.

9) Preço Médio Líquido por Unidade

Ajuda a ver se você está vendendo mais barato por causa de descontos, mix de produtos ou promoções. Use quantidade apenas de vendas e receita líquida sem devolução (ou final, dependendo do objetivo).

Qtd Vendida = CALCULATE( SUM(F_Vendas[Qtd]), F_Vendas[TipoMovimento] = "Venda" )
Preço Médio Líquido = DIVIDE( [Faturamento Líquido (sem devolução)], [Qtd Vendida] )

Se sua base registra quantidade de devolução positiva em linhas de devolução, não misture com vendas nessa medida. Por isso filtramos TipoMovimento = "Venda".

Passo a passo prático: criando e validando as medidas no Power BI

Passo 1: crie uma tabela de medidas (opcional, mas recomendado)

Para organizar, crie uma tabela “vazia” só para medidas (por exemplo, _Medidas). Uma forma comum é criar uma tabela com uma linha via “Inserir dados” e depois ocultar a coluna. Assim, todas as medidas ficam centralizadas e fáceis de achar.

Passo 2: crie as medidas base na ordem certa

Crie primeiro as medidas que serão reutilizadas: Faturamento Bruto, Descontos, Faturamento Líquido (sem devolução), Devoluções (negativo), Faturamento Líquido Final. A ordem ajuda a depurar porque você consegue testar cada parte.

Passo 3: monte uma matriz de validação

Crie um visual de matriz com linhas por mês (ou por dia) e colunas com as medidas: Bruto, Descontos, Líquido sem devolução, Devoluções, Líquido final. Compare com relatórios do seu sistema (ERP/PDV) para o mesmo período.

Ilustração de um analista olhando uma matriz no Power BI com colunas Bruto, Descontos, Líquido, Devoluções e Líquido final, e uma segunda tela com relatório de ERP para comparação; estilo flat moderno, ambiente de escritório, sem texto legível, alta resolução
  • Se o Bruto estiver maior: pode haver duplicidade de linhas (ex.: itens repetidos) ou mistura de devolução como venda.
  • Se o Desconto estiver “negativo”: padronize usando ABS ou ajuste a regra de sinal.
  • Se a Devolução estiver positiva e aumentando o líquido final: ajuste o sinal na medida.

Passo 4: teste recortes que costumam revelar erro

Alguns filtros são ótimos para encontrar inconsistências:

  • Filtrar um único produto com devolução alta: veja se devolução está sendo subtraída.
  • Filtrar um único pedido conhecido: confira se Bruto - Desconto = Líquido (sem devolução).
  • Filtrar um dia específico com poucas vendas: facilita bater com o caixa/relatório diário.

Passo 5: crie medidas “de auditoria” para checagem rápida

Medidas de auditoria ajudam a identificar se há linhas sem classificação ou campos nulos.

Linhas sem TipoMovimento = CALCULATE( COUNTROWS(F_Vendas), ISBLANK(F_Vendas[TipoMovimento]) )
Vendas com Desconto maior que Bruto = CALCULATE( COUNTROWS(F_Vendas), F_Vendas[TipoMovimento] = "Venda", ABS(F_Vendas[ValorDescontoItem]) > F_Vendas[ValorBrutoItem] )

Se aparecerem valores, você tem registros inconsistentes (ex.: desconto lançado errado, preço unitário zerado, ou devolução classificada como venda).

Cenários comuns e como adaptar as medidas

Desconto no nível do pedido (não por item)

Quando o desconto está no cabeçalho do pedido, mas a tabela fato está no nível de item, você tem duas opções práticas:

  • Alocar o desconto proporcionalmente ao valor bruto de cada item (requer uma etapa de preparação para distribuir o desconto).
  • Manter uma tabela separada de pedidos com o desconto total e criar medidas que somem desconto por pedido, evitando duplicar o desconto em cada item.

Se você optar por tabela separada (ex.: F_Pedidos com IdPedido e DescontoPedido), a medida de descontos vira:

Descontos = SUM(F_Pedidos[DescontoPedido])

E o faturamento bruto continua vindo da tabela de itens. Nesse caso, garanta que o relacionamento entre pedidos e itens não cause duplicidade (por exemplo, não some desconto do pedido em um visual por item sem cuidado). Uma forma de evitar isso é usar o desconto apenas em visuais agregados por pedido, data, loja, canal, etc., ou criar medidas com TREATAS/SUMX por pedido quando necessário.

Devolução registrada como “venda negativa”

Se sua base não tem TipoMovimento, mas devoluções aparecem como quantidades negativas, você pode separar por condição:

Faturamento Bruto = SUMX( FILTER(F_Vendas, F_Vendas[Qtd] > 0 ), F_Vendas[Qtd] * F_Vendas[PrecoUnit] )
Devoluções (negativo) = SUMX( FILTER(F_Vendas, F_Vendas[Qtd] < 0 ), F_Vendas[Qtd] * F_Vendas[PrecoUnit] )

Nesse caso, a devolução já sai negativa porque Qtd é negativa. Se houver desconto, você precisa garantir que o desconto acompanhe o sinal corretamente, ou usar o valor de estorno real.

Trocas (devolução + nova venda)

Trocas costumam gerar duas movimentações: devolução do item antigo e venda do item novo. O faturamento líquido final deve refletir as duas. Para análise, é útil ter uma medida de “impacto de devolução” separada e uma taxa de devolução por produto. Se você tiver um identificador de troca, pode criar visuais específicos, mas as medidas essenciais acima já capturam o efeito no resultado.

Boas práticas de nomenclatura e formatação das medidas

  • Use nomes que indiquem claramente o que entra e o que não entra: “(sem devolução)”, “Final”, “Bruto”.
  • Padronize moeda e casas decimais. Faturamento e descontos em moeda; percentuais como %; quantidades sem casas ou com 0/2 conforme necessidade.
  • Evite medidas ambíguas como “Receita” sem especificar se é bruta, líquida, com ou sem devolução.

Pacote mínimo de medidas (resumo para copiar e adaptar)

Abaixo um conjunto enxuto que cobre a maioria dos dashboards de pequenos negócios. Ajuste nomes de colunas/tabelas conforme seu modelo.

Faturamento Bruto = CALCULATE( SUM(F_Vendas[ValorBrutoItem]), F_Vendas[TipoMovimento] = "Venda" )
Descontos = CALCULATE( SUMX(F_Vendas, ABS(F_Vendas[ValorDescontoItem])), F_Vendas[TipoMovimento] = "Venda" )
Faturamento Líquido (sem devolução) = [Faturamento Bruto] - [Descontos]
Devoluções (negativo) = -1 * CALCULATE( SUMX(F_Vendas, ABS(F_Vendas[ValorLiquidoItem])), F_Vendas[TipoMovimento] = "Devolucao" )
Faturamento Líquido Final = [Faturamento Líquido (sem devolução)] + [Devoluções (negativo)]
% Desconto = DIVIDE( [Descontos], [Faturamento Bruto] )
% Devolução = DIVIDE( ABS([Devoluções (negativo)]), [Faturamento Líquido (sem devolução)] )
Qtd Pedidos (venda) = CALCULATE( DISTINCTCOUNT(F_Vendas[IdPedido]), F_Vendas[TipoMovimento] = "Venda" )
Ticket Médio = DIVIDE( [Faturamento Líquido Final], [Qtd Pedidos (venda)] )
Qtd Vendida = CALCULATE( SUM(F_Vendas[Qtd]), F_Vendas[TipoMovimento] = "Venda" )
Preço Médio Líquido = DIVIDE( [Faturamento Líquido (sem devolução)], [Qtd Vendida] )

Agora responda o exercício sobre o conteúdo:

Por que, ao criar indicadores de faturamento no Power BI, medidas em DAX são mais adequadas do que colunas calculadas para análises por período, loja ou canal?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Medidas em DAX são avaliadas dinamicamente no momento da visualização e respeitam os filtros aplicados (ex.: período, loja, canal). Já colunas calculadas ficam gravadas linha a linha e não se adaptam ao contexto de filtro da mesma forma.

Próximo capitúlo

Margem e lucratividade: custos, CMV/CSV e análise por produto e canal

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.