Wie filter Messen in der Filter-Funktion durch mehrere Elemente aus derselben Hierarchie
Ich bin erstellen einer Anwendung, die generiert MDX
Abfragen. Ich blieb ein Szenario implementieren, wenn der Benutzer verwendet die Filter Funktion und der logische Ausdruck, der Nutzer will, um die Scheibe einer Maßnahme durch mehrere Elemente aus derselben Hierarchie.
Hier ist ein echtes Beispiel: es ist ein cube Bildung mit den folgenden Abmessungen und Maßnahmen
- Abmessungen: Schüler, Schuljahr
- Maßnahmen: Anwesenheit Der Schüler, Student Verstöße
Der Nutzer will, um zu sehen, Anwesenheit der Schüler der Schüler hatten einen oder mehrere Schüler Verletzungen im Schuljahr 2010 und 2011.
Ich brauche, um dies zu erreichen verwenden Sie die Filter-Funktion, also schrieb ich die folgende Abfrage
SELECT [Measures].[Student Attendance] ON COLUMNS
FROM (
SELECT
FILTER(
[Student].[Student].[Student].Members,
(
[Measures].[Student Infractions],
AGGREGATE(
{
[School Year].[School Year].&[2010]
,[School Year].[School Year].&[2011]
}
)
) > 1
) ON COLUMNS
FROM [Education]
)
Das problem ist, dass wenn diese Abfrage ausgeführt wird, wirft es
'Query (4, 55) The Tuple function expects a tuple set expression for the 2 argument. A string or numeric expression was used.'
Wie es aussieht ist es unmöglich mit Aggregat Funktion innerhalb der Funktion Filter. Gibt es eine Möglichkeit, wie man die Abfrage funktioniert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine zusätzliche eckige Klammer markiert unten, ist Teil der 2. argument der Tupel - dies könnte der Grund sein für die Fehlermeldung:
Alle Logik könnte gehen Sie einfach in die
WHERE
- Klausel der äußeren Abfrage und loszuwerden, diesub-select
:Bearbeiten
Sie die ursprüngliche Abfrage ohne
AGGREGATE
aber gegen getestet AdvWrks und scheint execute ok:Dies war der AdvWrks äquivalent Skript, das ich schrieb - es läuft ok:
Edit2
Ok - ich sollte Lesen
MSDN
mehr gründlich! Dies ist die syntax fürAGGREGATE
:Diesen Ratschlägen zu Folgen...
+
eher als die FunktionAGGREGATE
und es scheint jetzt glücklich. Ich bin mir nicht sicher Gründe, warum das eine funktioniert und das andere nicht.WHERE
ist nicht zulässig in sub-select. Habe ich korrigiert, das 2. Skript in meiner post, so dass es verwendet dieWHERE
- Klausel korrekt um die Rückgabe Ihrer zahlen ok. Auch ich sussed out die korrekte syntax fürAGGREGATE
Hinzugefügt und das Skript am Ende von meinem post.Können Sie
HAVING
KlauselIch habe kaum mit FILTER-Funktion - es ist langsam und nicht flexibel.
Having
können Sie filter jede Menge basierend auf ein berechnetes Element, die Sie wollen.EDIT: Wie lange müssen Sie MDX-generation, dann sollten Sie mithilfe der Allgemeine Ansatz, der alle MDX-Browser (Excel, SSMS etc.):
Benutzer [Schuljahr].[Schuljahr].&[2010],[Schuljahr].[Schuljahr].&[2011] als Cube-Scheibe, während Sie müssen auch Messen-Filter.
zunächst generieren sub-select für jede [Schuljahr], und aktivieren Sie nur
Jahre:
...
aus (
wählen Sie {[Schuljahr].[Schuljahr].&[2010],[Schuljahr].[Schuljahr].&[2011]} on 0 )
aus [Bildung]
zweite, Gebrauch MIT oder FILTERN Sie die top-set zu bekommen, was Sie brauchen,
Das problem ist, Sie sollten konstruieren zusätzliche berechnete Element von sich selbst, im Allgemeinen mit
AGGREGATE
(im Allgemeinen müssen Sie die Standard-aggregation-Funktion). So werden Sie wahrscheinlich in der Lage sein, Schuss in 1 von 100 möglichen Szenarien für visuell programmierten Abfragen.Aber es ist selten der Fall, wenn Sie MDX-browser ist schlau genug, zum generieren von Abfragen über beide dimension-Filter und Messen Sie Mitglied der Gruppe Filter. Auch schwere Produkte wie SSMS/Excel diese Aufgabe delegieren zu reinen MDX-code;
Gut, warum nicht fügen Sie eine Kennzahl in die Würfel für die Jahre 2010 und 2011? Hinzufügen würde deutlich reduzieren die Komplexität.
Letzten Abfrage kann wie folgt Aussehen:
Was Sie tun müssen, ist bauen, der parameter übergeben und in den MDX-s
STRTOSET
Teil. Sehen hier wieStrToSet
- Funktion verwendet, mit SSRS. Sie können versuchen, etwas ähnliches.WITH
Klausel erstellt berechneten Elements, die habe ich in meiner Antwort.StrToSet
ermöglicht Ihnen das hinzufügen von dynamischen Werten der Jahre. Von dem, was ich vermute, 2010 und 2011 Werte sind Beispielwerte, aber als Endprodukt, würden Sie brauchen, um passieren die Jahre dynamisch.