合并不同的粒度数据

时间:2016-09-16 13:24:07

标签: database data-modeling data-warehouse

我有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.00或任何其他自定义过滤器。

另一个表只有状态改变数据,如下所示 -

<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个表视为Fact表并建议一种方法,以便我可以无缝地合并它并将其传递到数据仓库中的单个事实表。

1 个答案:

答案 0 :(得分:0)

来源数据

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

表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 ),则相应地更改它。

这应该是您的要求和想要进行的分析的良好基础。