【问题标题】:SSRS Multi-Value Parameter ErrorSSRS 多值参数错误
【发布时间】:2019-02-03 07:10:03
【问题描述】:

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

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

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

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

如果用户选择“全选”,报告将显示所有分支的数据(甚至包括他们不应访问的分支)。

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

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

我在 WHERE CLAUSE 中使用了“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

【问题讨论】:

  • 我相信这些多值参数会以逗号分隔的字符串形式出现。

标签: sql visual-studio-2010 reporting-services


【解决方案1】:

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

BranchID BranchName
1        Chicago
2        New York

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

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

你不需要使用存储过程,加入或拆分,你有什么应该没问题。

如果您仍然有问题,请发布主查询和参数的数据集查询,如果可能,请同时发布各自的一些示例输出。

【讨论】:

  • 我已经用@BranchID 参数查询更新了我上面的问题。
  • 好的,所以您的分支数据集中没有数字 ID 列。在那种情况下,我猜你的标签和值都指向同一个ParentID 列。因此,我认为问题实际上出在OR Branch = 9999 位上,删除这部分 WHERE 子句并进行测试。
  • 解决了其中一个问题!我现在可以一次选择 1 个分支,它会返回数据。如果我仍然使用 'SELECT ALL' 选项,仍然会显示所有分支的数据,而不仅仅是两个分支。
  • 你能显示你的主要数据集查询吗?我一直在做这种确切的报告,从来没有任何问题,所以我很困惑。另外,当您说Select All 时,这是仅选择参数列表中所有内容的内置选项吗?最后一件事,如果您将分支参数下拉,您会得到过滤列表或分支还是所有这些?
  • 听起来 BRANCH 是 BranchName 并且当它遇到 OR 的第二部分时出错,它将它与 INT 进行比较(由于 ORDER PRECEDENCE 和第一部分是错误的)。有时 OR 的第二部分不会被评估 - stackoverflow.com/questions/1761019/…
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 2021-12-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多