在Crystal Reports中对“交叉表”列进行排序

时间:2013-11-26 19:01:49

标签: sorting crystal-reports report

我一直在Crystal Reports项目中工作,我必须在几个月内显示按行列出的值的总和。

我要从参数中的指定日期开始一年的范围。所以我使用了Cross-Tabs,按@MONTH_DISPLAY列分组,定义为:month({ASIENTOI.DATE})。 重要的是,我要从最早的一个月到一年的时间对列进行排序。意思是: 如果用户将日期设置为10-07-12,我将显示如下排序的列: 7月(2012年) - ... - 6月(2013年)。

问题是Crystal Reports设置了这样的范围: Jan(2013) - ... - June(2013) - July(2012) - ... - December(2012)。

我无法找到修改排序的方法。

2 个答案:

答案 0 :(得分:4)

通过设计师对交叉表列进行排序的唯一方法是在降序或升序之间进行选择,这意味着水晶报表将按字母顺序对字段进行排序。

一种可能的解决方法是,例如,在您要在数据源中订购的字符串之前放置带下划线的数字(如01_July(2012),02_August(2012)... 13_June(2013))并使用升序,然后隐藏数字,进入“交叉表专家”部分,在交叉表选项卡上选择列下的“组选项”(抱歉,我只有意大利语) Group option

并在选项标签上选择以下选项

Option tab

单击公式按钮并使用功能

Right(yourField,Length(yourField)-3)

排除前缀,因此您不会在交叉表列上显示“01_July(2012)”,而是“July(2012)”。这应该可以解决问题

答案 1 :(得分:0)

另一个有用的解决方法是。

创建一个新公式说 column1 = ToText({yourField}, "yyyy") + '-' + ToText({yourField},"MM")。 将此字段用作交​​叉表列。

现在您的交叉表列将排序为

2020-01 | 2020-02 | 2020-03 |...

现在交叉表专家>列>组选项>选项卡:选项>✓自定义组名字段>✓使用公式作为组名。

添加Left({@column1}, 5) & MonthName(ToNumber(Right({@column1}, 2)),True) 最终结果

2020-Jan | 2020-Feb | 2020-Mar |...

根据月份日期排序列,但按月份名称打印!