带有日期范围记录的SSAS多维数据集

时间:2016-11-13 10:36:02

标签: sql-server date ssas

我必须根据日期范围记录构建一个多维数据集,并且不确定最佳的继续方法。

想象一下汽车的多维数据集和保修期。每辆车都有开始日期和保修期结束。然后可能会延长保修期..所以想象一下

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中的视图中的连接?

谢谢大家。

2 个答案:

答案 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中,您应该可以过滤到特定日期,它将过滤到当天有活跃保修的汽车。