web-dev-qa-db-fra.com

SSRS 2008: message d'erreur indiquant que mon paramètre n'existe pas mais qu'il existe clairement?

J'ai un rapport qui a environ 10 paramètres et environ 10 jeux de données et une source de données. J'ai tapé beaucoup mais j'ai vraiment besoin d'aide alors j'ai pensé que j'essaierais de fournir autant d'informations que possible sur le problème dès le début. 

Simplifions tout et supposons que ce sont les noms pertinents de tout et que le rapport obtienne les informations de base sur les employés:

  • Paramètres
    • facilityID: texte au format guid ou uniqueidentifier, il est masqué et transmis afin que l'utilisateur final du rapport puisse uniquement afficher les informations relatives à ses propres installations; Paramètre à valeur unique, non vide non nul, masqué, texte
    • startDate: la plage de dates de début, supposons que mon rapport inclue les données commençant le 1er janvier de cette année; Paramètre à valeur unique, non vide, non nul, visible, date/heure
    • endDate: fin de la plage de dates, disons que c'est aujourd'hui/maintenant; Paramètre à valeur unique, non vide, non nul, visible, date/heure
    • viewOption : trois valeurs codées en dur (étiquette, valeur) ("Employés actuels", 1) et ("Anciens employés", 2) et ("Employés ayant déménagé", 3); Paramètre à valeurs multiples (donc tout est une option), non vide, non nul, visible, texte
    • personID: basé sur l'ensemble de données getListOfNames où l'étiquette est le nom de l'employé et la valeur est son personID (guid/uniqueidentifier); Sélection unique, non nulle, non vide, texte et visible
  • Mes ensembles de données
    • getListOfNames: cette option permet d'obtenir une liste des personnes qui se trouvaient dans l'entreprise dans la plage de dates fournie dans l'installation concernée et où leur statut d'employé est défini dans la valeur du paramètre viewOption (il peut donc s'agir d'un nombre ou de trois au maximum). Il s'agit d'une procédure stockée, mais je l'ai configurée pour gérer le paramètre multivalué en lui transmettant join (paramètre, "~"), puis en le séparant dans le processus stocké. Cela fonctionne sur 5 autres rapports. 
    • getReportInfoOnSelectedPerson: requête du corps principal; Une fois que l'utilisateur a sélectionné l'employé pour lequel il souhaite des données, il prend cet identifiant personnel ainsi que la plage de dates et remplit la table principale. 

Le problème:
SSRS dit que viewOption n'existe pas. Mais je le vois, là-bas, dans le dossier Parameters sur le côté gauche. Je le vois quand je vais entrer une expression sous Paramètres. Il n'y a pas de ligne rouge ondulée sous Paramètres! ViewOption.value. Mais, lorsque j'essaie de le définir comme valeur d'un paramètre utilisé par l'ensemble de données getListOfNames, il se trompe. Si je le mets dans l'ensemble de données getReportInfoOnSelectedPerson et que je l'utilise exactement de la même manière, SSRS est d'accord avec cela. Wtf? Donc ... j'ai vérifié le rdl et tout va bien (où le paramètre réel est déclaré, où il est utilisé dans la référence du jeu de données, tout). C'est juste cet ensemble de données. Et j'ai un rapport similaire qui utilise le même ensemble de données, les mêmes paramètres de base et ce rapport est correct. J'essaie de définir la valeur du paramètre dataset sur 1 ou quelque chose et c'est très bien, mais quand j'essaie de le définir sur Parameter! ViewOption.value it erreurs ..... Maintenant, ci-dessus, j'ai dit que je passe normalement le proc stocké une jointure sur le paramater avec un tilde ~ mais j'essaye de le garder simple et de le faire fonctionner en général (soit en lui passant la première valeur du paramètre viewOption à valeurs multiples ou en le tournant en un seul select et en le passant juste. valeur) mais la jointure ne fonctionne pas non plus. Toutes ces choses fonctionnent pour l'autre ensemble de données, qui est également un proc stocké. 

C'est mon erreur:
Une erreur est survenue pendant le traitement du rapport. (rsProcessingAborted) L’expression Value du paramètre de requête ‘@viewOption’ contient une erreur: l’expression fait référence à un paramètre non existant dans la collection de paramètres de rapport. (rsRuntimeErrorInExpression)

Ce qui signifie clairement que mon paramètre n'existe pas mais que je peux le VOIR ... partout. Et si j'assigne l'une des valeurs de paramètre des autres jeux de données au paramètre viewOption, cela fonctionne sans erreur. J'ai vérifié le RDL.

