在我们的 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 将按确切值而不是四舍五入的值进行过滤:
我怎样才能
注:使用舍入值创建 View 并在报告定义中使用它不是一种可行的方法,因为我们的报告包含自定义导出功能,允许用户以完全精度导出数据。
更新
报表的 SQL 查询非常简单:
SELECT
pk,
value,
value AS original_value
FROM round_test
该行为在 APEX 4.2(我们当前使用的)和 APEX 5.0(我在 http://apex.oracle.com 中使用以创建示例)中是相同的。
最佳答案
要消除值列表过滤器上的重复项:
首先,您需要在 Application -> Shared Components -> Other Components -> List of Values 上创建 LOV
使用这个 sql 查询:
select distinct to_char(value,'999.9') d, round(value) r
FROM round_test order by 1 asc
然后在报告属性上编辑包含“值”值的列,并在“值列表”部分中指定“列过滤器类型”:使用命名值列表过滤精确匹配,然后在“命名值列表”上选择您之前创建的那个。
按舍入值过滤:
创建报告,而不是像您一样应用格式掩码(尽管在 View 上应用了格式,但仍保持实际值)在查询上设置值的格式,如下所示:
SELECT
pk,
to_char(value,'999.9') value,
value AS original_value_
FROM round_test
我认为这将满足您的需求。
Here's a working example
关于oracle - 如何在 Oracle APEX 中正确过滤具有自定义格式的数字列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192780/