【发布时间】:2020-01-10 16:53:55
【问题描述】:
我创建了一个复杂的 SSRS 报告和一个存储过程,其中包含销售订单号、客户采购订单、订单状态、采购订单号的多个参数,然后是客户和供应商的选择。
在为几个特定的销售订单号运行报告时,不会返回所有行或根本没有行。当我为这些相同的销售订单号运行存储过程时,所有行都按预期显示。
我可以在 SSRS 中显示正确数据的唯一方法是使用供应商的参数选择。
参数如下:
PROCEDURE [dbo].[spMasterPipelineReport]
@SalesOrderNumber AS varchar(21),
@CustomerPO AS varchar(21),
@Selection AS varchar(250),
@PurchaseOrderNumber AS varchar(21),
@Vendor AS varchar(MAX),
@Customer AS varchar(MAX)
查询中的where子句:
WHERE
(@SalesOrderNumber IS NULL OR SalesOrderNumber = @SalesOrderNumber)
AND (@CustomerPO IS NULL OR CSTPONBR = @CustomerPO)
AND Selection IN (SELECT * FROM dba_parseString_udf(@Selection, ','))
AND (@PurchaseOrderNumber IS NULL OR PONUMBER = @PurchaseOrderNumber)
AND POVENDORID IN (SELECT * FROM dba_parseString_udf(@Vendor, ','))
AND CUSTNMBR IN (SELECT * FROM dba_parseString_udf(@Customer, ','))
在 SSRS 中,销售订单号的参数设置为:
=IIF(Parameters!SalesOrderNumber.Value ="",Nothing,Parameters!SalesOrderNumber.Value)
我似乎无法确定需要更改哪些顺序才能显示所有相关行。
【问题讨论】:
-
你在 Visual Studio 中运行吗?如果是这样,请确保您正在运行数据的缓存版本。 SSRS 项目将数据缓存到 report.data 文件中。只有当参数发生变化或点击绿色刷新错误时才会刷新真实数据。确保这不是您的问题。
-
如果在VS中,也可以手动删除缓存数据,方法是删除项目文件夹下的
.rdl.data报表文件。确保在不预览报告时执行此操作。 -
您确定 SSRS 中的 Nothing 将 NULL 传递给数据库而不是空字符串吗?在查询之前,您始终可以在 SP 中“NULL out”空字符串参数,如下所示:
IF @SalesOrderNumber = '' SET @SalesOrderNumber = NULL -
也许我看错了,但你是说你的
SalesOrderNumber参数是多值的,当你输入多个订单号时它不会返回所有行?您可能还需要在where子句中对该参数使用相同的parseString函数。 -
@RossBush 我不在 Visual Studio 中,但如果有必要,也许可以在 VS 中打开项目。
标签: sql-server reporting-services optional-parameters