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)
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?
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
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 .
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
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.
Mitoso como sempre ! Excelente exemplificação de um indicador complexo de se calcular , valeu mesmo Rafael!
ResponderExcluir* Ainda bem que colocou o arquivo no final pq eu já ia pedir 😁
Muito Bom Rafael! Sempre apanhamos pra conseguir essas informações.
ResponderExcluirParabéns Rafael, ainda não tinha visto essa abordagem para clientes novos. Bem bolado.
ResponderExcluirMuito 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 .
ResponderExcluirRafael meu nobre, obrigado pela excelente explicação tem ajudado muita gente com seu blog e seus vídeos. Parabéns
ResponderExcluirAcho 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.
ResponderExcluirObrigado 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.
ResponderExcluirE quando a tabela de clientes não vem com data de primeira compra?
ResponderExcluirE 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?
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.
ExcluirBoa tarde,
ResponderExcluirEstive 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?
ao baixar o arquivo apareceu a mensagem de que o mesmo não existe mais
ResponderExcluirParabens! Utilizei este artigo para saber quanto entrou de gado e o peso na fazenda em determinado perido. Super didatico!
ResponderExcluir