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


Ключевые понятия многомерных выражений (многомерные выражения)

Многомерные выражения применяются для запросов многомерных данных или для работы с кубами. Сначала необходимо ознакомиться с основными понятиями и терминами служб MicrosoftSQL ServerAnalysis Services, связанными с измерениями. В следующем разделе содержится краткое описание основных понятий и терминов, связанных с многомерным моделированием, которые необходимы для работы. В последующих разделах демонстрируется применение этих понятий.

Дополнительные сведения см. в разделе «Дополнительные ресурсы» на странице SQL Server 2005 — службы Analysis Services веб-узла Microsoft TechNet. Дополнительные сведения о производительности запросов многомерных выражений и вычислений см. в разделе «Написание эффективных многомерных выражений» Руководства по производительности служб SQL Server 2005 Analysis Services.

Термины и основные понятия многомерного моделирования

Куб служб MicrosoftSQL ServerAnalysis Services создается на основе мер, измерений и атрибутов измерений. В следующей таблице описываются термины и основные понятия многомерного моделирования, которые необходимо знать для работы с языком многомерных выражений.

  • Измерение базы данных
    Измерение базы данных — это коллекция атрибутов измерения, связанных с ключевым атрибутом, который, в свою очередь, связан с фактами в измерении мер.

  • Атрибут измерения
    Атрибут измерения привязан к одному или более столбцам в таблице измерения и состоит из элементов. Атрибут измерения может содержать имена заказчиков, названия месяцев, названия продуктов.

  • Элемент
    Элемент — это значение атрибута измерения, в том числе измерения мер. Иерархия может содержать конечные элементы, родительские элементы, элементы данных и элемент «(Все)».

  • Мера
    Мера — это значение из таблицы фактов (синонимом меры является термин факт). Значение в измерении мер часто называют общим термином элемент. Мерами обычно являются числовые значения, но могут быть и строковые.

  • Измерение мер
    Измерение мер — это измерение, содержащее все меры куба. Измерение мер является измерением специального типа, в котором элементы обычно статистически вычислены (обычно по сумме или количеству) на основе текущего элемента каждого атрибута измерения, для которого существует данная мера.

  • Группа мер
    Группа мер — это коллекция связанных мер в кубе служб SQL Server 2005 Analysis Services (обычно меры из одной таблицы фактов). В службах SQL Server 2005 Analysis Services куб может содержать несколько групп мер.

  • Элемент «(Все)»
    Элемент «(Все)» — это вычисленное значение всех элементов в иерархии атрибута или определенной пользователем иерархии.

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

  • Элемент данных
    Элемент данных — это дочерний элемент, связанный с родительским элементов в иерархии типа «родители-потомки». Элемент данных содержит значение данных для родительского элемента вместо статистического значения потомков родительского элемента.

  • Родительский элемент
    Родительский элемент — это элемент иерархии типа «родители-потомки», содержащий статистическое значение его дочерних элементов.

  • Конечный элемент
    Конечный элемент — это элемент иерархии, у которого нет дочерних элементов.

  • Дочерний элемент
    Дочерний элемент — это элемент иерархии ниже верхнего уровня.

  • Ключевой атрибут
    Ключевой атрибут измерения базы данных — это атрибут, с которым связаны все неключевые атрибуты измерения (напрямую или косвенно). Ключевой атрибут часто является атрибутом гранулярности.

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

  • Измерение куба
    Измерение куба — это экземпляр измерения базы данных в кубе.

  • Иерархия атрибута
    Иерархия атрибута — это иерархия элементов атрибута, содержащая следующие уровни.

    • Конечный уровень, содержащий все отдельные элементы атрибута, и все элементы конечного уровня (конечные элементы).

    • Промежуточные уровни, если иерархия атрибута является иерархией типа «родители-потомки».

    • Необязательный уровень «(Все)» (IsAggregatable=True), содержащий статистическое значение конечных элементов иерархии атрибута, элемент этого уровня называют элементом «(Все)».

    По умолчанию иерархия атрибута определена для каждого атрибута измерения (AttributeHierarchyEnabled=True). По умолчанию иерархии атрибутов являются видимыми (AttributeHierarchyVisible=True).

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

  • Неровная иерархия
    См. несбалансированная иерархия.

  • Несбалансированная иерархия
    Несбалансированная иерархия — это иерархия, в которой между верхним и конечным уровнями расположено разное количество уровней. Примером неровной иерархии является иерархия типа «родители-потомки». Несбалансированная иерархия также называется неровной иерархией.

  • Иерархия типа «родители-потомки»
    Иерархия типа «родители-потомки» — это иерархия атрибута специального типа, в которой атрибут измерения имеет тип parent. Иерархия типа «родители-потомки» является несбалансированной иерархией из дочерних и родительских элементов. Иерархия типа «родители-потомки» содержит следующие уровни.

    • Дочерние уровни, содержащие потомков родительских элементов. К дочерним относятся элементы атрибута, содержащие статистическое значение для родительского элемента, в том числе элементы данных.

    • Промежуточные уровни, содержащие родительские элементы.

    • Необязательный уровень «(Все)» (IsAggregatable=True), содержащий статистическое значение конечных элементов иерархии типа «родители-потомки», элемент этого уровня называют элементом «(Все)».

    • Для каждого измерения может существовать единственная иерархия типа «родители-потомки», она должна быть связана с ключевым атрибутом.

  • Пользовательская иерархия
    Пользовательской называется сбалансированная иерархия иерархий атрибутов, упрощающая пользователям поиск данных в кубе. Пользовательские иерархии не увеличивают размер куба. Уровни в пользовательской иерархии могут быть скрыты в некоторых ситуациях и выглядеть несбалансированными.

  • Связь атрибутов
    Связь атрибутов — это связь между атрибутами типа «один ко многим», например связь между атрибутами измерения области и города.

  • Свойство элемента
    Свойство элемента — это свойство элемента атрибута, например пол заказчика или цвет товара.

  • Ячейка
    Ячейка куба — пространство, существующее на пересечении элемента измерения меры и элемента каждой иерархии атрибута куба.

    • Элемент из измерения мер может быть конечным элементом (отдельный факт) или статистическим элементом (например, объем продаж за определенный год).

    • Элементом измерения может быть конечный элемент, элемент данных, родительский элемент или элемент «(Все)».

  • Пространство куба
    Пространство куба — это совокупность элементов иерархий атрибутов куба с мерами куба.

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

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

    • При включении элемента иерархии «(Все)» включаются все конечные элементы иерархии.

    • При включении любого элемента включаются все его предки и потомки.

    • При включении всех элементов некоторого уровня пользовательской иерархии включаются все элементы этой иерархии, но исключаются элементы других иерархий, которые не связаны с элементами этого уровня (например, города, где отсутствуют клиенты).

    • Любой элемент «(Все)» всегда существует во вложенных кубах, созданных из куба.

    • Статистические значения внутри вложенного куба визуально подсчитываются.

