在预期条件为SSRS的上下文中指定的非布尔类型的表达式

时间:2016-04-29 16:45:30

标签: sql-server reporting-services

 SELECT
'PERSONFULLNAME' = LASTNM --+ ', '+ FIRSTNM +' ' + COALESCE(MIDDLEINITIALNM, '')
,PERSONNUM
,EMPLOYMENTSTATUS
,HOMELABORLEVELNAME5
,ISWFCTKEMPLICENCE
,ISWFCSSELICENCE
,ISWFCMGRLICENCE
,ISWFCSCHEDULERLIC
,USERACCOUNTNM
,USERACCOUNTSTATUS
,'HCM_Cost_Center_Manager_Name' = n2.NAME
,TIMEENTRYMETHODNM
FROM dbo.VP_PERSON p
LEFT OUTER JOIN PSHCMirror.dbo.PS_JPM_PROFILE jp
  ON SUBSTRING(jp.JPM_PROFILE_ID,7,6) = SUBSTRING(p.HOMELABORLEVELNAME5,1,6)
AND jp.JPM_JP_TYPE = 'BU_DEPT'
LEFT OUTER JOIN PSHCMirror.dbo.PS_JPM_JP_ITEMS jpi
  ON jpi.JPM_PROFILE_ID = jp.JPM_PROFILE_ID
AND jpi.JPM_CAT_TYPE = 'HRIS_CNTCT2'
LEFT OUTER JOIN 
(
SELECT n1.EMPLID, n1.NAME, 'row_nbr' = ROW_NUMBER() OVER (PARTITION BY n1.EMPLID ORDER BY n1.EFFDT DESC, n1.NAME_TYPE DESC)
FROM PSHCMirror.dbo.PS_NAMES n1
) n2
ON n2.EMPLID = jpi.JPM_PERSON_ID_1
AND n2.row_nbr = 1

WHERE USERACCOUNTSTATUS = 'Active'
AND EMPLOYMENTSTATUS = 'Active'
AND (
@Manager = 'All' OR n2.NAME IN (@Manager)
)
order by 1

我有一个SSRS报告,试图将名称列表传递给参数,默认设置为“全部”。

将参数的“默认值”设置为使用相同的查询,因为“可用值”不会起作用,因为名称很长。 (如果我有一个小列表,它会自动检查“全选”)

我知道错误来自@Manager = 'All' OR n2.NAME IN (@Manager),但我不知道有任何替代方法可以让它发挥作用。

3 个答案:

答案 0 :(得分:3)

由于GROUP BY DATE(orderDate), MONTH(orderDate)multi-value parameter,您需要在条件而不是@Manager中使用IN。尝试将WHERE子句的该部分更新为:

=

答案 1 :(得分:0)

如果要将参数传递给查询,则必须使用Join函数将值集合转换为字符串。然后,您可以使用自定义Split函数或Like运算符来检查WHERE子句中的值。

另一种选择是添加数据集过滤器。对于Expression,您可以选择NAME列。使用" In"作为运营商"。对于Value,使用如下表达式:

=Split(Join(Parameters!Manager.Value, ","), ",")

这会将所选名称的集合转换为可以检查的数组。

答案 2 :(得分:0)

我在SSIS中遇到了与#34;执行SQL任务"相同的错误。零件。在我的情况下,我没有意识到我超过约。 32k的SQL脚本字符。在这种情况下使用"浏览"按钮加载您的SQL代码或使用"脚本组件"代替。