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


DrilldownLevel (многомерные выражения)

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

Уровень детализации указывать необязательно, но для того чтобы задать его, можно использовать level expression или index level. Эти аргументы являются взаимоисключающими. Наконец, если вычисляемые элементы присутствуют в запросе, можно указать аргумент для включения их в набор строк.

Синтаксис

DrilldownLevel(Set_Expression [,[Level_Expression] ,[Index]] [,INCLUDE_CALC_MEMBERS])

Аргументы

  • Set_Expression
    Допустимое многомерное выражение, возвращающее набор.

  • Level_Expression
    (Необязательно.) Выражение MDX явно определяет уровень для детализации. Если выражение уровня указано, пропустите аргумент индекса ниже.

  • Index
    (Необязательно.) Допустимое числовое выражение, указывающее количество иерархий, которые необходимо детализировать углублением в наборе. Вы можете использовать уровень индекса вместо Level_Expression, чтобы явно задать уровень детализации.

  • Include_Calc_Members
    (Необязательно.) Флаг, показывающий, включать ли вычисляемые элементы, если они существуют, в данный уровень детализации.

Замечания

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

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

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

При заданном значении индекса функция создает набор в иерархическом порядке путем извлечения вложенных элементов для тех элементов, которые находятся на более низком уровне иерархии, чем в указанном наборе, начиная с нуля.

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

Запрос свойства XMLA MdpropMdxDrillFunctions позволяет проверить уровень поддержки, который сервер предоставляет для функций детализации. Дополнительные сведения см. в разделе Поддерживаемые свойства XML для аналитики (XMLA).

Примеры

Вы можете попробовать запустить следующие примеры в окне запроса MDX в SSMS, используя куб Adventure Works.

Пример 1 демонстрирует минимально возможный синтаксис.

В первом примере показан минимально возможный синтаксис для DrilldownLevel. В качестве аргумента необходимо только выражения для установки значения. Обратите внимание, что при запуске этого запроса вы получите вышестоящие [All Categories] и элементы следующего, более низкого уровня: [Accessories], [Bikes] и так далее. Хотя пример прост, он показывает основы применения функции DrilldownLevel, которая детализирует вниз до следующего уровня.

SELECT DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]}}) ON COLUMNS
FROM [Adventure Works]

Пример 2 показывает альтернативный синтаксис с использованием явного уровня индекса

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

SELECT
DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]},,0) ON COLUMNS
FROM [Adventure Works]

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

Пример 3 показывает выражение уровня

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

В этом примере уровень детализации начинается на [City], который является вторым аргументом функции DrilldownLevel. При запуске этого запроса детализация для штатов Вашингтон и Орегон начинается на уровне [City]. Для функции DrilldownLevel результирующий набор также включает элементы следующего более низкого уровня, [Postal codes].

SELECT [Measures].[Internet Sales Amount] ON COLUMNS,
   NON EMPTY (
   DRILLDOWNLEVEL(
       {[Customer].[Customer Geography].[Country].[United States],
           DESCENDANTS(
             { [Customer].[Customer Geography].[State-Province].[Washington],  
               [Customer].[Customer Geography].[State-Province].[Oregon]}, 
               [Customer].[Customer Geography].[City]) } ,
[Customer].[Customer Geography].[City] ) )  ON ROWS
FROM [Adventure Works]

Пример 4, включение вычисляемых элементов

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

Этот пример работает, так как вычисляемый элемент находится на том же уровне, что и невычисляемые элементы. Вычисляемый элемент [West Coast] состоит из элементов из [United States], плюс из всех элементов на уровне ниже, чем [United States].

WITH MEMBER 
[Customer].[Customer Geography].[Country].&[United States].[West Coast] AS
[Customer].[Customer Geography].[State-Province].&[OR]&[US] +
[Customer].[Customer Geography].[State-Province].&[WA]&[US] +
[Customer].[Customer Geography].[State-Province].&[CA]&[US]
SELECT [Measures].[Internet Order Count] ON 0,
DRILLDOWNLEVEL([Customer].[Customer Geography].[Country].&[United States],,,INCLUDE_CALC_MEMBERS) on 1
FROM [Adventure Works]

Если убрать только флаг и заново запустить запрос, вы получите те же самые результаты, за исключение вычисляемого элемента [West Coast].

См. также

Справочник

Справочник по функциям многомерных выражений (многомерные выражения)