Leonardo Karpinski

Leonardo Karpinski

Mestre do Power BI, criador do Curso Express de Power BI e Curso Completo de Power BI. Formou mais de 16 mil alunos nos últimos anos e participou de projetos em grandes empresas nacionais e multinacionais.

Usando DAX para Segmentar Clientes por RFV: Recência, Frequência e Valor

Fala, galera! Tudo bem?! Hoje falaremos de um tópico avançado em DAX e que poderá te dar vários insights sobre sua carteira de clientes. Nosso objetivo será segmentar os clientes de acordo com a data de última compra, frequência e valor monetário.

Sabemos que a aquisição de novos clientes é importante para o crescimento de qualquer empresa. Entretanto, a manutenção dos clientes atuais tende a ser mais barata e mais rentável. Logo, gerenciar a carteira de clientes é fundamental.

Entre os oportunidades que mais gosto para a matriz RFV, temos:

  •  Categorizar melhor seus clientes;
  •  Entender pra onde o negócio está evoluindo;
  •  Identificar a frequência de compra dos clientes;
  •  Melhorar previsibilidade;
  •  Compor uma estratégia aderente de recorrência nas vendas;
  •  Categorizar a carteira de clientes conforme volume de compras – curva ABC;
  •  Estabelecer metas de vendas por cliente;
  •  Sugerir mix de compras para os clientes conforme seu histórico;
  •  Identificar a última data da compra para programar a próxima venda;
  •  Acompanhar a frequência que o cliente compra da empresa;
  •  Monitorar o valor médio de compra por cliente;
  •  Monetizar o cliente em todo o “ciclo de vida” na empresa;
  •  Estabelecer metas para os vendedores conforme estratégia, sazonalidade, estoque, lançamentos de produtos, etc;
  •  Maximizar as vendas para garantir previsibilidade orçamentária;
  •  Proteger a recorrência nas vendas backlog

Bom, acho que já te dei motivos suficientes para investir seu tempo na construção de uma matriz RFV, certo?!

RFV ou RFM

A sigla RFV significa Recência, Frequência e Valor. Veja as definições em detalhes:

RecênciaÉ a data de última compra do seu cliente
FrequênciaÉ a quantidade de vezes que seu cliente comprou um determinado produto 
ValorÉ o valor monetário de compra realizada por seu cliente neste mesmo determinado período
Tabela 1: Definições RFV


Lá fora essa sigla se chama RFM (recency, frequency and monetary). Há uma referência bem bacana nesse link explicando alguns conceitos e formas de uso dessa tipo de análise.

Fazendo uma busca na internet com esse termo em Inglês é possível facilmente encontrar alguns exemplos da representação dessas variáveis em matrizes:

Figura 1: Referência de visual para RFM
Fonte
Figura 2: Outra referência de visual para RFM
Fonte

Podemos ler esses gráficos da seguinte forma: quanto maior a recência, ou seja, quanto mais recente foi a data de última compra, mais para a direita está posicionado o cliente (maior valor no Eixo X). E quanto maior for o valor da compra, mais alta será a sua posição no Eixo Y. Veja que a segmentação Champions está no canto superior direito e esse é o nosso “melhor cliente”. Observe também que um novo cliente será sempre exibido em (R5;F1).

Há um exemplo bem legal também que o Renan Rodrigues fez em Power BI e disponibilizou neste link aqui.

Quando procuramos pelo mesmo termo em Português, encontramos a matriz invertida em relação ao Eixo X. Ou seja, o “melhor cliente” estará posicionado no canto superior esquerdo. Nós iremos trabalhar com a versão americana, beleza?! Mas deixo aqui a matriz versão Português para vocês darem uma olhadinha também!

Figura 3: Referência de visual para RFV
Fonte

Há duas formas de realizar a segmentação com base no RFV: Percentil (quartil) ou Regras de negócio. Nós iremos trabalhar com a segunda opção.

Cenário

Vamos imaginar que a nossa base de dados é de uma empresa de produtos eletrônicos online. Teremos as seguintes tabelas fvendas, dCalendario, dCliente (aquelas tradicionais que sempre usamos), beleza?!

Definindo as Regras de Negócio

As regras (segmentos) você quem saberá definir para o seu negócio. Vamos definir as segmentações do nosso exemplo assim:

1) Recência

R1Entre 181 e 360 dias
R2Entre 121 e 180 dias
R3Entre 61 e 120 dias
R4Entre 31 e 60 dias
R5Últimos 30 dias
Tabela 2: Recência

2) Frequência (quantidade de compras nos últimos 12 Meses):

F1 1 vez
F2 Entre 2 e 5 vezes
F3 Entre 6 e 9 vezes
F4 Entre 10 e 11 vezes
F5 12 vezes ou mais
Tabela 3: Frequência


O mesmo pode ser feito para o item 3) Valor, ok?! Vamos fazer apenas 1 e 2 para fins de exemplo.

Segmentação estática

Vamos começar com um exemplo de segmentação estática.

O primeiro passo será criar uma medida DAX para nos retornar a data de última compra:

