2010-06-25 111 views
1

我有建於SSAS2008立方體是在2臺建 - 帳戶和薪。獲取措施

兩個表都有維度和度量,它似乎是工作比較好 - 我能得到付款賬戶分解成尺寸要麼支付或賬戶,並細分爲帳戶維度考慮的措施。

我不能做什麼是瀏覽措施戶口所在與孩子支付表中存在的關係。例如,查看至少有一筆付款的所有帳戶的餘額。

我明白我可能需要爲這個單獨的立方體,但我仍然無法看到我的數據源將如何需要進行配置。

我最好不喜歡/不得不將數據完全重新格式化爲事實/維度的雪花模式,因爲我不完全確定如何用關係數據來做到這一點,但是對此有任何建議歡迎。

謝謝。


更新:賞金增加,由於缺乏興趣...

回答

1

我的回答考慮到,你不希望你的數據重新格式化爲傳統的數據倉庫架構的帳戶。如果進一步讓你在路上那麼對你來說不錯,但我懷疑你會碰到更多這樣的問題爲您拓展項目。在您需要之前,如何將數據轉換爲星型模式可能是值得修補的。

我可以建議幾個選項。首先想到的是在基於付款事實表的帳戶立方體中製作退化維。以下示例回答您的「所有有付款的帳戶」問題,但這應該適用於類似的問題。我假設帳戶結算日期是每個日曆月的最後一天,因此您需要計算每個日曆月的付款。

create table accounts_fact 
( account_id int not null, 
    statement_date datetime not null, 
    bal int not null, 
    constraint acc_pk primary key (account_id, statement_date) 
) 

create table payments_fact 
( account_id int not null, 
    payment_date datetime not null, 
    amount money not null 
) 

insert into accounts_fact values (1, '20100131', 100) 
insert into accounts_fact values (1, '20100228', 120) 
insert into accounts_fact values (1, '20100331', 0) 
insert into accounts_fact values (2, '20100131', 100) 
insert into accounts_fact values (2, '20100228', 20) 
insert into accounts_fact values (2, '20100331', 50) 
insert into accounts_fact values (3, '20100131', 10) 
insert into accounts_fact values (3, '20100228', 30) 
insert into accounts_fact values (3, '20100331', 50) 

insert into payments_fact values (1, '20100112', 50) 
insert into payments_fact values (1, '20100118', 60) 
insert into payments_fact values (1, '20100215', 70) 
insert into payments_fact values (1, '20100318', 80) 
insert into payments_fact values (1, '20100331', 90) 

insert into payments_fact values (2, '20100112', 50) 
insert into payments_fact values (2, '20100215', 60) 
insert into payments_fact values (2, '20100320', 70) 

insert into payments_fact values (3, '20100101', 50) 
insert into payments_fact values (3, '20100118', 60) 
insert into payments_fact values (3, '20100318', 70) 

create view dim_AccountPayments 
as 
select acc.account_id, acc.statement_date, 
     sum(case when pay.payment_date IS NULL THEN 0 
      else 1 
     end) as payment_count 
from accounts_fact acc 
    left outer join payments_fact pay on acc.account_id = pay.account_id 
        and pay.payment_date >= dateadd(mm, -1, dateadd(dd, 1, acc.statement_date)) 
        and pay.payment_date <= acc.statement_date 
group by acc.account_id, acc.statement_date 

select * from dim_AccountPayments 

這將產生以下結果:

account_id statement_date payment_count 
1 2010-01-31 00:00:00.000 2 
1 2010-02-28 00:00:00.000 1 
1 2010-03-31 00:00:00.000 2 
2 2010-01-31 00:00:00.000 1 
2 2010-02-28 00:00:00.000 1 
2 2010-03-31 00:00:00.000 1 
3 2010-01-31 00:00:00.000 2 
3 2010-02-28 00:00:00.000 0 
3 2010-03-31 00:00:00.000 1 

現在應該不費吹灰之力做出付款算在你的帳戶多維數據集維度。要獲得額外的積分,請在視圖中移除該組並按總和進行聚合;它適合我顯示上面的結果表。在您的數據源視圖中使用視圖的SQL,您在源數據庫中沒有創建視圖權限。

選項2將從帳戶多維數據集中的度量上方的視圖進行支付計數。除了使帳戶事實上使用類似於dim_AccountPayments的視圖外,您可以類似於上述解決方案來執行此操作。這一次,您必須按所有關鍵字段進行分組,並彙總數據庫中的度量值......非常難看。我不推薦它,但它是可能的。

如果使用選項1,那麼這是很簡單的做一個名爲叫帳戶付款尺寸設置「造這個月支付」,這是所有的子女過濾,以除去0

我希望我的理解去你的問題。我不得不對你的數據結構做很多假設,但我希望它很有用。

祝你好運。

+0

是的,這很有用,但是我回到數據後意識到我原本想做的事情是不可能的。 – cjk 2010-07-05 07:34:09