我正在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]在<> =>附近:语法错误[nQSError:26012]。请让您的系统管理员查看日志以获取有关此错误的更多详细信息。 (HY000) SQL发布:选择过滤器(SUM)(时间为#34;违规情况"。"判决过程中违规的当前状态" =' A' OR"违规&#34 34;。"裁决过程中违规的当前状态" =' D' OR"违规"。"裁决过程中违规的当前状态" 34; =' V'那么1结束0结束)使用(("违规"。"违规日期" IN("违规"。& #34;违规日期"> = TIMESTAMPADD(SQL_TSI_MONTH,-24,DATE''))))FROM" FIC - ECB违规通知"
我是Oracle BI的新手,但我知道这应该是可行的。有什么建议吗?
答案 0 :(得分:0)
我的解决方案:
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}')))
我的目标是根据用户输入创建一个句点。解决方案是添加前面的"日期"在用户变量之前运行并使用' BETWEEN'功能而不是"< = / =>。"我还必须制作" q1"变量提示而不是列变量。您可以在oracle BI的过滤器部分或在单击列时在编辑公式部分中运行它。