Última Compra =
MAX ( fVendas[Data Venda] )

Vamos precisar também de uma medida para calcular a quantidade de vendas dos últimos 12 meses:

Qtd Vendas 12M =
CALCULATE (
    [Qtd Vendas];
    DATESINPERIOD (
        //Retorna todas as datas de 12 meses para trás
        dCalendario[Data];
        MAX ( dCalendario[Data] );
        -12;
        MONTH
    )
)

Agora vamos classificar os clientes de acordo com aquelas regras de negócio que falamos. Para isso, adicionaremos uma coluna calculada na tabela dCliente. Perceba que vamos testar algumas variáveis que serão utilizadas na nossa coluna calculada para que você possa acompanhar o resultado de cada variável. Vamos por partes!

Calculando o número de dias desde a última compra:

Recência =
VAR vToday =
    MAX ( dCalendario[Data] )
VAR vdiasUltimaCompra =
    DATEDIFF ( [Última compra]; vTodayDAY )
RETURN
    vdiasUltimaCompra

Note que não utilizamos a fórmula TODAY( ) na variável vToday porque no nosso exemplo a base está ‘estática’ (só tem dados até 2018), beleza?!

Essa variável vDiasUltimaCompra retornará a quantidade de dias passados após a última compra de cada cliente. A função DATEDIFF utilizando como último argumento DAY retornará o intervalo de dias entre as duas datas especificadas. Lembre-se que o primeiro argumento é a ‘menor’ data (mais antiga) e o segundo argumento é a ‘maior’ (mais recente).

Figura 4: Adicionando a Coluna calculada Recência

Repare que há linhas em branco na nossa coluna Recência porque há clientes na nossa base dClientes que nunca compraram. Um exemplo em que isso ocorre é quando nossa base possui prospects. Um prospect é um potencial cliente que deve se adequar a certos critérios. É como se o cliente ainda estivesse em fase de ‘negociação’.

Agora vamos usar a SWITCH pra classificar cada intervalo, veja:

Recência =
VAR vToday =
    MAX ( dCalendario[Data] )
VAR vDiasUltimaCompra =
    DATEDIFF ( [Última Compra], vTodayDAY )
VAR vResult =
    IF (
        [Última Compra],
        SWITCH (
            TRUE (),
            vDiasUltimaCompra <= 30“R5”,
            vDiasUltimaCompra <= 60“R4”,
            vDiasUltimaCompra <= 120“R3”,
            vDiasUltimaCompra <= 180“R2”,
            vDiasUltimaCompra <= 360“R1”,
            “R0”
        ),
        “R0”
    )
RETURN
    vResult

Observe que há um IF antes do SWITCH porque precisamos levar em conta aqueles valores em branco que mencionamos, lembra?! Esse IF vai verificar se existe valor na medida Última Compra. Se existir, usaremos a função SWITCH, caso contrário retornaremos R0. Veja o resultado:

Figura 5: Recência

Vamos fazer exatamente o mesmo para calcular a Frequência, veja:

Frequência =
VAR vQtdVendas12M = [Qtd Vendas 12M]
VAR vResult =
    IF (
        [Qtd Vendas 12M],
        SWITCH (
            TRUE (),
            vQtdVendas12M = 1“F1”,
            vQtdVendas12M <= 5“F2”,
            vQtdVendas12M <= 9“F3”,
            vQtdVendas12M <= 11“F4”,
            vQtdVendas12M >= 12“F5”,
            BLANK ()
        ),
        “F0”
    )
RETURN
    vResult

Vamos adicionar uma matriz para visualizar os dados que acabamos de construir. Basta selecionar a matriz e arrastar os campos conforme mostra a figura:

Figura 6: Matriz com Frequência e Recência

Note que se adicionarmos uma segmentação de data nessa página, a matriz não mudará seus valores porque estamos fazendo a segmentação estática, ok?!

Vamos fazer a segmentação dinâmica agora?!

Segmentação Dinâmica

Sabemos que não podemos adicionar medidas nos eixos dos gráficos, certo?! Então precisaremos criar duas tabelas auxiliares (para frequência e recência) e inserir aqueles valores que definimos anteriormente.

Tabelas Auxiliares

Vamos criar nossas tabelas auxiliares com base nas nossas regras de negócio (previamente definidas):

Figura 7: Inserindo tabela auxiliar para frequência

Faremos o mesmo para criar a tabela auxiliar de recência. As duas tabelas criadas (vRecencia e vFrequencia) ficaram assim:

Figura 8: Tabelas auxiliares

Veja que, após adicionar essas duas tabelas no modelo, o Power BI vai automaticamente criar um relacionamento entre elas (porque há uma coluna em comum: id). Mas não queremos isso! Precisaremos então deletar esse relacionamento criado pois essas tabelas auxiliares não devem estar relacionadas com nenhuma das tabelas do nosso modelo.

Figura 9: Excluindo relacionamento entre as tabelas auxiliares

