2016-07-03 91 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 
相關問題