【问题标题】:SQL Reporting Services - Cryptic WarningsSQL Reporting Services - 隐秘警告
【发布时间】:2009-07-13 15:02:09
【问题描述】:
我在本地处理模式下使用报告服务。
我正在将报告数据设置为从 sql 数据库中提取的数据集。
当我来呈现报告时,我收到两个警告:
数据集“PPA_Dev”包含字段“电子邮件”的定义。数据源返回的结果集中缺少该字段。
数据集“PPA_Dev”包含字段“电子邮件”的定义。数据扩展在读取字段期间返回错误。位置 9 的字段没有数据。
我在生成的报告中看到的是电子邮件列是空的。
为什么会发生这种情况?
更新
生成数据集的 sql 返回了正确的信息。
最后,我在记事本中摆弄了 rdlc 文件,破坏了整个报告,还原了代码,现在它可以正常工作了。不知道为什么坏了,不知道为什么修好了,这一切都非常令人沮丧。
【问题讨论】:
标签:
.net
reporting-services
rdlc
【解决方案1】:
听起来数据集定义包含一个名为“电子邮件”的字段,它不会从您的源查询中返回,但如果没有更多信息,很难确定。
您能否修改问题以包含用于生成数据集的 SQL?
【解决方案2】:
我遇到了类似的问题。对我来说,RDLC 看起来不错。最终,我注意到数据集参数的列出顺序与存储过程中的顺序不同。当我在数据集中对它们重新排序以匹配 SP 时,一切都很好。遇到此错误时,我会将其添加到您的检查列表中。
【解决方案3】:
我也有这个问题。当我在 Visual Studio Xml 编辑器中检查 rdlc 时,我发现在 rdlc 的“DataSets/DataSet/Fields”部分中错误地指定了被投诉的字段(上述原始问题中的电子邮件)。删除这些字段可以解决问题。
我之前更改了 Datasource 对象,看起来 rdlc 数据集没有更新那些已更改的字段。
【解决方案4】:
我在针对 SharePoint 列表创建报告时遇到了这个问题。如果列表中的列为空,则查询响应中不会返回该列。我找到了帮助解决问题的old post on www.msbicentral.com。
在报表属性中,将新的函数定义添加到自定义代码部分:
Function NullAsEmpty(ByRef F As Field) As String
If F.IsMissing Then
Return ""
Else
If F.Value Is Nothing Then
Return ""
Else
Return F.Value
End If
End If
End Function
添加一个可用于代替实际字段的变量。在我的例子中,我添加了一个变量reason,定义为=Code.NullAsEmpty(Fields!Reason)。然后在报告中用新变量替换出现的原始字段。
【解决方案5】:
有确切的错误消息并注意到(感谢上面的 dkritz 帖子)我的数据集中有一些字段不在我的最终 SQL 选择中。所以我从数据集中删除了这些字段,瞧。
一点历史 - 原始数据集使用查询文本。我删除了该数据集并创建了另一个(对 ds 使用相同的名称)。这个新的引用了一个存储过程,一些字段与原来的不同。我认为因为 ds 命名相同,所以它从原始 ds 中提取字段并将其与新 ds 组合。该错误是指旧 ds 的字段。
【解决方案6】:
直接将表格与 SSRS 报告绑定可以正常工作。但是当我在存储过程中使用同一张表时,该报告已抛出
[rsMissingFieldInDataSet] The dataset ‘DataSet1’ contains a definition for the Field ‘Currency’. This field is missing from the returned result set from the data source.
添加
SET ARITHABORT ON;
在 SP 的开头修复了这个问题。
环境:Visual Studio 2008、SQL Server 2008
【解决方案7】:
对我来说,单引号引起了问题。
<Field Name="Field1">
<DataField>Field1"</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
将包含<DataField>Field1"</DataField> 的行更正为:
<Field Name="Field1">
<DataField>Field1</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
【解决方案8】:
我遇到了类似的问题,但对于 SSAS 源。有一个字段被过滤为空列,所以它没有显示在执行的输出中,但这个字段在Fields 列表中。与源查询中的字段相比,字段的顺序也是混杂的。
我所做的是混合了其他人的提示:
- 删除此字段为空值
- 将字段的顺序更改为与源查询中的相同
-
重新启动 Visual Studio - 因为即使我执行了上述步骤,错误仍然出现。重启VS后,警告神奇地消失了!