我的回答考慮到,你不希望你的數據重新格式化爲傳統的數據倉庫架構的帳戶。如果進一步讓你在路上那麼對你來說不錯,但我懷疑你會碰到更多這樣的問題爲您拓展項目。在您需要之前,如何將數據轉換爲星型模式可能是值得修補的。
我可以建議幾個選項。首先想到的是在基於付款事實表的帳戶立方體中製作退化維。以下示例回答您的「所有有付款的帳戶」問題,但這應該適用於類似的問題。我假設帳戶結算日期是每個日曆月的最後一天,因此您需要計算每個日曆月的付款。
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
我希望我的理解去你的問題。我不得不對你的數據結構做很多假設,但我希望它很有用。
祝你好運。
是的,這很有用,但是我回到數據後意識到我原本想做的事情是不可能的。 – cjk 2010-07-05 07:34:09