如何使Date维度与事实和另一维度相同

时间:2018-01-14 08:24:12

标签: data-modeling data-warehouse business-intelligence snowflake-datawarehouse

我想为分析项目设计一个星型模式。这种分析围绕着"客户"尺寸。

我很难对表格进行建模。这是我提出的两个表:

ER

我会逐一问我的疑虑:

  1. 如何创建日期维度以使其与事实(invoice_date)和客户(date_of_joining)相同?我的意思是,最终用户可以选择一个日期,以便他可以看到在该特定日期加入了多少用户以及总销售额?
  2. 这是一个好设计吗?我的意思是"位置","收银员"和"类别"可以称之为维度,但我正在刷新他们的名字"而不是他们的" id" s到事实表。它仅用于显示目的。所以,我的维度表数量较少。
  3. 我对BI完全陌生。因此,一个说明性的答案将非常有用。谢谢!

3 个答案:

答案 0 :(得分:1)

  1. 这就是我的方式,所以它必须是一个好的设计。我称之为dimCalendar,但那是次要的。

  2. 执行此操作的方法是创建并填充表,然后添加外键引用。

答案 1 :(得分: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,因为它违反了引用完整性。

  2. 您可以将日期维度的引用添加到Customer Dimension&事实表,但如果您需要查看是否确实需要这样,那么您可以加入所有三个表格(Fact-> Date_dim on Date_keyFact-> Cust_dim on Customer_id&获取您要查找的详细信息。)

    < / LI>
  3. 您应该为Fact表&amp;分配正确的名称。维度表,如Customer_Fact,Customer_Dim。理想情况下,每个维度(即位置)应该有一个单独的Dimension表,在Fact Table中有一个外键引用。这将有助于您跟踪Dimensions表中的更改以及您可能不需要加载整个事实的维度的任何更改。

答案 2 :(得分:0)

  

此分析围绕&#34;客户&#34;尺寸

不,分析应解决您的事实表

&#34;事实上&#34;是一个事实表的坏名称

您要分析的流程或事件是什么?那是你的事实表

您的日期维度应如下所示:

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类型,但使其值表示日期(对于&#39; 2018-01-01&#39;,为20180101)。这样可以更加轻松地按日期对事实表进行分区

此外,您不需要在数据仓库中使用外键。您的ETL工具将处理参照完整性。

您应该从一个包含分析所需的所有列的大事实表开始。如果需要节省磁盘空间,则将一些数据拆分为维度

您应该阅读Agile Data Warehouse Design

相关问题