Вычисляемые элементы в подзапросах выборки и вложенных кубах
В предыдущих версиях вычисляемые элементы не допускались в подзапросах выборки и вложенных кубах. Тем не менее, начиная с версии SQL Server 2008, они разрешены и включаются свойством соединения. Кроме того, в SQL Server 2008 R2 определяется новое поведение вычисляемых элементов в подзапросах выборки и вложенных кубах.
Вычисляемые элементы в подзапросах выборки и вложенных кубах
Свойство строки подключения SubQueries в свойстве ConnectionString или свойство DBPROPMSMDSUBQUERIES в свойствах Поддерживаемые свойства XML для аналитики (XMLA) определяет поведение или разрешаемое использование вычисляемых элементов или вычисляемых наборов в подзапросах выборки и вложенных кубах. В контексте настоящего документа, если не указано иное, термин «подзапросы выборки» означает подзапросы выборки и вложенные кубы.
Свойство SubQueries может принимать следующие значения.
Значение |
Описание |
0 |
Вычисляемые элементы не допускаются в подзапросах выборки и вложенных кубах. Если при вычислении подзапроса выборки или вложенного куба присутствует ссылка на вычисляемый элемент, возникает ошибка. |
1 |
Вычисляемые элементы допускаются в подзапросах выборки и вложенных кубах, однако в возвращаемое подпространство восходящие элементы не вводятся. |
2 |
Вычисляемые элементы допускаются в подзапросах выборки и вложенных кубах, и в возвращаемое подпространство вводятся восходящие элементы. Кроме того, в выборке вычисляемых элементов допускается смешанная гранулярность. |
Использование значений 1 или 2 свойства SubQueries позволяет использовать вычисляемые элементы для фильтрации возвращаемого подпространства подзапросов выборки.
Для пояснения концепции приведем пример: вначале создадим вычисляемый элемент, а затем подзапрос выборки, отражающий указанное выше поведение.
В следующем примере будет создан вычисляемый элемент, добавляющий [Seattle Metro] как город к иерархии [Geography].[Geography] в штате Washington.
Для правильного выполнения примера строка подключения должна содержать свойство SubQueries со значением 1, а все инструкции многомерных выражений должны выполняться в одном сеансе.
Сначала задается многомерное выражение:
//Remember to set Subqueries=1 in the connection string prior
//to issue these commands
//--> AS2008 behavior
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 2001 |
CY 2002 |
CY 2003 |
CY 2004 |
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) |
United States |
(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.
Чтобы лучше понять описанное выше поведение, необходимо помнить, что вычисляемые элементы не включаются в агрегаты своих родителей, в отличие от регулярных элементов (см. раздел Calculated Members and Named Sets); другими словами, фильтрация только по вычисляемым элементам приведет к тому, что родители получат пустые значения вследствие отсутствия регулярных элементов для пополнения агрегированных значений результирующего подпространства. Если к выражению фильтрации добавить регулярные элементы, то агрегированные значения будут формироваться из этих регулярных элементов. Продолжим рассмотрение примера. Добавим к той же оси, на которой отображается вычисляемый элемент, город 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 |
$4,996.25 |
$131,788.82 |
$97,967.09 |
United States |
$235,171.62 |
$419.46 |
$4,996.25 |
$131,788.82 |
$97,967.09 |
Орегон |
$30,968.25 |
$419.46 |
$4,996.25 |
$17,442.97 |
$8,109.56 |
Portland |
$30,968.25 |
$419.46 |
$4,996.25 |
$17,442.97 |
$8,109.56 |
97205 |
$30,968.25 |
$419.46 |
$4,996.25 |
$17,442.97 |
$8,109.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]. Из вычисляемого элемента не берется ничего.
Замечания
В выражениях подзапроса выборки или вложенного куба допускается использование только элементов, вычисляемых в сеансе, или элементов, вычисляемых глобально. Наличие в многомерном запросе элементов, вычисляемых в запросе, приведет к ошибке выполнения выражения подзапроса выборки или вложенного куба.
См. также
Справочник
Поддерживаемые свойства XML для аналитики (XMLA)