Então… Continuando a saga das visões para o cliente kkkkkkk. Mas brincadeiras a parte, nosso trabalho como analista é gerar insights e resolver problemas da vida real que gerem valor para nossos clientes/usuários.
O Problema
No último post falei da visão Full Year e Year to Date, mas agora o cliente falou que quer ver também a visão dos últimos 3 meses, Last 3 Months. O problema é que meu modelo de dados nesse report é um pouco mais complexo do que o normal, deixa eu explicar por cima…
Meu modelo tem 2 tabelas de datas, uma que controla a data de referencia e outro a data de input. Então pra cada mês de referencia eu tenho um ano inteiro de input. E claro, os últimos 3 meses não podem levar como base o mês atual, e sim o mês filtrado na data de referencia.

Primeiros Passos
Então quando o cliente fala que quer os últimos 3 meses na verdade ele quer os meses Março, Abril e Maio e não Outubro, Novembro e Dezembro, porém, se mudarmos a seleção da data de referencia pra o mês 4 os últimos 3 meses também vão mudar, você entendeu, rs!
A lógica do cálculo em si é simples, basta pegar duas variáveis, uma que retorne a data para o mês que corresponde ao filtro da data de referencia, e outra com a data de 3 meses atrás.

Na imagem acima temos um exemplo simples do que precisamos fazer. O desafio é gerar as medidas que vão nos retornar DataIni e DataFim.
Antes de começar, vamos ver o que temos:

A medida “teste 3 month” está com o código da imagem anterior. Nosso objetivo é automatizar isso.
Mão na massa
Já sabemos o que precisamos, vamos criar uma medida que retorne a data fim, porque essa é a data que vem do meu filtro da data de referencia.
Pra “facilitar” o filtro que tenho na minha data de referencia não é numa coluna data, e sim numa coluna texto, que retorna várias datas. Veja na imagem anterior o slicer LE Version que está em 5+7, isso significa que estou no mês 5.

Pra conseguir pegar a data da seleção do filtro da data referencia eu criei 3 VAR.
Na VAR maxDateReference eu pego o max da data. Eu faço isso porque dDateReference[DateReference] não é um valor scalar, ele nesse momento tá trazendo uma lista de datas e eu só quero uma, qualquer uma, não importa, porque sei que todas as datas estão no mesmo mês.
Depois, na VAR monthDt eu pego o MONTH() dessa data, que vai ser 5, porque meu filtro da date reference tá em 5+7.
Depois, na VAR vDateEnd eu calculo mesmo a data de corte que preciso, o resultado aqui vai ser 01-05-2021. Perceba que no FILTER() eu verifico qual data é igual ao mês que peguei nas VARs acima e também filtro pra tirar fora os blanks.
Tirar os BLANKS() ali foi necessário pra garantir que só vamos tratar de campos que tem valores, caso contrário o resultado seria null porque como estrou trazendo MIN() de dateInput com FILTER() de ALL() de dateInput no mes 5, logo, o resultado seria o valor mínimo do mes 5 de toda minha tabela de dateInput, que no caso é 01/05/2020. Ah, e eu sei que não vou ter dados em 2020 porque na tela tenho um slicer filtrando 2021, caso contrário essa fórmula não funcionaria, hehe.
Com isso, finalizamos nossa data fim.

Na imagem acima já ajustei a fórmula pra usar nossa nova fórmula que criamos agora.
Na sequencia preciso criar a data de inicio, que nada mais é do que a data fim 3 meses atrás. Pra isso vou usar a função EDATE(), que eu não conhecia, só fui conhecer resolvendo esse problema e quem me apresentou ela foi o Fred, o mago!

Perceba que mudei o sinal da lógica, por conta do resultado que EDATE() me retorna.
Pronto, a medida está finalizada, o resultado é exatamente o mesmo que tinhamos no começo, mas agora com medidas automáticas =)

Extra, adicionando a medida no slicer
Talvez vocês tenham percebido que agora além de Full Year, Year to Date temos Last 3 Months no slicer que temos no report, de forma que o usuário pode escolher como quer ver seus dados.
Eu expliquei como criar esse slicer nesse post aqui.
Pra adicionar mais uma opção no slicer você precisa:
- alterar sua tabela criada manualmente, editando source e adicionando Last 3 Month

2. Adicionar na sua medida Switch, que expliquei como fazer nesse post, mais uma fórmula, que vai retornar o Last 3 Months.

Básicamente é isso pessoal, qualquer dúvida, deixem aí nos comentários!
Muito bom.
Mas você conseguiu fazer também com CALCULATETABLE?
Estou tendo este problema. Tentando gerar uma tabela dinamicamente a partir de filtro de data de corte e só funciona com hardcode.
Se vc puder dar uma luz, muito agradeço!
Regiao_Anterior =
–Com o valor que vem do Slider, não funciona
–var vDias = Slider[Slider Value]
–Com o valor hardcode, funciona
var vDias = 2
var vCNPJAnterior =
DISTINCT(
SELECTCOLUMNS(
CALCULATETABLE(‘Export’,
‘Export'[EMISSAO] < MAXX('Export', 'Export'[EMISSAO]) – vDias
)
, "CNPJ"
, 'Export'[CNPJ]
)
)
return vCNPJAnterior
LikeLike