Многомерное выражение задачи SQL с параметрами. SSIS

#sql-server #ssis #mdx #ssis-2012 #mdx-query

#sql-сервер #ssis #многомерные выражения #ssis-2012 #многомерное выражение-запрос

Вопрос:

Мне нужно динамически создать несколько локальных кубов в 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].amp;[2],
member [Date_1].[Month].amp;[?] )
 )
  

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

Комментарии:

1. попробуйте создать его как выражение вместо использования ‘?’

Ответ №1:

Вместо этого используйте переменную в качестве инструкции источника SQL и создайте строковую переменную с выражением, которое объединяет многомерное выражение с параметром для запроса. Это можно сделать, заключив многомерное выражение в двойные кавычки следующим образом. Необходимо будет экранировать, как показано ниже, но при анализе в результате будет только один код. Чтобы правильно объединить числовой параметр в инструкцию, он должен быть преобразован в строку, что выполняется с помощью (DT_STR,length,code page) функции. Я предполагаю, что длина параметра будет не более 2 цифр, поскольку это месяц, таким образом, 2 используется для параметра длины DT_STR функции, и вы можете настроить это по мере необходимости. Следующее может быть использовано в качестве выражения строковой переменной SSIS, которая затем может быть использована в качестве команды SQL для выполнения задачи SQL. При выполнении задачи SQL измените SQLSourceType свойство на переменную и выберите переменную с этим выражением в качестве SourceVariable . Вы также захотите установить DelayValidation значение true в окне свойств (нажмите F4) задачи Execute SQL. Если в качестве параметра многомерных выражений используется переменная SSIS вместо параметра 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].amp;[2],
member [Date_1].[Month].amp;["   (DT_STR, 2, 1252) @[$Package::ParameterName]   "] ) )"