在我们的APEX报告中,我们使用自定义数字格式将数值舍入到给定(用户定义的精度)。例如。鉴于此数据:
create table round_test(pk number not null primary key, value number);
insert into round_test(pk, value) values (1, 0.11);
insert into round_test(pk, value) values (2, 0.19);
insert into round_test(pk, value) values (3, 0.20);
insert into round_test(pk, value) values (4, 0.21);
insert into round_test(pk, value) values (5, 0.23);
insert into round_test(pk, value) values (7, 0.28);
我已创建了一个交互式报告,以VALUE
列显示格式999D9
(为了便于说明,我添加了一个显示数据的ORIGINAL_VALUE
列没有数字格式,即完全精确 - 见下面的截图。
现在,如果我点击列标题按此列过滤,我会得到重复值(例如0.2出现四次 - 一次为0.19,0.20,0.23和0.28):
这很糟糕,但是如果我点击其中一个值,则APEX按精确值过滤而不是舍入的值:
我怎么能
注意:使用舍入值创建视图并在报告定义中使用它不是一种可行的方法,因为我们的报告包含一个自定义导出功能,允许用户以完整方式导出数据精度。
更新 报告的SQL查询非常简单:
SELECT
pk,
value,
value AS original_value
FROM round_test
APEX 4.2(我们目前使用的)和APEX 5.0(我在http://apex.oracle.com用来创建示例)的行为相同。
答案 0 :(得分:2)
要消除值列表过滤器上的重复项:
首先,你需要在应用程序上创建一个LOV - >共享组件 - >其他组件 - >价值清单
使用此SQL查询:
$(".foo").each( function () {
console.log( $(this).find('> div > input').length );
});
然后在报告属性上编辑包含'值'的列。值,并在值列表部分指定'列过滤器类型':使用命名的值列表过滤完全匹配,然后在命名的值列表',选择你的那个早些时候创建。
按舍入值过滤:
创建报告,但不是像你那样应用格式掩码(这保持了实际值,尽管在视图上应用了格式)格式化查询上的值,如下所示:
select distinct to_char(value,'999.9') d, round(value) r
FROM round_test order by 1 asc
我认为这将满足您的需求。
答案 1 :(得分:0)
理想的行为是为value
设置一个报告列。单击标题将提供标准选项,包括将显示(并允许搜索)舍入的十进制数字的过滤器。不幸的是,Apex并没有让你这么做。使用在初始报告查询中选择的不同值确定过滤器中显示的值;报告的列定义中的后续格式化仅影响值的显示方式,而不影响实际值,因此在过滤器列表中显示重复项。
我认为你的问题的本质是没有对交互式报告过滤器进行大量定制(如果你走这条路线,祝你好运),我认为你必须接受两列{{{ 1}},一个包含实际值,一个包含舍入或以其他方式格式化的值,用于过滤。
正如其他地方所建议的那样,您可以在SQL中为每个报告创建新列:
value
或者,如果您的用户愿意并且有能力,您可以向他们展示如何从SELECT
pk,
value,
to_char(value, 'fm999D9') AS formatted_value
FROM round_test
按钮创建计算列:
无论创建Actions
列的方式如何,都应该隐藏它以阻止它导致导出混乱。然后必须从formatted_value
按钮进行过滤: