2009-08-07 5 views
1

Certaines tables de dimension dans mon magasin:analyse Sql Server Services 2008 sécurité de dimension dynamique à l'aide d'expression MDX

DML 
Site 
    Id  bigint 
    Name nvarchar(256) 
    Primary key (Id) 

DATA 
SiteId Name 
2   Site 2 
3   Site A 

DML 
UserSite 
    Username nvarchar(256) 
    SiteId  bigint 
    Primary key (Username, SiteId) 
    Foreign key (SiteId) referrences Site(Id) 

DATA 
Username SiteId 
EMSUser1 2 
EMSUser1 3 
EMSUser2 3 

Mon SSAS Projet: j'ai utilisé ces deux tables de dimension dans une dimension dans BIDS projet, créé à l'aide de l'assistant de dimension. Les noms d'utilisateur se rapportent à deux comptes d'utilisateurs Windows locaux sur le serveur SSAS, ils sont membres d'un groupe local Windows ReportBrowsers. J'ai créé un rôle pour ce groupe dans BIDS et a ajouté une expression MDX à l'onglet Données de dimension pour cette dimension dans la zone AllowedSet pour l'attribut Nom d'utilisateur:

STRTOMEMBER("[UserSiteSite].[Username].["+Trim(Mid(UserName, InStr(1, UserName, "\")+ 1,128))+"]") 

Cette dimension est utilisée dans un cube qui est tout traité et déployé. J'ai alors un rapport SSRS basé sur ce cube.

Mon intention: Ce que je suis en train de faire est de prendre l'utilisateur connecté naviguent actuellement SSRS et supprimer le « domaine < > \ » une partie de la chaîne retournée filtrer efficacement les résultats aux seuls sites nom d'utilisateur a un record pour. Donc pour EMSUser1 je devrais voir les enregistrements pour les deux sites, mais il semble permettre le premier seulement ("Site 2" avec Id 2) Il n'y a aucun signe de "Site A" même si des enregistrements existent pour ce site dans la table de faits.

J'ai navigué à travers Analysis Services 2008 déchaîné et le livre étape par étape et tous les blogs etc Je ne peux tout simplement pas grok le fonctionnement interne pour atteindre mon objectif.

Qu'est-ce que je fais mal?

+0

Il peut être très difficile de comprendre l'utilité de ce filtre «caché». J'ai déjà fait une chose similaire, mais je devais être très prudent avec quelque chose appelé "Visual Totals" dans SQL Analysis Services 2000. Je ne sais pas quelles sont les conséquences dans BIDS j'ai peur. Désolé ce n'est pas très utile. Croyez-moi, vous devez tester très très attentivement, avec plus de scénarios de test que vous le pensez nécessaire! –

Répondre

0

Eh bien, ça fait longtemps. Je n'ai pas la réponse complète même maintenant, mais j'ai obtenu de l'aide ailleurs, ce qui m'a conduit à une solution. Les détails peuvent être trouvés here.

Il existe de nombreuses façons de résoudre ce genre de scénario. Je pense qu'il y en a peut-être encore une meilleure pour moi, mais j'ai quelque chose qui fonctionne au moins. Fondamentalement créer une bibliothèque de classe séparée avec une classe statique et une fonction qui fait sa propre connexion à la base de données et sélectionne l'ensemble autorisé. Si vous référencez les espaces de noms Microsoft.AnalysisServices et Microsoft.AnalysisServices.AdomdServer, vous pouvez renvoyer un objet 'Set'. Vous pouvez ensuite appeler cette fonction dans l'onglet Avance des données Dimension des objets de rôle:

MyAssembly.MyMethod(UserName) 
Questions connexes