Ir para conteúdo
  • 0

Relacionamento com tabelas fatos dependentes


Lucas Denker
Ir para solução Solucionado por Edson Igari ,

Pergunta

  • Alunos

Possuo uma base chamada fVolume que indica os registros de volume comprados do produto A pelos clientes a cada data. 
E também possuo uma base chamada fContratos que indica os registros de contratos feito por clientes em cada data.
Segue abaixo um detalhamento simples das colunas presentes em cada base.:
fVolume.
Cod Cliente: Código Identificador de cliente
Data: Data na qual o volume foi comprado
Volume: A quantidade comprada em cada data

fContatos.

Cod Cliente: Código Identificador de cliente
Cod Contrato: Código identificador de contratos
Data: Data na qual o contrato foi feito


Um detalhe muito importante é que a base de fvolume pode haver clientes que possuem contratos dentro dela, ela é uma base geral independente de quem teve contratos ou não. Já a base fContratos apenas possuem clientes com contratos.

Problema:
O problema que enfrento é que tenho duas tabelas fatos com chaves que duplicam por que possuem múltiplos registros para as mesmas e preciso das informações de volume da tabela fvolume mas apenas para quem possui contratos da fContratos.

Sei que não devo fazer relacionamento entre fatos, porém não vejo alternativas de uma modelagem de dados saudável que não necessite deste cruzamento. Abaixo vou disponibilizar as bases de dados em EXCEL para que facilite o entendimento pois sei que é um caso complexo.
 

base teste.xlsx

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Sim, no primeiro exemplo você substitui o COUNTROWS por SUM(fVolume[volume]). A outra ficaria assim:

VolumeClientesContrato2 = 

VAR vClientesContrato = VALUES(fContratos[Cod Cliente])
VAR vClientesVolume= VALUES(fVolume[Cod Cliente])
VAR vIntersecao = INTERSECT(vClientesContrato,vClientesVolume)

RETURN
CALCULATE(
       SUM(fVolume[volume]),
       vIntersecao
)

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Postado (editado)

@Lucas Denker, se você tem as dimensões, primeiro você cria uma medida contando os clientes que tem contrato. Depois você cria uma segunda medida contando os volumes. Exemplo:

ClientesContrato = COUNTROWS(fContratos)

VolumeClientesContrato = 
CALCULATE(
         COUNTROWS(fVolume),
         FILTER(
               dCliente,
               NOT(ISBLANK([ClientesContrato))
         )
)
 

ou você pode fazer em uma única medida:

VolumeClientesContrato2 = 

VAR vClientesContrato = VALUES(fContratos[Cod Cliente])
VAR vClientesVolume= VALUES(fVolume[Cod Cliente])
VAR vIntersecao = INTERSECT(vClientesContrato,vClientesVolume)
VAR vResultado = COUNTROWS(vIntersecao)
RETURN
vResultado

Editado por Edson Igari
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...