Поделиться через


Вычисляемые элементы в подзапросах выборки и вложенных кубах

Применимо к: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Вычисляемый элемент — это элемент измерения, значение которого вычисляется из выражения во время выполнения и может использоваться в подзапросах выборки и вложенных кубах, чтобы более точно определить пространство куба запроса.

Включение вычисляемых элементов в подпространстве

Свойство SubQueries строка подключения в ConnectionString или свойство DBPROPMSMDSUBQUERIES в разделе Поддерживаемые свойства XMLA (XMLA) определяет поведение или допустимость вычисляемых элементов или вычисляемых наборов для вложенных выборок или вложенных кубов. В контексте настоящего документа, если не указано иное, термин «подзапросы выборки» означает подзапросы выборки и вложенные кубы.

Свойство SubQueries может принимать следующие значения.

Значение Описание
0 Вычисляемые элементы не допускаются в подзапросах выборки и вложенных кубах.

Если при вычислении подзапроса выборки или вложенного куба присутствует ссылка на вычисляемый элемент, возникает ошибка.
1 Вычисляемые элементы допускаются в подзапросах выборки и вложенных кубах, однако в возвращаемое подпространство восходящие элементы не вводятся.
2 Вычисляемые элементы допускаются в подзапросах выборки и вложенных кубах, и в возвращаемое подпространство вводятся восходящие элементы. Кроме того, в выборке вычисляемых элементов допускается смешанная гранулярность.

Использование значений 1 или 2 свойства SubQueries позволяет использовать вычисляемые элементы для фильтрации возвращаемого подпространства подзапросов выборки.

Для пояснения концепции приведем пример: вначале создадим вычисляемый элемент, а затем подзапрос выборки, отражающий указанное выше поведение.

В следующем примере будет создан вычисляемый элемент, добавляющий [Seattle Metro] как город к иерархии [Geography].[Geography] в штате Washington.

Для правильного выполнения примера строка подключения должна содержать свойство SubQueries со значением 1, а все инструкции многомерных выражений должны выполняться в одном сеансе.

Важно!

Если вы тестируете запросы с помощью Management Studio, нажмите кнопку "Параметры" в диспетчере подключений, чтобы открыть панель дополнительных свойств строки подключения. Введите subqueries=1 или 2, чтобы разрешить вычисляемые элементы в подпространстве.

Сначала задается многомерное выражение:

  
CREATE MEMBER [Adventure Works].[Geography].[Geography].[State-Province].&[WA]&[US].[Seattle Metro Agg]   
   AS  AGGREGATE(   
                 {   
                   [Geography].[Geography].[City].&[Bellevue]&[WA]  
                 , [Geography].[Geography].[City].&[Issaquah]&[WA]  
                 , [Geography].[Geography].[City].&[Redmond]&[WA]  
                 , [Geography].[Geography].[City].&[Seattle]&[WA]  
                 }  
                )    

Затем, чтобы увидеть вычисляемые элементы, допустимые в подзапросах выборки, создается следующий запрос многомерных выражений:

Select [Date].[Calendar Year].members on 0,  
       [Geography].[Geography].allmembers on 1  
from (Select {[Geography].[Geography].[State-Province].&[WA]&[US].[Seattle Metro Agg]} on 0 from [Adventure Works])  
Where [Measures].[Reseller Sales Amount]  

Мы получим следующие результаты.

All Periods CY 2011 CY 2012 CY 2013 CY 2014
Seattle Metro Agg 2 383 545,69 $ 291 248,93 $ 763 557,02 $ 915 832,36 $ 412 907,37 $

Как было указано выше, если свойство SubQueries имеет значение 1, родительские элементы [Seattle Metro] в возвращаемом подпространстве отсутствуют, поэтому [Geography].[Geography].allmembers содержит только вычисляемый элемент.

Если тот же пример выполнить со значением свойства SubQueries в строке подключения, равным 2, то будут получены следующие результаты.

All Periods CY 2001 CY 2002 CY 2003 CY 2004
All Geographies (null) (null) (null) (null) (null)
США (null) (null) (null) (null) (null)
Вашингтон (null) (null) (null) (null) (null)
Seattle Metro Agg 2 383 545,69 $ 291 248,93 $ 763 557,02 $ 915 832,36 $ 412 907,37 $

Как отмечалось ранее, если значение свойств SubQueries равно 2, родители элемента [Seattle Metro] присутствуют в возвращаемом подпространстве, однако значения для этих элементов не существуют, поскольку для агрегатов отсутствуют регулярные элементы. Поэтому в этом примере для всех родителей вычисляемого элемента задаются значения NULL.

Чтобы лучше понять описанное выше поведение, стоит понимать, что вычисляемые элементы не включаются в агрегаты своих родителей, в отличие от регулярных элементов (см. раздел ); другими словами, фильтрация только по вычисляемым элементам приведет к тому, что родители получат пустые значения вследствие отсутствия регулярных элементов для пополнения агрегированных значений результирующего подпространства. Если к выражению фильтрации добавить регулярные элементы, то агрегированные значения будут формироваться из этих регулярных элементов. Продолжим рассмотрение примера. Добавим к той же оси, на которой отображается вычисляемый элемент, город Portland, шт. Oregon и город Spokane, шт. Washington. Многомерное выражение в этом случае будет таким:

Select [Date].[Calendar Year].members on 0,  
       [Geography].[Geography].allmembers on 1  
from (Select {  
               [Seattle Metro Agg]  
             , [Geography].[Geography].[City].&[Portland]&[OR]  
             , [Geography].[Geography].[City].&[Spokane]&[WA]  
             } on 0 from [Adventure Works]  
     )  
Where [Measures].[Reseller Sales Amount]  

Будут получены следующие результаты.

All Periods CY 2001 CY 2002 CY 2003 CY 2004
All Geographies 235 171,62 $ 419,46 $ 4996,25 $ 131 788,82 $ 97 967,09 $
США 235 171,62 $ 419,46 $ 4996,25 $ 131 788,82 $ 97 967,09 $
Орегон 30 968,25 $ 419,46 $ 4996,25 $ 17 442,97 $ 8109,56 $
Портленд 30 968,25 $ 419,46 $ 4996,25 $ 17 442,97 $ 8109,56 $
97205 30 968,25 $ 419,46 $ 4996,25 $ 17 442,97 $ 8109,56 $
Вашингтон 204 203,37 $ (null) (null) 114 345,85 $ 89 857,52 $
Spokane 204 203,37 $ (null) (null) 114 345,85 $ 89 857,52 $
99202 204 203,37 $ (null) (null) 114 345,85 $ 89 857,52 $
Seattle Metro Agg 2 383 545,69 $ 291 248,93 $ 763 557,02 $ 915 832,36 $ 412 907,37 $

В приведенных результатах агрегированные значения для [All Geographies], [United States], [Oregon] и [Washington] получаются на основе статической обработки родителей &[Portland]&[OR] и &[Spokane]&[WA]. Из вычисляемого элемента не берется ничего.

Комментарии

В выражениях подзапроса выборки или вложенного куба допускается использование только элементов, вычисляемых в сеансе, или элементов, вычисляемых глобально. Наличие в многомерном запросе элементов, вычисляемых в запросе, приведет к ошибке выполнения выражения подзапроса выборки или вложенного куба.

См. также:

ConnectionString
Подзапросы выборки в запросах
Поддерживаемые свойства XML для аналитики (XMLA)