2
respostas

FILTRO DE VISUAL

ola , tenho um dash com duas tabelas elencando produtos e preço medio realizado, a tabela um interage com um filtro de cliente (vamos chamar os dados de cliente1) a tabela 2 interage com outro filtro de cliente (vmos chamar de cliente2), eu estou tentando criar um campo na tabela 2 que mostre a diferenca do preço praticado entre os 2 clientes para os produtos em comum entre eles, criei a medida abaixo mas nao respeita os clientes selecionados no filtro do cliente1.

Variacao_PM_Entre_Clientes =
VAR Ano = SELECTEDVALUE('CALENDÁRIO'[Date].[Ano])
VAR MesSel = SELECTEDVALUE('CALENDÁRIO'[Date].[MonthNo])
VAR DtInicial = DATE(Ano, MesSel, 1)
VAR DtFinal = EOMONTH(DtInicial, 0)

VAR SKUAtual = SELECTEDVALUE(dProdutos[SKU])
VAR ClientesFiltro1 = VALUES(dCliente[CODIGOCLIENTE]) -- DO FILTRO 1

VAR BaseFiltro1 =
CALCULATETABLE(
fPedidos,
TREATAS(ClientesFiltro1, dCliente[CODIGOCLIENTE]),
fPedidos[ITE_REFERENCIA] = SKUAtual,
fPedidos[GRA_DATADIGITA] >= DtInicial,
fPedidos[GRA_DATADIGITA] <= DtFinal
)

VAR Receita1 = SUMX(BaseFiltro1, fPedidos[Receita Liquida])
VAR Qtde1 = SUMX(BaseFiltro1, fPedidos[QUANTIDADE])
VAR PM1 = DIVIDE(Receita1, Qtde1)

VAR PM2 = [Cliente2PLSelecionado] -- já assume o cliente 2 do contexto atual

var resultado =
IF(
ISNUMBER(PM1) && ISNUMBER(PM2) && PM1 > 0,
DIVIDE(PM2, PM1, 0) - 1,
BLANK()
)

RETURN Receita1

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Ei, Rafael! Tudo bem?

Que legal ver o seu projeto pessoal, obrigada por compartilhar.

O problema pode estar na medida que não isola corretamente o contexto do Cliente1, já que está pegando o filtro diretamente da visualização.

Teste remover o contexto do filtro de Cliente2 e aplicar manualmente o Cliente1 na medida. Por exemplo:

Variacao_PM_Entre_Clientes = 
VAR Ano = SELECTEDVALUE('CALENDÁRIO'[Date].[Ano])
VAR MesSel = SELECTEDVALUE('CALENDÁRIO'[Date].[MonthNo])
VAR DtInicial = DATE(Ano, MesSel, 1)
VAR DtFinal = EOMONTH(DtInicial, 0)
VAR SKUAtual = SELECTEDVALUE(dProdutos[SKU])
VAR Cliente1Selecionado = SELECTEDVALUE('FiltroCliente1'[CODIGOCLIENTE])

-- Remove filtro atual e aplica o Cliente1 manualmente
VAR BaseCliente1 =
CALCULATETABLE(
    fPedidos,
    REMOVEFILTERS(dCliente),
    dCliente[CODIGOCLIENTE] = Cliente1Selecionado,
    fPedidos[ITE_REFERENCIA] = SKUAtual,
    fPedidos[GRA_DATADIGITA] >= DtInicial,
    fPedidos[GRA_DATADIGITA] <= DtFinal
)

VAR Receita1 = SUMX(BaseCliente1, fPedidos[Receita Liquida])
VAR Qtde1 = SUMX(BaseCliente1, fPedidos[QUANTIDADE])
VAR PM1 = DIVIDE(Receita1, Qtde1)

-- PM2 continua pegando do cliente 2 no contexto atual
VAR PM2 = [Cliente2PLSelecionado]

RETURN
IF(
    ISNUMBER(PM1) && ISNUMBER(PM2) && PM1 > 0,
    DIVIDE(PM2, PM1, 0) - 1,
    BLANK()
)

Além disso, verifique o relacionamento entre as tabelas para garantir que esteja certinho.

Rafael, como faz parte de um projeto no qual não temos total conhecimento e acesso para entender o contexto, consigo apenas te orientar com sugestões para que você avalie se faz sentido e teste em seu ambiente.

Espero que as sugestões sejam um bom ponto de partida para te auxiliar.

Continue se dedicando aos estudos e qualquer dúvida, compartilhe no fórum.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!

ola mt obrigado , fiz algumas alteracoes pois o filtro pode trazer mais de um cliente, no entanto , fiz alguns testes e a medida esta trazendo o valor de todas as vendas ele nao consegue entender o filtro do cliente 1 q criamos

Variacao_PM_Entre_Clientes =
VAR Ano = SELECTEDVALUE('CALENDÁRIO'[Date].[Ano])
VAR MesSel = SELECTEDVALUE('CALENDÁRIO'[Date].[MonthNo])
VAR DtInicial = DATE(Ano, MesSel, 1)
VAR DtFinal = EOMONTH(DtInicial, 0)
VAR SKUAtual = SELECTEDVALUE(dProdutos[SKU])
VAR Cliente1Selecionado = VALUES(dCliente[CODIGOCLIENTE])

-- Remove filtro atual e aplica o Cliente1 manualmente
VAR BaseCliente1 =
CALCULATETABLE(
fPedidos,
REMOVEFILTERS(dCliente),
dCliente[CODIGOCLIENTE] IN Cliente1Selecionado,
fPedidos[ITE_REFERENCIA] = SKUAtual,
fPedidos[GRA_DATADIGITA] >= DtInicial,
fPedidos[GRA_DATADIGITA] <= DtFinal
)

VAR Receita1 = SUMX(BaseCliente1, fPedidos[Receita Liquida])
VAR Qtde1 = SUMX(BaseCliente1, fPedidos[QUANTIDADE])
VAR PM1 = DIVIDE(Receita1, Qtde1)

-- PM2 continua pegando do cliente 2 no contexto atual
VAR PM2 = [Cliente2PLSelecionado]

VAR RESU =
IF(
ISNUMBER(PM1) && ISNUMBER(PM2) && PM1 > 0,
DIVIDE(PM2, PM1, 0) - 1,
BLANK()
)

RETURN Receita1