giovedì 18 febbraio 2010

Filtrare i dati in SSAS con la funzione UserName()

 Mi è capitato di dover fare in modo che gli utenti che accedessero ad un Cubo di Analisys Services 2005 vedessero solo i dati di loro competenza.

In pratica nel mio caso avevo una dimensione di tipo gerarchico che mi definiva la gerarchia aziendale del personale (tipica tabella degli utenti con l'id del superiore) e il requisito era quello che ogni utente avrebbe dovuto vedere  solo i dati che si riferivano a lui stesso o ai suoi sottoposti.

Imbattendomi nella configurazione dei permessi di SSAS ho trovato la seguente soluzione che utilizza la funzione UserName() che restituisce l'utente corrente:

- Innanzitutto è necessario creare un Ruolo ad hoc all'interno del cubo a cui assegnare tutti gli utenti che devono essere soggetti a tale comportamento.

- Se si vuole fare in modo che l'utente veda esclusivamente solo la gerarchia che lo riguarda (gli altri utenti non saranno nemmeno visibili), è necessario impostare nella configurazione del ruolo all'interno del tab Dimension Data nella sezione Allowed member set la seguente espressione MDX :
      
             DESCENDANTS( [UtentiDIM].[Gerarchia].members("[UtentiDIM].[Gerarchia].["+UserName()+"]") )

- Se si vuole invece limitare esclusivamente la visualizzazione delle misure per la gerarchia che lo riguarda senza limitare la visualizzazione dell'intera gerarchia, è necessario impostare nella configurazione del ruolo all'interno del tab CellData nella sezione Allow reading of cube content la seguente espressione MDX:

             ISANCESTOR( [UtentiDIM].[Gerarchia].members("[UtentiDIM].[Gerarchia].["+UserName()+"]"),[UtentiDIM].[Gerarchia].CURRENTMEMBER )
             OR  [UtentiDIM].[Gerarchia].members("[UtentiDIM].[Gerarchia].["+UserName()+"]") IS [UtentiDIM].[Gerarchia].CURRENTMEMBER

Ovviamente tali espressioni valgono nel caso più semplice che il nome del membro corrisponda esattamente agli username degli utenti. In caso contrario è necessario modificare leggermente l'espressione MDX.

Nessun commento:

Posta un commento