Question

Quelques tables de dimension dans mon magasin:

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 projet SSAS: Je l'ai utilisé ces deux tables de dimension dans une dimension dans un projet BIDS, 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'une fenêtre locale ReportBrowsers groupe. 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 ensuite un rapport SSRS basé sur ce cube.

Mon intention: Ce que je suis en train de faire est de prendre l'utilisateur connecté SSRS actuellement navigation et supprimer le « \ » une partie de la chaîne retournée filtrer efficacement les résultats aux seuls sites de ce nom d'utilisateur un record pour.

Donc, pour EMSUser1 je devrais voir les enregistrements pour les deux sites, mais il semble être le premier permettant seulement ( « Site 2 » avec 2 Id) Il n'y a aucun signe de « site », même si les dossiers existent pour ce site dans la table de fait.

J'ai été par Analysis Services chalutage 2008 déchaîné et l'étape par étape et livre partout dans les blogs, etc. Je ne peux pas tout à fait assimilez le fonctionnement interne pour atteindre mon objectif.

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Eh bien, il a été un certain temps maintenant. Je n'ai même pas maintenant la réponse complète, mais je l'ai fait obtenir de l'aide ailleurs où cela m'a conduit à une solution. Les détails peuvent être trouvés ici .

Il y a beaucoup de façons de résoudre ce genre de scénario. Je sens qu'il peut encore être un meilleur pour moi, mais je dois quelque chose qui fonctionne au moins. Fondamentalement créer une bibliothèque séparée de classe avec une classe statique et la fonction qui le rend propre connexion à la base de données et sélectionne le jeu autorisé. Si vous faites référence à la Microsoft.AnalysisServices et vous pouvez Microsoft.AnalysisServices.AdomdServer namespaces retourner un objet « Set ». Vous pouvez ensuite appeler cette fonction dans les objets Rôle onglet avance de données Dimension:

MyAssembly.MyMethod(UserName)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top