2012-04-30 12 views
5

Domanda in SSAS per tutti. Sto tentando di definire una relazione da uno a molti in un ambiente cubo SSAP OLAP. Tuttavia, sto incontrando problemi con la definizione di una chiave primaria. Le tabelle di esempio sono sotto. Le relazioni tra le prime 3 tabelle sono facilmente definite (TradeDate, NYMEX Trades & Contratto NYMEX). Tuttavia, il mio obiettivo è creare una relazione uno a molti tra contratto NYMEX e contratto modello. In altre parole, i dati di 1 contratto NYMEX saranno utilizzati più volte nel set di dati del contratto modello.SSAS da una a molte relazioni dimensionali

Tabella: TradeDate

  • TradeDate (PK)
  • Anno
  • Mese ecc ...

Tabella: NYMEX Trades (NO PK)

  • ContractName
  • TradeDate
  • Prezzo

Tabella: NYMEX Contratto

  • ContractName (PK)

Tabella: Modello Contratto

  • ModelContractName (PK)
  • ContractName

ho bisogno di creare un uno a molti tra NYMEX Contratto e modello del contratto ... ma il mio PK è sulla colonna di sbagliato nel modello del contratto. Qualche idea?

Per aiutare a chiarire - sto tentando di definire una dimensione -> relazione dimensione. La tabella "Contratto modello" è una tabella di ricerca.

+1

Si dovrebbe prendere in considerazione la possibilità di spostare questa domanda sul sito affiliato: [dba.stackexchange.com] (http: // dba.stackexchange.com/) Le domande contrassegnate con [tag: ssas] e/o [tag: mdx] possono avere migliori possibilità di ricevere una risposta. –

+0

Puoi segnalarlo (così un moderatore lo trasferisce) o lo pubblichi lì e rimuovi questa domanda tu stesso. –

+0

Perché stai cercando di creare una relazione 1-M piuttosto che una gerarchia? Se ContractName nel modello di contratto è uguale al contratto NYMEX, non dovrebbe essere quella chiave esterna? ModelContractName sembra essere l'elemento a grana più fine in Model Contract, quindi la distinta lista di nomi dovrebbe essere una chiave adatta (anche se una chiave surrogata intera sarebbe probabilmente migliore.) – JAQFrost

risposta

6

Quello che hai è un esempio di molti a molti relazione tra i dati dei fatti (Commerci) e i dati delle dimensioni (Contratto modello). dai un'occhiata a questo: dimension relationship.Il tuo caso è un caso raro, dal momento che i contratti di modello possono essere assegnati a un solo nome di contratto, ma ricade ancora nel caso molti a molti. Questo viene gestito utilizzando una tabella di bridge nella modellazione dimensionale e in SSAS lo chiamano una tabella dei fatti intermittente. Una volta impostata la tua configurazione DSV in questo modo: enter image description here

Quindi si creeranno le dimensioni nel progetto e quindi si creerà un gruppo di misure per ModelContract per poterlo utilizzare come tabella dei fatti intermedia. Si potrebbe quindi impostare la dimensione utilizzo per il cubo la scelta di una relazione molti-a-molti:

enter image description here enter image description here

Come nota a margine, è necessario utilizzare sempre chiavi surrogate per le dimensioni. Hanno diversi vantaggi come spazio di archiviazione nella tabella dei fatti, dimensioni che cambiano lentamente, disaccoppiamento del sistema sorgente, ...

+0

Considerare senz'altro il rimodellamento se possibile includere chiavi surrogate! – elgabito

0

devi fare 2 dimensioni qui.

Per prima cosa, non è necessario aggiungere la data come parte dell'intera dimensione. La data stessa dovrebbe esistere come una dimensione.

in secondo luogo, come vedo, è necessario aderire al contratto NYMEX e al contratto modello e creare una dimensione. Puoi unirti a loro sul DSV con una query denominata o creare una vista SQL oppure puoi avere entrambe le tabelle separate sul DSV e unirle alla dimensione.

In terzo luogo, NYMEX Trades è la vostra tabella dei fatti. Dopo aver creato entrambe le dimensioni precedenti, dovresti aggiungerle al cubo e unirle alla tabella dei fatti nella scheda della relazione della dimensione utilizzando i campi ContractName e TradeDate