PHP中简单数据仓库的日期间隔
我正在实现一个基本的星型模式,为我的公司提供采购报告。我们的事实表以4个维度进行汇总,并以每日、每周、每月和每年的总数进行汇总 代码目前知道如何处理单日、周、月和年的报告。下一步是实现任意日期范围的报告。提供一个范围,目标是了解这两个日期之间的年、月、周和天的总数,并提取适当的记录来计算总数。问题是我们需要确定两个日期之间每个完整的粒度周期的计数,而不仅仅是所用的时间 例如,“2009-06-29”和“2011-06-29”之间已经过去了2年,但我们需要知道,这一范围包括一整年(2010年)、11个月(2009年1月至5月10日和7月至12月)和58天(2009年6月1日至29日和2011年6月1日至29日) 从这个结果中,我们可以从70个粒度周期中提取已经汇总的记录,合并并呈现总数 我一直在编写测试代码,以确定将日期范围分解为其组成部分的最佳方法,但我现在后退一步,因为我怀疑我对这个过程考虑过度了。目前的草案工作如下:PHP中简单数据仓库的日期间隔,php,date,data-warehouse,Php,Date,Data Warehouse,我正在实现一个基本的星型模式,为我的公司提供采购报告。我们的事实表以4个维度进行汇总,并以每日、每周、每月和每年的总数进行汇总 代码目前知道如何处理单日、周、月和年的报告。下一步是实现任意日期范围的报告。提供一个范围,目标是了解这两个日期之间的年、月、周和天的总数,并提取适当的记录来计算总数。问题是我们需要确定两个日期之间每个完整的粒度周期的计数,而不仅仅是所用的时间 例如,“2009-06-29”和“2011-06-29”之间已经过去了2年,但我们需要知道,这一范围包括一整年(2010年)、1
- 对于日期之间的每一年,从日期范围中删除该期间,并将该年的“之前期间”和“之后期间”拆分为两个新的日期范围李>
- 在“datesToParse”堆栈上推送两个新的日期范围
- 重复
有更好的方法吗?这似乎是一个已经解决了很多次的问题 我不明白您为什么要实现这样一个复杂的解决方案,通常的实现是只有一个事实表,其中的数据具有最低的粒度级别(在您的情况下是每天),并根据需要简单地汇总查询中的度量值 这非常容易实现和维护,查询也非常容易编写(或从报告工具生成)。这对你不管用吗?你有多少数据?您是否将日期实现为维度(希望是)或事实表中的值?您是在使用报告工具(SSRS、Cognos、Business Objects)还是在滚动您自己的查询 如果您考虑的是性能问题,DWH通常会演变成这样:
您的解决方案听起来有点像自制的OLAP实现,但不清楚为什么需要它。如果您的数据量是中小型的,那么您可能能够通过索引和分区很好地管理它。如果它很大,那么您可能会考虑使用OLAP和专门的报告工具,这将是一个更广泛的问题。但是您没有提供太多关于您的环境或需求的信息,因此我在这里可能有点离题。我不明白您为什么要实现这样一个复杂的解决方案,通常的实现是只有一个事实表,其中的数据具有最低粒度级别(在您的情况下是每日)和简单的SUM()根据需要在查询中设置度量值 这非常容易实现和维护,查询也非常容易编写(或从报告工具生成)。这对你不管用吗?你有多少数据?您是否将日期实现为维度(希望是)或事实表中的值?您是在使用报告工具(SSRS、Cognos、Business Objects)还是在滚动您自己的查询 如果您考虑的是性能问题,DWH通常会演变成这样:
您的解决方案听起来有点像自制的OLAP实现,但不清楚为什么需要它。如果您的数据量是中小型的,那么您可能能够通过索引和分区很好地管理它。如果它很大,那么您可能会考虑使用OLAP和专门的报告工具,这将是一个更广泛的问题。但是,您没有提供关于您的环境或需求的太多信息,因此我在这里可能有点离题。您是否可以选择该期间的所有每日汇总并在SQL中求和?您是否可以选择该期间的所有每日汇总并在SQL中求和?