Многомерные выражения — как исключить определенные элементы в многомерных выражениях

#mdx

#Многомерные выражения

Вопрос:

мне интересно, как исключить определенные элементы из одного измерения, которые имеют ссылки с другими элементами из другого измерения… допустим, я хочу исключить клиентов (dim_clients), которые имеют статус A или статус B (dim_status). Я знаю, как скрестить два измерения, чтобы получить этих клиентов, но я не могу понять, как исключить их из моих вычислений, поскольку функция EXCEPT принимает два набора с одинаковой размерностью, но те, которые я хочу исключить, являются результатом операции перекрестного соединения, я не могу использовать функцию except

я хочу что-то вроде этого :

 SELECT Measure.MyMeasure ON 0 
FROM MyCUBE 
WHERE 
EXCEPT([DIM CLIENTS].[Clients], [EXCLUDED CLIENTS])
  

Спасибо

Ответ №1:

 SELECT Measure.MyMeasure ON 0
FROM MyCUBE
WHERE
EXCEPT([DIM CLIENTS].[Clients], Filter({[DIM CLIENTS].[Clients]},[DIM_STATUS].CurrentMember IS [DIM_STATUS].statusA OR [DIM_STATUS].CurrentMember IS [DIM_STATUS].statusA))
  

Я не слишком уверен, что [Clients] такое. Я бы все же использовал элементы.

Ответ №2:

Вы можете использовать функцию Extract(), чтобы получить набор исключенных клиентов с правильной размерностью:

 where - Extract( { [EXCLUDED CLIENTS] }, [DIM CLIENTS].[Clients] )
  

Обратите внимание на унарный оператор для выполнения операции except.