【发布时间】:2011-11-23 01:15:46
【问题描述】:
我知道其他人也问过类似的问题,但我已经尝试了他们的解决方案,但它仍然不适合我。
我有一个名为“Region”的参数,它使用“region”数据集,另一个名为“Office”的报表参数使用“office”数据集。
现在我希望根据“区域”选择过滤“办公室”值列表。这是我到目前为止所做的。对于区域数据集,它返回“regions_id”和“region_description”。然后对于“Region”报告参数,我选择了“Text”数据类型并允许 Null 值。选择“文本”可能是错误的,因为这是唯一标识符值。对于可用值,我选择了 region 数据集和 region_id 作为值,region_description 作为标签。我转到高级选项卡并选择“始终刷新”。在默认选项卡上,我输入了“(Null)”,当他们想要查看所有区域时。
接下来,我创建了一个名为“regions_id2”的报表参数,允许空值,并且我设置了可用值 = 区域数据集。对于值和标签,我指定了regions_id。对于默认值,我再次输入“(Null)”。我再次选择了“始终刷新”。
最后,我将这个“regions_id2”参数添加到“office”数据集中。然后 office 报表参数使用具有可用值的“office”数据集。值字段 = “group_profile_id”和标签字段 = “name_and_license”。默认值 =“(空)”。高级“始终刷新”。
我以相同的顺序对这些报告参数进行了排序:Regions、regions_id2 和 Office。但是现在,当我运行此报告时,我没有收到任何错误,但是,无论我为区域选择什么,办公室列表都包括所有办公室。这是我对这些数据集的 T-SQL:
CREATE Procedure [dbo].[rpt_rd_Lookup_Regions]
(
@IncludeAllOption bit = 0,
)
As
SET NOCOUNT ON
If @IncludeAllOption = 1
BEGIN
Select Distinct
NULL AS [regions_id],
'-All-' AS [region_description]
UNION ALL
SELECT Distinct
[regions_id],
[region_description]
FROM [evolv_cs].[dbo].[regions]
Where [region_description] not in ('NA','N/A')
Order By [region_description]
END
Else
BEGIN
SELECT Distinct
[regions_id],
[region_description]
FROM [evolv_cs].[dbo].[regions]
Where [region_description] not in ('NA','N/A')
Order By [region_description]
END
CREATE Procedure [dbo].[rpt_rd_Lookup_Facilities]
(
@IncludeAllOption bit = 0,
@regions_id uniqueidentifier = NULL
)
As
SET NOCOUNT ON
If @IncludeAllOption = 1
BEGIN
Select
Null As [group_profile_id],
Null As [profile_name],
Null As [license_number],
Null As [other_id],
--Null As [Regions_id],
'-All-' As [name_and_license]
UNION ALL
SELECT
[group_profile_id],
[profile_name],
[license_number],
[other_id],
--[regions_id],
[profile_name] + ' (' + LTRIM(RTRIM([license_number])) + ')' As [name_and_license]
FROM [evolv_cs].[dbo].[facility_view] With (NoLock)
Where [is_active] = 1 and (@regions_id is NULL or @regions_id = [regions_id])
Order By [profile_name]
END
Else
BEGIN
SELECT
[group_profile_id],
[profile_name],
[license_number],
[other_id],
[regions_id],
[profile_name] + ' (' + LTRIM(RTRIM([license_number])) + ')' As [name_and_license]
FROM [evolv_cs].[dbo].[facility_view] With (NoLock)
Where [is_active] = 1 and (@regions_id is NULL or @regions_id = [regions_id])
Order By [profile_name]
END
我可能做错了什么?
【问题讨论】:
-
你为什么需要参数@regions_id2`?,这似乎是多余的。你的参数是多值还是单值'
-
这些参数是单值。我尝试在没有 region_id2 的情况下执行此操作,但它给了我错误,说我无法使用 Regions 中的字段值作为 Office 的参数。
-
没关系。谢谢!我的错误是没有从区域数据集中为办公室数据集选择区域参数值。
标签: tsql stored-procedures reporting-services ssrs-2008 parameter-passing