【问题标题】:Is this measure a possible correct choice in a data warehouse cube?在数据仓库多维数据集中,此度量是否可能是正确的选择?
【发布时间】:2016-05-28 09:26:45
【问题描述】:

我有这个简单的数据仓库架构:

Flight (ID, pilot, aircraft, airport)
Pilot (ID, name, surname, flight hours)
Aircraft (ID, model)
Airport (ID, name, city)
  • Flight.pilot 引用 Pilot.ID
  • Flight.aircraft 引用 Aircraft.ID
  • Flight.airport 引用 Airport.ID

航班将成为我的事实表。

那我要三个维度

  1. pilotage(涉及 Pilot 表)
  2. 车辆(涉及飞机桌)
  3. 出发(涉及机场表)

一个measure可以是航班号,通过Flight table上的count(ID)获得。

在下图中,您可以看到我刚刚描述的星型模式。

我的问题是:选择飞行时间(这是表格的一列 - 飞行员 - 参加一个维度 - 领航 -)是否有意义?

而且,更一般地说,如果可能/在概念上正确选择事实表中不在的列作为衡量标准。

那么,简而言之,数据仓库多维数据集的度量是否必须来自事实表?或者也可以选择维度表中的列?

如果你能帮助我,非常感谢!

【问题讨论】:

    标签: data-warehouse cube


    【解决方案1】:

    选择飞行时间是否有意义(这是表格的一列 - 飞行员 - 参加一个维度 - 领航?

    飞行时间还能参与什么?您只是在测量飞行员的飞行时间。您可以(应该?)测量飞机的飞行小时数,但您的仓库没有飞机飞行小时数输入。

    您仓库的用户想知道飞行员的飞行时间吗?如果是这样,那么您的 Pilotage 表将成为事实上的飞行小时数表。

    对于真正的仓库来说,从航班本身计算飞行小时数会更合乎逻辑,而不是一次性为飞行员和飞机提供总和。每次装载仓库时,您都必须更新飞行员的飞行时间

    选择不在事实表中的列作为度量是否可能/在概念上正确?

    是的。规则是,如果您的用户要查询该列,请将其包含在数据仓库中。

    【讨论】:

      【解决方案2】:

      视情况而定。

      吉尔伯特对答案的主餐是正确的 - 您的飞行时间是基于每位飞行员的,所以不要去尝试测量它的车辆,否则您会加倍(或三倍,或四倍...... ) 您的数字,因为您仅通过 Flight 事实表与这些维度建立了多对多关系。

      但是,如果您的事实是不可总结的(例如“驾驶每辆车的飞行员的平均飞行小时数”),那么它又是有意义的。

      现在我对 SQL Server SSAS 模型最有经验 - 在这些情况下,我通常会将其创建为计算度量,并且它会存在于 Flight 度量组中 - 当您进行此类度量时,您必须非常具体地说明您正在使用什么关系,以及如何执行聚合。在这种情况下,度量实际上将不再是“在维度上”并且实际上将是“在事实上”(即使它是通过引用维度来计算的)。恢复幸福和最佳实践。

      但是,如果您无法做到这一点,那真的不是世界末日 - 如果它在您的上下文中有效并且有意义,那么它在您的上下文中有效并且有意义,没有太多其他的进入它。大多数 DW 最佳实践只是提醒您确保它确实在您的情况下有意义。

      所以去弄清楚你想如何使用它,看看你是否可以用你现有的模型做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多