数据采集系统的事实表粒度



我在全国各地部署了一个数据采集系统网络。每个系统都在测量不同建筑的性能。每个系统都进行温度、流量、速度、能量和其他类型的测量。采样率因系统而异;它可以低至5秒,高至15分钟。

我的目标是将所有数据存储在SSAS数据库中,用于分析目的。然而,我正在努力确定适当的粒度和相关的事实表以及SSAS度量/度量组设计。

我的第一个问题是,以下任何一个都有相同的粒度吗?:

  • 不同单位的数据值,如温度和能量值
  • 具有不同采样率的数据值,例如每分钟采样的温度值和每15分钟采样的气温
  • 不同建筑物记录的数据值,如1号楼的室内温度和2号楼记录的室内温度
  • 相加数据值(如能量)和非相加数据值
  • 在特定建筑中使用相同单元进行两次不同的测量,例如一楼温度和二楼温度

如果这些例子中的大多数或全部都没有相同的粒度,这是否意味着每个建筑的度量值都应该在关系数据仓库中有一个单独的事实表,在SSAS数据库中有一个子项?如果是的话,那么如果我们假设我正在研究10栋建筑,每栋建筑有100个测量值,那么我会考虑1000个测量值。这似乎不正确,但我似乎也在处理一个具有许多不同度量粒度的数据模型。

我发现的几乎所有例子都与金融或零售业有关,这些例子包括明显可相加或可计数的指标,如美元金额或项目。因此,这些例子并没有起到多大作用。

  • 如果在所有维度(时间、建筑等)的相同交叉点收集不同单位的数据值,则这些数据值可以是相同的。在本例中,温度值和能量值在事实表中是单独的列。不建议使用单个事实列来表示不同单位的测量值。

  • 如果需要同时报告两个间隔,则具有不同采样率的数据值将不在同一粒度。但是,如果您可以在细粒度的间隔上标准化您的报告,那么您可以简单地将粗粒度的值复制到细粒度的行中。例如,您可以有一个TemperaturePerMinute列和一个TempuraturePer15Minute列,其中15分钟间隔值在该间隔内的所有分钟值中重复。不过,在报告粗粒度列时,使用聚合(count等)时需要小心。此外,如果需要深入到样本级别,则可能需要为每个间隔类型使用一个单独的事实表。

  • 来自不同建筑的数据值肯定可以以相同的粒度记录在一个事实表中。您只需将一个Building维度链接到每个测量样本的事实表即可。

  • 在OLAP模型中,度量通常是相互独立的,因此加法值和非加法值可以简单地表示为单独的列。

  • 在这种情况下,您可以扩展Building维度以包括Floor层次结构,并在Floor粒度处链接事实表记录。但是,如果需要将一些示例链接到建筑物,将一些示例连接到楼层,则可能需要使用父子维度(可能是抽象建筑物和楼层的"位置"维度),可以将事实表链接到该维度的建筑物或楼层。

我发现,当星形模式的组织不清楚时,看看如何报告数据会有所帮助。这将有助于减少必须创建的多维数据集的数量。不过,一般来说,最好不要试图规范OLAP模型或使其过于通用(即使用单列来表示温度和能量)。

最新更新