2011-11-14 21 views
9

En un cubo SSAS, ¿cómo creo medidas agregadas como LastChild para una dimensión no temporal?¿Miembro calculado para el último hijo en dimensiones no temporales?

Los datos de origen tienen muchas versiones del mismo registro comercial en un día determinado. La dimensión de tiempo tiene una granularidad de DATE, no de segundos & milisegundos.

Los registros de hechos tienen una marca de tiempo y una clave primaria incremental (identidad). En efecto, lo que quiero es calcular una medida como el último valor para todas las ediciones en una fecha determinada.

Las opciones que he visto hasta ahora caen en una de dos categorías:

  • producir una dimensión de tiempo que baja hasta segundos. Esto daría como resultado una dimensión de tiempo muy grande e ineficiente.

O

  • Ocultar las medidas y reemplazarlos con medidas calculadas que se ven hasta el último valor de una fecha determinada en base a la clave principal. Esto es engorroso y menos eficiente.

¿Existe un punto óptimo o una técnica alternativa para resolver este problema?

La jerarquía natural de los datos es:

  1. clave del negocio
  2. registro de marca de hora (enlaces a dimensión temporal)
  3. sustituto clave

Respuesta

5

No, absolutamente peralte crear un latChild atributo sin una dimensión de tiempo:

enter image description here

lo que puedes hacer es crear una consulta en tu DSV para darte el último valor hijo y usarlo para crear un grupo de medida. Ejemplo:

Guión:

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) 

guión muy simple que crea una tabla tenue y un hecho. Aquí es un simple seleccionar y después del resultado Creo que quieres, por lo 3 y 20 serían los últimos valores basados ​​en la dimensión ID:

enter image description here

para construir que es muy sencillo, simplemente haga clic derecho en su DSV y agregue una nueva consulta con nombre e informe la consulta para crear su último valor. En mi caso es:

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

crear una clave principal lógica y vincularlo a la tabla de dimensiones: enter image description here

y en su cubo, haga clic derecho en cualquier área en blanco, seleccione "Mostrar todas las mesas" y añadir tu nueva mesa

Y en su cubo de crear una nueva medida como "no hay agregaciones" porque ya se ha agregado su consulta:

enter image description here

Resultado:

enter image description here

Cuestiones relacionadas