J'ai une relation d'attribut parent-enfant dans une dimension des services d'analyse, disons [Dim].[Child]
est un enfant de [Dim].[Parent]
et j'ai une requête, qui renvoie le jeuReporting Services Aggregate ne fonctionne pas pour les relations parent-enfant
UNION( [Dim].[Parent].Members * [Dim].[Child].Members, [Dim].[Parent].[ALL] * [Dim].[Child].Members )
sur l'axe 1 et certaines sorties sur l'axe 0. La requête fonctionne correctement lorsqu'elle est exécutée dans le studio de gestion.
Maintenant, j'essaie de créer un graphique dans Reporting Services avec [Dim].[Child]
sur l'axe des x et Aggregate(some_output)
sur l'axe Y. Je m'attends à voir des membres enfants sur l'axe x avec la sortie agrégée pour tous les parents (ce qui est juste un dans ce cas), c'est-à-dire les données prises à partir de la ligne { [Dim].[Parent].[ALL], [Dim].[Child].&[TheChildID] }
. Comme indiqué ci-dessus, la requête renvoie effectivement cette ligne avec les données correctes.
Cependant, la fonction Aggregate
renvoie NULL dans ce cas. Ce comportement est toujours présent lors de l'utilisation des attributs parent-enfant et en plaçant l'enfant sur l'axe X. La même chose se produit également lorsque vous placez l'enfant dans une ligne de tableau matriciel et que vous ajoutez une sortie agrégée dans une colonne. Il semble que le serveur de rapports sache que l'agrégation ne se produira que pour un membre et refuse de le faire.
Si je fais une autre requête identique, il suffit de mettre des attributs qui ont une relation différente, par ex. [Time].[Month]
et [Time].[DayOfMonth]
, l'agrégation fonctionne bien, car cette fois le même jour peut appartenir à plusieurs mois et les données doivent être agrégées. Maintenant, je ne sais pas pourquoi cela se produit: le serveur de rapports interroge-t-il de façon précise la source de données OLAP pour déterminer la relation ou quoi? Ou y a-t-il de la magie dans la requête qui renvoie les lignes ALL, dont je ne suis pas au courant? La seule corrélation pour les cas qui fonctionnent et qui ne semble pas être la relation.
EDIT: quelques observations après avoir joué plus: le rapport fonctionne si je retire la ligne [Parent].Members * [Child].Members
de la requête, le forçant à récupérer uniquement [Parent].ALL * [Child].&[ID]
lignes. Le tableau contient maintenant des données agrégées, mais évidemment, je n'ai plus de membres individuels.
Le paramètre scope est facultatif et les services d'analyse prennent en charge la fonction Aggregate. –
Si vous ne spécifiez pas la portée, il utilisera la portée actuelle dans laquelle il se trouve. Êtes-vous sûr de la portée actuelle et que c'est ce que vous voulez? – Mozy
Je fais seulement groupping sur le ChildID dans le tableau, je ne peux pas spécifier quoi que ce soit d'autre dans le paramètre scope. –