Ir para conteúdo
  • 0

Calculo entre tabelas Fato


Lucascouto48
Ir para solução Solucionado por Bruno Abdalla de Souza ,

Pergunta

  • Alunos

Olá pessoal!

Estou tentando construir um cálculo que depende de parametros entre fatos.

Tenho uma fato de Operações ontem tem uma coluna chamada "Strike (R$)" com valores financeiros. Acontece que cada operação tem uma data de inicio ("Data de Registro") e uma data final ("Data de Fixing") e neste intervalo de datas pode ocorrer eventos que pode alterar o valor do Strike. Esses eventos estão registrados na fato de Abates. 

O que eu precisava fazer era criar uma medida que some os valores da tabela de abate que estejam no intervalo da operação (>= Data de Registro" e <= Data de Fixing) e fazer a conta "Strike (R$)" - Abate respeitando o intervalo, a conta do cliente e o código do Ativo.

Consegui fazer isso usando CALCULATE + FILTER + ALL colocando as datas nas variáveis, mas a performance ficou horrivel. Ai gostaria da ajuda de vcs para determinar se isso é um problema de Dax ou de ETL e se alguem tem alguma sugestão de solução.

Teste.pbix BaseDeDados.xlsx

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Não sei se entendi, mas segue uma tentativa.

Strike v1 = 
    VAR vAtivo = 
        MAX(dAtivo[Ativo])
    VAR vDataReg = 
        MAX(fOperacoes[Data de Registro])
    VAR vDataFixing = 
        MAX(fOperacoes[Data de Fixing])
RETURN
    SUMX(
        FILTER(
            fAbate,
            fAbate[Data] >= vDataReg && 
            fAbate[Data] <= vDataFixing
        ),
        fAbate[Valor]
    )

 

Teste.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 25/06/2022 em 12:03, Geovanio Peres disse:

Bom dia Lucas! blz?

Segue um cálculo que consegui fazer para tentar te ajudar com sua dúvida.

Mas confesso que tenho as duvidas abaixo em relação ao seu modelo:

image.thumb.png.9341710006268acebffd3ad57ab35b16.png

image.thumb.png.145395186bb07126dc2bfb90259fbd8f.png

Da uma olhada aí no cálculo que fiz e me retorna para evoluirmos na solução

 

Teste.pbix 121 kB · 0 downloads

Oi Geovanio,

Obrigado por tentar me ajudar!

 

Deixa eu esclarecer: 

1 - O objetivo pe somar os valores de abate pelo código do ativo. Não importa o tipo de operação neste momento. É pq no mundo das ações vc tem lá os ativos da bolsa PETR4, MGLU etc.... ai na operação vc tem os custos da operação que a gente chama de STRIKE, mas o problema é que no inicio ao fim da operação pode ocorrer assombrações com o Ativo. Sei lá tipo o ativo quebra as ações (1 ação vira 1000) ou tem pagamentos de dividentos e outras coisas. Isso impacta no resoltado financeiro da operação no final das contas ai pelo código do ativo (Podemos chamar de ação) preciso somar esses eventos da tabela abate.

 

2 - Isso seria o meu sonho. Ter a conta ali resolveria as coisas, mas o banco aquiu (BTG) não consegue entregar essa informação na base de dados. Ai o jeito é montar uma base de abate por data e código do ativo da bolsa e eu mesmo fazer o calculo. Mas tentei fazer, deu certo e o desempenho ficou horrivel no power bi.

 

Vou availiar as sugestões de solução agora

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 25/06/2022 em 18:08, Bruno Abdalla de Souza disse:

Não sei se entendi, mas segue uma tentativa.

Strike v1 = 
    VAR vAtivo = 
        MAX(dAtivo[Ativo])
    VAR vDataReg = 
        MAX(fOperacoes[Data de Registro])
    VAR vDataFixing = 
        MAX(fOperacoes[Data de Fixing])
RETURN
    SUMX(
        FILTER(
            fAbate,
            fAbate[Data] >= vDataReg && 
            fAbate[Data] <= vDataFixing
        ),
        fAbate[Valor]
    )

 

Teste.pbix 127 kB · 0 downloads

Oi Bruno!
Obrigado por me ajuda!

Eu testei aqui no arquivo e a performance melhorou muito! Vou testar no outro arquivo onde tem a base completa!

 

Fiz assim conforme seu exemplo:

Teste =
Var vAtivo = MAX(dAtivo[Ativo])
Var vDataReg = MAX(fOperacoes[Data de Registro])
Var vDataFixing = MAX(fOperacoes[Data de Fixing])
Return
SUMX(
FILTER(
fDividendos,
fDividendos[Ativo] = vAtivo &&
fDividendos[Data Ajuste] >= vDataReg &&
fDividendos[Data Ajuste] <= vDataFixing
),
fDividendos[Valor]
)
  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
8 horas atrás, Barony disse:

 

Se foi o que entendi vc quer o valor somado de Strike do periodo fiz de duas formas uma como medida e outra com coluna calculada veja no seu modelo qual ficara mais performatica

image.png.960963430d8eaa19ddb02512cf5a815a.png

Teste.pbix 129 kB · 1 download

Oi Barony,

Obrigado pela ajuda, mas não seria isso.

Na tabela de operações que eu preciso retornar os abates com base da data de inicio e fim das operações e do código do Ativo. São muitos mesmo.

Continuo tentando aqui

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...