Birt报告 - 计算与标准匹配的次数

时间:2016-08-08 14:27:31

标签: mysql report birt

╔═══╦════════════╦═════════════╗
║id ║ TV#        ║ Time        ║
╠═══╬════════════╬═════════════╣
║ 1 ║ TV1        ║ 0           ║
║ 2 ║ TV2        ║ 10          ║
║ 3 ║ TV3        ║ 0           ║
║ 4 ║ TV3        ║ 20          ║
║ 5 ║ TV3        ║ 21          ║
║...║ ...        ║ ...         ║
╚═══╩════════════╩═════════════╝

我想计算每个TV#的元素数量id,哪个时间> 0。 在这种情况下,我希望结果为:

TV1 - 0; TV2 - 1; TV3 - 2

我正在使用BIRT报告,我已经尝试了不同的方法来实现这一点,但我无法得到我想要的东西。

我尝试过不同的方式,这就是我现在正在使用的方式:

数据多维数据集,摘要字段(度量)

功能:计数

表达式:衡量[" id"]

过滤:衡量["时间"]> 0

然后我使用聚合构建器:

功能:计算总和

表达式:度量[" ID"]

过滤:衡量["时间"]> 0

汇总:GroupTV#

当我使用计数时,返回:只有0和1(当至少有一个时间> 0时,它给我" 1"到电视#),即TV1 - 0; TV2 - 1; TV3 - 1

当我使用总和时,会返回:每个电视#出现在桌面上的次数(当该频道至少有一个时间> 0时),即TV1 - 无输出; TV2 - 1; TV3 - 3

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

E.g:

SELECT tv
     , SUM(CASE WHEN time > 0 THEN 1 ELSE 0 END) x 
  FROM my_table 
 GROUP 
    BY tv;

答案 1 :(得分:0)

这两种方法都应该有效,但是在您的示例中,您要计算特定ID的出现次数,而不是'TV#'。 当然,由于id是唯一的,每个都只有一次出现。

你需要:

功能:计数

表达式:从'id'更改为'TV#'

过滤器:测量[“时间”]> 0

答案 2 :(得分:0)

只需过滤数据集,而不是在数据立方体上,或在十字标签或图表上使用过滤器。