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

Я хочу создать вычисляемый элемент с помощью служб SQL Server Data Tools Analysis Services в кубе OLAP, который сочетает следующие подходы к фильтрации:

Кортеж

(
    [Enrolment Planning Actuals].[Year].&[1],
    [Enrolment Planning Actuals].[Attribute 1].&[Y],
    [Enrolment Planning Actuals].[Attribute 2].&[N],
    [Enrolment Planning Actuals].[Attribute 3].&[N],
    [Measures].[Count]
)

Установить как одного участника

SUM(    
    EXCEPT(
        [Enrolment Planning Actuals].[Year].[Year],
        {
            [Enrolment Planning Actuals].[Year].&[1]
        }
    ),
    [Measures].[Count]
)   

[Enrolment Planning Actuals].[Year] имеет элементы со значениями 1, 2, 3, 4, и я, по сути, хочу, чтобы вычисляемый элемент предоставлял [Measures].[Count], отфильтрованный по:

  • Включить всех [Enrolment Planning Actuals].[Year] участников, КРОМЕ [Enrolment Planning Actuals].[Year].&[1]
  • [Enrolment Planning Actuals].[Attribute 1].&[Y]
  • [Enrolment Planning Actuals].[Attribute 2].&[N]
  • [Enrolment Planning Actuals].[Attribute 3].&[N]

Я понимаю, что функция SUM может быть неправильным подходом при попытке объединить эти фильтры.

Я нашел принятый ответ на статью Фильтр вычисляемых элементов MDX по атрибуту измерения исключительно полезно до этого момента.

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


person samb0x    schedule 16.07.2015    source источник


Ответы (2)


Ты почти у цели, приятель.

Просто расширив концепцию set и tuple и добавив концепцию crossjoin или *, вот что должно работать:

WITH MEMBER Measures.YourCalculatedMember AS

SUM(
    EXCEPT(
            [Enrolment Planning Actuals].[Year].[Year],
            {
                [Enrolment Planning Actuals].[Year].&[1]
            }
          ) *
    [Enrolment Planning Actuals].[Attribute 1].&[Y] *
    [Enrolment Planning Actuals].[Attribute 2].&[N] *
    [Enrolment Planning Actuals].[Attribute 3].&[N]
    ,
    [Measures].[Count]
  )
person SouravA    schedule 17.07.2015
comment
Спасибо, это было именно то, чего я пытался достичь. - person samb0x; 20.07.2015

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

WITH MEMBER [Enrolment Planning Actuals].[Attribute 1].[YourCalculatedMember] AS
SUM(
    EXCEPT(
            [Enrolment Planning Actuals].[Year].[Year],
            {
                [Enrolment Planning Actuals].[Year].&[1]
            }
          ) *
    [Enrolment Planning Actuals].[Attribute 1].&[Y] *
    [Enrolment Planning Actuals].[Attribute 2].&[N] *
    [Enrolment Planning Actuals].[Attribute 3].&[N]
  )
SELECT
   {
     [Measures].[Count],
     [Measures].[Revenue]
   } on 0,
   {  
     [Enrolment Planning Actuals].[Attribute 1].[YourCalculatedMember], 
     [Enrolment Planning Actuals].[Attribute 1].&[Y]
   } on 1
FROM [YourCube];
person whytheq    schedule 17.07.2015
comment
Спасибо за ваш вклад, это новая перспектива для меня, которую я могу использовать в других случаях. - person samb0x; 20.07.2015