SSAS中的动态时间维度

时间:2015-02-02 17:26:53

标签: ssas

我创建了一个立方体。除了时间维度,我设置的一切都很好。我需要按照财政年度日历。因为,我正在研究产品,因此没有固定的会计年度格式,我无法使用服务器/数据源方法创建Time维度表。在设计时。

我有一个表格,其中的格式是会计年度。如下所示,

StartDM      EndDM        Year

 04-01       03-31        2014

因此,我需要使用财政年度的上述格式作为维度。我搜索了很多,以找到实现功能的方法。专家帮助我为这个问题提供更好的解决方案。我会感激你的。

由于

1 个答案:

答案 0 :(得分:0)

使用多对多技术可能有助于解决它。

我们需要几个额外的项目:

SQL部分

1)1月至12月成员的平面维度,这将是会计年度的第一个月。

create view vwDynamicFYStartMonth
as
SELECT 1 AS FYM_ID, 'Jan' AS FYMonth UNION ALL
SELECT 2, 'Feb' UNION ALL
SELECT 3, 'Mar' UNION ALL
SELECT 4, 'Apr' UNION ALL
SELECT 5, 'May' UNION ALL
SELECT 6, 'Jun' UNION ALL
SELECT 7, 'Jul' UNION ALL
SELECT 8, 'Aug' UNION ALL
SELECT 9, 'Sep' UNION ALL
SELECT 10, 'Oct' UNION ALL
SELECT 11, 'Nov' UNION ALL
SELECT 12, 'Dec'

2)桥梁测量组根据所选的开始月份具有任意日期组合。

3)等级维度:会计年度/月/日

为了简化解决方案,我们将对它们使用相同的视图:

create view vwBridge_M2M_DynamicFYStartMonth
as
select YMD,FYM_ID,FYMonth
    ,case when YMD/100%100>=FYM_ID and FYM_ID!=1 then YMD+10000 else YMD end as FYMD
    ,case when YMD/100%100>=FYM_ID and FYM_ID!=1 then (YMD+10000)/100 else YMD/100 end as FYM
    ,case when YMD/100%100>=FYM_ID and FYM_ID!=1 then (YMD+10000)/10000 else YMD/10000 end as FY
 from 
(select REPORT_DATE_ID as YMD from Data
 group by REPORT_DATE_ID) a
cross join vwDynamicFYStartMonth b

Data.REPORT_DATE_ID - 我们约会的所有可能值。这应该是日期维度的日期级别字段。

所以我们有这样的感觉:

DynamicFY_BridgeSample

其中YMD - 是真实日期,FYM_ID - 是开始会计年度的所有可能月份,FYMD, FYM, FY - FY日期维度的级别

SSAS DSV部分

我们需要将所有新项目添加到数据源视图中,如下所示:

DynamicFY_DSV

DimReportDateFYChoise是查看vwDynamicFYStartMonth

BridgeReportDateFY来自YMD, FYM_ID, FYMD

vwBridge_M2M_DynamicFYStartMonth个字段

DimReportDateFY来自FYMD, FYM, FY

vwBridge_M2M_DynamicFYStartMonth个字段

SSAS维度部分

使用成员列表在DimReportDateFYChoise上创建简单的平面维度(通过设置IsAggregatable = False并将默认成员设置为Jan或其他任何内容,也可以删除所有级别)

使用DimReportDateFY创建分层日期维度。

SSAS多维数据集设计部分

通过BridgeReportDateFY添加中间度量值组(使用一个计数度量)

将以前创建的两个尺寸添加到多维数据集和链接尺寸,如下面的屏幕所示: DynamicFY_DimUsage

首先链接到事实表的真实维度键(Report_Date_ID)。

通过使用多对多关系,向您的真实度量值组添加新的FY维度。

MDX查询

我使用此查询进行测试

select [Report Date FY].[Report Date FY].[Month].Allmembers on 1
,[Report Date].[Report Date].[Month].Allmembers on 0
from 
[DATA]
where ([Report Date FY Choise].[FYM ID].&[1],[Measures].[Count])

与使用&[1](1月份)相比,4是4月,12是12月。

最终结果

1月份显然是一样的:

DynamicFY_ResultJan

四月将一些成员带到下一年:

DynamicFY_ResultApr

最后,9月到明年只移动了当年的最后4名成员:

DynamicFY_ResultOct.png

祝你好运!

(由于如此小的错误修复而更新)