我正在开发一个数据仓库,最终需要我根据工作时间创建报告。目前,我的时间维度以小时为单位。我想知道是否应该修改时间维度以包含“营业时间”的位字段,还是应该在分析结束时为其创建某种计算度量?有什么例子会超级壮观吗?
7 回答
Use a bit (or even another column) to specify whether an hour is a business hour at the time it is stored. Otherwise when you change the business hours you will become unable to reproduce historical reports.
您的所有销售数据是否都在同一时区?例如,您是否跟踪不同时区的网点或不同时区的最终用户的销售情况?如果是这样,您可能希望在销售事实表中为“营业时间”创建该位字段,因为对于不同时区的用户和网点而言,动态计算该位字段将非常困难。
另外,您只想计算一次——将销售导入数据仓库时——因为该数据不太可能经常更改。这不像你会说,“这个销售过去是在营业时间,但现在不是了。”
营业时间是业务规则,因此它们将来可能会更改
将营业时间表示为基本时间和持续时间,例如 StartTime 0900,Duration 9.5 小时,这样您可以轻松更改间隔,根据不同营业时间做假设场景,并且营业时间可以跨越日期线而无需复杂的查询
当然,所有日期时间都应该是 GMT (UTC),而不是本地时间,以避免夏令时的复杂性
编辑:我想我误解了这个问题,你的数据已经精确到小时......不,我认为我的答案是正确的,但是增加了工作时间间隔的有效开始日期和结束日期。这将允许粒度在未来发生变化,同时仍保留历史
我不确定这是否有帮助,但我会使用 UCT 来存储所有时间,然后有一个开始和结束时间来指定营业时间。一旦设置好,这将是一个简单的If (SpecificHour >= BusinessStartingHour) And (SpecificHour <= BusinessEndingHour) Then ...
操作。
如果您使用 Microsoft PerformancePoint 2007,您可以使用不同的选项进行测试。您可以修改您的维度并在图表、数据透视表、其他报告工具等中输出您的结果。
http://office.microsoft.com/en-us/performancepoint/FX101680481033.aspx
“营业时间”会随着时间而改变吗?我想我是在问每一行是否需要与营业时间标志相关联,或者仅让报告本身(或某些参考)表决定该交易是否在营业时间内发生就足够了。
在其他条件相同的情况下,我可能会让报告为您执行此操作,而不是标记行,但如果营业时间随时间变化,您必须标记行以确保您的历史数据保持正确。
It's a judgement call I think... one that depends on performance testing, system usage, etc. Personally, I'd probably create an indexed field to hold a flag in the interest of dealing with the logic to determine what is and isn't a business hour up-front (i.e. when the data is loaded). If done correctly (and again, depending on the specific usage) I think you might be able to get a performance gain as well.