Реализация IN/LIKE в многомерных выражениях

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
682
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

разобрался, я думаю

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

если вы хотите сделать несколько измерений таким образом, это становится {([dim A]).ALLMEMBERS} * {[Band].[Under $400], [Band].[$1,000 - $2,500]}

Legit Stack 30.05.2019 20:12
Ответ принят как подходящий

Итак, ниже приведен список того, как функциональность 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]

Результат

Другие вопросы по теме