Alunos Celso Spina Postado Setembro 9, 2021 Alunos Compartilhar Postado Setembro 9, 2021 Pessoal, estou tentando calcular o Churn (clientes perdidos), mas a fórmula DAX é bem complexa. Preciso contar o número de clientes que compraram no mês atual, mas não compraram no mês posterior e nem no mês anterior (ou período 1 a 12) . Ou seja: varResultadoAtual > 0 && varResultadoMesPosterior = 0 && varResultadoPeriodo = 0 Clientes Perdidos Churn 2 = VAR varResultadoAtual = [Resultado] VAR varResultadoMesPosterior = [Resultado Mês Posterior] VAR varResultadoPeriodo = [Resultado Período] RETURN IF( varResultadoAtual > 0 && varResultadoMesPosterior = 0 && varResultadoPeriodo = 0, 1, BLANK() ) Fazendo por IF funcionou, mas não conta na tabela e nem contabiliza nos meses. Quando coloco numa matriz pelo tempo, ele não mostra. Onde: [Período Valor] É um What if que você pode selecionar de 1 a 12. [Resultado] Resultado = SUM(fFaturamento(resultado)) [Resultado Período] Resultado Período = CALCULATE( [Resultado], DATESINPERIOD( 'dCalendário'[Data], [Data Final], [Período Valor] * -1, MONTH ) ) [Resultado Mês Posterior] Resultado Mês Posterior = CALCULATE( [Resultado], NEXTMONTH('dCalendário'[Data]) ) Acredito que tem de ser algum CALCULTAE com vários FILTER, mas não consigo desenvolver. FILTER( ADDCOLUMNS( VALUES('fFaturamento[IDCliente]), "Posterior", CALCULATE( SUM('fFaturamento'[Resultado]), NEXTMONTH('dCalendário'[Data]) ) ), [Posterior] = 0 ) Alguma ideia? Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Solução Rodrigo R1 Postado Setembro 10, 2021 Alunos Solução Compartilhar Postado Setembro 10, 2021 Amigo @Celso Spina, conforme solicitado, segue a solução: Churn = var clientesatuais = values(fVendas[IDCliente]) var clientesantigos = CALCULATETABLE( VALUES(fVendas[IDCliente]), DATEADD('dCalendário'[Data], -1, MONTH)) var clientesposterior = CALCULATETABLE( VALUES(fVendas[IDCliente]), DATEADD('dCalendário'[Data], +1, MONTH)) var uniao = UNION(clientesantigos, clientesposterior) var excecao = EXCEPT(clientesatuais, DISTINCT(uniao)) return COUNTROWS(excecao) Só copiar a medida e jogar no seu modelo. Sucesso aí, amigo. Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Rodrigo R1 Postado Setembro 9, 2021 Alunos Compartilhar Postado Setembro 9, 2021 Boa tarde, @Celso Spina. Tudo bem? A lógica para sua solução eu acho melhor utilizar a teoria de conjuntos. Já tentou por ela? No curso procura por "clientes novos" - só usar o mesmo raciocínio. Por ela você irá criar tabelas e depois usar a função EXCEPT para extrair uma nova tabela. Feito isso, vc faz um COUNTROWS dessa tabela de exceção. Assim: Medida = var clientesatuais = VALUES(fato(idclientes) var clientesantigos = CALCULATABLE( VALUES(fato(idclientes), DATEADD(dcalendario(data), - 1, MONTH)) var excecao = EXCEPT(clientesantigos, clientesatuais) return COUNTROWS(excecao) Dessa forma, vc irá encontrar os clientes que compraram no mês anterior ao contexto e não compraram no mês atual (do contexto). Espero que tenha ajudado. Abraço e sucesso aí, amigo. Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Celso Spina Postado Setembro 9, 2021 Autor Alunos Compartilhar Postado Setembro 9, 2021 7 minutos atrás, Rodrigo R1 disse: Boa tarde, @Celso Spina. Tudo bem? A lógica para sua solução eu acho melhor utilizar a teoria de conjuntos. Já tentou por ela? No curso procura por "clientes novos" - só usar o mesmo raciocínio. Por ela você irá criar tabelas e depois usar a função EXCEPT para extrair uma nova tabela. Feito isso, vc faz um COUNTROWS dessa tabela de exceção. Assim: Medida = var clientesatuais = VALUES(fato(idclientes) var clientesantigos = CALCULATABLE( VALUES(fato(idclientes), DATEADD(dcalendario(data), - 1, MONTH)) var excecao = EXCEPT(clientesantigos, clientesatuais) return COUNTROWS(excecao) Dessa forma, vc irá encontrar os clientes que compraram no mês anterior ao contexto e não compraram no mês atual (do contexto). Espero que tenha ajudado. Abraço e sucesso aí, amigo. Rodrigo, obrigado. Já tentei isso, mas são 3 conjuntos para combinar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Rodrigo R1 Postado Setembro 9, 2021 Alunos Compartilhar Postado Setembro 9, 2021 Celso, mas se vc pensar bem, o segundo conjunto seria formado então pelo período anterior e posterior - já que vc quer retirar o atual dos 2 períodos ao mesmo tempo. Assim, penso que poderia unir esses 2 períodos em 1 só, e depois disso fazer a exceção do período atual. Daí iria encontrar o que precisa. Será que assim num daria pra combinar? Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Celso Spina Postado Setembro 9, 2021 Autor Alunos Compartilhar Postado Setembro 9, 2021 Até penso que sim. mas a questão é que um conjunto tem faturamento e outro não. Não sei como calcular os que não tem faturamento. Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Rodrigo R1 Postado Setembro 10, 2021 Alunos Compartilhar Postado Setembro 10, 2021 Celso, boa noite. Consegue disponibilizar uma base fictícia? Acredito ser mais fácil pra gente analisar ajudar a encontrar uma solução para o que vc precisa. Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Celso Spina Postado Setembro 10, 2021 Autor Alunos Compartilhar Postado Setembro 10, 2021 Rodrigo, segue arquivo: O mês em análise é julho 2021. Cálculo Churn Dados Fictícios 20210910.pbix Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Celso Spina
Pessoal,
estou tentando calcular o Churn (clientes perdidos), mas a fórmula DAX é bem complexa.
Preciso contar o número de clientes que compraram no mês atual, mas não compraram no mês posterior e nem no mês anterior (ou período 1 a 12) .
Ou seja:
varResultadoAtual > 0 &&
varResultadoMesPosterior = 0 &&
varResultadoPeriodo = 0
Clientes Perdidos Churn 2 = VAR varResultadoAtual = [Resultado] VAR varResultadoMesPosterior = [Resultado Mês Posterior] VAR varResultadoPeriodo = [Resultado Período] RETURN IF( varResultadoAtual > 0 && varResultadoMesPosterior = 0 && varResultadoPeriodo = 0, 1, BLANK() )
Fazendo por IF funcionou, mas não conta na tabela e nem contabiliza nos meses.
Quando coloco numa matriz pelo tempo, ele não mostra.
Onde:
[Período Valor]
É um What if que você pode selecionar de 1 a 12.
[Resultado]
Resultado = SUM(fFaturamento(resultado))
[Resultado Período]
Resultado Período = CALCULATE( [Resultado], DATESINPERIOD( 'dCalendário'[Data], [Data Final], [Período Valor] * -1, MONTH ) )
[Resultado Mês Posterior]
Resultado Mês Posterior = CALCULATE( [Resultado], NEXTMONTH('dCalendário'[Data]) )
Acredito que tem de ser algum CALCULTAE com vários FILTER, mas não consigo desenvolver.
FILTER( ADDCOLUMNS( VALUES('fFaturamento[IDCliente]), "Posterior", CALCULATE( SUM('fFaturamento'[Resultado]), NEXTMONTH('dCalendário'[Data]) ) ), [Posterior] = 0 )
Alguma ideia?
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Faça login para comentar
Você vai ser capaz de deixar um comentário após fazer o login
Entrar Agora