使用多对多技术可能有助于解决它。
我们需要几个额外的项目:
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 -- 我们日期的所有可能值。这里应该是日期维度的天级别字段。
所以我们有这样的东西:
其中YMD - 是真实日期,FYM_ID - 是所有可能的财政年度开始月份,FYMD, FYM, FY - 财政年度日期维度的级别
SSAS 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 添加中间测量组(使用一个计数测量)
将两个先前创建的维度添加到多维数据集并链接维度,如下面的屏幕所示:
第一个链接到事实表的真实维度键 (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](这是一月),4 是四月,12 是十二月。
最终结果
一月份显然是一样的:
四月将一些成员移至下一年:
最后,9 月到次年只移动了当年的最后 4 名成员:
祝你好运!
(由于小错误修复而更新)