Задача SQL MDX с параметрами. SSIS - PullRequest
4 голосов
/ 08 марта 2019

Мне нужно динамически создать несколько локальных кубов в ssis, и я не знаю, как использовать параметры в этом запросе

CREATE GLOBAL CUBE test
STORAGE 'C:\test.cub'
FROM Cube_test( 
Measure [Cube_test].[Val], 
dimension [Cube_test].[Date_1] ( 
level [Date_1],     
member [Date_1].[Month].&[2],
member [Date_1].[Month].&[?] )
 )

Я могу запустить задачу sql без параметров, но когда я пытаюсь запуститьЗадача sql с параметрами выдает ошибку «неверный параметр».С SQL-запросом я могу использовать их, но не с MDX

1 Ответ

3 голосов
/ 08 марта 2019

Вместо этого используйте переменную в качестве оператора источника SQL и создайте строковую переменную с выражением, которое объединяет инструкцию MDX с параметром для запроса.Это можно сделать, заключив MDX в двойные кавычки следующим образом.\ нужно будет экранировать, как сделано ниже, но только один \ будет в результате, когда он будет проанализирован.Чтобы правильно объединить числовой параметр в оператор, он должен быть приведен к строке, которая выполняется с помощью функции (DT_STR,length,code page).Я предполагаю, что длина параметра будет не более 2 цифр, так как это месяц, таким образом, 2 используется для параметра длины функции DT_STR, и вы можете настроить его при необходимости.Следующее можно использовать в качестве выражения строковой переменной SSIS, которую затем можно использовать в качестве команды SQL для задачи «Выполнение SQL».В задаче «Выполнение SQL» измените свойство SQLSourceType на «Переменная» и выберите переменную с этим выражением в качестве SourceVariable.Вам также нужно установить значение DelayValidation в значение «Истина» в окне «Свойства» (нажмите клавишу F4) задачи «Выполнение SQL».Если переменная SSIS используется в качестве параметра MDX вместо параметра SSIS, как в примере ниже, измените @[$Package::ParameterName] на имя переменной, например @[User::VariableName].Если это параметр проекта, то Package можно заменить на Project в имени параметра с сохранением $, то есть @[$Project::ParameterName].

"CREATE GLOBAL CUBE test
STORAGE 'C:\\test.cub'
FROM Cube_test( 
Measure [Cube_test].[Val], 
dimension [Cube_test].[Date_1] ( 
level [Date_1],     
member [Date_1].[Month].&[2],
member [Date_1].[Month].&[" + (DT_STR, 2, 1252) @[$Package::ParameterName] + "] ) )"
...