web-dev-qa-db-fra.com

Expression SSRS: l'expression de valeur pour textbox a un paramètre de portée non valide pour l'agrégat

je reçois l'erreur suivante:

Error   1   [rsInvalidAggregateScope] The Value expression for the text box 
‘Textbox2’ has a scope parameter that is not valid for an aggregate function.  
The scope parameter must be set to a string constant that is equal to either 
the name of a containing group, the name of a containing data region, or 
the name of a dataset.

L'expression derrière ma Textbox2 (j'ai ajouté quelques espaces pour la lisibilité): 

Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty),

       "Prestaties " + First(Fields!firmanaam.Value, "DataSetHrm") + 
        "(" + First(Fields!indienstfirmanr.Value, "DataSetHrm") + ")",

       "Prestaties " + First(Fields!naam.Value, "DataSetHrm") + " " +
       First(Fields!voornaam.Value, "DataSetHrm") + 
       "(" + First(Fields!personeelsnr.Value, "DataSetHrm") + ")")

Les champs:

      ReportParameterPersoneelsNr = Reportparameter of type Text
      firmanaam.Value = VARCHAR
      indienstfirmanr.Value = Long
      naam.Value = VARCHAR
      voornaam.Value = VARCHAR
      personeelsnr.Value = Long

Les recherches sur Stackoverflow m'ont apporté les résultats suivants. Mais jusqu'à présent, ils ne m'ont pas aidé à résoudre mon problème

Poste 1: ce-que-fait-champ-paramètre-qui-n'est-pas-valide-pour-une-fonction-agrégat-fonction-moyenne

Poste 2: SqlTeam

Quelqu'un pourrait-il indiquer ce que je fais mal?

Note: L'ajout de tostring () partout n'a pas aidé

Note 2: Le remplacement du '+' par '&' n'a pas résolu le problème non plus.

Note 3: le datasetname est correct et le dataset est le seul présent dans ce rapport SSRS:

Image Tds

Update: Les données contenues dans le jeu de données sont valides et la lecture du jeu de données n'a pas fonctionné (essayé avec et sans alias)

16
User999999

Je ne sais pas ce qui ne va pas, mais j'ai créé un rapport similaire qui fonctionne. Créez un nouveau rapport vierge, puis créez un ensemble de données (à partir de SQL Server) avec la requête suivante:

CHOISISSEZ 'ACME' AS firmanaam, 10000 AS Indienstfirmanr, 'Doe' AS naam, 'Jon' AS voornaam, 987654 AS personeelsnr

DataSet image

Puis ajoutez votre paramètre

Parameter Definition

Ajouter une zone de texte au rapport, avec le code:

= Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty), "Prestaties " & First(Fields!firmanaam.Value, "DataSetHrm") & "(" & First(Fields!indienstfirmanr.Value, "DataSetHrm") & ")", "Prestaties " & First(Fields!naam.Value, "DataSetHrm") & " " & First(Fields!voornaam.Value, "DataSetHrm") & "(" & First(Fields!personeelsnr.Value, "DataSetHrm") & ")")

Ensuite, exécutez le rapport avec ou sans valeur pour le paramètre:

Preview of Report

Preview with empty param

6
Fillet

Parfois, cette erreur se produit lorsque nous utilisons différents DatasetName dans Experssion.

Comme dans mon cas, j'ai résolu cette erreur en procédant comme suit:

Avant c'était comme ci-dessous,

="For Man " + 
   IIF(Len(First(Fields!Lname.Value, "DataSet1")) > 0,
   First(Fields!Lname.Value, "DataSet1"),"") & IIF(Len(First(Fields!Fname.Value, "DataSet1")) > 0,
   ", " + First(Fields!Fname.Value, "DataSet1"),"")

Après l'avoir changé en dessous, cela fonctionne bien maintenant,

="For Man " + 
    IIF(Len(First(Fields!Lname.Value, "LastChangedDataSetName")) > 0,
    First(Fields!Lname.Value, "LastChangedDataSetName"),"") & IIF(Len(First(Fields!Fname.Value, "LastChangedDataSetName")) > 0,
    ", " + First(Fields!Fname.Value, "LastChangedDataSetName"),"")

Note:Donc l'erreur est que j'ai changé le Nom du DataSet De DataSet1 en LastChangedDataSetName et qu'il me reste à changer ce nom dans la dernière Expression que j'ai déjà écrit avant de changer Nom du DataSet .

8
pedram

L'erreur que j'ai eu dans mon rapport était très similaire:

Erreur 1 [rsInvalidAggregateScope] L’expression cachée du tablix ‘table1’ contient un paramètre de portée qui n’est pas valide pour une fonction d’agrégat. Le paramètre scope doit être défini sur une constante de chaîne égale au nom du groupe contenant, au nom d'une région de données contenant ou au nom d'un ensemble de données.

Je l'ai résolu en faisant un clic droit sur le fichier du rapport dans Explorateur de solutions + Afficher le code (ouvre l'éditeur XML), en recherchant le nom du DataSet principal du rapport et en modifiant la ligne à l'origine du problème:

<TablixMember>
  <Visibility>
    <Hidden>=iIF(CountRows("MYDATASETNAME") = 0, false, true)</Hidden>
  </Visibility>
  <KeepTogether>true</KeepTogether>
</TablixMember>

Dans ce cas, je devais simplement modifier l'expression à l'intérieur de la balise <Hidden> qui portait le nom d'un DataSet non existant (en raison de la copie depuis un autre rapport). Plus tard, il était plus facile de localiser la ligne dans l’interface qui a provoqué l’erreur.

Par conséquent, si l'erreur fait plutôt référence à Value, recherchez occurrences du nom du DataSet du rapport dans le code XML et revérifiez les balises <Value> pour des noms qui n'existent pas dans le rapport actuel.

2
CPHPython

J'ai récemment rencontré un problème similaire dans l'un de mes rapports. La raison de cette erreur est que le nom du fichier et l'expression dans le rapport ne correspondent pas.

J'ai un champ de date qui est rempli avec les préférences de l'utilisateur et l'expression est First(Fields!column.Value, "datasetname"). Le nom de l'ensemble de données et le nom de l'ensemble de données spécifié dans les données de rapport doivent correspondre.

2
Yagna

La référence de votre portée n’est pas correcte ("DataSetHrm"). Comme le message d'erreur indique dans une zone de texte, seule une portée contenant un groupe dans une table (nom de portée = nom du groupe), la table elle-même (région de données -> nom de portée = nom de la région de données) ou l'ensemble de données correspondant dans une région de données (nom de portée = nom de l'ensemble de données).

Lorsque ces régions mentionnées ci-dessus sont incorporées en indiquant avec l'ensemble de données (ensemble de données -> région de données -> groupe de données), elles peuvent être référencées à partir d'une zone de texte. Dans votre exemple, ce n'est pas le cas.

Si vous souhaitez utiliser un autre jeu de données dans votre zone de texte qui diffère de votre jeu de données réel (qui est le jeu de données de votre table), vous devez utiliser la fonction lookup ().

1
Bimbam