繁体   English   中英

SSRS 2017:想要在共享日期集中将参数设置为默认值NULL

[英]SSRS 2017: Want to set a parameter to a default of NULL in a shared dateaset

问题

我对SSRS 2017共享数据集有问题。

该数据集正在调用存储过程。 SP的参数之一是DateTime类型。 在数据集的参数对话框中,我将默认设置为(Null) 但这似乎被忽略了...

使用分页报告,一切正常。 定义的报告参数(或内置参数)可用于传递有效值。

但是,当我尝试在移动报表中使用此数据集时,出现错误。 我什至无法添加数据集! 经过大量搜索后,我发现该SP用空白而不是NULL调用( Pofiler告诉我,@ClientTime=N'' ),因此将类型转换为DateTime失败。

我不想将此参数更改为字符串类型,因为此报告将在各种环境中运行。 如果以字符串形式进入存储过程,那么正确的日期确实很糟糕: Nov 14 2017 3:35PM (取决于文化和语言!)我不想依靠字符串进行任何转换!

问题

如何强制SSRS共享数据集对参数使用真实的NULL

您是否在SharePoint中托管此数据集? 如果是这样,您确定在SharePoint保存版本上实际设置了默认值吗? 我一直观察到,虽然您可以在报表设计器中将值设置为null,但是当它保存到SharePoint时,null默认值会丢失。 只需在SharePoint界面中编辑数据集参数,然后在保存后为适当的参数选择Null。 尽管我没有长时间配置参数,但是我经常在SQL中执行“ @param IS NULL”测试,并且从未遇到过问题。

请注意,您不必在以后每次编辑数据集/报告时都进行此操作,仅在初始保存时就要做。

好吧,我找到了解决方案……并不是解决问题的方法,但是它似乎可以帮助我:

DECLARE @blank VARCHAR(1)='';
SELECT CAST(@blank AS DATETIME) AS toDateTime
      ,CAST(@blank AS DATETIME2) AS toDateTime2
      ,CAST(@blank AS TIME) AS toTime
      ,CAST(@blank AS DATE) AS toDate
      ,CAST(@blank AS BIT) AS toBit
      ,CAST(@blank AS INT) AS toInt
      ,CAST(@blank AS FLOAT) AS toFloat

结果

toDateTime          toDateTime2         toTime      toDate      toBit toInt toFloat
1900-01-01 00:00:00 1900-01-01 00:00:00 00:00:00    1900-01-01  0     0     0

将数据集添加到移动报表中时出错的原因并非来自空白字符串的DATETIME转换,而是来自T-SQL代码中更深的地方,在那里我计算出时差并且没有期望值1900-01-01 该错误消息非常大,屏幕的一半覆盖了文本,但是没有真正的原因提示...

但这会引发错误,因此,我将避免数据类型不从本地转换为空白:

SELECT CAST(@blank AS decimal(10,4)) AS toDecimal 

讯息8114,第16级,州5,第10行
将数据类型varchar转换为数字时出错。

这意味着:我必须将值1900-01-01设为NULL SSRS允许默认值为NULL但在后台发送空白的参数仍然很愚蠢。

如果还有其他导致真正为NULL解决方案,我仍然很高兴阅读它们!

更新:有趣的事实

探查器告诉我,分页报告将设置为(Null)的参数作为空白传递(如问题所示)。 但是对于移动报表, (Null)将作为,@DateTimeFrom=N'Nothing'传递。 默认值必须设置为空值,该值为空...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM