目标: 我有一个SSRS报告,该报告使用隐藏参数捕获UserID,显示分支的多值下拉参数和另一个显示与这些分支相关的销售代表的多值参数。这个想法是,用户只能查看其UserID等于分支名称的分支和销售代表。
问题: 如果授予用户查看芝加哥和纽约分支的权限,并且仅选择那些分支,则报表运行良好。仅显示这两个分支的数据。
如果用户仅选择芝加哥,则会显示错误消息。
如果用户仅选择纽约,则会显示错误消息。
如果用户选择“全选”,则报告将显示所有分支的数据(即使他们不应该访问的分支)。
错误消息: 将nvarchar值“芝加哥”转换为数据类型int时转换失败。
我正在使用数据集中的查询,而不是存储过程。我应该改用存储过程吗?
我在WHERE条款中使用了'IN'运算符:
float *data = yourProcToLoadData(); //works for any dimension
我尝试使用JOIN()和SPLIT()函数,但没有发现任何区别。
我做了很多研究,但似乎无法解决问题。任何帮助将不胜感激!
@BranchID参数已经设置为TEXT,并且实际上已由另一个查询填充。
WHERE ReportIDTable.ReportID = 1
AND ReportIDTable.UserID = @UserID
AND ((Branch IN (@BranchID)) OR Branch = 9999)
主数据集查询:
SELECT 'ZZ <Untracked Sales>' AS ParentID
UNION
SELECT ParentID
FROM ReportDistribution WITH (NOLOCK)
WHERE (ReportID = 1) AND (ReportHierarchyID = 3)
GROUP BY ParentID
答案 0 :(得分:0)
我假设BranchID为and int,其名称为字符串,因此您分支的数据集看起来像这样。
BranchID BranchName
1 Chicago
2 New York
在您的参数中,确保您的Value
指向“ BranchID”列,而“标签”指向“ BranchName”列。
选中此选项后,将参数值设置为text
(我知道这是一个数字,请尝试...。)
您不需要使用存储的proc,join或split,您所拥有的应该没问题。
如果仍然有问题,请发布针对主查询和参数的数据集查询,并在可能的情况下发布一些示例输出。