我有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表并建议一种方法,以便我可以无缝地合并它并将其传递到数据仓库中的单个事实表。
答案 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 ),则相应地更改它。
这应该是您的要求和想要进行的分析的良好基础。