将条件样式应用于带参数的交叉表

Apply a conditional style to a crosstab with parameter

我目前正在尝试应用一种样式,该样式基本上会更改交叉表中度量(详细信息)文本字段的颜色,以指示通过用户必须在报告开始时输入的参数选择的日期.以下是我遵循的步骤:

  1. 我创建了一个参数 $P{Date} 作为 java.sql.timestamp 并检查了 "is for prompting"

  2. 在我的数据集查询中创建了相同的参数 $P{Date},其信息与之前的参数相同(此数据集将用于填充交叉表)

  3. 在我的交叉表项中创建相同的参数 $P{Date},信息也与之前相同

  4. 在 "Dataset" 中的交叉表属性中,我添加了具有相同名称 "Date" 和表达式 $P{Date} 的参数,并将参数映射保留为空白

到目前为止,报告 运行 很好,数据参数适用于我的交叉表,按为参数选择的日期过滤数据。

  1. 使用以下表达式创建了我的条件样式 (Style1):

    AND(MONTH(${crosstab_month}).equals(MONTH($P{Date})),
         YEAR(${crosstab_month}).equals(YEAR($P{Date})),
          DAY(${crosstab_month}).equals(01))
    

${crosstab_month}是显示Date的列组(包含每个月的第一天,也是时间戳)

现在,当我 运行 报告似乎无法正常工作时,我将所有字段的标记设为 "styled",将 "Style and Print Details" 的标记设为 Style1。

我是不是忘记了什么?我不明白为什么这不起作用,因为如果我在它起作用的样式表达式中用 NOW() 更改 $P{Date} ...... $P{Date} 值不知何故无法正确评估为 date/timestamp?

所以我做了一个解决方法来解决这个问题,那就是改变查询以获取输入参数 $P{Date} 的值,并在我的交叉表中插入一个新列(w=0 和h=0).

之后我将样式条件更改为;

AND(MONTH(${crosstab_month}).equals(MONTH($V{ReportDate})),
 YEAR(${crosstab_month}).equals(YEAR($V{ReportDate})),
  DAY(${crosstab_month}).equals(01))

$V{ReportDate} 是交叉表上新列组的名称。

希望对您有所帮助! :) 谢谢!