如何在SSRS中配置多值参数也不传递任何值

时间:2015-03-03 20:06:38

标签: variables reporting-services parameters ssrs-2008

我正在尝试创建一个过滤某个字段的参数,但如果用户不想选择过滤器,也会无法工作(缺少更好的术语或为空/ NULL)。 SSRS报告显示事件摘要。有些活动会为活动分配设备,而有些活动却没有。 如果我没有创建设备参数,报告将显示所有记录:有设备或没有。在下面的示例中,事件(驱动器ID)683708,683634,683646)没有分配激励,因此该字段为空。哪个好。

No Equipment Parameter

但是当我为Equipment添加参数时,我不得不进行选择,不再显示没有分配设备的事件。我知道为什么会发生这种情况并且它有意义,但我希望有一种方法可以让我的设备参数允许我选择“无”或“空白”或任何措辞可以查看日期中的所有驱动器范围。

Equipment Parameter

我的程序如下:

Create Procedure Hemasphere_IncentiveReport
@startDate datetime,
@endDate datetime,
@RegID varchar(8000),
@OrgID varchar(8000),
@SubID varchar(8000),
@COID varchar(8000),
@EquipmentID varchar(8000)

As

Begin

Select
DM.DriveID [DriveID],
DM.FromDateTime [FromDateTime],
Case When DM.OwnerType = 0 Then Acct.Name Else CD.DescLong End As [OwnerName],
CO.CodeID [CO_ID],
CO.Description [CO_Desc],
Org.CodeID [Org_ID],
Org.Description [Org_Desc],
Sub.CodeID [Sub_ID],
Sub.Description [Sub_Desc],
Reg.CodeID [Reg_ID],
Reg.Description [Reg_Desc],
Inc.Description [Incentive]

From
Hemasphere_Dev.[dbo].rpt_DriveMaster DM
Left Outer Join Hemasphere_Dev.[dbo].rpt_Accounts Acct on DM.AccountID=Acct.AccountID
Inner Join Hemasphere_Dev.[dbo].rpt_CenterDetail CD on DM.CenterID=CD.CenterID
Inner Join Hemasphere_Dev.[dbo].IDViewCollectionOp CO on CD.CenterID=CO.CodeID
Inner Join Hemasphere_Dev.[dbo].IDViewRegion Reg on CD.Region=Reg.CodeID
Inner Join Hemasphere_Dev.[dbo].IDViewOrgCenter Org on CD.OrgCenter=Org.CodeID
Inner Join Hemasphere_Dev.[dbo].IDViewOrgSubCenter Sub on CD.OrgSubCenter=Sub.CodeID
Left Outer Join OBAPPS.[dbo].OBI_Incentives Inc on DM.DriveID=Inc.DriveID

Where
DM.StatusID <>5
And DM.FromDateTime Between @startDate AND @endDate
And CO.CodeID In (Select Number From dbo.fn_SplitInt(@COID,','))
And Inc.EquipmentID In (Select Number from dbo.fn_SplitInt(@EquipmentID,','))

Order By [FromDateTime], [OwnerName], [CO_Desc], [Rec_Desc]

我尝试过像:

这样的解决方案
And (Inc.EquipmentID IS NULL or Inc.EquipmentID In (Select Number from dbo.fn_SplitInt(@EquipmentID,',')))

但是当我选择特定设备时,这会给我带来空值。关于我可以做些什么来完成这项任务的任何建议?

感谢Alan,感觉它几乎就在那里,并希望你能帮助我清除这个最后的障碍。如果我更改了我的参数,我会收到此错误:

Parameter Error

对于程序本身,你说要使用:

AND (Inc.EquipmentID IN (@EquipmentID) OR (-1 IN (@EquipmentID) AND Inc.EquipmentID IS NULL))

但是我不需要调用函数来分割整数:

And (Inc.EquipmentID In (Select Number From dbo.fnSplitInt(@EquipmentID,',') Or (-1 IN (@EquipmentID) AND Inc.EquipmentID IS NULL))

1 个答案:

答案 0 :(得分:1)

在您的Equipment参数的数据集中,首先手动添加空白值。

例如:

Select -1 as Value, 'No Equipment' as Label
UNION ALL

在此处选择原始设备数据集

然后在您的报告查询中,而不是:

And (Inc.EquipmentID IS NULL or Inc.EquipmentID In (Select Number from dbo.fn_SplitInt(@EquipmentID,',')))

这样做:

AND (Inc.EquipmentID IN (@EquipmentID)
OR (-1 IN (@EquipmentID) AND Inc.EquipmentID IS NULL))