Кортежи

Кортеж уникальным образом определяет ячейку на основе сочетания элементов атрибута, состоящих из атрибутов каждой иерархии атрибута куба. При определении кортежа в запросе многомерных выражений или в многомерном выражении не обязательно явно включать элемент атрибута из каждой иерархии атрибута. Если элемент из иерархии атрибута не включен явно в запрос или выражение, в кортеж неявным образом включается элемент по умолчанию данной иерархии атрибута. Если в кубе явно не указано обратное, элементом по умолчанию любой иерархии атрибута считается элемент «(Все)», если он существует. Если такой элемент отсутствует в иерархии атрибута, элементом по умолчанию считается элемент верхнего уровня иерархии. Мерой по умолчанию является первая мера указанного куба, если только мера по умолчанию не определена явно. Дополнительные сведения см. в разделах Определение элемента по умолчанию и DefaultMember (многомерные выражения).

Например, следующий кортеж определяет одну ячейку в базе данных Adventure Works, явно определяя только один элемент в измерении Measures.

(Measures.[Reseller Sales Amount])

В предыдущем примере уникально определена ячейка, состоящая из элемента Reseller Sales Amount из измерения Measures и элемента по умолчанию из каждой иерархии атрибута в кубе. Элементом по умолчанию для каждой иерархии атрибута, кроме Destination Currency, является элемент «(Все)». Элементом по умолчанию для иерархии Destination Currency является элемент US Dollar (он определен в сценарии многомерных выражений в кубе Adventure Works).

