如何从交叉表中删除null / empty列?

时间:2017-09-15 04:49:59

标签: jasper-reports crosstab

我的布局中有一个交叉标签元素。列组中的一个值为null,我不希望在输出中显示具有空值的列。

我尝试在空值时检查空白并在表达式属性时修改print。但它所做的只是用空白替换空值,但列仍然在输出中。

当前输出

enter image description here

预期输出

enter image description here

1 个答案:

答案 0 :(得分:1)

要将列标题中的名称从null更改为其他名称,您可以修改bucketExpression

<bucketExpression><![CDATA[($F{myField==null}?"New name":$F{myField})]]></bucketExpression>

使用此功能,您还可以将值移动到新的存储桶(列)中。

如果您想删除整个列,AFIK没有其他方法可以在将数据源传递给交叉表之前过滤掉数据源中的空值。

选项包括:

  • 如果您正在使用sql数据源,只需在where子句中添加字段,对于类似WHERE myField is not null

  • 的mysql
  • 在数据源上使用filterExpression,例如

    <filterExpression><![CDATA[($F{myField}!=null)]]></filterExpression> 
    
  • 开发一个自定义JRDatasource包装数据源,如果记录的值为null,则该数据源会忽略并跳转。

结论:要删除列,您需要先将数据源中的记录传递给交叉表。