SSRS 多值参数错误

SSRS Multi-Value Parameter Error

目标: 我有一个 SSRS 报告,它使用一个隐藏参数来捕获 UserID,一个显示分支机构的多值下拉参数,以及另一个将显示与这些分支机构相关的销售代表的多值参数。这个想法是,用户只能查看其 UserID 等于分支机构名称的分支机构和销售代表。

问题: 如果授予用户查看芝加哥和纽约分支机构的权限,并且仅选择这些分支机构,则报告运行良好。仅显示这两个分支的数据。

如果用户仅选择芝加哥,则会显示一条错误消息。

如果用户仅选择纽约,则会显示一条错误消息。

如果用户选择 'SELECT ALL',报告会显示所有分支机构的数据(即使是他们不应访问的分支机构)。

错误消息:将 nvarchar 值 'Chicago' 转换为数据类型 int 时转换失败。

我在数据集中使用查询,而不是存储过程。我应该改用存储过程吗?

我在 WHERE 子句中使用 'IN' 运算符:

WHERE ReportIDTable.ReportID = 1 
AND ReportIDTable.UserID = @UserID
AND ((Branch IN (@BranchID)) OR Branch = 9999)

我试过使用 JOIN() 和 SPLIT() 函数,但没有发现任何区别。

我做了很多研究,但似乎无法解决问题。任何帮助将不胜感激!

@BranchID 参数已设置为 TEXT,并且实际上由另一个查询填充。

SELECT 'ZZ <Untracked Sales>' AS ParentID
UNION
SELECT ParentID
FROM     ReportDistribution WITH (NOLOCK)
WHERE  (ReportID = 1) AND (ReportHierarchyID = 3)
GROUP BY ParentID

主数据集查询:

SELECT 
commission_sale_history.invoice_year, 
commission_sale_history.invoice_month, 
branch.branch_description, 
commission_reps.division, 
commission_reps.rep_name, 
commission_reps.employee_id, 
commission_sale_history.customer_id, 
customer.customer_name, 
commission_sale_history.invoice_no, 
commission_sale_history.order_no, 
commission_sale_history.product_division, 
commission_sale_history.commission_type, 
commission_sale_history.sales, 
commission_sale_history.commission_cost, 
commission_sale_history.commission_amount, 
commission_sale_history.payment_date, 
commission_sale_history.invoice_date,
commission_sale_history.commission_rate, 
commission_sale_history.commission_split,
commission_reps.salary

FROM ((((commission_sale_history WITH (NOLOCK)
INNER JOIN commission_reps WITH (NOLOCK)
ON (commission_sale_history.branch_id = commission_reps.branch_id) 
AND (commission_sale_history.rep_id = commission_reps.rep_id)) 
INNER JOIN customer WITH (NOLOCK)
ON commission_sale_history.customer_id = customer.customer_id) 
INNER JOIN branch WITH (NOLOCK)
ON commission_sale_history.branch_id = branch.branch_id) 
INNER JOIN ReportIDTable WITH (NOLOCK)
ON commission_reps.rep_id = 
CASE WHEN CONVERT(int,ReportIDTable.Salesrep) = 999999
THEN commission_reps.rep_id ELSE
CONVERT(int,ReportIDTable.Salesrep) END)
LEFT JOIN invoice_hdr_salesrep WITH (NOLOCK)
ON invoice_hdr_salesrep.invoice_number = commission_sale_history.invoice_no
AND invoice_hdr_salesrep.salesrep_id = commission_sale_history.rep_id

WHERE ReportIDTable.ReportID = 1 
AND ReportIDTable.UserID = @UserID
AND ((Branch IN (@BranchID)) OR Branch = '9999')


AND commission_sale_history.rep_id IN(@SalesRepID)
AND commission_sale_history.invoice_date >= @InvoiceStartDate
AND commission_sale_history.payment_date
BETWEEN @PaymentFromDate AND @PaymentThroughDate
AND commission_sale_history.paid_in_full_flag = 'Y'
AND ISNULL(commission_sale_history.credit_matched_to_payment_flag,'Y') = 'Y'
AND commission_sale_history.product_division 
NOT IN ('Parts Sales', 'Rental', 'Forklift/Equipment', 'Service')
AND ISNULL(invoice_hdr_salesrep.primary_salesrep,'Y')='Y'

ORDER BY
commission_reps.rep_name,
customer.customer_id, 
commission_sale_history.invoice_no,
commission_sale_history.commission_type

我假设 BranchID 是 int 并且它的名称是一个字符串,因此您的分支数据集看起来像这样。

BranchID BranchName
1        Chicago
2        New York

在您的参数中,确保您的 Value 指向 'BranchID' 列并且“标签”指向 'BranchName' 列。

检查完后,将参数值设置为 text(我知道这是一个数字,但试试吧....)

你不需要使用存储过程,join 或 split,你有的应该没问题。

如果您仍有问题,post 主查询和参数的数据集查询,如果可能的话,加上每个查询的一些样本输出。