Фильтр вычисляемых элементов 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])