【问题标题】:Dynamic Time dimension in SSASSSAS 中的动态时间维度
【发布时间】:2015-02-02 17:26:53
【问题描述】:

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

我有一张表格,其中有财政年度的格式。如下所示,

StartDM      EndDM        Year

 04-01       03-31        2014

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

谢谢

【问题讨论】:

  • 不确定我是否明白了主要思想。您需要动态财政年度吗?所以一个用户可以选择从 4 月开始的 FY,另一个 - 从 10 月开始等等?还是只有一种您静态确定的会计年度?
  • 既然是产品,我们不能总是去多维数据集为不同的客户更改会计年度。一个人可能想使用从 4 月开始的财政年度,另一个可能想使用从 10 月开始的财政年度。因此,我们需要灵活地使用 config/table 值来确定开始和结束会计年度,而不是在多维数据集开发中静态选择 Start year 和 End Year。
  • 知道了,我写了一个可能的答案。

标签: ssas


【解决方案1】:

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

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

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

BridgeReportDateFYYMD, FYM_ID, FYMD 视图中的字段 vwBridge_M2M_DynamicFYStartMonth

DimReportDateFYFYMD, 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 名成员:

祝你好运!

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

【讨论】:

  • 我试图创建一个视图表,该表生成具有在多维数据集中构建维度所需的值的列。请查看帖子 (stackoverflow.com/questions/28558905/…)。如果您有任何想法与我分享,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多