Важное примечаниеВажно!

На элемент иерархии атрибута в кортеже также влияют связи, определенные между атрибутами измерения. Дополнительные сведения см. в разделе Связи атрибутов и пространство куба ниже.

Следующий запрос возвращает значение ячейки, на которую ссылается кортеж, указанный в предыдущем примере ($80 450 596,98).

SELECT 
Measures.[Reseller Sales Amount] ON COLUMNS 
FROM [Adventure Works]
ПримечаниеПримечание

При определении оси для набора (в данном случае состоящего из одного кортежа) в запросе набор для оси столбцов необходимо указать перед набором для оси строк. Ось столбцов называют ось(0) или просто 0. Дополнительные сведения о запросах многомерных выражений см. в разделе Базовый запрос многомерных выражений (многомерные выражения).

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

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

SELECT 
([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004]) ON COLUMNS 
FROM [Adventure Works]
ПримечаниеПримечание

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

Кортеж в запросе в предыдущем примере возвращает ячейку куба на пересечении меры Reseller Sales Amount измерения Measures и элемента CY 2004 иерархии атрибута Calendar Year в измерении Date.

ПримечаниеПримечание

На элемент атрибута можно ссылаться по имени или ключу. В предыдущем примере ссылку [CY 2004] можно изменить на &[2004].

Наборы

Набором называют упорядоченное множество кортежей одинаковой размерности. Ниже приведен пример набора.

SELECT 
   {
      ([Measures].[Reseller Sales Amount],
         [Date].[Calendar Year].[CY 2003]),
      ([Measures].[Reseller Sales Amount],
         [Date].[Calendar Year].[CY 2004])
   } ON COLUMNS 
FROM [Adventure Works]
ПримечаниеПримечание

Для обозначения набора кортежей используются фигурные скобки {}.

В предыдущем примере все кортежи набора имеют одинаковую размерность, поскольку первый элемент каждого кортежа принадлежит измерению Measures, а второй элемент — иерархии атрибута Calendar Year. Если второй элемент любого кортежа принадлежит другой иерархии атрибута в измерении Date (например Calendar Month), появится сообщение об ошибке, ссылающееся на различную размерность.

СоветСовет

Можно создать набор с псевдонимом, называемый именованным набором. Применение именованных наборов в запросах многомерных выражений упрощает их восприятие и дальнейшее использование при работе со сложными многомерными выражениями. Для работы с именованным набором используется ключевое слово AS вместе с необходимым псевдонимом в конце идентификатора набора.

Пространство куба и автоматическое существование

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

Например, пространство куба, содержащего иерархию атрибута City, иерархию атрибута Country и меру Internet Sales Amount, включает только те элементы, которые существуют друг с другом. Например, если иерархия атрибута «City» содержит элементы «New York», «London», «Paris», «Tokyo» и «Melbourne», а иерархия атрибута «Country» содержит страны «United States», «United Kingdom», «France», «Japan» и «Australia», то пространство куба не содержит ячейку на пересечении элементов «Paris» и «United States».

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

SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
   ,[Customer].[Customer].[Abigail Clark]} ON ROWS 
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
ПримечаниеПримечание

В следующем запросе применяется функция Members (Set) (многомерные выражения) для получения набора элементов иерархии атрибута Gender по оси столбцов и выполняется перекрестное соединение этого набора с заданным набором элементов из иерархии атрибута Customer по оси строк.

