Реализация IN / LIKE в MDX - PullRequest
7 голосов
/ 30 мая 2019

У меня есть измерение с именем [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, но при поиске по этой проблеме я вижу такие вещи, как , пересекающий или использующий ChildrenSet .Но это не кажется очень интуитивным.

Можете ли вы указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 31 мая 2019

Итак, вот список того, как функциональность IsIn может быть реализована в MDX

1) вы хотите отфильтровать, используя в предложении и показать членов тоже. В этом примере я хочу увидеть интернет-продажу велосипедов и одежды из раздела adventurewroks sample db

select 
[Measures].[Internet Sales Amount]
on columns,
{[Product].[Category].&[1]
,[Product].[Category].&[3]}
on rows 
from 
[Adventure Works]

Результат

enter image description here

2) Я хочу фильтровать по предложению IN, но не хочу показывать участников В этом примере я хочу видеть ежегодные интернет-продажи велосипедов и одежды из базы данных adventurewroks sample db. Результат будет разбит по годам.

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]}

Результат

enter image description here

Вы достигаете того же, используя подзапрос

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])

Результат

enter image description here

3) Когда вы хотите реализовать предложение IN на основе имени В этом примере я хочу видеть интернет-продажи велосипедов и категории одежды из образца db 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]

Результат:

enter image description here

4) Когда вы реализуете предложение IN на основе имени, а ваше условие ищет определенный текст (как предложение) В этом примере я хочу увидеть интернет-продажи велосипедов и категории одежды из образца db adventurewroks, но в этом случае я ищу в названии заголовка кусок строки.

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]

Результат

enter image description here

1 голос
/ 30 мая 2019

понял это, я думаю

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]
)
...