Nella realizzazione di reportistica capita spesso di dover organizzare i dati in maniera diversa dagli attributi o dalle gerarchie di riferimento nel cubo di Analysis Services.
Per questo motivo il inguaggio MDX mette a disposizione la possibilità di creare dei set personalizzati.
Questi set di dati possono essere realizzati direttamente sul cubo e quindi utilizzati sia nei report di Reporting Services che in Excel 2010 oppure possono essere creati direttamente nel “dataset” del report.
Nell’esempio proposto bisogna realizzare un report come quello in figura:
Le voci presenti in colonna raggruppano gli attributi della data di produzione secondo le voci presenti in Legenda.
Step 1 – Creazione dei Membri calcolati presenti in colonna.
WITH
– IDENTIFICA IL TUTTI I MESI ANTECEDENTI A MESE-1
MEMBER [Periodo Produzione].[Mese].[Oltre M-1] AS
SUM({[Periodo Produzione].[Mese].&[200001]:STRTOMEMBER(“[Periodo Produzione].[Mese].&[" + CStr(year(Now())) + Right("000" + Cstr(month(Now())-2),2) + "]“)})
– IDENTIFICA IL MESE PRECEDENTE
MEMBER [Periodo Produzione].[Mese].[M-1] AS
SUM({STRTOMEMBER(“[Periodo Produzione].[Mese].&[" + CStr(year(Now())) + Right("000" + Cstr(month(Now())-1),2) + "]“)})
– IDENTIFICA IL MESE CORRENTE
MEMBER [Periodo Produzione].[Mese].[MC] AS
SUM({STRTOMEMBER(“[Periodo Produzione].[Mese].&[" + CStr(year(Now())) + Right("000" + Cstr(month(Now())),2) + "]“)})
– IDENTIFICA IL MESE PROSSIMO
MEMBER [Periodo Produzione].[Mese].[M+1] AS
SUM({STRTOMEMBER(“[Periodo Produzione].[Mese].&[" + CStr(year(Now())) + Right("000" + Cstr(month(Now())+1),2) + "]“)})
– IDENTIFICA IL TUTTI I MESI Oltre A MESE+1
MEMBER [Periodo Produzione].[Mese].[Oltre M+1] AS
SUM({STRTOMEMBER(“[Periodo Produzione].[Mese].&[" + CStr(year(Now())) + Right("000" + Cstr(month(Now())+2),2) + "]“):[Periodo Produzione].[Mese].&[201309]})
Step 2 - Creiamo un membro di ordinamento per l’esposizione nel report.
CASE
WHEN [Periodo Produzione].[Mese].currentmember = [Periodo Produzione].[Mese].[Oltre M-1] THEN 1
WHEN [Periodo Produzione].[Mese].currentmember = [Periodo Produzione].[Mese].[M-1] THEN 2
WHEN [Periodo Produzione].[Mese].currentmember = [Periodo Produzione].[Mese].[MC] THEN 3
when [Periodo Produzione].[Mese].currentmember = [Periodo Produzione].[Mese].[M+1] THEN 4
WHEN [Periodo Produzione].[Mese].currentmember = [Periodo Produzione].[Mese].[Oltre M+1] THEN 5
END
Step 3 - Creazione del Named Set
SET MeseProduzione as
{[Oltre M-1], [M-1], [MC], [M+1] , [Oltre M+1]}
Step 4 - Query MDX Finale
SELECT
NON EMPTY {[Measures].[NomeMisura],OrdinamentoMese} ON COLUMNS,
NON EMPTY {([DimSocieta].[Societa].[Societa].ALLMEMBERS * MeseProduzione)} ON ROWS
FROM [NomeCubo]

