在SQL中保留历史数据的最佳实践(适用于SSAS Cube)

时间:2013-10-11 13:46:23

标签: sql sql-server ssas cube

我正在使用酒店数据库,由于人们一直预订和取消预订,因此预订表发生了很大的变化。试图找出将预订表转换为SSAS中的事实表的最佳方法。我希望能够从中获得正确的统计数据。

例如:如果客户X在9月20日预订了12月20日的房间,并在10月20日取消订单。如果我在9月份运行立方体(在11月运行)并且我想看看在9月份预订了多少房间,那么X的订单应计入总和中。
但是,如果我运行多维数据集进行YTD计算(在11月运行),则不应计入订单总和。

我正在考虑每晚将更新插入到同一个事实表中,并且除了预订号(唯一键)之外,还要在表中添加修订列。所以回到这个例子,假设客户X的预订号码是1234,我第一次输入它就会得到0版本,10月份当我添加取消记录时,它会得到修订版1(当然还有时间戳)这一行)。

现在,如果我想查看任何时间,我可以通过时间戳并查看MAX(修订版)。

是否有意义?有什么想法吗?

注意:我给出了取消订单的示例,但我们想跟踪其他统计信息。


我读到的另一个选项是对多维数据集进行分区,但我是否对整个表进行分区。我希望能够每晚添加更改。我是否需要每晚对整个桌子进行分区?这是一张很大的桌子。

1 个答案:

答案 0 :(得分:0)

处理此问题的一种方法是在事实表中插入记录以进行预订和取消。您不需要查看max(修订版) - 多维数据集都是关于聚合的。

如果您的表格如下:

booking number, date, rooms booked

您可以输入以下数据:

00001, 9/10, 1
00002, 9/12, 1
00001, 10/5, -1

然后,您的YTD将始终保持信息准确无论您正在查看的任何月份。简单总结预订的房间。