╔═══╦════════════╦═════════════╗
║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
有人可以帮助我吗?
答案 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)
只需过滤数据集,而不是在数据立方体上,或在十字标签或图表上使用过滤器。