【请教】SSAS建立Cube中的事实表有属性字段的问题,并使用MDX进行查询
时间:2011-03-18
来源:互联网
------事实表
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]
谢谢大家了
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
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啊?不是很清楚,能不能给出你的设计啊
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字段的类型就要改变了。请教~
我大概明白您的意思,就是更改表的结构式么。将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
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28