【问题标题】:Merge different granularity data合并不同粒度的数据
【发布时间】:2016-09-19 21:20:12
【问题描述】:

我有 2 个不同粒度的表。第一个表有半小时级别的粒度数据,如下所示 - 它显示任何系统在半小时间隔内处于特定状态,如 state1、state2 等......

<table>
  <tr>
    <th>SysName</th>
    <th>StartTime</th>
    <th>EndTime</th>
    <th>State1</th>
    <th>State2</th>
  </tr>
  <tr>
    <td>Sys1</td>
    <td>12:00</td>
    <td>12:30</td>
    <td>10</td>
    <td>20</td>
  </tr>
  <tr>
    <td>Sys2</td>
    <td>12:30</td>
    <td>01:00</td>
    <td>12</td>
    <td>18</td>
  </tr>
  <tr>
    <td>Sys3</td>
    <td>01:00</td>
    <td>01:30</td>
    <td>16</td>
    <td>14</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

注意:- 在这里,我可以轻松地应用工作时间/班次的自定义过滤器,例如从早上 9 点到晚上 6 点或任何其他自定义过滤器。

而另一张表只有状态变化数据如下图——

<table>
  <tr>
    <th>SysName</th>
    <th>StartTime</th>
    <th>EndTime</th>
    <th>Duration(mins)</th>
    <th>StateName</th>
  </tr>
  <tr>
    <td>Sys1</td>
    <td>12:00</td>
    <td>12:45</td>
    <td>45</td>
    <td>State1</td>
  </tr>
  <tr>
    <td>Sys2</td>
    <td>12:45</td>
    <td>01:20</td>
    <td>35</td>
    <td>State2</td>
  </tr>
  <tr>
    <td>Sys3</td>
    <td>01:20</td>
    <td>04:00</td>
    <td>160</td>
    <td>State1</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

现在我想以任一粒度(最合适)将这些数据合并到一个表中,并且我也应该能够应用自定义过滤器。

我无法在这里做出设计决定。将上述 2 个表视为事实表,并提出一种方法,以便我可以无缝合并它们并将其流向数据仓库中的单个事实表。

【问题讨论】:

  • 如果可能,请始终使用最精细的粒度。你想达到什么目的?您必须如何呈现数据是否存在规则?
  • 是的,我可以以最精细的粒度存储数据。但这将导致数百万条记录。例如。 4000 个系统 * 730(2 年数据)* 48(半小时间隔数据)~= 140160000 条记录。
  • 好的,谢谢。对我来说似乎不是太大。我的其他问题呢?
  • 我想通过基于不同状态数据的不同计算来展示每个系统的性能。基于状态信息的 TOP 5 使用最多/最少的系统。此外,我想应用我提到的自定义日历。

标签: database data-modeling data-warehouse


【解决方案1】:

源数据

如您所述,您的数据如下所示:

表 1:

SysName StartTime   EndTime State1  State2
Sys1    12:00       12:30   10      20
Sys2    12:30       01:00   12      18
Sys3    01:00       01:30   16      14

表 2:

SysName StartTime   EndTime Duration(mins)  StateName
Sys1    12:00       12:45   45              State1
Sys2    12:45       01:20   35              State2
Sys3    01:20       04:00   160             State1

组合

正如我之前所说,我总是尽可能使用最低的粒度。我必须在这里假设一下,因为我不知道确切的源数据以及规则哪些数据将被计算,哪些数据不计算 - 这就是我添加一些 (?) 的原因。所以在我看来,将这两者结合起来的规则结果如下:

SysName StartTime  EndTime State1  State2 Duration  StateName
Sys1    12:00      12:30   10      20     (calcul.) State1
Sys1    12:30      12:45   0 (?)   0 (?)  (calcul.) State1
Sys2    12:30      12:45   12      18     (calcul.) NULL (?)
Sys2    12:45      01:00   12      18     (calcul.) State2
Sys2    01:00      01:20   0 (?)   0 (?)  (calcul.) State2
Sys3    01:00      01:20   16      14     (calcul.) NULL (?)
Sys3    01:20      01:30   16      14     (calcul.) State1
Sys3    01:30      04:00   0 (?)   0 (?)  (calcul.) State1

我没有添加 持续时间,因为这个字段可以很容易地即时计算。无论如何,如果您的规则与我假设的不同(基本上:如果没有找到状态集 0 / NULL),请相应地更改它。

这应该为您的需求和您想要进行的分析奠定良好的基础。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2013-09-11
    • 2012-12-15
    • 2021-05-27
    • 1970-01-01
    • 2021-11-19
    • 2020-04-10
    相关资源
    最近更新 更多