15

我刚刚创建了一个 SQL Server 2005 SSRS 报告,并且数据未显示在“预览”窗格中。

数据集是根据字符串参数从存储过程中正确填充的。我可以在数据窗格中执行它。在“预览”窗格中运行报告时,会显示正确的行数,但单元格的内容不包含任何数据

缺失数据

源数据集基于 SQL Server 2005 中带有传入字符串参数的存储过程,该参数返回临时表的内容。然后数据集将字段映射到本地。我可以在数据视图中正确执行此操作。

存储过程

ALTER PROCEDURE spWebReportStage25BuildReview
    @BuildNumber as nvarchar(50)

临时表架构

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 数据集

在此处输入图像描述

SSRS 数据集映射

在此处输入图像描述

SSRS 数据集参数 在此处输入图像描述

使用参数执行数据集

在此处输入图像描述

显示的表格上没有其他分组、过滤器或聚合。简直就是一张平桌

4

6 回答 6

11

以前从未见过。但是,SSRS 有时可能会有点“关闭”,所以这里列出了一些可以尝试的方法。恐怕其中大多数都是“你试过把它关掉再打开吗?”的类型。

  • 删除.data与报告关联的文件。
  • 复制/备份报告,并尝试将数据集添加到新的基本 tablix中,以查看是否显示数据。
  • 检查隐藏的属性。不要忘记(出于某种愚蠢的原因)它不是(就像在任何其他理智的产品中一样)一个可见的Y/N 字段,而是一个隐藏的Y/N 字段。
  • 仔细检查字体颜色和大小等。
  • 在您的报告服务器上运行报告(而不是预览)以检查它是否有效。
  • 使用一些临时文本框来显示参数的实际值,以检查它们是否与测试运行数据集时完全相同。
  • 检查tablix 中的意外过滤器、隐藏属性、表达式等的代码隐藏(rdl 中的 xml)。即使您不能完全“阅读” RDL,通过突出显示语法,您也应该能够略读它并从中提取大量信息。
  • 检查ExecutionLog2和其他日志记录以查看报告运行中返回了多少行。

此外,如果您使用更多信息更新/编辑您的问题,这将有所帮助:

  • tablix 有哪些类型的分组?
  • tablix、行组和列组上的过滤器是什么?
  • 数据集的一般结构是什么,它的结果是什么?
  • 参数是如何构造和使用的?
于 2012-07-06T09:45:40.470 回答
8

使用临时表时,SSRS 无法获取元数据。所以基本上有两种方法可以让 SSRS 知道列名:

  1. 添加SET FMTONLY ON. 这将检索元数据,但不会显示数据。

  2. 转到数据选项卡并单击通用查询设计器并单击刷新字段。这将提示一个用于指定参数值的对话框。当我们在查询设计器中运行查询时,SSRS 从存储过程中获取架构和数据。现在数据将在预览窗格中可用。

于 2012-07-06T11:05:41.603 回答
6

我也有类似的问题。就我而言,它甚至在没有任何参数或任何东西的情况下发生,只是你能想象到的最简单的报告。它包括一个带有单个字段的表,没有使用过滤器。我确实设法查看了一些数据,但只显示了那些不适合单元格的行,因此迫使行高增加。

我对这个问题的修复:从标准更改字体或字体大小(大小 10,Segoe UI)。然后,所有数据都显示出来了。将其更改回 Segoe UI 会使数据再次消失。

于 2017-05-04T08:54:08.727 回答
3

我有同样的问题。这是我发现的。这是我的代码:

    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

我所做的是使用初始的“SELECT * FROM @tblPigProblems”来确保如果在返回数据集的最终选择语句之前在代码中指定了任何错误消息,SSRS 能够确定存储过程中的字段。然后,当结果确定后,我为这些字段分配了一个别名。问题是字段的别名与声明的字段名称不匹配(即:声明的字段“GaugeColor”与我在选择中提供的别名“[Product]”不匹配以创建结果集。我的方式意识到这是当我刷新 SSRS 报告的数据部分中的字段,然后显示数据集字段时,它列出了表声明中的字段名称(即:“GaugeColor”)。当我在数据集中执行存储过程时(单击!),SSRS 中列出的结果集显示了字段别名(即:“产品”)。由于这些不匹配,因此我将字段分配给的文本框中没有显示任何内容(即:“=Fields!ColorGauge.Value”)。SSRS 没有发现这种差异并允许创建报告,但不显示任何值。修复很简单,替换:

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

和:

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

于 2013-10-16T18:21:29.160 回答
2

我有一个工作报告停止显示数据的案例。我添加了另一个没有格式的表,链接到相同的数据集 - 验证了当 SSRS 传递参数时查询不再返回数据。经过调查,我注意到我的“锚定日期”值的测试参数被格式化为 YYYY-MM-DD,在我更新的查询中,我对日期参数中字符的顺序进行了假设(截断为 YYYY -MM 一次加入)。

我怀疑 SSRS 可能会以不同的格式传递日期(MM/DD/YY 是我当前默认日期的文化设置)。因此,凭着这种预感,我改变了我的 SQL 逻辑以使用任何传递的日期格式。- 例如 left(convert(date, @anchorDate, 20), 7)

这解决了我的问题 - 我测试过的格式假设(在开发时测试查询的硬编码值)是错误的假设。SSRS 也可以以本地格式传递数据——所以一定要注意这种假设。

于 2016-05-31T22:40:02.547 回答
0

我有同样的问题,我试图检查我的 tablix 的优先级。我通过将CANGROW值更改为FALSE.

于 2020-10-16T21:54:32.970 回答