Ir para conteúdo
  • 0

Comparar valores de entrada com valores de saída


Joao Raulino
Ir para solução Solucionado por Edson Igari ,

Pergunta

  • Alunos

Boa galera!

Tenho duas plantas industriais (Norte e Oeste) que são compostas por diversas linhas de produção (NOR402, NOR134, NOR256... OES203, OES360, OES411).

De tempos em tempos se realizam testes de calibragem, de modo a comparar se a soma de todos os volumes que entram nas linhas ( Σ fEntradaLinha[Valor] ) é igual ao volume total que sai na planta ( fSaidaPlanta[Valor] ).

Quero criar uma tabela onde eu tenha a lista dos testes realizados com as linhas impactadas, a data de incio/fim, o volume individual de cada linha, a soma dessas linhas, e o volume total da planta:

image.png.0bbe853698bf473778f5948028ee03b7.png

Já consegui por o volume individual de cada linha, porem quando junto a soma das linhas e o volume total da planta a tabela retorna um resultado completamente incoerente:

image.png.28b79f55fccf93ffe8c40e88f8b564ca.png

As medidas que estou utilizando são essas:

Citar
$ Volume Entrada =
CALCULATE(
    AVERAGE(fEntradaLinha[Valor]),
    FILTER(
        ALL(fEntradaLinha),
        fEntradaLinha[Atributo] = "Vazao" &&
        fEntradaLinha[Linha] = MAX(fTestesRealizados[Linha]) &&
        fEntradaLinha[Data] >= MIN(fTestesRealizados[DataInicio]) &&
        fEntradaLinha[Data] <= MAX(fTestesRealizados[DataFim]) &&
        fEntradaLinha[PlantaCurto] = SELECTEDVALUE(dPlantas[PlantaCurto]) &&
        YEAR(fEntradaLinha[Data]) = SELECTEDVALUE(dCalendario[Ano])
    )
)
Citar
$ Volume Entrada Total =
CALCULATE(
    AVERAGE(fEntradaLinha[Valor]),
    FILTER(
        ALL(fEntradaLinha),
        fEntradaLinha[Atributo] = "Vazao" &&
        fEntradaLinha[Data] >= MIN(fTestesRealizados[DataInicio]) &&
        fEntradaLinha[Data] <= MAX(fTestesRealizados[DataFim]) &&
        fEntradaLinha[PlantaCurto] = SELECTEDVALUE(dPlantas[PlantaCurto]) &&
        YEAR(fEntradaLinha[Data]) = SELECTEDVALUE(dCalendario[Ano])
    )
)
Citar
$ Volume Saida Total =
CALCULATE(
    AVERAGE(fEntradaLinha[Valor]),
    FILTER(
        ALL(fSaidaPlanta),
        fSaidaPlanta[Atributo] = "Vazao" &&
        fSaidaPlanta[Medidor] IN {"Teste A", "Teste A+B"} &&
        fSaidaPlanta[Data] >= MIN(fTestesRealizados[DataInicio]) &&
        fSaidaPlanta[Data] <= MAX(fTestesRealizados[DataFim]) &&
        fSaidaPlanta[PlantaCurto] = SELECTEDVALUE(dPlantas[PlantaCurto]) &&
        YEAR(fSaidaPlanta[Data]) = SELECTEDVALUE(dCalendario[Ano])
    )
)

E por conta da complexidade do modelo completo, o relacionamento entre tabelas que tenho é esse:

image.png.d1fe965911030895dd9aa57a1f124ff5.png

Em anexo coloquei um modelinho simplificado para vocês irem testando as soluções 😉

Abs!

fLinhas.csv ComparacaoEntradaSaida.pbix

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Mestre @Joao Raulino, veja se é isso.
 

Fiz validação em uma das linhas jogando os dados no excel e aparentemente está correto.

Entrada Linha (01/01/2022 00:00:00 a 01/01/2022 12:00:00): NOR402
image.png.12e6b648d71ac97928dd19bc42015c2b.png

Entrada total PlantaCurto (01/01/2022 00:00:00 a 01/01/2022 12:00:00): NOR
image.png.8a080c28742d4f7b66b560cb0079a603.png

ComparacaoEntradaSaida (2).pbix

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

  • 1
  • Alunos

Boa tarde @Joao Raulino;

Acredito que o desafio maior seja a modelagem, dei uma mexida para minimizar a complexidade das medidas, mas acredito que ainda dê para melhorar.

Levei as datas dos testes para as tabelas fatos:

image.png.6835acb762073aa4b609c44a2f5bf096.png

 

Abaixo as medidas:

Entrada = 
VAR _DataInicio =
    TREATAS ( VALUES ( fTestesRealizados[DataInicio] ), fEntradaLinha[DataInicio] )
VAR _DataFim =
    TREATAS ( VALUES ( fTestesRealizados[DataFim] ), fEntradaLinha[DataFim] )
VAR _Linha = SELECTEDVALUE( fTestesRealizados[Linha] )
RETURN
    CALCULATE (
        AVERAGE ( fEntradaLinha[Valor] ),
        _DataInicio,
        _DataFim,
        KEEPFILTERS( fEntradaLinha[Atributo] = "Vazao" ),
        KEEPFILTERS( fEntradaLinha[Linha] = _Linha ),
        ALL ( dCalendario )
    )
Entrada Total = 
SUMX(
    ADDCOLUMNS(
        CROSSJOIN(
            VALUES( dPlantas[PlantaCurto]),
            ALL( fTestesRealizados[Linha] )
        ),
        "@Volume Entrada",
        [Entrada]
    ),
    [@Volume Entrada]
)
Saida Total = 
VAR _DataInicio =
    TREATAS ( VALUES ( fTestesRealizados[DataInicio] ), fSaidaPlanta[DataInicio] )
