1

dynamicReports で jasperReports を使用しており、クロス集計レポートを作成したいと考えています。これまでのところ、数値の列をrowGroupsまたはcolumnGroupsに追加すると、このエラーが発生することがわかりました。これが私が得たものであり、理由がわかりません。これを解決する方法もわかりません。

エラーは次のとおりです。

The bucket expression values are not comparable and no comparator specified

私のコードは次のとおりです。

    CrosstabValues crosstabValues = report.getCrosstab().getCrosstabValues();
    Collection<CrosstabRowGroupBuilder> rowGroup = generateRowGroup(crosstabValues);
    Collection<CrosstabColumnGroupBuilder> columnGroup = generateColumnGroup(crosstabValues);
    Collection<CrosstabMeasureBuilder> measures = generateMeasures(crosstabValues);

    CrosstabBuilder crosstab = ctab.crosstab();

    for(CrosstabRowGroupBuilder row : rowGroup)
        crosstab.addRowGroup(row);
    for(CrosstabColumnGroupBuilder columnGroupBuilder : columnGroup)
        crosstab.addColumnGroup(columnGroupBuilder);
    for(CrosstabMeasureBuilder measure : measures)
        crosstab.addMeasure(measure);

    crosstab.headerCell(cmp.text(crosstabValues.getHeader())
    .setStyle(getCrosstabHeaderCellStyle(report.getTemplate().getReportTemplateValues())));
4

2 に答える 2

2

問題は、私がこのメソッドに与えていたクラスでした:

CrosstabRowGroupBuilder cTabRow = ctab.rowGroup(column.getName()
, getColumnTypeClass(column));

私はすべての数値データに Number クラスを使用していました。面白いことに、メジャーでは機能しましたが、rowGroup または columnGroup では機能しませんでした。それが私が混乱した理由です。

今では Integer.Class または Long.Class でうまく動作します。

于 2014-03-01T12:49:27.933 に答える
0

Crosstab は、 rowHeader または columnHeaderを表示する順序を認識している必要があります。また、クロスタブは、クロスタブのどのセルにメジャーを配置するかを認識している必要があります。crosstab がrowGroup (および ColumnGroup) 値を比較できる場合にのみ可能です。

rowGroup と columnGroup で使用されるクラスは、implements Comparableインターフェイスする必要があります

于 2014-02-28T07:10:53.110 に答える