Вычисляемый элемент для последнего ребенка в не временных измерениях? - PullRequest
9 голосов
/ 14 ноября 2011

В кубе SSAS как создать меры, которые агрегируются как LastChild для измерения, не относящегося ко времени?

В исходных данных имеется много версий одной и той же бизнес-записи в любой день.Измерение времени имеет гранулярность DATE, а не секунды и миллисекунды.

Записи фактов имеют метку времени и инкрементный (идентификационный) первичный ключ.По сути, я хочу рассчитать показатель как последнее значение для всех правок за данную дату.

Параметры, которые я видел до сих пор, подпадают под одну из двух категорий:

  • Создает измерение времени, которое уменьшается до секунд.Это приведет к очень большому и неэффективному измерению времени.

ИЛИ

  • Скрыть меры и заменить их вычисленными мерами, которые ищут последнее значение для любой данной датына основе первичного ключа.Это громоздко и менее эффективно.

Есть ли подходящее место или альтернативный метод для решения этой проблемы?

Естественная иерархия данных:

  1. бизнес-ключ
  2. метка времени записи (ссылки на измерение ВРЕМЯ)
  3. суррогатный ключ

1 Ответ

5 голосов
/ 27 мая 2012

Нет, вы абсолютно не можете создать атрибут latChild без измерения времени:

enter image description here

что вы можете сделать, это создать запрос в вашем DSV, чтобы дать вам последнее дочернее значение и использовать его для создания группы мер. Пример:

Сценарий:

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)

очень простой скрипт, который создает дим и таблицу фактов. Вот простой выбор и после результата, я думаю, вы хотите, поэтому 3 и 20 будут последними значениями, основанными на ID измерения:

enter image description here

Чтобы построить это очень просто, просто щелкните правой кнопкой мыши на DSV, добавьте новый именованный запрос и сообщите запросу, чтобы создать последнее значение. В моем случае это:

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

создайте логический первичный ключ и свяжите его с таблицей измерений: enter image description here

и на вашем кубе щелкните правой кнопкой мыши любую пустую область, выберите «показать все таблицы» и добавьте новую таблицу.

А в вашем кубе создайте новую меру как «без агрегации», потому что вы уже агрегировали свой запрос:

enter image description here

Результат:

enter image description here

...