2016-12-16 3 views
0

Der Cube (sql Server 2016) enthält die Dimensionen [Unit].[Unit].&[1] und . Ich habe eine berechnete Dimension erstellt:Festlegen der Rolle für eine berechnete Dimension (SSAS-Cube)

CREATE MEMBER CURRENTCUBE.[Unit].[Unit].[All].[1/2] AS [Unit].[Unit].&[1]/[Unit].[Unit].&[2] 

Um den Zugriff auf die Dimension der [Unit].[Unit].[All].[1/2] ich die Rolle erstellt haben. Aber ich kann [Unit].[Unit].[All].[1/2] in DimensionData-Basis Registerkarte nicht auswählen, weil dieses Attribut nicht in der Liste der Attribute angezeigt wird. Wenn ich im MDX-Skript Denied member set: {[Unit].[Unit].[All].[1/2]} das Attribut [Unit].[Unit].[All].[1/2] auf der Registerkarte DimensionData-Advanced festlege, sieht der Benutzer dieses Attribut. Wie schränke ich den Zugriff auf die berechnete Dimension ein?

Antwort

1

Wenn Sie Ihre DimUnit SQL-Tabelle so ändern, dass sie eine "1/2" -Zeile enthält, ersetzen Sie Ihre CREATE MEMBER -Anweisung durch die folgende. Sie sollte dieses Mitglied in Dimension Data Security nach dem Deployment und anzeigen sehen können verarbeiten, um den Würfel:

([Unit].[Unit].[1/2]) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

Dann, nachdem Sie eine Rolle erstellt haben, die 1/2 Mitglied zum verschwinden bringt eine Fehlermeldung angezeigt wird, wenn sie mit diesem Benutzer den Würfel durchsuchen. Ändern Sie die obige Zeile wie folgt:

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 

BTW, DIVIDE sicher divide tut dies Division durch Null nicht zu Problemen führen.

Von meinem Kopf kann ich nicht erinnern, ob StrToMember notwendig ist, vs. nur ein Mitgliedsverweis, also habe ich auf Nummer sicher gegangen. Probieren Sie es ohne StrToMember aus.

Um klar zu sein, das gesamte Skript sagen sollte:

CALCULATE; 

(IIf(IsError(StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)),Head([Unit].[Unit].Members,0),StrToMember("[Unit].[Unit].[1/2]",CONSTRAINED)) 
    = DIVIDE([Unit].[Unit].&[1], [Unit].[Unit].&[2]); 
+0

I ersetzt alten „erstellen member“ und ich habe Fehler, wenn sie mit diesem Benutzer die Würfel durchsuchen. Ich verstehe nicht, wo ich einfügen sollte '(IIf (IsError (StrToMember (" [Einheit]. [Einheit]. [1/2] ", CONSTRAINED)), Kopf ([Einheit]. [Einheit] .Members , 0), StrToMember ("[Einheit]. [Einheit]. [1/2]", CONSTRAINED)) = DIVIDE ([Einheit]. [Einheit]. & [1], [Einheit]. [Einheit]. & [2]) ' In der" Berechnung "in einem Würfel oder in der Registerkarte DimensionData-Erweitert in der Rolle (" Verweigert Mitgliedssatz ")? – Natalya

+0

Gehen Sie auf die Registerkarte Berechnungen und kippen Sie in die Skriptansicht. Diese Aussage geht danach ! 'CALCULATE' – GregGalloway

+0

Danke für Ihre Hilfe ich schreibe ein Skript:... ' CALCULATE; CREATE MEMBER CURRENTCUBE [Unit] [Unit] [1/2] AS (IIF (IsError (StrToMember ('[ Einheit] [Einheit]. [1/2] ', CONSTRAINED)), HEAD ([U nit]. [Einheit] .Members, 0), StrToMember ('[Einheit]. [Einheit]. [1/2]', CONSTRAINED)) = DIVIDE ([Einheit]. [Einheit]. & [1] , [Einheit]. [Einheit]. &[2])); ' Aber ich bekomme einen Fehler" das Objekt wurde nicht im Cube gefunden, wenn die Zeichenfolge [Unit]. [Unit]. & [1/2] wurde analysiert ". – Natalya

Verwandte Themen