Pular para o conteúdo principal

Power BI - NÃO EDITE seus Modelos do Power BI na Nuvem.

[Power BI] Calculando Vendas de Novos Clientes


Olá Viciados em Power BI tudo bem?

No artigo de hoje eu queria mostrar como podemos calcular duas métricas interessantes, Vendas para novos clientes e Quantidade de novos clientes em um período específico.

Mas antes aquele pedido maroto, se você não conhece meu canal no youtube, da uma conferida lá youtube.com/rafaelmendonca que tem vários vídeos legais como o dessa semana feito com o meu amigo Edney Siqueira. Inscreva-se, deixa seu like ou não mas conheça também essa minha outra plataforma.

Hoje vamos falar sobre algumas funções DAX e se você quiser conhecer mais DAX pode conferir vídeos categorizados por função em www.guiadax.com.br .

1 - Nosso Ambiente

Tenho 3 tabelas simples, dCliente com os cadastros dos meus clientes, dCalendario com datas, e fVendas com as vendas.

dCalendario relaciona-se com fVendas em Data, e com dCliente em Dt_Cadastro(essa relação inativa)
e dCliente relaciona-se com fVendas em Cod_Cliente.


Até aí tudo normal, mas analisando meus dados eu preciso entender que coluna de datas eu vou utilizar para calcular quais são os novos clientes. Analisando com calma eu verifico que o cliente Rafael, embora tenha tido cadastro realizado em Dezembro de 2018 somente realizou a primeira Compra em Fevereiro de 2019. Então nesse modelo, e pode ser o seu caso, a data de cadastro não é a melhor para analisar se esse é um cliente novo ou não. Teremos que calcular então baseando-se na data da Primeira Venda.


Criei alguns filtros na minha tela de ano e meses e desabilitei a interação desses filtros com essa tabela base (que é uma mistura da fVendas com dCliente), para que os filtros aplicados não interfiram nessa tabela e possamos analisar melhor os dados.



2 - Calculando Novos Clientes

Então precisamos encontrar agora uma forma de calcular nos meses selecionados os novos clientes que é o nosso primeiro desafio, lembrando que não podemos utilizar a coluna de data de cadastro do cliente que não possui o dado correto de quando este faz a primeira aquisição.

Após alguns testes cheguei na seguinte expressão DAX.




Temos então nosso resultado acima que no mês de Fevereiro de 2019 eu tive dois novos clientes.

Mas essa forma é bem complexa não é?

Imagina então, se isso foi somente para calcular quantos novos clientes existem, você consegue pensar no tamanho e complexidade da expressão para calcular o faturamento desses novos clientes?

O problema que muitas vezes queremos resolver tudo com modelagem (Relacionamento e DAX), o que nem sempre é a melhor abordagem, pois se tivermos dados melhor tratados que já venham com informações mais prontas poderemos trabalhar melhor e dar menos "trabalho" ao DAX, melhorando assim a performance dos nossos relatórios.

3 - Tratando os Dados no Power Query Editor

Então vamos para o Power Query melhorar o nosso modelo de dados afim de facilitar o trabalho para o DAX.

O que iremos fazer agora é levar para o nosso cadastro de clientes uma nova coluna de datas com as Datas da primeira Compra de cada um dos nossos clientes.

Vamos então inciar duplicando nossa tabela fVendas clicando com o botão direito nela na área de Consultas e indo em Referencia



Uma vez duplicada iremos garantir que a nossa coluna de datas está em ordem decrescente pois será importante para identificarmos a data da primeira compra de cada cliente.


Selecionando a coluna de Cod_Cliente iremos clicar no botão direito e ir em "Agrupar por..."


E vamos então alterar o nome da nova coluna para "Agrupado" e em operação vamos selecionar a opção "Todas as Linhas" e pode dar OK.


Isso criou uma coluna com tabelas encapsuladas com os dados agrupados pelo código do cliente.


Vamos agora criar uma nova coluna de tabelas encapsuladas incluindo dentro de cada tabela uma coluna índice iniciando em 1, pois assim saberemos que sempre que tiver um 1 em índice aquela terá sido a primeira compra.

Menu>Adicionar Coluna>Coluna Personalizada


Criando a nossa nova Tabela

Você pode verificar que numa função de Table em Power Query o primeiro argumento será sempre uma tabela, como temos na nossa coluna [Agrupado] tabelas, então podemos referenciar essa coluna como primeiro argumento da função. Os argumentos seguintes são, Nome da Coluna de índice, o índice inicial e o step, ou seja de quanto em quanto esse índice cresce.

= Table.AddIndexColumn([Agrupado], "indice", 1, 1)


E temos então nossa nova coluna de Tabelas encapsuladas agora com um índice dentro de cada uma delas.


Podemos então remover a primeira coluna "Agrupado".


E Vamos então agora expandir a coluna "Agrupado_ComIndice", extraindo somente "Data" e "indice".


