У меня есть измерение под названием [Band]
, и оно может иметь несколько разных значений:
[Band].&[A]&[Under $400]
[Band].&[B]&[$400 - $1,000]
[Band].&[C]&[$1,000 - $2,500]
[Band].&[D]&[$2,500 - $3,500]
...
Я пытаюсь написать запрос, в котором я могу вырезать подсписок этих значений.
Вот запрос, который не работает, потому что функция .isin
не существует в MDX, но вы увидите, что я пытаюсь сделать:
SELECT
NON EMPTY {[Measure A], [Measure B]} ON COLUMNS,
NON EMPTY {([Band].isin(['Under $400', '$400 - $1,000']).ALLMEMBERS)} --fail on .isin(
DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
SELECT
({[Foo].&[Bar]}) ON COLUMNS
FROM
[CUBE]
)
Вот запрос, который работает, но дает только одно значение [Band]
:
SELECT
NON EMPTY {[Measure A], [Measure B]} ON COLUMNS,
NON EMPTY {([Band].&[A]&[Under $400])}
DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
SELECT
({[Foo].&[Bar]}) ON COLUMNS
FROM
[CUBE]
)
Это возвращает действительный результат:
Measure A Measure B
Under $400 1795.67% 58.48%
Но я хотел бы увидеть результаты, в которых он возвращает агрегированные значения нескольких значений измерения [Band]
. Как это можно сделать в MDX?
Как вы, наверное, заметили, я никогда раньше не использовал MDX, но когда я ищу по этому вопросу, я вижу такие вещи, как пересечение или использование ДетиНабор. Но это не кажется очень интуитивным.
Можете ли вы указать мне правильное направление?
разобрался, я думаю
SELECT
NON EMPTY {[Measure A], [Measure B]} ON COLUMNS,
NON EMPTY {[Band].[Under $400], [Band].[$1,000 - $2,500]}
DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
SELECT
({[Foo].&[Bar]}) ON COLUMNS
FROM
[CUBE]
)
Итак, ниже приведен список того, как функциональность IsIn может быть реализована в MDX.
1) вы хотите отфильтровать с помощью предложения in и также показать членов. В этом примере я хочу увидеть интернет-продажи велосипедов и категории одежды из образца базы данных Adventurewroks.
select
[Measures].[Internet Sales Amount]
on columns,
{[Product].[Category].&[1]
,[Product].[Category].&[3]}
on rows
from
[Adventure Works]
Результат
2) Я хочу фильтровать по предложению IN, но не хочу показывать членов В этом примере я хочу увидеть ежегодные интернет-продажи велосипедов и одежды из базы данных Adventurewroks. Результат должен быть разбит годами.
select
[Measures].[Internet Sales Amount]
on columns,
non empty
[Date].[Calendar Year].[Calendar Year]
on rows
from
[Adventure Works]
where
{[Product].[Category].&[1]
,[Product].[Category].&[2]}
Результат
Вы достигаете того же, используя подзапрос
select
[Measures].[Internet Sales Amount]
on columns,
non empty
[Date].[Calendar Year].[Calendar Year]
on rows
from
(select {[Product].[Category].&[1],[Product].[Category].&[2]} on 0 from [Adventure Works])
Результат
3) Когда вы хотите реализовать предложение IN на основе имени В этом примере я хочу увидеть интернет-продажи велосипедов и категории одежды из образца базы данных Adventurewroks, но в этом случае я использую заголовок
select
[Measures].[Internet Sales Amount]
on columns,
filter(
[Product].[Category].[Category],
[Product].[Category].currentmember.name='Bikes' or [Product].[Category].currentmember.name='Clothing'
)
on rows
from
[Adventure Works]
Результат :
4) Когда вы реализуете предложение IN на основе имени, и ваше условие ищет определенный текст (как предложение) В этом примере я хочу увидеть интернет-продажи велосипедов и категории одежды из базы данных Adventurewroks Sample db, но в этом случае я ищу название заголовка для куска строки.
select
[Measures].[Internet Sales Amount]
on columns,
FILTER([Product].[Category].[Category],
Instr([Product].[Category].currentmember.name, 'Bik') > 0
or
Instr([Product].[Category].currentmember.name, 'oth') > 0
)
on rows
from
[Adventure Works]
Результат
если вы хотите сделать несколько измерений таким образом, это становится
{([dim A]).ALLMEMBERS} * {[Band].[Under $400], [Band].[$1,000 - $2,500]}