Используйте переменные в MDX-запросе
У каждого, кто работает с многомерными запросами, рано или поздно обязательно возникает желание задействовать переменные. Но, вот беда, переменных-то в языке MDX нет (или есть, но менеджмент-студия про них не знает)!
Что же делать, когда очень хочется написать вот такую конструкцию:
Есть два универсальных способа использования переменных в MDX-запросах. По крайней мере один из них вам обязательно подойдёт.
Во-первых, вы можете формировать MDX-запрос динамически, причём средствами Transact-SQL. А для выполнения передавать его аналитическому серверу через механизм связанных серверов (Linked Server). Вот так:
Здесь MDX_AW — это связанный SSAS-сервер, ссылающийся на вашу многомерную базу данных. Результат, разумеется, вы получите в табличном виде, как и положено в языке SQL. Кстати, обратите внимание на названия столбцов.
Такое решение, конечно, нельзя назвать изящным — это классический костыль. Зато, он выручит вас в любой ситуации, это универсальный способ.
Во-вторых, в некоторых ситуациях вы можете попробовать обойтись родными средствами MDX. Зачем вам понадобились переменные в MDX-сценарии? Скорее всего для параметризации запроса. А параметризовать запрос можно и штатными средствами, если переписать его в формате XMLA:
Разумеется, для этого ваша аналитическая система должна уметь принимать XMLA-сценарии из приложения. А также учтите, что вам скорее всего придётся работать в XML-формате не только с самим запросом, но и с результатом:
Зато, в отличие от варианта со связанным OLAP-сервером, вы получите настоящий многомерный результат, а не табличный.