J'ai déjà eu ce problème auparavant et le problème a été résolu en supprimant le paramètre et le jeu de données, puis en les recréant (pour des raisons de sécurité, j'ai renommé les deux). Cela n'a pas fonctionné cette fois.

Je suis tellement frustré. S'il vous plaît aider .... 

Code? 

      <DataSet Name="getListOfNames">
      <Fields>
          <Field Name="personID">
              <DataField>PersonId</DataField>
              <rd:TypeName>System.Guid</rd:TypeName>
          </Field>
          <Field Name="name">
              <DataField>name</DataField>
              <rd:TypeName>System.String</rd:TypeName>
          </Field>
      </Fields>
      <Query>
          <DataSourceName>myDataSource</DataSourceName>
          <CommandType>StoredProcedure</CommandType>
          <CommandText>getListOfNames</CommandText>
          <QueryParameters>
              <QueryParameter Name="@fac">
                  <Value>=join(Parameters!fac.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@bldg">
                  <Value>=join(Parameters!bldg.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@unit">
                  <Value>=join(Parameters!unit.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@station">
                  <Value>=join(Parameters!station.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@startDate">
                  <Value>=Parameters!startDate.Value</Value>
              </QueryParameter>
              <QueryParameter Name="@endDate">
                  <Value>=Parameters!endDate.Value</Value>
              </QueryParameter>
              <QueryParameter Name="@viewOption">
                  <Value>=Join(Parameters!viewOption.Value, "~")</Value>
              </QueryParameter>
          </QueryParameters>
          <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
  </DataSet>



<ReportParameter Name="viewOption">
  <DataType>String</DataType>
  <DefaultValue>
    <Values>
      <Value>1</Value>
    </Values>
  </DefaultValue>
  <Prompt>View</Prompt>
  <ValidValues>
    <DataSetReference>
      <DataSetName>viewOptionQuery</DataSetName>
      <ValueField>value</ValueField>
      <LabelField>label</LabelField>
    </DataSetReference>
  </ValidValues>
  <MultiValue>true</MultiValue>
</ReportParameter>



<DataSet Name="viewOptionQuery">
  <Fields>
    <Field Name="label">
      <DataField>label</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="value">
      <DataField>value</DataField>
      <rd:TypeName>System.Int32</rd:TypeName>
    </Field>
  </Fields>
  <Query>
    <DataSourceName>flamingo</DataSourceName>
    <CommandText>select 'Other Facility' as label, 3 as value union select 'Past' as label, 2 as value union select 'Current' as label, 1 as value order by value</CommandText>
    <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
  </Query>
</DataSet>

Voici comment il est configuré et getListOfNames est la raison pour laquelle l’erreur est renvoyée, si je change

              <QueryParameter Name="@viewOption">
                  <Value>=Join(Parameters!viewOption.Value, "~")</Value>
              </QueryParameter>

à

              <QueryParameter Name="@viewOption">
                  <Value>="1~2"</Value>
              </QueryParameter>

alors cela fonctionne .... ou la valeur peut être juste 1 ou 1 ~ 2 ~ 3

Cependant ... lorsque j'essaie de mettre join (Paramètres! ViewOption.value, "~") comme valeur du paramètre de requête d'un autre ensemble de données, cela fonctionne et il n'y a pas d'erreur. 

  <DataSet Name="getReportInfoOnSelectedPerson">
  <Fields>
    <Field Name="name">
      <DataField>name</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field> 
    <Field Name="Building">
      <DataField>Building</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="Unit">
      <DataField>Unit</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="desc">
      <DataField>desc</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field> 
  </Fields>
  <Query>
    <DataSourceName>myDataSource</DataSourceName>
    <CommandType>StoredProcedure</CommandType>
    <CommandText>Reports_BasicInfo</CommandText>
    <QueryParameters>
      <QueryParameter Name="@personID">
        <Value>=Parameters!personID.Value</Value>
      </QueryParameter>
      <QueryParameter Name="@numberINeedToAggregateData">
        <Value>=Join(Parameters!viewOption.Value,"~")</Value>
        <rd:UserDefined>true</rd:UserDefined>
      </QueryParameter>
    </QueryParameters>
    <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
  </Query>
</DataSet>

Et je l’ai déjà dit, mais le processus/ensemble de données stocké qui renvoie l’erreur utilise un paramètre avec la même configuration dans environ 5 autres rapports (j’ai essayé de copier et de coller les sections de code pertinentes dans les rapports de travail, mais l’erreur persiste). . Alors, quel est le problème avec celui-ci?

28
gloomy.penguin

Dans ma situation, j’ai trouvé que c’est en fait le cas où le nom des paramètres a été légèrement modifié et que la même erreur s’est produite. 

J'ai dû changer le nom pour le bon boîtier, puis chercher dans le code situé derrière tout élément faisant référence à ce paramètre et corriger son cas. Déployé bien après ça. 

21
logixologist

Essayez de changer l'ordre des paramètres en utilisant les flèches haut/bas. 

Ils doivent apparaître dans l'ordre de la dépendance.

29
charles

Réorganiser les paramètres du rapport en fonction de leur dépendance a résolu le problème pour moi. Le paramètre report était au bas de la liste mais celui au-dessus dépendait de celui-ci. Ainsi, lorsque vous créez/recréez le paramètre de rapport, assurez-vous que l'ordre est correct. 

10
RDeveloper

Cela peut être principalement dû au fait que le nom du paramètre n'a pas été mis à jour dans l'ensemble de données.

Cet article m'a aidé à le résoudre

Lors de la modification des paramètres (noms ou casse) d'un jeu de données dans SSRS, vous peut rencontrer le message d'erreur précédent lorsque vous prévisualisez le rapport . En surface, il peut sembler que le paramètre ait le même cas dans les paramètres et la requête de jeu de données - il y a un autre endroit où un changement est nécessaire.

  1. Ouvrez les propriétés du jeu de données pour le ou les jeux de données qui utilisent le paramètre dans le message d'erreur.
  2. Sélectionnez la propriété Parameters dans le volet de gauche.
  3. Cliquez sur le bouton Editeur d'expression pour le paramètre spécifié.

enter image description here

  1. Ici, vous remarquerez que l'expression est soulignée en rouge. C'est ici que vous devrez corriger la casse du nom du paramètre.

    enter image description here

5
thebenman

Avait le même problème. Vérifiez l'onglet Paramètres dans les propriétés du jeu de données et cliquez sur le bouton d'expression (fx). Les paramètres ne semblent pas s'actualiser automatiquement ici, l'un de mes paramètres avait toujours une majuscule au lieu d'une minuscule

5
user3193880

Le problème se produit également si vous faites référence à un paramètre "trop ​​tôt", par exemple. Dans ce cas, il n'est plus possible d'utiliser un ensemble de données pour les valeurs disponibles ni pour les valeurs par défaut d'un paramètre, même si l'ensemble de données lui-même n'a aucun lien avec le paramètre en question.

2
lilalinux

J'ai fait un nouveau rapport et ai copié le code sur le nouveau rapport et l'ai sauvegardé. Cela fonctionne parfaitement maintenant dans ce nouveau rapport ... J'ai supprimé l'ancien et renommé le nouveau, déployé sur le serveur et tout est bon. J'aurais aimé y penser beaucoup plus tôt. SSRS est tellement drôle, je ne sais même pas ce qui était réellement à l'origine du problème maintenant ... 

des idées à ce sujet? 

(J'avais redémarré SSRS à quelques reprises, redémarré mon ordinateur plusieurs fois, supprimé les fichiers .data, supprimé la copie du serveur même si cela se produisait sur mon ordinateur juste pour être sûr ... pendant tout ce temps, btw) 

1
gloomy.penguin

J'ai eu des problèmes similaires avec SSRS. Le code était correct, les paramètres SQL corrects mais le rapport renvoyait des erreurs de paramètre. J'utilisais un dataset partagé. J'ai copié le même code SQL dans un ensemble de données incorporé et le rapport a parfaitement fonctionné. Donc, je conviens que le logiciel SSRS a des bogues qui provoquent un comportement étrange.

0
RedZebra

Pour moi, je devais ouvrir le fichier rdl et ajouter mon nouveau paramètre à la commande/position (nœuds XML) de mon choix.

0
Daniel B

J'ai également eu ce problème, après avoir suivi toutes les réponses ci-dessus, m'a vraiment aidé.

La difficulté avec le mien est que le jeu de données était un jeu de données SSAS et qu’il était donc caché. Je devais rechercher le paramètre dans le code pour voir où il était utilisé et où je le trouvais.

Pour afficher les ensembles de données masqués, cliquez avec le bouton droit de la souris sur le dossier Ensembles de données dans l'onglet Données du rapport et cochez la case "Afficher les ensembles de données masqués".

0
Will Wainwright

Est arrivé à moi aussi

Il y avait un paramètre dépendant d'un autre

Mais l'ordre des dépendants était au top

Utilisez les flèches pour déplacer le paramètre calculé à la fin de tous les paramètres.

0
asmgx