Então vamos filtrar quem possui índice = 1 .


 E temos nossa tabela de Código de Clientes com a Data da primeira compra.


Vamos então levar esse dado para a nossa tabela de dimensão de Clientes, para que tenhamos uma unica tabela com esses dados, Nome, Código, Data de Cadastro e Data da Primeira Compra.

Iremos fazer isso indo em Pagina Inicial>Mesclar Consultas


Vamos selecionar na dCliente a coluna "Cod_Cliente" e na fVendas (2) a coluna "Cod_Cliente" e podemos dar OK.

Vai ser carregada uma coluna de tabelas encapsuladas da nossa fVendas (2) e vamos expandi-la selecionando apenas a coluna "Data" e na sequencia alterar o nome da coluna para "Data_PrimeiraCompra".




Vou desabilitar a carga da tabela fVendas(2) para que ela não apareça na minha modelagem, já que ela foi necessária apenas para criar um calculo. Cuidado para NÃO desabilitar a outra opção que é "Incluir na atualização do relatório".


4 - Agora Sim MODELAGEM - Calculando Novos Clientes.


Vamos então na nossa modelagem criar uma relação de Ambos sentidos entre dCalendario[Data] e dCliente[Data_PrimeiraCompra] , essa relação ficará inativa.


E criarmos então a nova medida com bem menos linhas para calcular os Nossos "novos Clientes.

Nessa função eu criei uma "CALCULATE" em que eu faço a contagem distintas de clientes ativando a relação entre dCliente e dCalendario usando como argumento da Filter da CALCULATE a função USERELATIONSHIP, que ativa o relacionamento para esse calculo especifico contido na minha calculate.

Dentro da USERELATIONSHIP a ordem de quem ficará no primeiro e no segundo argumento fará diferença então verifique se no seu exemplo no primeiro argumento esta a coluna da dimensão cliente e no segundo a coluna da dimensão Calendário.


Jogando essa função para dentro de um  Cartão temos então o mesmo resultado da função criada lá no inicio.


5 -  Calculando o Faturamento de Novos Clientes

A nossa segunda meta agora está mais próxima e iremos calcular os novos clientes.

Para isso preciso então dentro da minha função criar duas variáveis, datainicial e datafinal, que me trarão a menor data do período selecionado e a maior data do período selecionado.

Criaremos então uma "CALCULATE" que no primeiro argumento trará uma soma da minha fVendas[Valor] e usando também o "USERELATIONSHIP" usado no calculo da quantidade de clientes.

Se eu parasse apenas aqui o valor trazido iria ser errado, visto que ele iria identificar quais são os clientes novos no período selecionado e trazer TODAS as vendas em TODOS os períodos dos novos clientes, ou seja me traria a soma de vendas em períodos futuros ao selecionado.

Porque isso ocorre Rafael?

Simples, a USERELATIONSHIP é usada para ativar uma relação inativa e geralmente a utilizamos quando há outra relação ativa gerando ambiguidade de filtro, pois lembrem que a minha dCalendario filtra também a fVendas mas também a minha dCliente filtra a fVendas pelo código do cliente. Então quando ativamos a relação da dCalendário com a dCliente via "USERELATIONSHIP", automaticamente o Power BI desabilita (para esse calculo) a relação ativa entre dCalendario e fVendas, deixando assim a fVendas sem FILTRO DE DATA, ou seja para o calculo da expressão sum(fVendas[Valor]) ele vai pegar as vendas de todos os Periodos, filtrados apenas pelos clientes filtrados na "USERELATIONSHIP".

Portanto iremos usar um "Filtro Manual" na fVendas com as variaveis datainicial e datafinal inserindo um terceiro argumento na "CALCULATE" com a função "DATESBETWEEN"


Calculo finalizado jogamos a Medida em um Cartão e está calculando exatamente o faturamento de novos clientes no período de Fevereiro de 2019.


E é isso pessoal, espero que vocês tenham curtido esse artigo tanto quanto eu curti de faze-lo.
Usem, Abusem...

E se você chegou ao final desse artigo merece claro o link do Arquivo:

http://bit.ly/2HzBbcn

Grande abraço e até a próxima.