VAR _DataFim =
    TREATAS ( VALUES ( fTestesRealizados[DataFim] ), fSaidaPlanta[DataFim] )
RETURN
    CALCULATE (
        AVERAGE ( fSaidaPlanta[Valor] ),
        _DataInicio,
        _DataFim,
        KEEPFILTERS( fSaidaPlanta[Atributo] = "Vazao" ),
        KEEPFILTERS( fSaidaPlanta[Medidor] IN {"Teste A", "Teste A+B"} ),
        ALL ( dCalendario )
    )

 

ComparacaoEntradaSaida.pbix

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

  • 0
  • Alunos
4 horas atrás, Joao Raulino disse:

Boa galera!

Tenho duas plantas industriais (Norte e Oeste) que são compostas por diversas linhas de produção (NOR402, NOR134, NOR256... OES203, OES360, OES411).

De tempos em tempos se realizam testes de calibragem, de modo a comparar se a soma de todos os volumes que entram nas linhas ( Σ fEntradaLinha[Valor] ) é igual ao volume total que sai na planta ( fSaidaPlanta[Valor] ).

Quero criar uma tabela onde eu tenha a lista dos testes realizados com as linhas impactadas, a data de incio/fim, o volume individual de cada linha, a soma dessas linhas, e o volume total da planta:

image.png.0bbe853698bf473778f5948028ee03b7.png

Já consegui por o volume individual de cada linha, porem quando junto a soma das linhas e o volume total da planta a tabela retorna um resultado completamente incoerente:

image.png.28b79f55fccf93ffe8c40e88f8b564ca.png

As medidas que estou utilizando são essas:

E por conta da complexidade do modelo completo, o relacionamento entre tabelas que tenho é esse:

image.png.d1fe965911030895dd9aa57a1f124ff5.png

Em anexo coloquei um modelinho simplificado para vocês irem testando as soluções 😉

Abs!

fLinhas.csv 116.34 kB · 1 download ComparacaoEntradaSaida.pbix 87.59 kB · 1 download

Mestre @Joao Raulino, blz? Pergunta: uma determinada linha poder pertencer a duas plantas diferentes?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
41 minutos atrás, Edson Igari disse:

Mestre @Joao Raulino, blz? Pergunta: uma determinada linha poder pertencer a duas plantas diferentes?

Suave mestre @Edson Igari! Pode não: uma determinada linha só pode pertencer a uma das plantas. Nesse exemplo as linhas que começam com "NOR" pertencem a planta NORTE e as que começam com "OES" pertencem a planta OESTE.

Quando coloquei na tabela misturou tudo (e.g.: linha 2 e 3 da segunda foto) e acho que ai esta o começo do problema...

 

12 minutos atrás, Erick Oliveira disse:

Boa tarde @Joao Raulino;

Acredito que o desafio maior seja a modelagem, dei uma mexida para minimizar a complexidade das medidas, mas acredito que ainda dê para melhorar.

Levei as datas dos testes para as tabelas fatos:

Boa amigo @Erick Oliveira! Com certeza o desafio esta sendo na modelagem. Como as tabelas do modelo completo tem mais de 40 milhões de linhas estou tentando mexer o minimo possível no modelo, mas se for a unica saída não vai ter jeito.

Gostei dessa solução com o TREATAS() e o CROSSJOIN(). Vou testar deste lado e logo mais volto para contar no que resultou 😉

Abs!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Fala @Erick Oliveira!

Apliquei a tua solução no modelo completo e.... funcionou! Porém, teve um impacto na performance (por conta do modelo e não da tua solução) e os visuais em geral estão demorando >50 segundos para carregar:

image.png.c9235c13821f114a3cf35282a5a3575b.png

image.png.f6231cc09271c86d106b72d89f7bfdb8.png

Existiria alguma solução sem ter que modificar o modelo e sem ter que levar as colunas da tabela fTestesRealizados para as tabelas fato fEntradaLinha e fSaidaPlanta?

Abs!

 

ps: O modelo hoje tem por volta de 410Mb então sem duvidas ha muuuita coisa para melhorar. Neste caso especifico, quero partir de uma solução que funcione para depois focar em otimizar o modelo, aproveitando para resolver os outros gargalos que já foram identificados e também estão pendentes 😉

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bingo @Edson Igari!

Performance melhorou em 4x e já me permite fazer o deployment inicial da solução para depois focar na otimização do modelo:

image.png.84feefe457d8406972bdaa7bd978fe9a.png

Vi que a principal mudança que você fez foi usar as colunas da própria 'fTestesRealizados' nas medidas e na tabela. Nesse caso o filtro 'Planta' deixa de funcionar porque as tabelas não tem relação entre si:

image.png.3acb2f9cb3db489011cd046d9bc27457.png

De qualquer maneira, isso é um pequeno detalhe que posso contornar restabelecendo a relação ou então usando o fTestesRealizado[Planta] como filtro nessa pagina especifica.

Por fim, para a medida [$ Entrada Total] preferi utilizar a sugestão do @Erick Oliveira com uma SUMX() e ADDCOLUMNS() pois me pareceu mais eficiente e lean uma vez que os valores já são corretamente calculados na [$ Entrada]:

Citar
$ Entrada Total =
SUMX(
    ADDCOLUMNS(
        CROSSJOIN(
            VALUES(fTestesRealizados[PlantaCurto]),
            ALL(fTestesRealizados[Linha])
        ),
        "@Volume Entrada",
        [$ Entrada]
    ),
    [@Volume Entrada]
)

Sem palavras para agradecer a ajuda de vocês dois, @Edson Igari e @Erick Oliveira!

Editado por Joao Raulino
  • Like 2
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...