Ir para conteúdo
  • 0

Calculo entre tabelas Fato


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

Pergunta

  • Membros

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
  • Membros
  • 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
  • Membros
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
  • Membros
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]
)
  • Gostei 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...