如果数据集市有两种不同的粒度,如何解决?

Posted

技术标签:

【中文标题】如果数据集市有两种不同的粒度,如何解决?【英文标题】:How to solve if there are two different granularity in data mart ? 【发布时间】:2016-02-16 15:46:01 【问题描述】:

我们正在从给定的数据源创建数据集市。我在数据集市中创建了以下表格。

FactPopulation (Fact table which has population data per year)
FactMeeting count (Fact table which has event info occur almost everyday 2005-)
DimMeeting Topic (Name of Meetings)
DimGeography (Place)
DimDate (Date Dimension)

所以如果我想做分析人口和会议县有不同的粒度。我想按年和按月进行分析。有没有办法将两个事实表组合成一个或任何建议?

【问题讨论】:

你能举一个期望结果的例子,以及使它成为问题的源数据吗?我无法想象为什么不同的粒度是一个问题,或者粒度如何不同。 问题是我只想创建一个事实表而不是两个事实表。所以我想将 Factpopulation 和 FactMettingCount 合并到一张表中进行分析。 您为什么要这样做?对我来说,这听起来像是糟糕的设计,除非到目前为止你的问题还不清楚什么原因。 什么是 FactPopulation?你需要制定一个算法来将它推到一个月吗?它是相同的年度数字还是年度数字除以 12 还是您可以使用一些更复杂的算法。所有维度是否与所有事实相关联?您使用什么工具进行分析或只是编写 SQL 查询? 【参考方案1】:

一旦将数据汇总到某个粒度,比 FactMeeting 粒度更深入的最简单方法是回顾源并在您想要的粒度上生成另一个汇总。考虑创建一个滚动的 FactMeetingByCounty 表,因此计数指标是按县。然后将您所追求的组合数据生成为单个表。

替代方法可能是在利用这种“新粒度逻辑”和用于创建 FactPopulation 事实的逻辑之后生成您的表格。

这里有很多选择。

【讨论】:

【参考方案2】:

什么是 FactPopulation?从名字上,我猜它代表了一个地方随着时间的推移的人口。

那个地方和 DimGeography 一样吗?如果是,则将人口设为该维度的属性,并将其设为第 2 类缓变维度,以说明人口随时间的变化。

在评论 1 之后编辑:

如果您建议的事实和维度中有一些示例数据或更完整的列名会有所帮助,但我的解释是这样的模型可以解决您的问题:

dim_event (id,name,...)
dim_geography (id,country,city,...,population,from_date,to_date)
dim_date (id,cal_date,cal_year,cal_month,...)
fact_meeting (event_id,geography_id,date_id,...,attendee_count)

您熟悉渐变维度吗?类型 2 维度将处理人口随时间的变化。

您尚未提供您试图满足的业务查询示例,但如果您在问题中发布一些示例,我将使用一些 SQL 更新此答案,以向您展示他们对此模型的满意程度。

【讨论】:

Factpopulation 是按年份计算的不同城市的人口数。 FactMeeting 计数基于每天,我想将它们结合起来进行每月和每年的分析。

以上是关于如果数据集市有两种不同的粒度,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

视频通话不便。集市。最好的解决方案?

如何整合各种数据集市?

两个层次相同但粒度不同的事实表

如果我有两种不同类型的单元格,如何使用 FetchedResultsController?

如何遍历firebase随机生成的不同键值

如何解决mysql5