我正在为数据立方体设计事实表,我有一个度量,我不知道如何正确地聚合。以下SQL代码将创建一个小示例事实表和维度表:
create table FactTable (
ID int,
Color int,
Flag int)
insert into FactTable (ID, Color, Flag) values (1, 'RED', 1)
insert into FactTable (ID, Color, Flag) values (1, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (1, 'BLUE', 1)
insert into FactTable (ID, Color, Flag) values (2, 'RED', 0)
insert into FactTable (ID, Color, Flag) values (2, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (2, 'BLUE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'RED', 1)
insert into FactTable (ID, Color, Flag) values (3, 'WHITE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'BLUE', 1)
create table ColorDim (
CID int,
Color int)
insert into ColorDim (CID, Color) values (1, 'RED')
insert into ColorDim (CID, Color) values (2, 'WHITE')
insert into ColorDim (CID, Color) values (3, 'BLUE')FactTable和ColorDim在FactTable.Color = ColorDim.Color上连接。在立方体中,应该有一个名为“爱国”的度量,用于计数对象In,包括红色、白色或蓝色(至少其中一种颜色)。所需的输出如下:
(我试图使用这个web应用程序创建一个表,但间距似乎不正确。希望它的可读性足以理解。)
我确信这是一个非常基本的多维数据集设计情况,但我以前很少使用多维数据集,我所使用的方法通常是简单的列和,或者列和的乘积,等等。任何帮助都是非常感谢的。
(如果相关的话,我将运行在2008中构建事实/维度表的SQL查询,并将在2008中设计多维数据集本身。)
发布于 2012-08-09 14:27:49
我终于想出来了。首先,我在包含该ID的预聚合数据的事实表中添加了每个ID一行,因此事实表如下:
create table FactTable (
ID int,
Color int,
Flag int)
insert into FactTable (ID, Color, Flag) values (1, 'RED', 1)
insert into FactTable (ID, Color, Flag) values (1, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (1, 'BLUE', 1)
insert into FactTable (ID, Color, Flag) values (1, 'PATRIOTIC', 1)
insert into FactTable (ID, Color, Flag) values (2, 'RED', 0)
insert into FactTable (ID, Color, Flag) values (2, 'WHITE', 0)
insert into FactTable (ID, Color, Flag) values (2, 'BLUE', 1)
insert into FactTable (ID, Color, Flag) values (2, 'PATRIOTIC', 1)
insert into FactTable (ID, Color, Flag) values (3, 'RED', 1)
insert into FactTable (ID, Color, Flag) values (3, 'WHITE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'BLUE', 1)
insert into FactTable (ID, Color, Flag) values (3, 'PATRIOTIC', 1)同样,将一行添加到颜色维度表中:
create table ColorDim (
CID int,
Color int)
insert into ColorDim (CID, Color) values (1, 'RED')
insert into ColorDim (CID, Color) values (2, 'WHITE')
insert into ColorDim (CID, Color) values (3, 'BLUE')
insert into ColorDim (CID, Color) values (4, 'PATRIOTIC')然后,在MS中,编辑颜色维度中颜色属性的DefaultMember属性如下:
[Color Dimension].[ColorDim].&[PATRIOTIC]DefaultMember属性告诉MS Visual,具有“爱国”颜色的事实表中的行已经是具有相同ID和其他颜色值的其他行的聚合。
发布于 2012-08-02 01:22:20
我会试一试,虽然我不能百分之百肯定我明白这些问题。另外,我不想将查询发布到注释中,以验证它们是否有效。如果我离得很远,而且这没有帮助,我会删除答案。
当浏览立方体时,如果用户拉入爱国度量(不拉维度),则显示的总数应该是2,因为有2个in (即1和3),其中至少包含三种颜色中的一种。请注意,ID 1应贡献1的总爱国值,即使它有两种颜色。
WITH MyCTE (id, Count)
AS
(
select id, count(flag) as count
from FactTable
where Flag=1
group by id
having COUNT(flag) >=2
)
select COUNT(*) from MyCTE如果用户按“颜色”维度浏览“爱国”度量值,则应该会看到如下所示的表。请注意,ID 1为红色计数贡献了1,对蓝色计数贡献了1。
select a.Color, COUNT(*)
from FactTable a
join ColorDim b
on a.Color = b.Color
where Flag = 1
group by a.Color发布于 2012-08-03 01:59:19
不完全确定为什么事实表需要"ID“和"Color”之间的交叉连接。您可以简单地排除所有Flag=0行,并使用ID列的简单计数作为爱国度量,一个不同的计数将给出爱国行的总数。
您也不需要颜色维度,因为ColorDim表没有提供额外的信息。
但是,如果在行中添加了更多颜色,则可以将“爱国”标志添加到ColorDim表中。然后,任何查询都可以通过“爱国”标志进行筛选,并且仍然可以获得爱国行的准确计数。
create table FactTable (
ID int,
Color int
)
insert into FactTable (ID, Color) values (1, 'RED')
insert into FactTable (ID, Color) values (1, 'BLUE')
insert into FactTable (ID, Color) values (2, 'BLUE')
insert into FactTable (ID, Color) values (3, 'RED')
insert into FactTable (ID, Color) values (3, 'WHITE')
insert into FactTable (ID, Color) values (3, 'BLUE')
create table ColorDim (
CID int,
Color int,
PatrioticFlag int
)
insert into ColorDim (CID, Color) values (1, 'RED',1)
insert into ColorDim (CID, Color) values (2, 'WHITE',1)
insert into ColorDim (CID, Color) values (3, 'BLUE',1)
insert into ColorDim (CID, Color) values (4, 'BEIGE',0)https://stackoverflow.com/questions/11762381
复制相似问题