SSRS中带连字符的订单编号分组排序问题求助
SSRS中带连字符的订单编号分组排序问题求助
嗨,我之前也碰到过一模一样的问题!这种带连字符的编号直接排序或者只取前半部分排序肯定达不到预期,得拆成前后两段数字分别处理才行,给你详细说下解决办法:
为什么之前的方法不行?
- 直接按字符串排序:系统会逐字符比较,
"10-"的首字符是1,比"3-"的3ASCII码小,所以会排在前面,完全不符合数字排序逻辑。 - 用
Val(Fields!apt.Value):这个函数只会提取字符串开头的连续数字,也就是连字符前面的部分,后缀的数字根本没参与排序,所以同前缀的编号会乱序。
正确的排序方法
我们需要把编号拆成前缀数字和后缀数字两部分,分别作为排序条件,步骤如下:
- 在SSRS报表设计界面,找到需要排序的分组,右键点击组,选择「组属性」。
- 在弹出的窗口中切换到「排序」选项卡。
- 点击「添加」按钮,设置第一个排序条件:
- 排序依据输入表达式:
=Val(Split(Fields!apt.Value, "-")(0)) - 排序顺序选择「升序」
- 排序依据输入表达式:
- 再次点击「添加」按钮,设置第二个排序条件:
- 排序依据输入表达式:
=Val(Split(Fields!apt.Value, "-")(1)) - 排序顺序同样选择「升序」
- 排序依据输入表达式:
这样设置后,报表会先按前缀数字从小到大排序,前缀相同的情况下再按后缀数字排序,正好能得到你想要的顺序:3-102 → 3-202 → 10-102 → 10-502 → 12-802。
这种拆分排序的方法非常稳妥,不管后缀数字是几位都能正常工作,比把前后缀拼接成大数字的方法(比如Val(Split(...)(0))*1000 + Val(Split(...)(1)))更靠谱,不会因为后缀位数变化出问题。
备注:内容来源于stack exchange,提问作者lal
相关产品推荐
相关产品推荐

