在Prompt中输入的日期范围或列值需要在Spotfire IL修改的SQL中用作变量

时间:2016-07-06 13:19:15

标签: spotfire

我需要使用日期范围/任何列的提示输入作为信息链接的修改后的SQl功能中的变量。我有一些使用多个条件的复杂查询,我无法将它们保留在视图中,并希望使用此变量在修改后的SQL中添加这些条件。

这是一个示例SQL,我需要使用变量/参数而不是给定的日期

SELECT xxxxx.yyyy

  FROM xxxxx, xxxxx, xxxxx, xxxxx

WHERE xxxxx.yyyyy = xxxxx.yyyyy


   AND ( ((    xxxxx.yyyy >= (TO_DATE ('11/01/2015', 'MM/DD/YYYY'))
             AND xxxxx.yyyy <  (TO_DATE ('12/1/2015', 'MM/DD/YYYY'))
             AND xxxxx.zzzzz >=    (TO_DATE ('11/01/2015', 'MM/DD/YYYY'))
             AND xxxxx.zzzzz < (TO_DATE ('12/1/2015', 'MM/DD/YYYY')) ))

        OR ((    xxxxx.zzzzz >= (TO_DATE ('11/01/2015', 'MM/DD/YYYY'))
             AND xxxxx.zzzzz < (TO_DATE ('12/1/2015', 'MM/DD/YYYY'))
             AND xxxxx.yyyy =  (TO_DATE ('01/01/1753', 'MM/DD/YYYY')) ))

        OR ((    xxxxx.zzzzz >=  (TO_DATE ('11/01/2015', 'MM/DD/YYYY'))
             AND xxxxx.zzzzz < (TO_DATE ('12/1/2015', 'MM/DD/YYYY'))
             AND xxxxx.yyyy > (TO_DATE ('10/15/2015', 'MM/DD/YYYY'))
             AND xxxxx.yyyy <  (TO_DATE ('12/1/2015', 'MM/DD/YYYY')) )) )

我需要上面那些要添加到Information链接中的条件修改了SQL,参数就像这样

WHERE xxxxx.yyyyy = xxxxx.yyyyy


       AND ( ((    xxxxx.yyyy >= @parameter1
                 AND xxxxx.yyyy <  @parameter2
                 AND xxxxx.zzzzz >=    @parameter1
                 AND xxxxx.zzzzz < @parameter2

如果需要进一步说明,请与我们联系。

1 个答案:

答案 0 :(得分:1)

这只适用于一种情况。对于 xxxxx.yyyy 列中的所有日期,这都是&gt; =或&lt; =。因此,如果您必须使用视图,那么您需要在信息设计器中使用提示。方法如下:

  1. 在信息设计器中打开信息链接
  2. 保持您的SQL独处。将日期范围设置为您需要的最大范围
  3. 提示部分下,添加 xxxxx.yyyy 列的提示
  4. 提示类型设置为范围,然后选中必填
  5. 现在,将信息链接添加到您的分析......

    1. 当提示窗口打开时,选择底部的使用按需按钮。选择确定/完成
    2. 在工具栏上转到编辑&gt;数据表属性并选择您的数据表
    3. 常规标签
    4. 中选择数据类型下的设置按钮
    5. 突出显示 xxxxx.yyyy 列,然后点击定义输入按钮
    6. 从下拉列表中选择值(固定/属性/表达式) 所选参数的输入
    7. 选择属性单选按钮,然后单击选择按钮
    8. 点击新建并创建一个DATE类型的属性控件,您将在文本区域中使用
    9. 同样,这不是理想的方式。如果您真的想在多个条件中使用多个参数,我们需要将您的视图转换为过程或表值函数。它并不难。

      修改

      CREATE PROCEDURE dbo.myProcedure(@parameter1 datetime, @parameter2 datetime)
      AS
      
      SELECT xxxxx.yyyy
      
      FROM xxxxx, xxxxx, xxxxx, xxxxx
      
      WHERE xxxxx.yyyyy = xxxxx.yyyyy
      
           AND xxxxx.yyyy >= @parameter1
           AND xxxxx.yyyy < @parameter2
           AND xxxxx.zzzzz >= @parameter1
           AND xxxxx.zzzzz < @parameter2
      

      然后,您可以通过在新的SSMS窗口中输入来测试执行。

      EXEC dbo.myProcedure '4/1/2016','7/1/2016' --or what ever dates you want to pass in.