【发布时间】:2017-08-30 20:12:26
【问题描述】:
我什至想不出如何正确地表达标题。
我有一个名为multi-valued parameter 的SSRS 报告Department。
如果用户 IS IN
Department A..我们希望默认为除部门 A 之外的所有部门如果用户不在
Department A..我们只想默认为他们的部门
部门 A 永远不会出现在参数列表中,但作为部门 A 的成员会影响您将看到的内容。
我知道我可以使用
ALL参数选项解决此问题,但我希望唯一的参数值是有效的部门名称
我的参数填充了两个数据集。
第一个数据集包含三个有效部门选项:EUR、REM、LIFA
第二个数据集仅确定当前用户的部门,并将填充默认值。 IF 当前用户的部门是CS 我们要选择其他三个部门作为默认。如果他们的部门<> CS 我们只想默认为他们的部门。
我认为下面的代码可以工作,但连接的字符串不是第一个数据集中的选项,因此它不能是默认选项
SELECT DISTINCT
CASE
WHEN EmployeePracticeArea = 'CS'
THEN 'EUR, LIFA, REM'
ELSE EmployeePracticeArea
END AS 'EmployeePracticeArea'
FROM DimEmployee
WHERE
(EmployeePracticeArea <> '')
AND (UserLogin = @CurrentUser)
case 语句的问题在于它试图设置默认值EUR, LIFA, REM。此字符串不存在于“选项”值列表中。选项是三个单独的字符串EUR、LIFA、REM。
case 语句不能返回多个值,所以我需要评估当前用户的部门,然后返回一个没有它的列表
这里有一些东西会为你生成数据集
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL
DROP TABLE #TestData;
WITH Data (EmployeePracticeArea) AS (
SELECT 'LIFA'
UNION
SELECT 'REM'
UNION
SELECT 'EUR'
UNION
SELECT 'CS'
)
SELECT * INTO #TestData FROM Data ;
最终结果是这样的: LIFA 部门的 User1 的参数默认为 LIFA CS部门的User2的参数默认为EUR, LIFA, REM
【问题讨论】:
-
CASE表达式似乎写得正确 - 我不认为我理解你想要做什么......你能显示示例数据和期望的结果吗?
标签: sql-server reporting-services parameters distinct