При выполнении предыдущего запроса ячейка на пересечении элементов [Aaron A. Allen] и [Female] отображает значение NULL. Аналогично, значение NULL отображается в ячейке на пересечении элементов [Abigail Clark] и [Male]. Эти ячейки не существуют и не могут содержать значение, но запрос может вернуть несуществующие ячейки.

При использовании функции Crossjoin (многомерные выражения) для получения перекрестного произведения элементов иерархий атрибутов из иерархий атрибутов одного измерения автоматическое существование ограничивает возвращаемые кортежи набором действительно существующих кортежей, а не возвращает все декартово произведение. Выполните следующий запрос и изучите его результаты.

SELECT CROSSJOIN
   (
      {[Customer].[Country].[United States]},
         [Customer].[State-Province].Members
  ) ON 0 
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
ПримечаниеПримечание

Обратите внимание, что 0 используется для обозначения оси столбцов, это сокращение для оси(0), являющейся осью столбцов.

В предыдущем запросе возвращаются только ячейки для элементов каждой иерархии атрибута в запросе, которые существуют друг с другом. Предыдущий запрос можно записать, используя новую версию функции — * (Crossjoin) (многомерные выражения).

SELECT 
   [Customer].[Country].[United States] * 
      [Customer].[State-Province].Members
ON 0 
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]

Предыдущий запрос можно переписать следующим образом:

SELECT [Customer].[State-Province].Members
ON 0 
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
   [Customer].[Country].[United States])

Значения ячеек будут совпадать, хотя метаданные в результирующем наборе будут разными. Например, в предыдущем запросе иерархия Country перемещена на ось среза (в предложении WHERE) и поэтому не представлена явно в результирующем наборе.

Каждый из перечисленных запросов демонстрирует поведение функции автоматического существования в службах SQL ServerAnalysis Services.

Пользовательские иерархии и пространство куба

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

Например, запрос CROSSJOIN в предыдущем разделе можно переписать следующим образом:

SELECT CROSSJOIN
   (
      {[Customer].[Country].[United States]},
         [Customer].[Customer Geography].[State-Province].Members
   ) 
ON 0 
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]

В предыдущем запросе пользовательская иерархия Customer Geography в измерении Customer используется для определения позиции в пространстве куба, которая ранее определялась с помощью иерархии атрибута. С помощью иерархий атрибутов и пользовательских иерархий можно определить одинаковую позицию в пространстве куба.

Связи атрибутов и пространство куба

Определение связи атрибутов между связанными атрибутами увеличивает производительность запросов (облегчая создание соответствующих статистических обработок) и влияет на элемент связанной иерархии атрибута, который появляется с элементом иерархии атрибута. Например, если определяется кортеж, содержащий элемент из иерархии атрибута City, и в кортеже не определен явно элемент иерархии атрибута Country, можно предположить, что элементом иерархии атрибута Country по умолчанию будет связанный элемент иерархии атрибута Country. Тем не менее, это действительно так, только если определена связь атрибутов между иерархиями атрибутов City и Country.

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

WITH MEMBER Measures.x AS 
   Customer.Country.CurrentMember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
ПримечаниеПримечание

Обратите внимание, что для создания вычисляемого элемента в запросе используется ключевое слово WITH с функциями CurrentMember (многомерные выражения) и Name (многомерные выражения). Дополнительные сведения см. в разделе Базовый запрос многомерных выражений (многомерные выражения).

В предыдущем запросе возвращалось имя элемента иерархии атрибута Country, связанного с каждым элементом иерархии атрибута State. Возвращается ожидаемый элемент Country (поскольку определена связь атрибутов City и Country). Тем не менее, если в этом измерении не определена связь атрибутов между иерархиями атрибутов, возвращается элемент «(Все)», как продемонстрировано в следующем запросе.

WITH MEMBER Measures.x AS 
   Customer.Education.Currentmember.Name
