J'écris MDX pour joindre une dimension à lui-même basé sur deux périodes différentes pour obtenir une liste commune, puis faire un compte contre cette liste pour les deux.MDX rejoindre avec la même dimension
En bref, je dois
- obtenir une liste des années Student.UniqueId pour Période1 qui a un drapeau (IsValid) qui est défini qui n'est pas réglé dans les données Période2
- obtenir un plein liste des étudiants pour Period2
- joindre les deux listes et produire deux enregistrements (une pour chaque période) avec le même nombre (ces comptes seront utilisés pour le calcul des membres calculés dans chaque période)
Je l'ai essayé de le faire via subselect et existe clause avec filtre
SELECT
{
[Measures].[FactStudentCount]
} on COLUMNS,
{ NONEMPTY
(
[TestEvent].[TestEvents].[Name].ALLMEMBERS
* [TestEvent].[PeriodName].[PeriodName].ALLMEMBERS
)
} ON ROWS
FROM (SELECT ({
exists
(
filter([Student].[UniqueId].[UniqueId].MEMBERS
,([TestEvent].[Key].&[Period1], [IsValid].[Code].&[Yes]))
,
filter([Student].[UniqueId].[UniqueId].MEMBERS
,[TestEvent].[Key].&[Period2])
)
}) ON COLUMNS
FROM [MyCube])
... mais cela ne donne pas le résultat correct
(Pour obtenir contexte) J'ai aussi essayé similaire existe/filtre dans un où la clause
SELECT
{
[Measures].[FactStudentCount]
} on COLUMNS,
{ NONEMPTY
(
[TestEvent].[TestEvents].[Name].ALLMEMBERS
* [TestEvent].[PeriodName].[PeriodName].ALLMEMBERS
)
} ON ROWS
FROM [MyCube]
where (
exists
(
filter([Student].[UniqueId].[UniqueId].MEMBERS
,([TestEvent].[Key].&[Period1], [IsValid].[Code].&[Yes]))
,
filter([Student].[UniqueId].[UniqueId].MEMBERS
,[TestEvent].[Key].&[Period2])
)
)
... mais encore une fois cela ne produit pas le résultat correct
J'ai essayé les peaufinage instructions de filtre (au existe) à s comme lya quelque chose
(filter(existing([Student].[UniqueId].[UniqueId].allmembers),[TestEvent].[Key].CurrentMember.MemberValue = 'Period1'), [IsValid].[Code].&[Yes])
,
(filter(existing([Student].[UniqueId].[UniqueId].allmembers),[TestEvent].[Key].CurrentMember.MemberValue = 'Period2'))
... Cependant, cela ne renvoie une ligne (pour Période1) - qui a dit qu'il est le total
correcte J'ai aussi essayé par un CrossJoin mais avec NonEmpty échoue parce que les champs viennent de la même hiérarchie - le message « la hiérarchie clé est utilisée plus d'une fois dans la fonction Crossjoin »
est-ce que quelqu'un a aucune indication sur la façon de résoudre le scénario ci-dessus?