web-dev-qa-db-fra.com

Le rapport SSRS n'affichant pas de données

Je viens de créer un rapport SSRS SQL Server 2005 et les données ne sont pas affichées dans le volet Aperçu.

L'ensemble de données est correctement renseigné à partir d'une procédure stockée avec un paramètre String. Je peux l'exécuter dans le volet de données. Lors de l'exécution du rapport dans le volet Aperçu, le nombre correct de lignes est affiché, mais le contenu des cellules ne contient aucune donnée.

Missing Data

Le jeu de données source est basé sur une procédure stockée avec un paramètre passé dans String dans SQL Server 2005 qui renvoie le contenu d'une table temporaire. L'ensemble de données mappe ensuite les champs aux locaux. Je peux l'exécuter correctement dans la vue Données.

Procédure stockée 

ALTER PROCEDURE spWebReportStage25BuildReview
    @BuildNumber as nvarchar(50)

Schéma de la table temporaire

CREATE TABLE #tmpModelZones
(
    BuildID bigint NOT NULL,
    BuildNo nvarchar(50) NOT NULL,
    ModelID int NOT NULL,
    ModelName nvarchar(50) NOT NULL,
    ZoneID int NOT NULL,
    ZoneName nvarchar(50) NOT NULL,
    SortOrder int NOT NULL,
    Created bit DEFAULT 0 NOT NULL,
    Closed bit DEFAULT 0 NOT NULL,
    PRIMARY KEY (BuildID, ZoneID)
)

SSRS Dataset

enter image description here

Cartographie du jeu de données SSRS

enter image description here

Paramètre de jeu de données SSRS enter image description here

Exécution du jeu de données avec le paramètre

enter image description here

Aucun groupe, filtre ou agrégation supplémentaire ne figure sur la table affichée. C'est simplement une table plate

12
Phil Murray

Lors de l'utilisation de tables temporaires, SSRS ne parvient pas à obtenir les métadonnées. Donc, il y a fondamentalement 2 façons de laisser SSRS connaître les noms de colonnes:

  1. Ajoutez SET FMTONLY ON. Cela récupérera les métadonnées mais ne les affichera pas. 

  2. Accédez à l'onglet DONNÉES, cliquez sur le concepteur de requêtes générique, puis cliquez sur les champs d'actualisation. Cela invitera une boîte de dialogue pour spécifier la valeur du paramètre. Lorsque nous exécutons la requête dans le concepteur de requêtes, SSRS obtient le schéma et les données de la procédure stockée. Maintenant, les données seront disponibles dans le volet de visualisation.

8
praveen

