我想为分析项目设计一个星型模式。这种分析围绕着"客户"尺寸。
我很难对表格进行建模。这是我提出的两个表:
我会逐一问我的疑虑:
我对BI完全陌生。因此,一个说明性的答案将非常有用。谢谢!
答案 0 :(得分:1)
这就是我的方式,所以它必须是一个好的设计。我称之为dimCalendar,但那是次要的。
执行此操作的方法是创建并填充表,然后添加外键引用。
答案 1 :(得分:1)
你问过多个问题,所以我分开了答案:
您可以使用单日的粒度来设置单独的日历日期维度。根据所需的报告类型,您可以获得与周,月,年,季等对应的详细信息。因此,您可以使用Date, Week_Start_Date, Week_End_Date, Month_Start_Date, Month_End_Date
等字段。生成日历日期维度的最佳方法是使用电子表格和手工制作。对于某些字段,如Week_Start_Date,Week_End_Date,Month_Start_Date,Month_End_date,您可以使用SQL。你们很多人在Fact表中都有一些无效日期。涉及特殊数据条件的事实表中的外键引用必须指向"非日期"日历日期表中的日期。您需要在日历日期表中至少有一个这些特殊记录,但您可能希望区分其中一些不寻常的条件。对于不适用的日期情况,日期类型的值不适用或NA。事实表中的外键永远不能为null,因为它违反了引用完整性。
您可以将日期维度的引用添加到Customer Dimension&事实表,但如果您需要查看是否确实需要这样,那么您可以加入所有三个表格(Fact-> Date_dim on Date_key
,Fact-> Cust_dim on Customer_id
&获取您要查找的详细信息。)
您应该为Fact表&分配正确的名称。维度表,如Customer_Fact,Customer_Dim。理想情况下,每个维度(即位置)应该有一个单独的Dimension表,在Fact Table中有一个外键引用。这将有助于您跟踪Dimensions表中的更改以及您可能不需要加载整个事实的维度的任何更改。
答案 2 :(得分:0)
此分析围绕"客户"尺寸
不,分析应解决您的事实表
"事实上"是一个事实表的坏名称
您要分析的流程或事件是什么?那是你的事实表
您的日期维度应如下所示:
create table dim.date (
date_key int primary key,
name text not null unique,
date_iso date unique,
year smallint,
quarter smallint,
month smallint,
month_name text
...
);
insert into dim.date values
(0, 'N/A', null, null, null, null, null),
(20180101, 'Jan 1, 2018', '2018-01-21', 2018, 1, 1, 'January');
一般来说,您应该避免在数据库中使用智能密钥,但dim.date是一个例外。对主键使用int类型,但使其值表示日期(对于' 2018-01-01',为20180101)。这样可以更加轻松地按日期对事实表进行分区
此外,您不需要在数据仓库中使用外键。您的ETL工具将处理参照完整性。
您应该从一个包含分析所需的所有列的大事实表开始。如果需要节省磁盘空间,则将一些数据拆分为维度