Ir para conteúdo
  • 0

Duvida de Contexto sobre a Live #2


Matheus Henrique .
Ir para solução Solucionado por Erick Oliveira ,

Pergunta

  • Alunos

Fala time.
Tudo beleza.

Hoje encerrei o modulo de Dax da Trilha 1 do curso completo, nessa live em especifico o mestre Karpiski estava falando sobre inteligencia de tempo.

E ele trouxe um desafio onde basicamente e uma analise utilizada para clientes que pagam com recorrencia, e se por ventura voce perde ele, quanto voce deixaria de ganhar ate o fim do ano. 

Ex. Ganhava 100 reais todo mes, so que perdi esse clientes em fevereiro por exemplo, entao eu deixaria de ganhar esse 100 reais 11 vezes que em dezembro daria o valor total futuro.

So que ele mostrou como ele construiu, mas nao entrou muito em detalhe.

Abaixo foi a funcao e a ideia que ele aplicou.

VAR MesContexto = MAX(dCalendario[Mês])
VAR ProjecaoAno =
SUMX(
    DATESYTD(dCalendario[Data]), //Para cada contexto de mês eu preciso varrer novamente desde o início do ano, até o último dia do contexto
    VAR MesIteracao = CALCULATE(MAX(dCalendario[Mês]))
    RETURN
    [Churn] * (MesContexto - MesIteracao + 1)
)
RETURN
ProjecaoAno


Tenhos tres duvidas que surgiu fucando

1 - Por que ele utilizou uma variavel dentro da funcao? eu testei colocar a variavel fora e so chamar ele dentro da funcao, mas nao atendeu o que precisava.
2 - Se eu criar uma medida CALCULATE(MAX(dCalendario[Mês])) fora e chamar ae funcionar normal.
3 - Porque tem essa aplicacao difrente entre usar uma variavel, ter uma medida fora ou aplica-la dentro da formula. Na teoria nao deveria ser o mesmo?


Video da live e o tempo que ele mostra a medida inicia no 56:00
 

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Boa noite @Matheus Henrique .;

É totalmente diferente chamar a função MAX() dentro e fora da iteração da SUMX por conta da transição de contexto.

Quando você chama ela fora da SUMX, o resultado de MAX(dCalendario[Mês]) será um valor único baseado no contexto de filtro completo da medida no momento da execução. Veja no exemplo abaixo como a medida retorna o maior valor do seu contexto atual:

image.png.a1b76d0899617f7a4e30d7fd2ac3e9d5.png

Porém, quando entramos na expressão de uma SUMX, entramos em um contexto de linha, garantindo que ela seja recalculada para cada linha do contexto de iteração, no seu exemplo, as linhas da tabela gerada por DATESYTD(dCalendario[Data]). O detalhe é que, se não encapsularmos a função MAX() em uma CALCULATE(), dentro da SUMX, não será feito a transição de contexto, então sua medida retornará um valor indesejado.

Ainda dentro da SUMX, se você criar uma outra medida fora chamada "Maior Mês = MAX(dCalendario[Mês])", e chamar essa medida dentro da SUMX, ainda sim dará certo, porque medidas realizam transição de contexto.

Usar a variável ou não dentro do SUMX é indiferente (nesse caso), escrever da forma abaixo da o mesmo resultado, com o mesmo desempenho. Seria apenas para melhor legibilidade. 

[Churn] * (CALCULATE(MAX(dCalendario[MesAno])) - MesIteracao + 1)

 

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 1
  • Alunos

@Matheus Henrique ., está correto seus dois pontos.

Um exercício que me ajudou bastante no entendimento das funções iteradores foi exportar minhas bases para excel, e tentar chegar no resultado de diferentes funções (SUMX, AVERAGEX...)  fazendo o cálculo na mão. Me obrigou a entender a operação que elas fazem internamente.

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa tarde @Erick Oliveira
Beleza, obrigado pela expliacao clara e objetiva explicando como funciona.

Desculpe a demora no retorno, estava assimiliando junto a sua explicacao. 

Entao resumidamente e

1 - Quando utiliza o MAX  dentro da variavel e jogo ela de volta na expressao do SUMX ele se mantem com base no filtro completo de execucao.

2 - Quando utilizo dentro da SUMX seja com a variavel dentro dela ou apenas chamando conforme seu exemplo juntamente com a Calculate eu aplico a transicao de contexto. E por isso que quando criei uma medida fora e chamei essa transicao ja acontece.

 

E como se fosse dois ambientes totalmente diferentes fora e dentro da SUMX.

 

Obrigado meu parceiro.

Tmj

 

 

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...