Comentários

  1. Mitoso como sempre ! Excelente exemplificação de um indicador complexo de se calcular , valeu mesmo Rafael!
    * Ainda bem que colocou o arquivo no final pq eu já ia pedir 😁

    ResponderExcluir
  2. Muito Bom Rafael! Sempre apanhamos pra conseguir essas informações.

    ResponderExcluir
  3. Parabéns Rafael, ainda não tinha visto essa abordagem para clientes novos. Bem bolado.

    ResponderExcluir
  4. Muito bom Rafael bacana aproveitando o assunto na questão de grande volumes de dados no caso do Powerbi qual seria a melhor abordagem de tratamento de dados modelagem para que sim depois possamos consumir no powerbi .

    ResponderExcluir
  5. Rafael meu nobre, obrigado pela excelente explicação tem ajudado muita gente com seu blog e seus vídeos. Parabéns

    ResponderExcluir
  6. Acho demais o conhecimento que vc poe nas formuluas, vc ja me deu uma dica uma vez no telegram, mas infelizmente continuo com a duvida que nao consigo resolver. Preciso acumular uma medida feita no USERELATIONSHIP. Crio ela, ela carrega o valor total ,mas ao apresentar ela na tabela ou grafico, ela nao atende ao eixo relacionado, ela atende a relacao ativa. Nao rola fazer um video desse nao? Abraco.

    ResponderExcluir
  7. Obrigado por me ajudar com este post justamente para uma necessidade do momento. Ao tentar baixar o modelo, o link apresentou que o arquivo não existe no google drive.

    ResponderExcluir
  8. E quando a tabela de clientes não vem com data de primeira compra?
    E supondo que eu queria filtrar um mês anterior e ver a quantidade de clientes que compraram a primeira vez naquele mês como consigo?

    ResponderExcluir
    Respostas
    1. Oi Francisco, mas no caso a minha tabela nao tinha também a primeira data se você olhar com atenção eu trouxe essa primeira data da propria tabela de vendas para a tabela de clientes, originalmente ela não tinha.

      Excluir
  9. Boa tarde,
    Estive a ler o seu tópico, pois estou com um problema semelhante.
    Se eu quisesse saber quais são esses novos clientes, como é que faria?

    ResponderExcluir
  10. ao baixar o arquivo apareceu a mensagem de que o mesmo não existe mais

    ResponderExcluir
  11. Parabens! Utilizei este artigo para saber quanto entrou de gado e o peso na fazenda em determinado perido. Super didatico!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

[Power BI] O totalizador da minha Tabela ou Matriz "NÃO BATE" e agora?

Olá amantes de visuais de tabela e matriz no Power BI, tudo bem? Hoje vamos falar de um caso que vejo bastante nos grupos do Power BI. “O calculo na linha está batendo mas no total não e agora?” Mas antes de iniciarmos, que tal deixar aquela sua inscrição marota no meu canal no youtube que está recheado de vídeos legais, vai lá seu pão duro de like youtube.com/rafaelmendonca Agora que você já aliviou sua pão-durice você merece conteúdo .... kkkkkkkk Vamos lá, temos então a seguinte tabela gerada no meu conjunto de dados Essa tabela possui uma lista de vendas realizadas por dois vendedores com o numero da ordem da venda, um valor unitário e uma quantidade de itens em cada venda. O que queremos é bem simples meu jovem, calcular o valor total de cada venda e ter um total de todas as vendas... Aí você muito garotão usa a seguinte expressão DAX: E depois joga isso numa tabela. Lindo neh??? Mas o totalizador trouxe um valor que não tem

[Power BI] Você está com erro nas suas funções DAX que até ontem funcionavam?

Hoje você acordou abriu seu Power BI tentou criar uma nova medida e está dando um erro chato como esse abaixo A sintaxe de ";" está incorreta ou até mesmo o Muitos argumentos foram passados para a função Bem não precisa se preocupar porque você não desaprendeu Power BI, a sintaxe deve estar correta, mas correta para o Padrão que usamos aqui no Brasil com o ; (ponto e virgula) como separador de lista e a ,  (vírgula) como separador de decimal. Na versão de Maio de 2020 o Power BI Desktop jogou como padrão para todos não mais o padrão regional da sua máquina mas o padrão internacional do DAX usando , (vírgula) como separador de lista e . (ponto) como separador de decimal. Sendo assim se você quiser continuar usando o padrão da máquina tem que alterar a opção indo em Arquivo Opções e Configurações e depois Opções Na caixinha que é aberta vá em Configurações Regionais na área Global E altere a opção que está  Recomendado  para  Usar separador do DAX Localizado Vai ser solicita

5 coisas no Power Query que talvez nunca tenham te explicado ou mostrado.

5 coisas no Power Query que talvez nunca tenham te explicado ou mostrado. O Power Query   é o editor de consultas utilizado tanto no PowerBI   quanto no Excel (em algumas versões) e que tem enorme poder de transformação dos dados importados de fontes diversas, sejam elas estruturadas ou não. Usuários menos experientes utilizam o  Power Query  apenas com cliques nos elementos do MENU, o que sim pode ajudar bastante, mas entender as funções e detalhes que estão por trás desses cliques podem enriquecer o seu  ETL , resolver problemas que nunca seriam feitos com o simples uso dos botões e te ajudarão numa certificação Microsoft. 1 - Sabendo o que está acontecendo: Uma das coisas principais e essenciais no uso do  Power Query  é que, mesmo utilizando os botões no Menu, você consegue identificar que funções estão sendo utilizadas. Vou mostrar isso de duas formas: Barra de Formulas - Dessa forma você pode acompanhar na barra de formulas