2011-11-14 6 views
9

In un cubo SSAS, come si creano misure aggregate come LastChild per una dimensione non temporale?Membro calcolato per l'ultimo figlio in dimensioni non temporali?

I dati di origine hanno molte versioni della stessa registrazione aziendale in un dato giorno. La dimensione temporale ha una granularità di DATE, non secondi & millisecondi.

I record dei fatti hanno un timestamp e una chiave primaria incrementale (identità). In effetti, ciò che voglio è calcolare una misura come l'ultimo valore per tutte le modifiche in una determinata data.

Le opzioni che ho visto finora rientrano in una delle due categorie:

  • produrre una dimensione temporale che scende a secondi. Ciò comporterebbe una dimensione temporale molto ampia e inefficiente.

O

  • Nascondi le misure e sostituirli con misure calcolate che guardano l'ultimo valore per qualsiasi data in base alla chiave primaria. Questo è ingombrante e meno efficiente.

C'è un punto debole o una tecnica alternativa per risolvere questo problema?

La gerarchia naturale dei dati è:

  1. business chiave
  2. Record Timestamp (link ad TEMPO dimensione)
  3. Surrogate chiave

risposta

5

No, è assolutamente cant creare una latChild attributo senza una dimensione temporale:

enter image description here

ciò che puoi fare è creare una query sul tuo DSV per darti l'ultimo valore figlio e usarlo per creare un gruppo di misure. Esempio:

Script:

create table dim(
id int not null primary key, 
name varchar(50)) 
insert into dim values (1,'one'),(2,'two') 

create table fact(
id int not null primary key, 
dimId int not null, 
value numeric (12,3), 
constraint fk_fact_dim foreign key(dimId) references dim(id)) 

insert into fact values (1,1,5) 
insert into fact values (2,1,3) 

insert into fact values (3,2,10) 
insert into fact values (4,2,20) 

molto semplice script che crea una tabella fioca e un dato di fatto. Ecco un semplice selezionare e dopo il risultato Penso che si desidera, in modo da 3 e 20 sarebbero gli ultimi valori in base all'ID del Dimension:

enter image description here

a costruire che è molto semplice, basta fare clic destro sul vostro DSV e aggiungi una nuova query con nome e informa la query per creare il tuo ultimo valore. Nel mio caso è:

select dimId, 
(select top 1 value from fact where dimId=F.dimId order by id desc) as lastValue 
from fact F 
group by dimId 

creare una chiave primaria logica ed effettuare il collegamento alla tabella della dimensione: enter image description here

e sul cubo, fare clic destro qualsiasi area vuota, selezionare "Mostra tutti i tavoli" e aggiungere il tuo nuovo tavolo

E sul cubo di creare una nuova misura come "nessun aggregazioni" perché si è già aggregato alla tua query:

enter image description here

Risultato:

enter image description here