Почему Порядок игнорирует подвыбор? - PullRequest
3 голосов
/ 30 июня 2011

Я столкнулся с некоторым запутанным поведением в Analysis Services 2005 (и 2008 R2) и был бы признателен, если бы кто-то мог объяснить, почему это происходит. Ради этого вопроса я воспроизвел поведение куба Adventure Works.

Учитывая этот MDX:

SELECT [Customer].[Education].[(All)].ALLMEMBERS ON COLUMNS,
    Order(DrillDownLevel({[Customer].[Customer Geography].[All Customers]}), 
          ([Measures].[Internet Order Count]), 
          ASC) ON ROWS
FROM (SELECT {[Customer].[Education].&[Partial High School]} ON COLUMNS FROM [Adventure Works])
WHERE [Measures].[Internet Order Count];


Запрос оценивается с помощью упорядоченного набора в строках:
Все клиенты: 2, 136
Германия: 269
Франция: 298
Канада: 304
Великобритания: 311
Соединенные Штаты: 457
Австралия: 497

Однако, если я включу All Member (или участника по умолчанию) для Education в кортеж, используемый в заявлении о порядке:

SELECT [Customer].[Education].[(All)].ALLMEMBERS ON COLUMNS,
        Order(DrillDownLevel({[Customer].[Customer Geography].[All Customers]}), 
              ([Measures].[Internet Order Count], [Customer].[Education].[All Customers]), 
              ASC) ON ROWS
FROM (SELECT {[Customer].[Education].&[Partial High School]} ON COLUMNS FROM [Adventure Works])
WHERE [Measures].[Internet Order Count];


Затем набор возвращается в существенно ином порядке:
Все клиенты: 2, 136
Франция: 298
Германия: 269
Великобритания: 311
Канада: 304
Австралия: 497
Соединенные Штаты: 459

Обратите внимание, что Франция и Германия вышли из строя по отношению друг к другу. То же самое с Канадой / Великобританией и с США / Австралией. Из того, что я могу сказать, это порядок, основанный на агрегации, до того, как подсуб оценивается.

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

Приветствие.

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

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

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

WITH

MEMBER sortExpr as
AGGREGATE(Descendants([Customer].[Customer Geography].CurrentMember), [Measures].[Internet Order Count])

SELECT 
[Customer].[Education].[(All)].ALLMEMBERS 
*
{[Measures].[Internet Order Count], sortExpr} ON COLUMNS,
Order
(
    DrillDownLevel({[Customer].[Customer Geography].[All Customers]})
    ,sortExpr
    ,ASC
) ON ROWS
FROM 
(
    SELECT 
    {[Customer].[Education].&[Partial High School]} ON COLUMNS 
    FROM [Adventure Works]
)
;

EDIT: Вот еще один запрос, который показывает, что выражение корректно работает с перезаписью атрибута после того, как вы решите проблему с отбором, используя набор с областью запроса (известное решение):

WITH

set sub as
[Customer].[Customer Geography].[Customer]

MEMBER sortExpr2 as
Aggregate(existing sub, [Measures].[Internet Order Count])

SELECT 
[Customer].[Education].[(All)].ALLMEMBERS 
*
{[Measures].[Internet Order Count], sortExpr2} ON COLUMNS,
Order
(
    DrillDownLevel({[Customer].[Customer Geography].[All Customers]})
    ,
    (
--      [Customer].[Customer Geography].CurrentMember,
        [Customer].[Education].[All Customers],
        sortExpr2
    )
    ,ASC
) ON ROWS
FROM 
(
    SELECT 
    {[Customer].[Education].&[Partial High School]} ON COLUMNS 
    FROM [Adventure Works]
)
;

Спасибо Бояну за твиттер в этом вопросе. С уважением, Hrvoje

1 голос
/ 01 июля 2011

Примечание: посмотрите на http://www.bp -msbi.com / 2011/07 / mdx-subselects-some-insight / , где я объяснил поведение более подробно.

Отличная статья о подвыборах - Mosha's 2008 MDX: подвыборы и CREATE SUBCUBE в невизуальном режиме

Обратите внимание, что происходит, когда вы используете подвыбор. Неявные Существующие и визуальные итоги применяются. Ключевой бит информации о том, что вы испытываете здесь:

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

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

SELECT [Customer].[Education].[(All)].ALLMEMBERS ON COLUMNS,
    Order(DrillDownLevel({[Customer].[Customer Geography].[All Customers]}), 
          ([Measures].[Internet Order Count]), 
          ASC) ON ROWS
FROM NON VISUAL (SELECT {[Customer].[Education].&[Partial High School]} ON COLUMNS FROM [Adventure Works])
WHERE [Measures].[Internet Order Count];

Ключевое слово NON VISUAL в операторе SELECT указывает SSAS применять только неявные элементы Exists, но не часть визуальных итогов. Результаты запроса будут такими же, как и во втором случае, но вы также увидите реальные цифры, по которым они упорядочены.

Поскольку вы явно перезаписываете элемент All во втором запросе, SSAS не применяет визуальные итоги к этому выражению и упорядочивает итоговые суммы за все годы. Однако он по-прежнему отображает визуальные итоги для выбранной меры ROWS после оценки порядка невизуальных итогов.

1 голос
/ 30 июня 2011

Я не специалист по SSAS, но это связано с перезаписью атрибута .

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

Обратите внимание, что в icCube и после обсуждения с каким-либо специалистом по MDX мы решили упростить и не следовать этому поведению: фильтр подвыбора всегда применяется.

...