SELECT Measures.x  ON 0, 
Customer.City.Members ON 1
FROM [Adventure Works]

В предыдущем запросе возвращается элемент «(Все)» ("All Customers"), поскольку связь между атрибутами Education и City не определена. Таким образом, элемент «(Все)» иерархии атрибута Education будет ее элементом по умолчанию, используемым в любом кортеже, где участвует иерархия атрибута City, в которой элемент Education явно не указан.

Контекст вычисления

Любые набор, элемент, кортеж, числовая функция выполняются в контексте всего многомерного выражения или инструкции. Когда такой аргумент, как кортеж, передается в функцию, в явном виде задаются только некоторые координаты в пространстве куба. Для получения остальных координат используется текущий контекст вычисления. Контекст вычисления для неуказанных координат ячейки или элементов атрибута определяется в следующем порядке.

  1. Предложение FROM (если применимо). В этом предложении можно или указать куб полностью, или указать вложенный куб в виде инструкции SELECT.

  2. Предложение WHERE (если применимо). В этом предложении, которое также называется осью среза, можно указать набор, кортеж или элемент, ограничивающий элементы, которые возвращаются запросом по осям столбцов и строк. Элемент по умолчанию каждой иерархии атрибута, который не указан явно по осям столбцов или строк, по существу является частью оси среза.

    ПримечаниеПримечание

    Когда координаты ячейки для отдельного атрибута указаны и по оси среза, и по другой оси, координаты, указанные в функции, могут иметь преимущество при определении элементов набора по этой оси. Примерами таких функций являются Filter (многомерные выражения) и Order (многомерные выражения), результат можно отфильтровать или упорядочить по элементам атрибута, которые исключены из контекста вычисления предложением WHERE или инструкцией SELECT в предложении FROM.

  3. Именованные наборы и вычисляемые элементы, определенные в запросе или выражении.

  4. Кортежи и наборы, заданные по осям строк и столбцов и использующие элемент по умолчанию для атрибутов, которые не появляются по осям строк и столбцов и оси среза.

  5. Ячейки куба или вложенного куба на каждой оси, устраняющие пустые кортежи на оси и применяющие предложение HAVING.

  6. Дополнительные сведения см. в разделе Определение контекста куба в запросе (многомерные выражения).

  7. В следующем запросе контекст вычисления для каждой оси строк ограничен элементом атрибута Country и элементом атрибута Calendar Year, указанным в предложении WHERE.

SELECT Customer.City.City.Members ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France, [Date].[Calendar].[Calendar Year].[CY 2004],
   Measures.[Internet Sales Amount])
  1. Тем не менее, если изменить запрос, указав функцию FILTER по оси строк, и передать в функцию FILTER элемент иерархии атрибута Calendar Year, то этот элемент, который раньше использовался для определения контекста вычисления элементов набора по оси столбцов, можно изменить.
SELECT FILTER
   (
      Customer.City.City.Members, 
         ([Date].[Calendar].[Calendar Year].[CY 2003],
            Measures.[Internet Order Quantity]) > 75 
   ) ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France,
   [Date].[Calendar].[Calendar Year].[CY 2004],
   Measures.[Internet Sales Amount])
  1. В предыдущем запросе контекст вычисления ячеек в кортежах по оси столбцов фильтровался элементом «CY 2003» в иерархии атрибута Calendar Year, даже если номинальным контекстом вычисления для этой иерархии атрибута является элемент «CY 2004». Более того, он фильтруется по мере Internet Order Quantity. Тем не менее, поскольку элементы набора по оси столбцов заданы, контекст вычисления значений элементов, которые отображаются на оси, опять определяется предложением WHERE.
Важное примечаниеВажно!

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

Важное примечаниеВажно!

Порядок этапов и порядок вычисления, в котором расчитываются выражения, влияют на их конечные значения. Дополнительные сведения о том, как эти значения могут воздействовать на вычисления, см. в разделе Основные сведения о порядке этапов и порядке вычисления (многомерные выражения).