Ir para conteúdo

Blog dos Alunos

  • postagens
    74
  • comentários
    44
  • visualizações
    22.610

Contribuíram para este blog

13 Comentários


Comentários Recomendados

  • Membros
Acumulado = 
	VAR vDataMax = 
		CALCULATE(
			MAX(dCalendario[Data]),
			USERELATIIONSHIP(
				dCalendario[Data],
				fOnlineSales[DateShip]
			)
		)
RETURN
	SUMX(
		VALUES(dCalendario[Data]),
		USERELATIIONSHIP(
          dCalendario[Data],
          fOnlineSales[DateShip]
		),
		FILTER(
			ALL(dCalendario[Data]),
			dCalendario[Data] <= vDataMax
		)
	)
                                     

 

Link para o comentário
  • Membros
otal Vendido Acumulado Data Envio = 
    VAR MaxDiaContexto = MAX(dCalendario[ID Data])
RETURN
    CALCULATE(
        [Total Vendido],
        USERELATIONSHIP(
            dCalendario[ID Data],
            fVendas[Data Envio]
        ),
        FILTER(
            ALLSELECTED(dCalendario),
            dCalendario[ID Data] <= MaxDiaContexto
        )
    )

 

Link para o comentário
  • Membros
Total Vendido Acumulado Data Envio = 
    VAR MaxDiaContexto = MAX(dCalendario[ID Data])
RETURN
    SUMX(
        FILTER(
                ALLSELECTED(dCalendario[ID Data]),
                dCalendario[ID Data] <= MaxDiaContexto
            ),
        CALCULATE(
            [Total Vendido],
            USERELATIONSHIP(
                dCalendario[ID Data],
                fVendas[Data Envio]
            )
        )
    )

 

Link para o comentário
  • Membros


O visual está com ano e mês. Desta forma, a VALUES(dCalendario[Data]) retornará todas as datas do inicio do periodo (01/01/2017) até o final de cada mês. Logo, a SUMX estava calculando para cada data a soma do acumulado (obtida pela FILTER) e no final somava. OU seja, estava somando o acumulado em todas as datas daquele período.

O que fiz foi colocar a FILTER no arqumento inicial da SUMX e removendo da CALCULATE, dizendo para ela que eu quero somar o valor de venda para cada data determinada pela FILTER.

Não sei a minha explicação ficou clara.

Link para o comentário
  • Membros

Deixa eu corrigir minha explicação anterior. Não sei se está correta, mas é desta forma que entendo o cálculo que foi realizado.

Na CALCULATE, temos a medida Valor de Venda que será calculada entre a data de 01/01/2017 e a máxima data do mês de contexto. Isto é feito pela função FILTER, que filtra toda (função ALL) a tabela Calendario entre 01/01/2017 e a máxima data de contexto (função MAX). O relacionamento ativo é entre o campo data da dCalendario e o campo de data de pedido da fVendas, porém a USERELATIONSHIP modifica o relacionamento para o campo data da dCalendario e o campo Date de Envio da fVendas. Logo, o filtro da dCalendario percorre o relacionamento e filtra a fVendas pela data de envio. No final, a CACULATE realiza a soma do valor de venda com a tabela de fVendas filtrada da forma que falei, obtendo o acumulado. 

Agora vamos falar sobre a SUMX e a VALUES.

O visual está com ano e mês. Desta forma, a VALUES(dCalendario[Data]) retornará todas as datas do inicio do até o final de cada mês (Ex: fevereiro de 2017 terá as 28 datas deste mês e assim ocorrerá para os demais meses). Logo, a SUMX está somando 28 vezes o acumulado (função CALCULATE) em fevereiro de 2017, 31 vezes em Março e assim por diante.

Fiz as 2 medidas, a errada e a correta e depois fiz outra medida dividindo a errada pela correta. Veja o resultado:

image.png.edff2222e9adb2e2b84809d4d11e6e6f.png


Note que a relação entre a medida errada e a correta está justamente porque o acumulado está sendo somado várias vezes, mais precisamente, pelo número de dias de cada mês ou ano, dependendo do contexto.

 

Para corrigir isso, o que fiz foi colocar a FILTER no argumento inicial da SUMX e removendo da CALCULATE, dizendo para ela que eu quero somar o valor de venda para cada data determinada pela FILTER.

Espero ter ficado mais claro. Gostaria de saber qual a opinião de vocês e, caso esteja errado, expliquem o motivo, por favor. São estes desafios e as discussões que fazem a comunidade técnica crescer.

Seguem as medidas:

Total Vendido Acumulado Data Envio Errada = 
    SUMX(
        VALUES(dCalendario[ID Data]),
        CALCULATE(
            [Total Vendido],
            USERELATIONSHIP(
                dCalendario[ID Data],
                fVendas[Data Envio]
            ),
            FILTER(
                ALL(dCalendario[ID Data]),
                dCalendario[ID Data] <= MAX(dCalendario[ID Data])
            )
        )
    )

 

