Значения диапазона дат или столбцов, введенные в приглашении, необходимо использовать в качестве переменных в модифицированном SQL Spotfire IL.

Мне нужно использовать запрашиваемый ввод диапазона дат/любого столбца, который будет использоваться в качестве переменной в модифицированной функции 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')) )) )

Мне нужно выше, где условия должны быть добавлены в информационную ссылку, измененную SQL с параметром, подобным этому

WHERE xxxxx.yyyyy = xxxxx.yyyyy


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

Дайте мне знать, если потребуются дополнительные разъяснения.


person direwolf    schedule 06.07.2016    source источник
comment
Обычно с этим лучше справляется процедура. Вы случайно не можете преобразовать свой VIEW в STORED PROCEDURE? Если нет, мы можем работать с представлением, но, поскольку вы его параметризуете, процедура имеет больше смысла.   -  person scsimon    schedule 06.07.2016
comment
Я не очень привык к процедуре и надеюсь найти способ с самим представлением   -  person direwolf    schedule 07.07.2016


Ответы (1)


Это будет работать только для одного условия. То есть >= или ‹= для всех дат в столбце xxxxx.yyyy. Таким образом, если вы ОБЯЗАНЫ использовать представление, вам необходимо использовать подсказки в дизайнере информации. Вот как:

  1. Откройте информационную ссылку в информационном дизайнере.
  2. Оставьте свой SQL в покое. Установите диапазон дат на самый большой диапазон, который вам нужен.
  3. В разделе Подсказки нажмите Добавить подсказку для столбца xxxxx.yyyy.
  4. Установите для параметра Тип подсказки значение Диапазон и установите флажок Обязательно.

Теперь добавьте информационную ссылку к вашему анализу...

  1. Когда откроется окно запроса, нажмите кнопку Использовать по требованию внизу. Выберите OK/Готово
  2. На панели инструментов выберите Правка > Свойства таблицы данных и выберите таблицу данных.
  3. Нажмите кнопку Настройки в разделе Тип данных на вкладке Общие.
  4. Выделите столбец xxxxx.yyyy и нажмите кнопку Определить ввод.
  5. Выберите Значения (фиксированные/свойства/выражение) в раскрывающемся списке Ввод для выбранного параметра.
  6. Выберите переключатель Свойство и нажмите кнопку Выбрать.
  7. Нажмите Создать и создайте элемент управления свойством типа DATE, который вы будете использовать в текстовой области.

Опять же, это не идеальный способ. Если вы ДЕЙСТВИТЕЛЬНО хотите использовать несколько параметров в нескольких условиях, нам нужно преобразовать ваше представление в процедуру или функцию с табличным значением. это не трудно.


ИЗМЕНИТЬ

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.
person scsimon    schedule 07.07.2016
comment
Спасибо за информацию. Я хотел знать, возможно ли создавать переменные и использовать их на уровне информационной ссылки. Я знаю о настройке «Данные по запросу», но я хотел, чтобы все расчеты выполнялись в бэкэнде, и кажется, что процесс/функции будут лучше подходить, поскольку у меня есть несколько подзапросов с одинаковыми условиями. Я не умею писать сложные функции, и это будет проблемой. - person direwolf; 08.07.2016
comment
Ну, вы можете использовать этот же метод и задать им значения по умолчанию, и пользователю никогда не будет предложено. Если вы можете вставить свой код для вашего представления, мы можем создать процедуру - person scsimon; 08.07.2016
comment
спасибо за помощь, но не могу использовать код публично, постараюсь найти другой способ - person direwolf; 13.07.2016
comment
Есть много примеров того, как превратить это в процедуру. Я отредактирую свой ответ, чтобы дать вам пример. - person scsimon; 13.07.2016
comment
Я могу выполнить свое требование, используя ?param в IL, изменив SQL. Единственная проблема в том, что это одноразовая подсказка, когда данные открываются из IL, она не работает как подсказка, в которой мы можем указывать разные значения каждый раз, когда открываем отчет. Есть ли способ, где мы можем установить параметр ?param в данных по требованию, чтобы новые значения можно было указывать каждый раз, когда отчет открывается? - person direwolf; 15.07.2016
comment
Это сработало! У меня была проблема, когда отчет с параметром был открыт в веб-плеере, но он просыпался при открытии в клиенте. Определенный параметр виден в данных по запросу, и я смог добавить его в элемент управления свойствами поля ввода [несколько строк]. Один вход дал желаемый результат. Теперь я вернулся к исходной точке. Для строкового свойства можно ввести несколько строк, и я прочитал это в справке. Я не могу вводить несколько строк ввода, и при вводе вывод не приходит, но с одним вводом это происходит. На данный момент я ввожу номер [например, 134433] в качестве строкового ввода для параметра. Требуется несколько строк i/p для работы - person direwolf; 15.07.2016
comment
Вам нужно либо использовать несколько параметров, либо использовать параметр с разделителями-запятыми, и в вашей процедуре вы вызовете функцию разделения строки, которая разобьет каждое значение, разделенное запятыми, на таблицу с 1 столбцом, например массив, для объединения в ваш оператор SQL. Это слишком долго, чтобы объяснять в комментарии. Я объяснил довольно немного в ответ на ваш оригинальный пост. - person scsimon; 15.07.2016
comment
Наконец, я близок к своему rqmt, используя функцию, поскольку ее было проще реализовать. Теперь моя проблема в том, что я не могу сделать параметр, объявленный как дата, чтобы получить i/p в формате «мм/дд/гггг». Тот же параметр, объявленный как varchar2, мог получать данные через данные по запросу, но для получения даты в приглашении мне нужно добавить столбец даты, и Spotfire не смог принять его как строку и передать в параметр функции. . Дайте мне знать, если объяснение расплывчато, потому что я могу задать ограниченное количество вопросов в стеке, постараюсь уточнить мою проблему там. Ur exp с функцией оракула поможет решить проблему - person direwolf; 19.07.2016
comment
@direwolf Я бы открыл НОВЫЙ вопрос по этой проблеме с параметром, чтобы вы могли уточнить свою проблему. Кроме того, я предлагаю принять этот ответ для будущих сообщений, если он ответил на ваш вопрос, или проголосовать за него, если он был полезен. Вот почему мы помогаем. - person scsimon; 19.07.2016