Определение содержимого оси среза (многомерные выражения)
Ось среза фильтрует данные, возвращаемые инструкцией многомерных выражений SELECT. При этом возвращаются только данные, пересекающиеся с заданными элементами. Ее можно представить как дополнительную невидимую ось запроса. Ось среза определяется в предложении WHERE инструкции многомерных выражений SELECT.
Синтаксис определения оси среза
Для явного определения оси среза используется следующий синтаксис в инструкции многомерных выражений <SELECT slicer axis clause>.
<SELECT slicer axis clause> ::= WHERE Set_Expression
В приведенном синтаксисе определения оси среза аргумент Set_Expression может принимать либо кортежное выражение, интерпретируемое как набор при вычислении предложения, либо выражение набора. Если задано выражение набора, язык многомерных выражений пытается вычислить набор с использованием статистического вычисления по результирующим ячейкам в каждом кортеже набора. Иными словами, используется функция Aggregate для набора, при этом каждая мера статистически обрабатывается с помощью связанной статистической функции. Кроме того, если выражение набора нельзя выразить в виде перекрестного соединения элементов иерархии атрибута, при вычислении в языке многомерных выражений ячейки, находящиеся за пределами выражения набора, с помощью которого определена ось среза, интерпретируются как имеющие значения NULL.
Важно! |
---|
В отличие от предложения WHERE в SQL, предложение WHERE инструкции многомерного выражения SELECT никогда не фильтрует непосредственно данные, возвращаемые в оси строк запроса. Для фильтрации содержимого осей строк или столбцов запроса можно использовать различные функции многомерных выражений, такие как FILTER, NONEMPTY или TOPCOUNT. |
Неявная ось среза
Если элемент иерархии в кубе не включен явно в ось запроса, элемент по умолчанию этой иерархии неявно включается в ось среза. Дополнительные сведения об элементах по умолчанию см. в разделе Определение элемента по умолчанию.
Примеры
Следующий запрос не содержит предложения WHERE. Он возвращает значение меры объема продаж в Интернете (Internet Sales Amount) за все календарные годы (Calendar Year):
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
[Date].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
Добавление предложения WHERE, как показано далее:
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
[Date].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE([Customer].[Customer Geography].[Country].&[United States])
не изменяет содержимое, возвращаемое в строках или столбцах запроса; изменяются только значения, возвращаемые в каждой из ячеек. В этом примере для запроса выполняется срез таким образом, что он возвращает значение величины продаж в Интернете (Internet Sales Amount) за все календарные годы (Calendar Year), но только для клиентов (Customer), проживающих в США (United States). В предложение WHERE можно добавить несколько элементов из различных иерархий. В следующем запросе отображается значение величины продаж в Интернете (Internet Sales Amount) за все календарные годы (Calendar Year) для клиентов (Customer), проживающих в США (United States) и приобретавших продукты (Product) в категории (Category) велосипедов (Bikes):
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
[Date].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE([Customer].[Customer Geography].[Country].&[United States], [Product].[Category].&[1])
Если необходимо использовать несколько значений из одной и той же иерархии, в предложение WHERE следует включить набор. Например, следующий запрос отображает величину продаж в Интернете (Internet Sales Amount) за все календарные годы (Calendar Year) для клиентов (Customer), проживающих в США (United States) или в Великобритании (United Kingdom) и приобретавших продукты (Product) в категории (Category) велосипедов (Bikes):
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
[Date].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE(
{[Customer].[Customer Geography].[Country].&[United States]
, [Customer].[Customer Geography].[Country].&[United Kingdom]}
, [Product].[Category].&[1])
Как уже упоминалось, при использовании набора в предложении WHERE неявно объединяются значения для всех элементов набора. В этом случае запрос отображает в каждой из ячеек совокупные значения для США (United States) и Великобритании (United Kingdom).