2016-07-03 10 views
0

私はDimDate(年、月、日、四半期)の次元を持ち、この次元で相対年と相対月に対応する相対カレンダーを作成したいと考えています。 例: - Relative Yearメンバー:今年、今年 - 1 - 相対月メンバー:現在の月、現在の月-1、現在の月-2 ...キューブSSAS - 相対カレンダー

SSASでの操作方法は?

+0

これはdaxまたはmdxですか?実際にコードが必要な場合は非常に異なります。階層の各レベルに計算された列を作成し、階層自体を構築します – Matt

+0

はい - それはSSAS表形式かolapですか?スタースキーマから構築されていますか?その場合、最初のタスクは、それを日付ディメンション表に追加することです –

答えて

0

SQLスクリプトの下

を「相対期間寸法を」使用は相対的な期間のディメンション表とビューを作成します。 cubeScript列に提供さ

は、キューブスクリプトを追加し、 がデフォルトとして「現在のメンバー」を持つようにそれを設定し、 は非集計可能に設定し、それからディメンションを作成あなたのDSV、 に追加します(キューブの計算タブに移動します(ディメンションと階層名に合わせて変更する必要があります)

ディメンションはキューブに追加する必要がありますが、メジャーグループには関連付けられません。配線はキューブスクリプトで行います。

私は、デフォルトとプラス2つの相対的な期間計算の例を提供しましたが、これは必要に応じて簡単に拡張できます。 (例えば、前年度、前年度、前年度など)

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 
関連する問題