web-dev-qa-db-fra.com

SSRS extraire des variables ou des valeurs d'un sous-rapport dans le rapport principal

J'ai un rapport principal avec plusieurs sous-rapports, chacun d'entre eux contenant des requêtes légèrement différentes et différentes manières d'afficher les données. 

Donc, dans ma situation, j'ai une zone de texte qui doit compiler des données à partir de plusieurs rapports différents avec des critères différents. PAR EXEMPLE.

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))

OR

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))

J'ai vu quelques solutions suggérées, telles que this . Qui utilise le schéma =[Reports]!MainReport!SubReport!Textbox. Le problème est que [Reports] n'est pas un identifiant reconnu.

J'ai envisagé de supprimer les sous-rapports et de tout faire fonctionner sur le même rapport principal, mais nous perdons la possibilité d'utiliser les rapports individuellement, sans conserver la même chose à deux endroits.

Donc, je suppose que ma question est la suivante: pouvez-vous extraire des valeurs de variables ou d’éléments (en particulier des zones de texte dans un tableau) de sous-rapports?

Si la réponse est simplement non, merci de me montrer des informations sur les raisons de son non-respect ou de l'absence de MSDN ou d'une source valide, ainsi que des suggestions de compteur valides.

14
Elias

Les liens dans la question et les commentaires font parfois référence à des rapports non-SSRS: la syntaxe [subreport].[Report]![MyFieldName] ou [Reports]![YourReportName]![YourSubReportName]![TheValueFromTheSubReportYouWantToReference] n'est pas utilisée dans SSRS. Cependant, il est utilisé dans la conception des rapports MS Access, comme le souligne ojeffrey dans la discussion à laquelle vous vous connectez.

Il n'y a pas de méthode commune pour accéder aux données dans un sous-rapport. Selon le modèle SSRS, les données de rapport parent sont traitées, les données de sous-rapport sont traitées, les sous-rapports sont rendus, les résultats sont renvoyés au parent, puis le parent est rendu, y compris le sous-rapport, le cas échéant. Les seules données transmises entre les deux paramètres sont transmises au sous-rapport et la sortie rendue est renvoyée au parent. Vous verrez que les données transmises par le parent doivent être comme paramètres de rapport ici: http://technet.Microsoft.com/en-us/library/ms160348(v=sql.100).aspx

Tous les paramètres requis par le sous-rapport doivent être inclus dans La liste des paramètres. Si un paramètre requis est manquant, le sous-rapport Ne s'affiche pas correctement dans le rapport principal.

Pour citer des sources faisant autorité: Cette discussion le résume:

Non, la référence à un élément de rapport dans un sous-rapport n'est pas autorisée.

Mais c’est un peu vieux, il ya aussi cette discussion plus récente sur les solutions de contournement , fournie par un employé de Microsoft et un MVP MS BI:

Vous allez devoir remplacer l'élément de sous-rapport par une région de données Telle qu'une liste, un tableau ou une matrice pour pouvoir obtenir la référence appropriée que vous Recherchez.

[Passer à un autre post] ...

Il semble maintenant que vous souhaitiez calculer la différence Entre le rapport principal et le sous-rapport. De plus, comme ils possèdent Différentes sources de données, vous ne pouvez pas utiliser imbriqué Table/matrice/liste, n'est-ce pas? Si tel est le cas, une solution de contournement à laquelle je peux penser est le paramètre Qui passe au sous-rapport et calcule le total/sous-total dans le sous-rapport . Je veux dire, créer plusieurs paramètres cachés/internes, transmettre Les valeurs du rapport principal au sous-rapport à travers les paramètres, puis Calculer le total/sous-total.

La réponse de Jeroen à la question liée pointe vers la direction dans laquelle je voudrais aller: utilisez un "ensemble de données partagées" et activez la mise en cache si l'exécution du jeu de données est lente. La même exécution de jeu de données peut ensuite être utilisée pour le parent et les sous-rapports. Cela peut modifier l'utilisation des paramètres: ils sont généralement déplacés de la requête SQL vers le filtre du jeu de données dans le rapport.

Mais avec la fonction Lookup introduite dans SSRS 2008R2, vous pouvez être très flexible avec les jointures au niveau des rapports entre les ensembles de données.

Les détails de la conception de cette opération dépendent en grande partie de la quantité de données à transférer et de la qualité des requêtes pour les rapports.

9
Jamie F

Créer une variable dans le rapport principal et la mettre à jour dans un sous-rapport afin que vous puissiez récupérer de la valeur dans le rapport principal

ex: Créer une formule dans le rapport principal avec le nom {@Total} du lieu qui la traverse

WhilePrintingRecords;
shared Numbervar myTotal := 0;

NOTE: placer; n'imprimera pas de valeur et sans; affichera la valeur dans l'exemple ci-dessus; la valeur ne sera pas imprimée si vous souhaitez imprimer la valeur de la formule simplement supprimer; de la deuxième ligne ex 

WhilePrintingRecords;
shared Numbervar myTotal := 0

placez maintenant {@Total} dans l'en-tête de rapport de votre rapport principal créez maintenant une deuxième formule dans un sous-rapport dans lequel vous souhaitez ajouter un sous-total à la formule du rapport principal avec le nom {@addTotal} et y placer les lignes suivantes

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal := myTotal + 200; //or any formula or field

ajouter cette formule à placer dans le sous-rapport où vous souhaitez ajouter de la valeur au total

maintenant, créez une formule dans le rapport principal pour afficher le total général avec le nom {@showTotal} et placez-y les lignes suivantes.

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal

placez {@showTotal} dans votre rapport principal là où vous souhaitez afficher cette valeur, mais souvenez-vous que vous devez placer cette formule après le sous-rapport.

NOTE: pour assigner une valeur à variable use: = operator

0
Jack Gajanan