Articoli con tag MDX

SSAS Count distinct with Null

Interessante e utile articolo, per ovviare ad il problema del count distinct in analysis services quando vi è un membro con valore Null.
Esempio: effettuare count distinct del campo cliente.

CLIENTE
A
A
B
C
NULL

Risultato atteso: 3
Risultato ottenuto: 4

Come risolvere il problema ?
leggi l articolo

Leggi il seguito di questo post »

Annunci

, , ,

1 Commento

Creazione di Set personalizzati – Named Set

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]

, , ,

Lascia un commento

MDX – Misura di Forecast

Col seguente codice è possibile creare una misura che riporti il valore dal giorno selezionato  fino alla fine dell’anno corrente.
 
In questo caso l’attributo “indic” è composto da AAAAMMGG  es. 20111231 come fine anno.
 
WITH MEMBER [Measures].[Forecast] As
SUM({[DimTempo].[Indice].currentmember : STRTOMEMBER(“[DimTempo].[Indice].&[” + CStr(Year(Now())) + “1231]”)}
   , [Measures].[NomeMisura]
   )
Select [Measures].[Forecast] on columns,
[DimTempo].[Indice].[Indice] on rows
from [NomeCubo]

, , ,

Lascia un commento

MDX: Totale Anno Precedente

A volte viene richiesto di calcolare una misura che mostri sempre il valore totale dell’anno precendete rispetto all’arco temporale indicato ad esempio nella pivot.

([Measures].[Nome Misura], Ancestor(
ParallelPeriod(
[Dim Tempo].[Gerarchia Tempo].[Anno], 1,[Dim Tempo].[Gerarchia Tempo].CurrentMember
), [Dim Tempo ].[Gerarchia Tempo].[Anno]))

Usando la gerarchia, a qualsiasi livello ci poniamo, la misura rappresenta il totale dell’anno precedente.

, , , ,

3 commenti

Microsoft Analysis Services – Misura Dinamica sulle Dimensioni

Questo documento spiega come creare una misura dinamica che utilizzi gli elementi selezionati in colonna per effettuare diversi calcoli come ad esempio la Variazione e la Variazione %.
L’utente finale dovrà solo selezionare i due attributi che vuole vedere in colonna e la misura in automatico effettuerà i calcoli.

DATABASE RELAZIONALE

DATABASE MULTIDIMENSIONALE (ANALYSIS SERVIC ES)

, , , ,

Lascia un commento

Microsoft Analysis Services – Relazioni Molti a Molti

Questo articolo spiega il processo di implementazione di un cubo con relazioni molti a molti tra tabella dei fatti e dimensione.
Questo tipo di relazione permette di risolvere diverse problematiche di progetto.

Esempio Pratico:

Il sistema che vogliamo analizzare registra il numero di attività di ogni utente.
Nella dimensione ‘Utente’ ad esso vengono associati due ‘Agenti’, di conseguenza il codice utente non è più chiave univoca della tabella.

Implementando una relazione molti a molti con la tabella dei fatti possiamo risolvere la problematica.

DATABASE RELAZIONALE – SITUAZIONE INIZIALE

 

Questa situazione produce una dimensione Utente in cui la chiave ‘cdUser’ è duplicata.

Per poter realizzare una relazione Molti a Molti in ambito multi dimensionale dobbiamo prima introdurre le seguenti modifiche all’interno del nostro database relazionale.

DATABASE RELAZIONALE – MODIFICHE

DATABASE MULTIDIMENSIONALE – (ANALYSIS SERVICES)

 

, , , ,

1 Commento