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
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
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 –