【发布时间】: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