2016-07-03 92 views
0

我有一个维度DimDate(年,月,日,季度),在这个维度上,我想创建一个相对年份和相对月份的相对日历。 例如: - 相对年份我想有一个会员:当前年份,当前年份-1 - 相对月份我想有一个会员:当前月份,当前月份-1,当前月份-2 ...多维数据集SSAS - 相对日历

如何在SSAS中做到这一点?

+0

这是dax还是mdx?如果你真的想要这些代码,这是非常不同的。为层次结构的每个级别创建一个计算列,然后自行构建层次结构 – Matt

+0

是 - 它是SSAS表格还是olap?它是由星型模式构建的吗?如果是这样,你的第一个任务是将它添加到你的日期维度表 –

回答

0

使用“相对周期尺寸”

下面的SQL脚本将创建一个相对周期维度表和视图。

将它添加到您的DSV, 创建它的尺寸, 设置有“当前成员”作为默认, 将其设置为不可聚合, 添加多维数据集脚本(cubeScript列提供在表格中为了方便起见)插入到多维数据集中的计算选项卡中(您可能需要将其更改为适合您的维度和层次结构名称)

然后应将该维度添加到多维数据集,但不绑定到任何度量值组。接线由多维数据集脚本完成。

我已经提供了默认加两个相对周期计算的例子,但可以根据需要轻松扩展。 (例如去年同期,前一年,前四周等)

CREATE TABLE [dbo].[DimRelativePeriod](
[relativePeriodKey] [smallint] IDENTITY(1,1) NOT NULL, 
[relativePeriodCode] [varchar](10) NOT NULL, 
[relativePeriod] [varchar](50) NOT NULL, 
[relativePeriodSortOrder] [smallint] NOT NULL CONSTRAINT [DF_dimRelativePeriod_relativePeriodSortOrder] DEFAULT ((1)), 
[cubeScript] [varchar](max) NULL, 
[sqlScript] [varchar](max) NULL, 
CONSTRAINT [PK_dimRelativePeriod] PRIMARY KEY CLUSTERED 
(
[relativePeriodKey] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

CREATE view [dbo].[vwDimRelativePeriod] 
as 
select 
relativePeriodKey, 
relativePeriodCode, 
relativePeriod, 
relativePeriodSortOrder 
from 
[dbo].[DimRelativePeriod] 
GO 
SET IDENTITY_INSERT [dbo].[DimRelativePeriod] ON 

GO 
INSERT [dbo].[DimRelativePeriod] ([relativePeriodKey], [relativePeriodCode], [relativePeriod], [relativePeriodSortOrder], [cubeScript], [sqlScript]) VALUES (1, N'CUR', N'Current Period', 1, NULL, NULL) 
GO 
INSERT [dbo].[DimRelativePeriod] ([relativePeriodKey], [relativePeriodCode], [relativePeriod], [relativePeriodSortOrder], [cubeScript], [sqlScript]) VALUES (2, N'YTD', N'Year to Date', 2, N'SCOPE ([Relative Period].[Relative Period].&[YTD]); 
THIS= 
iif([Date].[Calendar].currentmember.level.name = "Month", 
aggregate(
[Date].[Fiscal].CURRENTMEMBER.parent.parent.firstchild.firstchild: 
[Date].[Fiscal].CURRENTMEMBER*[Relative Period].[Relative Period].&[CUR]),''N/A'') 
); 
END SCOPE;', NULL) 
GO 
INSERT [dbo].[DimRelativePeriod] ([relativePeriodKey], [relativePeriodCode], [relativePeriod], [relativePeriodSortOrder], [cubeScript], [sqlScript]) VALUES (3, N'LTD', N'Life to Date', 3, N'SCOPE ([Relative Period].[Relative Period].&[LTD]); 
THIS= 
aggregate(null:[Date].[Fiscal].CURRENTMEMBER*[Relative Period].[Relative Period].&[CUR]); 
END SCOPE;', NULL) 
GO 
SET IDENTITY_INSERT [dbo].[DimRelativePeriod] OFF 
GO 
相关问题