Ao inserir um visual de tabela com ID Cliente, Frequencia, LimInf (Mínimo), LimSup (Máximo) e Qtd Vendas 12M notaremos que este último valor se repete em todos os segmentos (F1 a F5) mas o que queremos é que a quantidade apareça apenas no intervalo que definimos. Exemplo: quando a linha tiver Qquantidade igual a 5 , a coluna Frequencia deverá mostrar apenas Frequencia igual a F2. Bom, então precisaremos criar uma medida em DAX para corrigir isso, certo?!

Figura 10: Repetição de valores

Veja como ficou a medida:

Clientes RFV =
VAR vToday =
    MAX ( dCalendario[Data] )
VAR vResult =
    CALCULATE (
        [Clientes],
        FILTER (
            VALUES ( dCliente[ID Cliente] ),
            [Qtd Vendas 12M] >= MIN ( vFrequencia[LimInf] )
                && [Qtd Vendas 12M] <= MAX ( vFrequencia[LimSup] )
                && DATEDIFF ( [Última Compra], vTodayDAY ) >= MIN ( vRecencia[LimInf] )
                && DATEDIFF ( [Última Compra], vTodayDAY ) <= MAX ( vRecencia[LimSup] )
        )
    )
RETURN
    vResult

Como esta tabela sem relacionamento faz para interagir com o restante do gráfico?

Soares, Elizeu

Quando eu comparo essas medidas com as tabelas vFrequencia e vRecencia, o PBI faz por trás um relacionamento virtual.

Figura 11: Relacionamento virtual usando DAX

Veja que para qualquer nova análise que eu precise de um determinado valor na visão segmentada, precisamos criar uma nova medida e utilizar esse relacionamento virtual como foi feito em Clientes RFV.

Exemplo: vamos imaginar que precisamos do Total Vendas segmentado e já possuímos a medida Total Vendas. A nossa medida Total Vendas RFV ficará assim:

Total Vendas RFV =
VAR vToday =
    MAX ( dCalendario[Data] )
VAR vResult =
    CALCULATE (
        [Total Vendas],
        FILTER (
            VALUES ( dCliente[ID Cliente] ),
            [Qtd Vendas 12M] >= MIN ( vFrequencia[LimInf] )
                && [Qtd Vendas 12M] <= MAX ( vFrequencia[LimSup] )
                && DATEDIFF ( [Última Compra], vTodayDAY ) >= MIN ( vRecencia[LimInf] )
                && DATEDIFF ( [Última Compra], vTodayDAY ) <= MAX ( vRecencia[LimSup] )
        )
    )
RETURN
    vResult

Observe que ela é idêntica a Clientes RFV e só muda o primeiro argumento da função CALCULATE.

Perceba que comparando essas duas formas de segmentação (estática e dinâmica) podemos ver que quando editamos o filtro Data, a matriz estática continua apresentando os mesmos valores enquanto a matriz dinâmica respeita esse filtro externo e altera corretamente seus valores.

Figura 12: Comparando as segmentações dinâmica e estática

Drill-through em botões

Agora vamos usar um recurso bem bacana que surgiu na última atualização do Power BI Desktop (botão que ativa o drill-through).

Vamos primeiro criar uma página para detalhar os clientes de acordo com a faixa selecionada. Veja:

Etapas:
Crie uma nova página  Insira uma matriz de detalhamento de clientes  No painel Visualizações, arraste as colunas Frequencia e Recencia (das tabelas vFrequencia e vRecencia)  Renomeie essa página para "Detalhes"
Figura 13: Criando uma página de drill-through

Após adicionar as colunas Frequencia e Recencia em Drill-trhough automaticamente aparecerá um botão de Voltar.

Voltando na página que estávamos antes (com as matrizes), vamos adicionar um botão em branco.

Etapas:
Inserir  Botões  Em branco  No painel Visualizações  Ative a opção Ação  Selecione o nome da página que acabamos de criar (Detalhes)
Figura 14: Adicionando um botão para o drill-through

Após adicionar esse botão, basta formatá-lo:

Formatação:
No painel Visualizações  Ative Texto do botão  Com Estado Padrão selecionado, mude o Texto do botão para "Detalhar Clientes"  Com Desabilitado selecionado, mude o Texto do Botão para "Selecione uma Faixa"
Figura 15: Formatando o botão de drill-through

Qual a diferença entre drill-down e drill-through?

Matheus Lima

O Drill-through é quando queremos expandir mais detalhes em relação ao visual que temos (esse exemplo que fizemos mostra mais informações que aquelas que selecionamos na matriz). Já o Drill-down é quando você quer navegar de uma hierarquia para outra. Exemplo: você está numa visualização de ano e vai para uma visualização mensal. Veja:

Figura 16: Drill-Down / Up

Bom, pessoal, esse foi o conteúdo da nossa Live#23 ! Espero que tenham percebido a importância da segmentação de clientes e o leque de insights que passam a ficar disponíveis a partir da análise da matriz RFV.

Se ficou com alguma dúvida ou tem sugestão de um tema para a próxima Live deixa nos comentários.

Um abraço,
Leonardo.

COMPARTILHE ESSE POST

Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no pinterest