Total Vendido Acumulado Data Envio = 
    VAR MaxDiaContexto = MAX(dCalendario[ID Data])
RETURN
    SUMX(
        FILTER(
                ALL(dCalendario[ID Data]),
                dCalendario[ID Data] <= MaxDiaContexto
            ),
        CALCULATE(
            [Total Vendido],
            USERELATIONSHIP(
                dCalendario[ID Data],
                fVendas[Data Envio]
            )
        )
    )

 

 

Errado sobre certo = 
    DIVIDE(
        [Total Vendido Acumulado Data Envio Errada],
        [Total Vendido Acumulado Data Envio]
    )

 

 

Link para o comentário
  • Membros
Em 02/12/2021 em 22:38, Bruno Abdalla de Souza disse:

Deixa eu corrigir minha explicação anterior. Não sei se está correta, mas é desta forma que entendo o cálculo que foi realizado.

Na CALCULATE, temos a medida Valor de Venda que será calculada entre a data de 01/01/2017 e a máxima data do mês de contexto. Isto é feito pela função FILTER, que filtra toda (função ALL) a tabela Calendario entre 01/01/2017 e a máxima data de contexto (função MAX). O relacionamento ativo é entre o campo data da dCalendario e o campo de data de pedido da fVendas, porém a USERELATIONSHIP modifica o relacionamento para o campo data da dCalendario e o campo Date de Envio da fVendas. Logo, o filtro da dCalendario percorre o relacionamento e filtra a fVendas pela data de envio. No final, a CACULATE realiza a soma do valor de venda com a tabela de fVendas filtrada da forma que falei, obtendo o acumulado. 

Agora vamos falar sobre a SUMX e a VALUES.

O visual está com ano e mês. Desta forma, a VALUES(dCalendario[Data]) retornará todas as datas do inicio do até o final de cada mês (Ex: fevereiro de 2017 terá as 28 datas deste mês e assim ocorrerá para os demais meses). Logo, a SUMX está somando 28 vezes o acumulado (função CALCULATE) em fevereiro de 2017, 31 vezes em Março e assim por diante.

Fiz as 2 medidas, a errada e a correta e depois fiz outra medida dividindo a errada pela correta. Veja o resultado:

image.png.edff2222e9adb2e2b84809d4d11e6e6f.png


Note que a relação entre a medida errada e a correta está justamente porque o acumulado está sendo somado várias vezes, mais precisamente, pelo número de dias de cada mês ou ano, dependendo do contexto.

 

Para corrigir isso, o que fiz foi colocar a FILTER no argumento inicial da SUMX e removendo da CALCULATE, dizendo para ela que eu quero somar o valor de venda para cada data determinada pela FILTER.

Espero ter ficado mais claro. Gostaria de saber qual a opinião de vocês e, caso esteja errado, expliquem o motivo, por favor. São estes desafios e as discussões que fazem a comunidade técnica crescer.

Seguem as medidas:

Total Vendido Acumulado Data Envio Errada = 
    SUMX(
        VALUES(dCalendario[ID Data]),
        CALCULATE(
            [Total Vendido],
            USERELATIONSHIP(
                dCalendario[ID Data],
                fVendas[Data Envio]
            ),
            FILTER(
                ALL(dCalendario[ID Data]),
                dCalendario[ID Data] <= MAX(dCalendario[ID Data])
            )
        )
    )

 

Total Vendido Acumulado Data Envio = 
    VAR MaxDiaContexto = MAX(dCalendario[ID Data])
RETURN
    SUMX(
        FILTER(
                ALL(dCalendario[ID Data]),
                dCalendario[ID Data] <= MaxDiaContexto
            ),
        CALCULATE(
            [Total Vendido],
            USERELATIONSHIP(
                dCalendario[ID Data],
                fVendas[Data Envio]
            )
        )
    )

 

 

Errado sobre certo = 
    DIVIDE(
        [Total Vendido Acumulado Data Envio Errada],
        [Total Vendido Acumulado Data Envio]
    )

 

 

Boa tarde, @Bruno Abdalla de Souza acredito que seja isso mesmo, tirei o dia para tentar resolver hoje, acabei vendo aqui agora que foi respondido, foi até bom não tem visto antes, pois quebrei bastante a cabeça aqui, estava caminhando para fazer algo semelhante mesmo. aprendi muitos. cheguei a criar uma base para tentar identificar mais fácil a anomalia, acho que vai de encontro com que disse. o que observei pelas imagens foi isso veja: 

image.png.f7c505870a2ee4941d1f76673f20f803.pngimage.png.827d91de4797ef2ef81b686068d15e1f.pngimage.png.942c03b455cadec6c4f83af1e7f46ae7.png

Link para o comentário
  • Membros

Acho que o ponto chave é esse mesmo  A SUMX está somando o acumulado retornado da calculate para quantos dias existir no contexto, 28,30,31 devido a função values da calendário  estar trazendo todos registros sem o filtro. 

Link para o comentário

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Adicionar um comentário...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...