Ошибка многозначного параметра SSRS - PullRequest
0 голосов
/ 28 августа 2018

Цель: У меня есть отчет SSRS, который использует скрытый параметр для захвата идентификатора пользователя, раскрывающийся параметр с несколькими значениями, отображающий ветви, и другой параметр с несколькими значениями, который будет отображать данные о продажах, связанные с этими филиалами. Идея состоит в том, что пользователь может просматривать только филиалы и отделы продаж, где их идентификатор пользователя равен имени филиала.

Проблема: Если пользователю предоставляется доступ для просмотра ветвей Чикаго и Нью-Йорка, и он выбирает только эти филиалы, отчет работает нормально. Данные отображаются только для этих двух филиалов.

Если пользователь выбирает только Чикаго, отображается сообщение об ошибке.

Если пользователь выбирает только Нью-Йорк, отображается сообщение об ошибке.

Если пользователь выбирает «ВЫБРАТЬ ВСЕ», отчет отображает данные для всех филиалов (даже филиалов, к которым у них не должно быть доступа).

СООБЩЕНИЕ ОБ ОШИБКЕ: Ошибка преобразования при преобразовании значения nvarchar 'Chicago' в тип данных int.

Я использую запрос в наборе данных, а не хранимую процедуру. Стоит ли использовать вместо этого хранимую процедуру?

Я использую оператор 'IN' в WHERE CLAUSE:

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

1 Ответ

0 голосов
/ 28 августа 2018

Я предполагаю, что BranchID и int и его имя являются строкой, и поэтому ваш набор данных ветвей выглядит примерно так.

BranchID BranchName
1        Chicago
2        New York

В вашем параметре убедитесь, что Value указывает на столбец BranchID, а метка указывает на столбец BranchName.

После того, как вы проверили это, установите значение вашего параметра равным text (я знаю, что это число, но попробуйте ...)

Вам не нужно использовать сохраненный процесс, объединение или разделение, то, что у вас должно быть в порядке.

Если у вас все еще есть проблемы, опубликуйте запрос набора данных как для основного запроса, так и для параметра, а также, если возможно, пример выходных данных из каждого из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...