2010-06-25 112 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