0

我是画面参数的新手。我正在尝试执行以下查询,但不知何故它给了我缺少括号的错误。

SELECT 

 CASE 
    WHEN <Parameters.Timeframe> = 'YTD'
    THEN TO_CHAR(to_date('01-JAN-' || to_char(sysdate, 'YYYY'), 'dd-mon-yyyy')) 

    WHEN <Parameters.Timeframe> = 'MTD'
    THEN TO_CHAR(TO_DATE('01-' || TO_CHAR(SYSDATE,'MON-YYYY'),'DD-MON-YYYY'))

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 1 
    THEN TO_CHAR(TO_DATE('01-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY'))

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 2 
    THEN TO_CHAR(TO_DATE('04-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY'))

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 3 
    THEN TO_CHAR(TO_DATE('07-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY'))

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 4 
    THEN TO_CHAR(TO_DATE('10-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY'))

    ELSE
    TO_CHAR(SYSDATE) 
    END as DATE_RANGE_START

    FROM table a

where 
    a.created_date  >= CASE 
    WHEN <Parameters.Timeframe> = 'YTD'
    THEN to_date('01-JAN-' || to_char(sysdate, 'YYYY'), 'dd-mon-yyyy') 

    WHEN <Parameters.Timeframe> = 'MTD'
    THEN TO_DATE('01-' || TO_CHAR(SYSDATE,'MON-YYYY'),'DD-MON-YYYY')

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 1 
    THEN TO_DATE('01-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY')

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 2 
    THEN TO_DATE('04-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY')

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 3 
    THEN TO_DATE('07-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY')

    WHEN <Parameters.Timeframe> = 'QTD' and TO_CHAR(SYSDATE,'Q') = 4 
    THEN TO_DATE('10-01-' || TO_CHAR(SYSDATE,'YYYY'),'MM-DD-YYYY')

    ELSE
    SYSDATE 
        END 

and a.created_date  <= sysdate

我该如何解决

4

1 回答 1

0

从 Tableau 中获得最大价值的一般建议 - 避免将 SQL 输入 Tableau。这适用于数据连接中的自定义 SQL 或在计算字段中调用 RAW SQL 函数。

这并不意味着这些功能没有有效和重要的用途,但它们相对较少。大多数情况下,这表明有人正在恢复使用手工编码的 SQL,因为他们已经理解它,而不是花时间学习 Tableau。这种方法通常不会带来最好的结果。

相反,如果您找到与您要实现的概念相对应的 Tableau 功能,您通常会以更大的灵活性和效率完成相同的结果。简而言之,除非您别无选择,否则请让 Tableau 为您的查询生成特定的 SQL。

Tableau 对过滤、截断、格式化和绘制日期值的不同方式提供各种支持。

尝试直接连接到您的表 A,并将 create_date 放在过滤器架子上,并显示一个快速过滤器以方便调整过滤条件。根据您将 create_date 视为过滤器架上的连续字段还是离散字段,您将获得不同类型的选择。根据您是否选择将 create_date 截断为日、月、季度或年,您将始终得到不同的结果。

在您的情况下,我会尝试将 create_date 视为过滤器架上的连续(绿色)精确日期(不截断),然后使用开始日期、范围或期间快速过滤器。您可以通过单击过滤器右上角的黑色三角形来调整快速过滤器类型。

如果没有任何内置过滤器适合您的需求,您可以定义一个布尔值计算字段,该字段引用您的参数并确定是否应包含日期,然后将该字段放在过滤器架上。

您放在过滤器架子上的内容会影响生成的 SQL 的 where 和 having 子句

于 2016-02-13T19:22:08.903 回答