2009-04-14 15 views
0

Ich verwende die CurrentMember-Funktion im CellData-Ausdruck einer Rolle, um den Zugriff auf einen Cube über eine bestimmte Dimension einzuschränken. Dies funktioniert wie erwartet mit einer Ausnahme. Selbst wenn die Slicer-Dimension verwendet wird, um Daten herauszufiltern, die die Rolle nicht sehen darf, wird in allen Zellen die Zeichenkette '# N/A' angezeigt.CurrentMember (MDX) Ignoriert die Slicer-Dimension

Erst nach dem Hinzufügen der Dimension, auf die die Rolle den Zugriff in einer Achse beschränkt hat, werden die Werte der Zelle wie erwartet angezeigt.

Es scheint mir, als ob die CurrentMember-Funktion die Slicer-Dimension ignoriert. Ist das der Fall? Wie soll ich dieses Problem angehen?

+0

Ich schrieb diese Frage in den MSDN Managed Newsgroups und erhielt eine Antwort von einem Microsoft-Vertreter ... http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft .public.sqlserver.olap & tid = b4fcb648-3d05-4310-9676-f40c2f7b839c & cat = & lang = & cr = & sloc = & p = 1 –

+0

Ich bin mir nicht sicher, was in den msdn Foren gepostet wurde, aber der Link in meinem obigen Kommentar funktioniert nicht mehr . SQL Monster scheint es hier zwischengespeichert zu haben ... http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-olap/13948/CurrentMember-Function-Ignores-Slicer-Dimension –

Antwort

0

Mein Rat, in aller Ernsthaftigkeit, ist weg von Cubes, die Sie Zugriff mit Cube-Werte beschränken müssen. War da, habe das getan, zu viel Zeit verschwendet und trotzdem eine instabile Lösung gefunden.

DEFINIEREN Sie NICHT 'Rollen' in OLAP.

+0

Ich habe schließlich genommen Ihr Rat und entfernte Rollen aus meiner Lösung. –

1

Es hängt davon ab, wie Sie Ihre Abfrage mit den Filtern durchführen. Wenn Sie eine Unterabfrage erstellen (indem Sie den oberen Filterbereich in SSMS oder BIDS verwenden), gibt das currentMember das All-Element zurück - auf diese Weise wurden Unterabfragen so konzipiert, dass sie funktionieren. Wenn Sie die untere Abfrage in SSMS oder BIDS verwenden, wird die WHERE-Klausel verwendet und Sie sollten die erwarteten Ergebnisse sehen.

Und Sie können besser die Registerkarte Dimensionsdaten anstelle der Zellendaten verwenden, wenn Sie nur nach Dimensionselementen filtern.

+0

Ich bin mir nicht sicher, ob ich Ihre Lösung vollständig verstehe, aber ich denke, dass dies bedeuten würde, dass meine "Sicherheit" nur dann in Kraft tritt, wenn ich die Dimension in die Abfrage einfüge. –

+1

Nein, Sicherheitsrollen sind immer in Kraft, obwohl das erneute Lesen Ihres ursprünglichen Beitrags mit .CurrentMember etwas ungewöhnlich ist und Probleme verursachen könnte. Ich würde nicht so weit gehen zu sagen, dass ich keine Rollen verwenden soll, aber ich versuche, zellenbasierte Sicherheit zu vermeiden. Wenn Sie die Dokumentation lesen, ist es so ausgelegt, dass # N/A angezeigt wird, wenn der Wert eingeschränkt ist. Wenn Sie möchten, dass Benutzer eine bestimmte Gruppe von Mitgliedern nicht sehen, sollten Sie sich über die Registerkarte DimensionData und nicht über CellData sichern. –