2009-05-22 4 views
0

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.

Répondre

0

Juste quelques observations que j'espère vous aideront.

  1. La fonction d'agrégation dans les rapports des services nécessite un paramètre "champ" ... par exemple Aggregate (Fields! Child.value, "ParentGroup")
  2. Votre fournisseur de données doit prendre en charge cette fonction. Si ce n'est pas le cas, "Nothing" est renvoyé. Voir le lien ci-dessous ...

Pour plus d'aide/d'informations, consultez la documentation de la fonction Aggregate.

+0

Le paramètre scope est facultatif et les services d'analyse prennent en charge la fonction Aggregate. –

+0

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

+0

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. –