合并不同粒度的数据

Merge different granularity data

我有 2 个 table 具有不同的粒度。首先 table 有半小时级别的粒度数据,如下所示 - 它表明任何系统在半小时间隔内处于特定状态,如 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>

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

而另一个 table 只有状态更改数据,如下所示 -

<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>

现在我想将这些数据合并到一个 table 中的任一粒度(这是最好的 suitable),我也应该能够应用自定义过滤器。

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

源数据

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

Table 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

Table 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

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

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