Фильтр вычисляемых элементов MDX по атрибуту измерения
Я хочу создать вычисляемый элемент и фильтровать его размер. Это рабочий пример:
(
    [Policy].[Policy Status].&[Void], 
    [Policy].[Tran Type].&[Renewal], 
    [Measures].[FK Policy Distinct Count]
)
но если я хочу фильтровать его так
(
    [Policy].[Policy Status].&[Void], 
    [Policy].[Policy Status].&[Policy],  
    [Measures].[FK Policy Distinct Count]
)
чем это не работает. В нем говорится, что одна и та же иерархия отображается несколько раз в кортеже.
другое дело, как исключить строки? Вот идея...
(
    ![Policy].[Policy Status].&[Void], 
    ![Policy].[Policy Status].&[Policy],  
    [Measures].[FK Policy Distinct Count]
)
            2 ответов
во-первых, важно понять синтаксис MDX и то, как он связан с понятиями кортежи, элементы и наборы.
ОК
использование скобок обозначает кортеж:
(
  [Policy].[Policy Status].&[Void], 
  [Policy].[Tran Type].&[Renewal], 
  [Measures].[FK Policy Distinct Count]
)
Кортеж может включать только один элемент из любой Иерархии.
наборы
чтобы получить результаты от нескольких членов в одной иерархии, необходимо запросить набор. Набор MDX обозначается брекеты:
{
  [Policy].[Policy Status].&[Void], 
  [Policy].[Policy Status].&[Policy]
}
набор, по определению,
упорядоченная коллекция из нуля, одного или нескольких кортежей.
Итак, если вы хотите, чтобы запрос [FK Policy Distinct Count] мера против обоих этих членов, кортежи набора должны каждый включать в себя меру:
{
  ( [Policy].[Policy Status].&[Void],   [Measures].[FK Policy Distinct Count] ), 
  ( [Policy].[Policy Status].&[Policy], [Measures].[FK Policy Distinct Count] )
}
чтобы упростить это выражение, то можно перекрестное соединение два набора различных мерность:
{
  [Policy].[Policy Status].&[Void],
  [Policy].[Policy Status].&[Policy], 
  [Policy].[Policy Status].&[Something], 
  [Policy].[Policy Status].&[Something else], 
  [Policy].[Policy Status].&[Yet another member]
}
*
{
  [Measures].[FK Policy Distinct Count]
}
за исключением строк
теперь, когда мы можем определить наборы, пришло время, чтобы удалить некоторые элементы из одного. В вашем примере это звучит так, как будто вы хотите начать с уровня (который для механизма MDX является просто предопределенным набором в кубе, который включает каждый элемент на этом уровне иерархии) и исключить определенные элементы. MDX имеет множество функций, которые работают с наборами, и мы будем использовать EXCEPT.
на принимает два параметра, первый из которых-набор для удаления, а второй-набор, который должен быть удален из первого. Он возвращает набор.
в этом примере я буду считать [Policy].[Policy Status] является иерархией атрибутов, и что его единственный уровень имеет уникальное имя [Policy].[Policy Status].[Policy Status].
EXCEPT(
  [Policy].[Policy Status].[Policy Status],
  {
    [Policy].[Policy Status].&[Void],
    [Policy].[Policy Status].&[Policy]
  }
)
это вернет каждого члена из
попробуйте следующий синтаксис:
SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])