2016-07-03 3 views
0

J'ai une dimension DimDate (Année, mois, jours, quater) et dans cette dimension je voudrais créer un calendrier relatif correspondant à l'année relative et au mois relatif. Par exemple: - Année Relative Je souhaiterais avoir un Membre: année en cours, année en cours-1 - Mois Relatif je voudrais avoir un membre: Mois en cours, mois en cours -1, mois en cours-2 ...Cube SSAS - Calendrier relatif

comment le faire dans SSAS?

+0

quelle est la variable dax ou mdx? C'est très différent si vous voulez vraiment le code. Créez une ou plusieurs colonnes calculées pour chaque niveau de la hiérarchie, puis créez la hiérarchie elle-même. – Matt

+0

Oui - est-ce SSAS tabular ou olap? Est-ce qu'il est construit à partir d'un schéma en étoile? Si c'est le cas, votre première tâche consiste à l'ajouter à votre table de dimension de date –

Répondre

0

Utilisez une "dimension de la période relative"

Le ci-dessous Scripts SQL va créer une table de dimension de la période relative et vue.

Ajouter à votre DSV, créer une dimension de celle-ci, mis à avoir « membre actuel » comme la valeur par défaut, définir en tant que non-agrégeable, ajouter le script cube (fourni dans la colonne cubeScript dans la table pour plus de commodité) dans l'onglet des calculs de votre cube (vous devrez peut-être modifier cela en fonction de vos noms de dimension et de hiérarchie)

La dimension doit alors être ajoutée au cube, mais PAS liée à un groupe de mesures. Le câblage est fait avec le script de cube.

J'ai fourni la valeur par défaut plus deux exemples de calculs de période relative, mais cela peut facilement être étendu si nécessaire. (par exemple, la même période l'année dernière, l'année précédente, le jeudi avant la fin, etc.)

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