database - 维度建模 : need help doing this star for a university

标签 database database-design data-warehouse dimensional-modeling

我是维度建模的新手,我正在为一所大学制作维度模型。我选择的当前业务流程实际上是销售额/收入。我一直在阅读不同书籍的不同章节,虽然我认为我对事实和维度有很好的理解,但我很难将销售过程写到纸上。

理想情况下,学校的销售流程类似于其他企业,其中学生是客户,产品是他们参加的“类(class)”。但是在某些情况下有不同的产品类型,我不知道如何适应产品类型。例如,学生支付与任何类(class)无关的申请费、滞纳金或成绩单申请费。我如何在我的明星中适应这些不同类型的收入来源?

到目前为止我所做的是这样的

Sales_FACT
====
Date_Key_FK
Product_Key_FK
Campus_Key_FK
Student_Key_FK
ChargeCredit_SKU
Amount


Product_Key
------
Product_Key_PK
SectionID
AcademicYear
AcademicTerm
AcademicSession
CourseCode
CourseName
ProductType???

现在对于某些类型的产品(例如成绩单申请费)——我没有类(class)名称、代码、学期、类(class)——我不知道这将如何运作。

有人对此有任何意见吗?或任何有用的 Material /模式示例肯定会感激他们

谢谢,

最佳答案

以后你会发现很多这样的案例。通常,您遇到此问题是因为您在您的案例中混合了两种不同类型的“产品”。

可以从逻辑上或技术上解决。

在ETL过程中,在清理步骤中,您可以使用与字段相关的sql(nvl,coalesce,CASE WHEN)重写您的空字段

nvl(CourseCode, 'No Course Code') as CourseCode

然后,当您按 ProductType 和 CourseName 分组时,您应该得到如下内容:

ProductType     CourseName     sum(Amount)
------------------------------------------
AppFee          Course1             345.13
AppFee          Course4            8901.00
TranscriptFee   No Course Name      245.99

或者,您可以将其放在单独的表中。即使这与您的业务流程相矛盾(实际上行中不能有不同的产品),有时您想要合并的术语(即 ApplicationFee 和 TranscriptFee)有许多不同的分组级别,通常很难映射。

编辑:

不,当存在大维度表、高基数、多级别以及多对多关系(即电影、类别)时,雪花才有意义。在您的情况下,好主意是遵循 ERP/CRM 数据库设计,因为它是当前可用的解决方案。如果没有您想要的这种报告可能性,您可以制作更通用维度表:

Product-Service Dimension
--------------------------------------------
SurogateKey
NaruralKey
Type(Product/Sevrice/Other)
Level1(ProductType/ServiceType)
Level2(ProductSubType/ServiceSubType)
Level3
Level4
Attribute1
Attribute2

关于database - 维度建模 : need help doing this star for a university,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25392486/

相关文章:

ruby-on-rails-4 - 如何通过 : across servers working 获取 has_many

NoSql 和数据仓库

python - 将数据保存为 *.dat 文件?

mysql - Laravel 中的数据库设计和实现 - 自动增量绑定(bind)到单独的行,而不仅仅是一张表

database-design - 主数据表设计

asp.net - 存储库是单例的还是静态的还是都不是?

sql - 将我们所有的 SQL、NoSQL 数据复制到 Snowflake 后,有没有办法在数百个表、Json 和其他数据中检测 "relationships"?

c# - 如何在sql查询之间使用日期时间的最后一个条目?

mysql - 为什么 MySQL 返回带引号的列名?

mysql - MySQL 中如何检查字符串是否有值(value)