【请教】SSAS建立Cube中的事实表有属性字段的问题,并使用MDX进行查询

------事实表
CREATE TABLE StdShipCost
(
        Customer_level     char(12) NOT NULL,
        Scenario            varchar(8) NOT NULL,
        Time_level                  varchar(12) NOT NULL,
        Value                         FLOAT NOT NULL
)
;
--------维度表
CREATE TABLE TimeLevel
(
        Month_level                           varchar(12) NOT NULL,
        Quarter_level                   varchar(12) NOT NULL,
        year_level                          varchar(12) NOT NULL
)
;

CREATE TABLE CustLevel
(
        Store_level       char(12) NOT NULL,
        Retailer_level    char(12) NOT NULL
)
;
可以看到事实表customer_level与time_level字段是与两个维度表进行关联的id,vaule是一个度量值,而scenario是一个属性字段有三种值,分别为fact,budget,forecast。这个字段是String类型的,不能进行聚合,不知道怎么做才能作为一个事实表的度量,这样我使用MDX查询的时候,可以进行where条件的一个切块查询。(如果不考虑ETL的方式重新设计表结构,将此属性作为维度的方式)

----------想要设计一个MDX,比如说下面的查询
select {[Measures].[Product Cost]}  on columns,
non empty
{[time].[timehier].[month_level].[199505]}*
{[product].[prodhier].[class_level].[N5YKSZDW59R9].children} on rows
from
[Cube]
where [measures].[scenario].[fact]

谢谢大家了

作者: tsinghua_job   发布时间: 2011-03-18

1,你这个所谓的事实表既把他当做ODS表又把他当做FACT表,设计本身就有问题
2,如果非要在这个不合理的设计上做,只能把scenario 再加三个属性值: fact_all, budget_all, forecast_all 用来存储聚合value

作者: wangfans   发布时间: 2011-03-18

楼主是不懂MDX吧, scenario  只要做成维就行了,既然是三个固定值那就建一个只有三记录的维表, 然后MDX过滤具体的就行了

作者: piliskys   发布时间: 2011-03-18

1,你这个所谓的事实表既把他当做ODS表又把他当做FACT表,设计本身就有问题
2,如果非要在这个不合理的设计上做,只能把scenario 再加三个属性值: fact_all, budget_all, forecast_all 用来存储聚合value

恩 设计是有问题。我也觉得相当有问题!谢谢~
不过,怎么在scenario 上再加三个属性值呢,本身已经是属性l啊?不是很清楚,能不能给出你的设计啊

作者: tsinghua_job   发布时间: 2011-03-18

恩 不是很懂啊,就是一个初学者。但是有这样一个需求,我也没办法
我大概明白您的意思,就是更改表的结构式么。将scenario改成int字段关联维度表(dim Scenario)。然后建立维度表比如说
CREATE TABLE DimScenario(
        ScenarioKey int IDENTITY(1,1) NOT NULL,
        ScenarioName nvarchar](50) NULL,
)
之后插入数据
insert into DimScenario values (1,'fact');
insert into DimScenario values (1,'budget');
insert into DimScenario values (1,'forecast');

之后使用把这个作为维度进行关联
然后作为一个维度进行查询,不知道您是这个意思么?

但是这个变态的设计就是要求尽量不改表的设计,要是按照您这样做的话,那么表StdShipCost的scenario字段的类型就要改变了。请教~

作者: tsinghua_job   发布时间: 2011-03-18

哪里需要改表结构啊,为什么一定要INT型呢, 维表主键难道不能用字符型,

作者: piliskys   发布时间: 2011-03-18