Es ist wichtig zu verstehen, wie WHERE
Klausel in MDX funktioniert. Die WHERE
-Klausel filtert die Zeilenachse nicht. Sie filtert die Dimensionselemente auf den Achsen, die sich mit den in der WHERE
-Klausel angegebenen Elementen schneiden.
REFERENCE
auch sagen, dass man Tupel oder eine Reihe von Mitgliedern in der WHERE
Klausel angeben:
Beispiel:
WHERE (STRTOMEMBER(@Year))
STRTOMEMBER()
einen SSRS Textparameter umwandelt (@Year
) enthält, [Date].[Year].&[2016]
Wert für ein gültiges MDX-Mitglied. In diesem Fall filtert die Klausel WHERE
die Mitgliederachsen, die das Jahr 2016 in der Datumsdimension schneiden.
Sie können auch STRTOSET
verwenden, um mehrere Mitglieder zum Filtern zu übergeben.
WHERE StrToSet (@Countries, CONSTRAINED)
@Countries
Parameter ist ein Text SSRS Parameter, die die {[Geography].[Geography].[Country].[Germany],[Geography].[Geography].[Country].[Canada]}
Mitglieder enthält.
In diesem Fall wird die WHERE
-Klausel die Mitglieder filtern, die in der SELECT-Klausel angegeben sind, die die Länder Kanada und Deutschland schneidet.
UPDATE: Basierend auf OP-Feed.
Dies sollte funktionieren.
SELECT NON EMPTY { [Measures].[Employee Count] } ON COLUMNS,
NON EMPTY
{
(StrToMember ('[Person].[Emplid].&[123]') * [Person].[First Name].[First Name].AllMembers * [Person].[Last Name].[Last Name].AllMembers)
} Dimension Properties MEMBER_CAPTION,
MEMBER_UNIQUE_NAME ON ROWS
FROM [Model]
Hinweis bin ich nicht mit der WHERE
Klausel aber das Element in den Reihen Achse angeben.
UPDATE: Ich denke, die WHERE
Klausel nicht für Ihr requeriment geeignet ist, es scheint, dass Sie benötigen FILTER Funktionen verwenden, um einige Mitglieder von verschiedenen Bedingungen zu wählen.
Wie bereits erwähnt, filtert die Klausel WHERE
die Elemente in Ihren Achsen, die sich mit den angegebenen Elementen schneiden. Filter
Funktion kann verwendet werden, um Mitglieder zu filtern, die die angegebenen Kriterien erfüllen.
FILTER
Gibt die Menge, die von Filtern einen spezifizierten Satz auf einer Suchbedingung basierte führt.
Beispiel:
SELECT NON EMPTY
{
[Measures].[Score %]
,[Measures].[Month Key]
} ON COLUMNS,
NON EMPTY
{
([Date].[YMD].[Month Name].&[201301] : [Date].[YMD].[Month Name].&[201307])
*
FILTER
(
[Customer].[Customer Full Name].[Customer Full Name].members,
[Measures].[Score %] <> null
AND
[Measures].[Score %] <> 0
)
} ON ROWS
FROM [Cube]
Hinweis in der obigen MDX-Abfrage gibt es eine Crossjoin zwischen Monaten 201301
-201307
und einigen Mitgliedern, die die Kriterien in der Filterfunktion erfüllen. Die Kriterien in diesem Fall ist, dass die Score %
der Mitglieder nicht null sein kann AND
nicht Null sein kann.
Es soll wie folgt produzieren:
MonthName Customer Full Name Score % Month Key
201301 Customer1 5% 1000
201301 Customer2 3% 1000
201304 Customer1 8% 3500
201306 Customer1 11% 2200
201307 Customer2 13% 3400
Hinweis Monate 201302, 201303 und 201305 im Ergebnis nicht vorhanden sind, weil die Kunden in diesen Monaten haben die Filterkriterien nicht erfüllen.
Hoffentlich wird dies Ihnen helfen.
Wenn ich versuche, auf die EMPLID in der WHERE-Klausel zu verweisen, bekomme ich diesen Fehler "' Die Emplid-Hierarchie erscheint bereits in der Axis1-Achse. – StevenWhite
Teilen Sie die MDX, ich denke, Sie versuchen, Emplid auf Zeilen auszuwählen und zu filtern in der Slicer-Where-Klausel –
'SELECT NON EMPTY {[Measures]. [Mitarbeiteranzahl]} ON COLUMNS , NICHT LEER {([Person]. [Emplid]. [Emplid] .ALLMEMBERS * [Person]. [Zuerst Name]. [Vorname] .ALLMEMBERS * [Person]. [Nachname]. [Nachname] .ALLMEMBERS)} Bemaßungseigenschaften MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Model] WHERE STRTOMEMBER ('[Person]. [Emplid]. & [123] ') ' – StevenWhite