SSRS表达式中连接符和去空格问题

本文详细阐述了在使用SSRS时,遇到连接符在VB语法下出现错误的问题,并提供了正确的替代方法。包括使用空格来正确区分连接符与字段,以及通过替换函数避免空值问题。此外,文章还建议了在类似情况下,参考Text里的函数进行操作以提高代码的健壮性和灵活性。

=IIF(Replace(Fields!ShortAdsRef.Value," ","")="",Fields!AdsRef.Value,Fields!AdsRef.Value+"("+Fields!ShortAdsRef.Value+")")


今天在写表达式时,本来ssrs里面是VB语法,连接符为&,但是今天用这个&符号老是出错,于是用了上面这个表达式,用+号来做连接符号,

本来用& 是不会错的,原来我犯了个错误,&前后要打一个空格不然的话,会认为这个符号跟前面字段一起的,下面是用&连接符,也正确的:


IIF(Fields!ShortAdsRef.Value = "",Fields!ShortAdsRef.Value,Fields!AdsRef.Value & "(" & Fields!ShortAdsRef.Value & ")")----注意&前后要有空格


去空格:Replace(Fields!ShortAdsRef.Value," ","")


以后可以参考Text里函数,进行操作


WITH ProcessCount AS ( -- 步骤1: 计算每个线组/节拍的工序数量 SELECT 线组, 生产节拍, COUNT(DISTINCT 工序) AS 工序数量 FROM [dbo].[ods_TPS作业组合表] WHERE 要素时间 <> '0' AND LEFT(年月,7) = '${年月}' AND 产线 = '${产线}' AND 线组 = '${线组}' AND 生产节拍 = '${TT}' GROUP BY 线组, 生产节拍 ), BaseData AS ( -- 步骤2: 原始查询逻辑 SELECT id, 年月, t.线组, 工序, 作业要素, 要素时间, COALESCE(SUM(CAST(要素时间 AS INT)) OVER ( PARTITION BY t.线组, 工序, 生产节拍 ORDER BY 要素顺序 ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING ), 0) AS 累计要素时间, CASE WHEN 自动时间 > 0 THEN 100 ELSE NULL END AS 自动目标要素时间, CASE WHEN 作业类型 = '步行作业' OR 作业要素 LIKE '%步行%' THEN 100 ELSE NULL END AS 步行目标要素时间, 自动时间, 作业类型, CONVERT(INT, 生产节拍) AS 生产节拍, CASE WHEN ROW_NUMBER() OVER ( PARTITION BY t.线组, 工序, 生产节拍 ORDER BY 要素顺序 DESC ) = 1 THEN CONVERT(INT, 生产节拍) - COALESCE(SUM(CONVERT(INT, 要素时间)) OVER ( PARTITION BY t.线组, 工序, 生产节拍 ORDER BY 要素顺序 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ), 0) - CONVERT(INT, 要素时间) ELSE NULL END AS 差距时间, CONVERT(INT, 要素顺序) AS 要素顺序, 改善类型, 产线, 机型分类, 机型, t.生产节拍 AS 生产节拍原始值 -- 保留原始值用于连接 FROM [dbo].[ods_TPS作业组合表] t WHERE 要素时间 <> '0' AND LEFT(年月,7) = '${年月}' AND 产线 = '${产线}' AND t.线组 = '${线组}' AND t.生产节拍 = '${TT}' ) -- 步骤3: 添加动态换行处理 SELECT id, 年月, 线组, 工序, -- 动态换行逻辑 CONCAT( CAST(要素顺序 AS VARCHAR), '-', CASE -- 根据工序数量设置不同换行规则 WHEN pc.工序数量 <= 16 AND LEN(作业要素) > 10 THEN SUBSTRING(作业要素, 1, 10) + CHAR(10) + SUBSTRING(作业要素, 11, LEN(作业要素)) WHEN pc.工序数量 > 16 AND pc.工序数量 <= 20 AND LEN(作业要素) > 6 THEN SUBSTRING(作业要素, 1, 6) + CHAR(10) + SUBSTRING(作业要素, 7, LEN(作业要素)) WHEN pc.工序数量 > 20 AND LEN(作业要素) > 5 THEN SUBSTRING(作业要素, 1, 5) + CHAR(10) + SUBSTRING(作业要素, 6, LEN(作业要素)) ELSE 作业要素 END ) AS 作业要素, 要素时间, 累计要素时间, 自动目标要素时间, 步行目标要素时间, 自动时间, 作业类型, 生产节拍, 差距时间, 要素顺序, 改善类型, 产线, 机型分类, 机型 FROM BaseData bd INNER JOIN ProcessCount pc ON bd.线组 = pc.线组 AND bd.生产节拍原始值 = pc.生产节拍 -- 使用原始值匹配 ORDER BY 要素顺序, CASE WHEN 工序 LIKE '[0-9][0-9]%' OR 工序 LIKE '[0-9][^0-9]%' OR 工序 LIKE '[0-9]' THEN CAST(LEFT(工序, PATINDEX('%[^0-9]%', 工序 + ' ') - 1) AS INT) END;
最新发布
11-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值