我必须根据日期范围记录构建一个多维数据集,并且不确定最佳的继续方法。
想象一下汽车的多维数据集和保修期。每辆车都有开始日期和保修期结束。然后可能会延长保修期..所以想象一下
CAR REG TYPE WARRANTY START WARRANTY END
CAR A PURCHASE 01/01/2016 31/01/2016
CAR A EXTENDED 01/01/2017 30/06/2017
CAR A EXTENDED 01/08/2017 30/01/2018 -- note, gap here
CAR B PURCHASE 01/01/2016 31/01/2016
CAR B EXTENDED 01/01/2017 30/06/2017
CAR B EXTENDED 01/08/2017 30/01/2018 -- note, gap here
所以多个项目,具有多个日期范围。有一张主表(CARS),上面有汽车细节(颜色,型号等)。
现在我想构建一个可在月级报告的立方体,保修/保修类型的汽车等。
因此,计划1是构建一个视图,通过连接到日期表,按月报告,并将其反馈到多维数据集,将上述内容展开。但是,汽车数量乘以所涵盖的月份会导致数百万行 - 这意味着服务器有时会耗尽TempDB空间,而当它运行时,立方体需要数小时才能构建。
是否有更好的方法 - 例如查看汽车详细信息,然后在保修表上查看另一个视图(如何让SSAS处理日期范围内的数月) - SSAS中的加入是否会更有效而不是SQL中的视图中的连接?
谢谢大家。
答案 0 :(得分:1)
您可以将开始和结束列连接到时间维度。在报告中,您可以使用“:”运算符来构建日期切线报告。 您可以在此处找到更多详细信息:http://www.purplefrogsystems.com/blog/2013/04/mdx-between-start-date-and-end-date/
答案 1 :(得分:0)
一种适用于Excel或Power BI等拖放式客户端工具的方法是多对多的Date维度。由于A和B车匹配,我们假装有一辆C车,保修期为2015-07-30至2015-12-31。
创建DimWarrantyDateRangeKey,它表示保修期间的唯一日期组合。代理键是WarrantyDateRangeKey。当然,构建此表的ETL会有点贵,但鉴于您的数据大小,我认为这是一项值得投资,与您的m2m桥表每辆车每个活动日有一行相比,可以产生更好的查询性能。
每辆车应分配一个WarrantyDateRangeKey。将WarrantyDateRangeKey列添加到事实表...
CAR REG WarrantyDateRangeKey
A 1
B 1
C 2
m2mWarrantyDateRange
WarrantyDateRangeKey DateKey
1 20160101
1 20160102
1 ...
1 20170629
1 20170630
1 20170801
1 20170802
1 ...
1 20180129
1 20180130
2 20150701
2 20150702
2 ...
2 20151230
2 20151231
表格如下所示......
FactTable -> DimWarrantyDateRange <- m2mWarrantyDateRange -> DimDate
然后在立方体中,DimWarrantyDateRange应该是维度,m2mWarrantyDateRange应该是具有计数度量的度量值组。 DimDate应该是一个维度。然后,您应该使用m2mWarrantyDateRange作为中间度量组,将DimDate与FactTable关联为多对多(m2m)维度。
现在,在Excel或Power BI中,您应该可以过滤到特定日期,它将过滤到当天有活跃保修的汽车。