Jamais vu ça avant. Cependant, SSRS peut parfois être un peu "éteint", alors voici une liste de choses à essayer. J'ai bien peur que la plupart d'entre eux soient du type "Avez-vous essayé de l'éteindre et de le rallumer?".

  • Supprime les fichiers .data associés au rapport.
  • Dupliquez/sauvegardez le rapport et essayez de ajouter le jeu de données dans un nouveau tablix de base pour voir s’il affiche des données.
  • Vérifiez la propriété hidden. N'oubliez pas que (pour une raison stupide) ce n'est pas (comme dans tout autre produit sain) un champ visible Y/N, mais un champ caché Y/N.
  • Vérifiez deux fois couleur de la police et taille, etc.
  • Exécutez le rapport sur votre serveur de rapports (par opposition à l'aperçu) pour vérifier si cela fonctionne.
  • Utilisez des zones de texte temporaires pour afficher les valeurs réelles de vos paramètres, afin de vérifier si elles sont exactement les mêmes que lorsque vous avez testé le jeu de données.
  • Recherchez dans le code-behind (xml dans le rdl) des filtres inattendus, des propriétés cachées, des expressions, etc. dans le tableau matriciel. Même si vous ne pouvez pas tout à fait "lire" le RDL, avec la coloration syntaxique, vous devriez pouvoir le parcourir et en extraire beaucoup d'informations à ce sujet.
  • Consultez le fichier ExecutionLog2 et d'autres éléments de journalisation pour connaître le nombre de lignes renvoyées lors de l'exécution du rapport.

En outre, il serait utile de mettre à jour/modifier votre question avec quelques informations supplémentaires:

  • Quel genre de groupements le tablix a-t-il?
  • Quels sont les filtres sur le tableau matriciel, les groupes de lignes et les groupes de colonnes?
  • Quelle est la structure générale de l'ensemble de données et ses résultats?
  • Comment les paramètres sont-ils structurés et utilisés?
11
Jeroen

J'ai aussi eu un problème similaire. Dans mon cas, il s’est même produit sans aucun paramètre ni rien, juste le rapport le plus simple que vous puissiez imaginer. Il comprenait une table avec un seul champ, aucun filtre n’était utilisé. J'ai réussi à afficher certaines données, mais seules les lignes affichées ne correspondaient pas à la cellule et ont donc forcé la hauteur de la ligne à augmenter. 

Mon correctif pour ce problème: changer la police ou la taille de la police par rapport à la taille standard (taille 10, Segoe UI). Ensuite, toutes les données étaient affichées. En revenant à Segoe UI, les données ont à nouveau disparu. 

3
Stijn

J'ai eu un cas où un rapport de travail a cessé d'afficher des données. J'ai ajouté une autre table sans mise en forme, liée au même ensemble de données - vérifiant que la requête ne renvoyait plus de données lorsqu'elle était passée aux paramètres par SSRS. Après avoir enquêté, j'ai remarqué que mon paramètre de test pour une valeur de "date d'ancrage" était au format AAAA-MM-JJ. Dans ma requête mise à jour, je formulais des hypothèses sur l'ordre des caractères dans le paramètre de date -MM pour une jointure).

Je soupçonnais que SSRS pouvait passer la date dans un format différent (MM/JJ/AA étant mon paramètre culturel actuel pour les valeurs par défaut). Donc, fonctionnant avec ce pressentiment, j'ai modifié ma logique SQL pour fonctionner avec n'importe quel format de date passé. - par exemple. left (convert (date, @anchorDate, 20), 7)

Cela corrigeait mon problème - les hypothèses de format que j'avais testées (valeurs codées en dur pour tester la requête en cours de développement) étaient de mauvaises hypothèses. SSRS peut également transmettre des données dans des formats locaux. Veillez donc à prendre en compte ce type d'hypothèse.

2

J'ai eu le même problème. Voici ce que j'ai trouvé. Voici mon code:

    DECLARE @tblPigProblems TABLE (
    Id          INT IDENTITY, 
    PPId            INT, 
    GaugeColor      VARCHAR(25), 
    FullStartTime       VARCHAR(25), 
    PigSystem         VARCHAR(25)
    )

    IF (1 = 0)
    BEGIN
        SELECT * FROM @tblPigProblems
    END

    ...

    SELECT '@tblPigProblems'    [PigProblems],  
    @p_vchLine      [Line],         
    GaugeColor      [Product],
    FullStartTime       [Start Time],
    PigSystem       [Pig System]
FROM @tblPigProblems

Ce que j'ai fait est d'utiliser le "SELECT * FROM @tblPigProblems" initial pour m'assurer que si des messages d'erreur étaient spécifiés dans le code avant l'instruction select finale renvoyant l'ensemble de données, SSRS était en mesure de déterminer les champs à partir de la procédure stockée. Ensuite, lorsque les résultats ont été déterminés, j'ai attribué un alias aux champs. Le problème était que les alias des champs ne correspondaient pas aux noms de champs déclarés (c.-à-d. Que le champ déclaré "GaugeColor" ne correspondait pas à l'alias "[Product]" que j'avais fourni dans la sélection pour créer le jeu de résultats. Je me suis rendu compte que lorsque j'ai actualisé les champs de la section Données du rapport SSRS, puis affiché les champs du jeu de données, il a répertorié les noms de champs à partir de la déclaration de la table ("GaugeColor"). (cliquez sur!), le jeu de résultats répertorié dans SSRS montrait les alias de champs ("Produit"). Comme ils ne correspondaient pas, rien ne s'affichait dans la zone de texte à laquelle j'avais attribué le champ (c'est-à-dire: "= Champs ! ColorGauge.Value "). SSRS n'a pas relevé cette anomalie et a autorisé la création du rapport, mais aucune valeur à afficher. Le correctif était simple. Remplacez:

    IF (1 = 0)
    BEGIN
        SELECT * FROM @tblPigProblems
    END

avec:

    IF (1 = 0)
    BEGIN
        SELECT '@tblPigProblems'    [PigProblems],  
        @p_vchLine      [Line],         
        GaugeColor      [Product],
        FullStartTime   [Start Time],
        PigSystem       [Pig System]
    FROM @tblPigProblems
    END

Dan

2
Dan Goodell