我正在为数据多维数据集设计事实数据表,并且我有一个衡量标准,我不知道如何正确地进行聚合。下面的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。在立方体中,应该有一种称为“爱国”的措施,其计算包括红色,白色或蓝色(至少一种颜色)的对象ID。期望的输出如下:
- 当浏览立方体时,如果用户拉入爱国措施(拉没有维度),则显示的总数应为2,因为有2个ID(即1和3 ),其包括三种颜色中的至少一种。请注意,ID 1应该为总爱国值贡献1,即使它具有两种颜色。
如果用户通过色彩维度浏览爱国措施,他们应该看到如下表格。请注意,ID 1对RED计数有贡献1,对BLUE计数贡献1。
+ -------- + ----------- +
|颜色|爱国|
+ -------- + ----------- +
| RED | 2 |
| WHITE | 1 |
|蓝色| 2 |
+ -------- + ----------- +
(我试图创建使用this web app一个表,但间隔并不显得正确的。我希望这是足够的可阅读理解。)
我敢肯定,这是一个非常基本的立方体设计的情况,但我还没有与立方体以前更努力,我已经使用的措施是平时简单的算术列或SUM列的产品等。任何帮助将不胜感激。
(如果是相关的,我跑这建立在MS SQL Server 2008中的事实/维度表的SQL查询,我将设计的立方体本身在微软的Visual Studio 2008中)
你可以发布所需结果的样本吗?这个词难以破译。 – Taryn 2012-08-01 16:28:09
这是关闭的话题,但我只想指出,维度表的代理关键字与实际值(例如“红色”,“白色”等)相比,事实表是更好的做法。您应该获得更好的性能,并且如果您决定重命名其中一个维度值,则不必更新事实。所以FactTable应该有CID和Color。 – 2012-08-01 17:57:21
+1德米特里你击败了我。 @Andy E,你为什么不在事实表中存储CID而不是Color?另外,CID可以是smallint或tinyint。事实表应该尽可能地瘦,因为它通常是数百或数十亿行。 – brian 2012-08-01 17:57:40