Changing background color of birt report according to groups
我正在生成如嵌入图像所示的 BIRT 报告,我正在按客户分组,例如 ACM、AFL 等...
如您所见,我使用背景替代颜色作为蓝色和白色,为此我只需使用详细信息行的突出显示选项卡 as(row["__rownum"] % 2 Equal to 0)。
现在,如果我进入更复杂的阶段,例如不同组的不同颜色组合,例如组(在这种情况下为客户)黄白色,组 2 红白等......
我正在使用 this.getStyle().backgroundColor =\\'color\\',但问题在于选择各个组,可能是某种条件可以解决问题,但我迷路了
- 您的组/颜色可能相对较少,还是非常多? (答案将确定最简单的方法。)
-
@mark ..这些组只不过是报告参数...范围可以在 20-30 之间
-
@mark...让事情变得更简单,对于每个备用组,背景颜色应该改变..例如,对于第 1 组(红黄色)第 2 组(白蓝)第 3 组(再次红黄色)第 4 组(蓝色) ……
在 BIRT 中设置行背景颜色的最简单方法是在行的属性编辑器中的突出显示选项卡中将条件添加到列表中。看起来好像您已经将替代线设置为蓝色 - 通过添加具有其他颜色的额外条件,您可以相应地设置背景。这种方法在只需要少量颜色的情况下最有用,因为您必须为每种颜色设置不同的条件。
在可能需要更多颜色选择的情况下,在事件脚本中进行条件格式化会更有意义 - 您可以在此处找到示例。
编辑:在 BIRT 中添加运行组计数:
-
将聚合项添加到您的表中 - 例如,您可以通过从调色板的"快速工具"部分拖动聚合项来执行此操作。
-
在 Aggregation Builder 对话框中,将 Function 设置为 COUNT,将表达式设置为 1,将 Aggregate On 设置为要计数的组(例如 Customer)
-
插入第二个聚合项,其中 Function 设置为 RUNNINGCOUNT,表达式为 1/row[first aggregation name],Aggregate On 为 Table。
第二个聚合项将是报告中组的运行计数。
- @ mark .... 好的,它似乎正在工作,但我在这里问题 if(this.getRowData( ).getColumnValue("per_Name").toString().length() %2 == 0) { this. getStyle().backgroundColor = "黄色"; this.getStyle().color="红色"; } ---所以它为每个客户名称计算它的长度并根据长度(%2 == 0)它会应用stylles,所以报告现在取决于名称的长度......有什么方法可以让客户明智地获得索引...
-
@vibhor:你想如何确定背景颜色?
-
由于我们的名字是一个字符串而不是一个 int ,所以如果我们必须将它硬编码为 (this.getRowData( ).getColumnValue("per_Name") ==AFL) (this.getRowData( ).getColumnValue("per_Name ") ==ABCD)......对于我们必须硬编码的每个参数......如何迭代我们的客户......
-
@vibhor:我很欣赏您不想为每个客户硬编码一个单独的值。但是,我不知道您想如何确定哪些颜色应该提供给哪些客户。你希望它们是随机的吗?
-
...只是替代...客户1(蓝-白)..客户2(红-黄)再次客户3(蓝-白)..客户4(红-黄).........等等在
-
我建议设置组号的运行计数(在 SQL 或 BIRT 中,以最方便的为准)并使颜色以它的模数为条件 2,以及行号的模数为 2。
-
....为迟到的回复道歉...如果我们在 sql 中做同样的事情,那么它会将我们的数据(客户)撕成一半......所以 Sql 不是一个好主意,......使用 BIRT 我不知道如何实现这一点.....
-
"如果我们在 sql 中做同样的事情,它会将我们的数据(客户)撕成一半" - 不一定;这取决于您使用的 SQL 版本以及它是否支持分析函数。请参阅修改后的答案以了解如何在 BIRT 中执行此操作。