我正在 Oracle BIEE (11.1) 中创建仪表板,并需要根据用户输入创建日期间隔列。例如,用户选择今天的日期,并且该列根据过滤器对这些值运行计算。该过滤器将按照从两年前到一年前的日期,返回一年前的一年结果。
这是在 Oracle BIEE 应用程序中,我无权直接更改数据库。所以我必须在应用程序端和分析中执行此操作。
下面是条件选项卡上计算列的 SQL。 “SUM(CASE”工作正常,但我的过滤器有问题。
FILTER(SUM(CASE WHEN "Violations"."Current status of violation in the
adjudication process" = 'A' OR "Violations"."Current status of violation in
the adjudication process" = 'D' OR "Violations"."Current status of violation
in the adjudication process" = 'V' THEN 1 ELSE 0 END) USING
(("Violations"."Violation Date" IN ("Violations"."Violation Date" >=
TIMESTAMPADD(SQL_TSI_MONTH,-24, DATE'@{q1}'))))
我收到的错误: 公式语法无效。 [nQSError: 10058] 发生一般错误。 [nQSError: 43113] 从 OBIS 返回的消息。 [nQSError: 27002] Near <>=>: 语法错误 [nQSError: 26012]。请让系统管理员查看日志以获取有关此错误的更多详细信息。 (HY000) 发出 SQL: SELECT FILTER(SUM(CASE WHEN "Violations"."当前裁决过程中的违规状态"= 'A' OR "Violations"."当前裁决过程中的违规状态"= 'D' OR "Violations "."裁决过程中违规的当前状态"= 'V' THEN 1 ELSE 0 END) USING (("违规"."违规日期"IN ("违规"."违规日期">= TIMESTAMPADD(SQL_TSI_MONTH,- 24,日期'')))) 来自“FIC - ECB 违规通知”
我是 Oracle BI 的新手,但知道这应该是可能的。有什么建议吗?
最佳答案
我的解决方案:
FILTER(SUM(CASE WHEN "Violations"."Current status of violation in the
adjudication process" = 'A' OR "Violations"."Current status of violation in
the adjudication process" = 'D' OR "Violations"."Current status of violation
in the adjudication process" = 'V' THEN 1 ELSE 0 END) USING
("Violations"."Violation Date" BETWEEN TIMESTAMPADD(SQL_TSI_MONTH, -18,date
'@{q1}') AND TIMESTAMPADD(SQL_TSI_MONTH, -6,date '@{q1}')))
我的目标是根据用户输入创建一个时期。解决方案是在用户变量之前添加前面的“date”函数,并使用“BETWEEN”函数而不是“<=/=>”。我还必须将“q1”设置为变量提示而不是列变量。您可以在 oracle BI 的过滤器部分或单击列时在编辑公式部分运行此命令。
关于mysql - 使用 SQL Oracle BIEE 根据用户输入过滤计算列 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31620116/