簡體   English   中英

SSRS多值參數錯誤

[英]SSRS Multi-Value Parameter Error

目標:我有一個SSRS報告,該報告使用隱藏參數捕獲UserID,使用多值下拉參數顯示分支,並使用另一個多值參數顯示與這些分支相關的銷售代表。 這個想法是,用戶只能查看其UserID等於分支名稱的分支和銷售代表。

問題:如果授予用戶查看芝加哥和紐約分支的權限,並且僅選擇那些分支,則報表運行良好。 僅顯示這兩個分支的數據。

如果用戶僅選擇芝加哥,則會顯示錯誤消息。

如果用戶僅選擇紐約,則會顯示錯誤消息。

如果用戶選擇“全選”,報告將顯示所有分支的數據(即使他們不應該訪問的分支也是如此)。

錯誤消息: 將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為and int,其名稱為字符串,因此您分支的數據集看起來像這樣。

BranchID BranchName
1        Chicago
2        New York

在參數中,確保您的Value指向“ BranchID”列,而“標簽”指向“ BranchName”列。

選中此選項后,將參數值設置為text (我知道這是一個數字,請嘗試...。)

您不需要使用存儲的proc,join或split,就可以了。

如果仍然有問題,請發布針對主查詢和參數的數據集查詢,並在可能的情況下分別發布一些示例輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM