2011-11-14 5 views
9

SSASキューブで、非時間ディメンションのLastChildとして集計されるメジャーを作成するにはどうすればよいですか?非時間ディメンションのlast-childのメンバーを計算しましたか?

ソースデータには、任意の日に同じビジネスレコードの多くのバージョンがあります。時間ディメンションの精度はDATEで、秒は&ミリ秒ではありません。

ファクトレコードには、タイムスタンプと増分(ID)主キーがあります。実際には、指定した日付のすべての編集の最後の値としてメジャーを計算します。

私がこれまで見てきた選択肢は2つのカテゴリのいずれかに分類されます。

  • は秒にダウン時間ディメンションを作成します。これは、非常に大きく非効率的な時間次元をもたらす。

OR

  • 対策を非表示にして、主キーに基づいて任意の日付の最後の値を調べ、計算さ対策に置き換えます。これは面倒で効率の悪いものです。

この問題を解決するためのスイートスポットまたは代替技術はありますか?

データの自然な階層がある:

  1. ビジネスキー
  2. のレコードタイムスタンプ(TIMEディメンションへのリンク)
  3. 代理キー

答えて

5

いいえ、あなたは絶対に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

そして、あなたはすでに集約されているので、あなたのキューブが "ノー集計" としてクエリを新しいメジャーを作成する上

関連する問題