Запрос MDX работает, но игнорирует предложение EXCEPT

Я работаю над пользовательской dll (которая вызывается через пользовательскую надстройку xll/Excel) для создания MDX и возврата 2D-данных.

Это работает хорошо, и я только что решил, как добавить возможность отправки списка исключений с помощью EXCEPT.

Я создал запрос с фильтрацией, и этот запрос работает, за исключением того, что он игнорирует EXCEPT. Любой, у кого больше MDX, чем у меня (я около 2 месяцев в ха-ха :)), знает почему?

Спасибо

Ли

WITH  
Member  [Measures].[Book_Label] AS [Book].[Book].CURRENTMEMBER.MEMBER_CAPTION 
Member  [Measures].[Isin_Label] AS [Isin].[Isin].CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
NON EMPTY 
{[Measures].[Book_Label],[Measures].[Isin_Label],[Measures].[Notional.SUM]} 
ON COLUMNS, 
NON EMPTY ORDER
(
EXCEPT(
FILTER(
([Book].CHILDREN,[Isin].CHILDREN), 
([Book].[Book].CURRENTMEMBER.MEMBER_CAPTION = "ALGO1")
), 
[Isin].[Isin].[DE0001104776]),
[Notional.SUM]
,
BASC) 
ON ROWS 
FROM[TraderCube] 
WHERE ([Date].[Date].[2019-11-18])


person TilleyTech    schedule 19.11.2019    source источник


Ответы (2)


Это хороший прогресс за два месяца. Скромный совет: вы всегда должны описывать свою проблему простыми словами вместе с разработанным кодом. Это помогает человеку ответить.

Сформируйте свой код, насколько я понимаю, вам нужны книги "ALGO1" со всеми членами [ISin], кроме члена "DE0001104776". Основываясь на этом понимании, используйте код ниже

NON EMPTY
ORDER
(
([Book].[Book].[ALGO1],{[Isin].[Isin].children-[Isin].[Isin].[DE0001104776]}),
[Notional.SUM],
BASC
) 
person MoazRub    schedule 19.11.2019
comment
Привет. Спасибо, я думаю, что понял это быстро, так как я занимаюсь разработкой программного обеспечения с середины 90-х, SQL с тех пор, и я также работаю над кодом Java8 на стороне сервера куба, поэтому MDX пришел ко мне быстро / с большим количеством методом проб и ошибок! Спасибо за ваш отзыв. Я буду иметь это в виду! :). Я использовал то, что вы описали в тестах/жестко запрограммированном MDX. Там, где инструмент должен иметь возможность справляться с несколькими фильтрами, я в итоге использовал ФИЛЬТР (набор, который я хочу, (условие И условие) ИЛИ (условие)... объединенный в цепочку, и он хорошо работает для многих фильтров). Я думаю, что вы не можете использовать FILTER и EXCEPT вместе. - person TilleyTech; 20.11.2019
comment
Итак, я думаю, что мне нужно будет определить наличие списка аргументов (аргументов), КРОМЕ ИСКЛЮЧЕНИЯ, и, если это так, создать запрос по-другому (или переписать все, кроме меня в торговом зале, и установить ограничение по времени! ха-ха) . - person TilleyTech; 20.11.2019
comment
Добро пожаловать. Если ответ решает вашу проблему, вам следует рассмотреть возможность пометить его как ответ и / или проголосовать за него. - person MoazRub; 20.11.2019
comment
Я попытался написать жестко закодированный запрос для тестирования (прежде чем я начну создавать общий код C# для построения запросов. WITH Member [Measures].[Book_Label] AS [Book].[Book].CURRENTMEMBER.MEMBER_CAPTION Member [Measures].[Isin_Label ] AS [Isin].[Isin].CURRENTMEMBER.MEMBER_CAPTION SELECT NON EMPTY {[Measures].[Book_Label],[Measures].[Isin_Label],[Measures].[Notional.SUM]} НА СТОЛБЦАХ, НЕПУСТОЙ ПОРЯДОК( EXCEPT({[Книга].[Книга].[ALGO1], [Книга].[Книга].[EY_LDN]},{[Isin].[Isin].[Isin]-[Isin].[Isin].[ DE0001104776]}),[Notional.SUM],BASC) ON ROWS FROM[TraderCube], WHERE([Date].[Date].[2019-11-19]) работает: - person TilleyTech; 20.11.2019
comment
возвращает Book Isin Notional.SUM EY_LDN AllMember ‹число› ALGO1 ‹число› - person TilleyTech; 20.11.2019
comment
В основном [Isin].[Isin].[Isin] (или [Isin].CHILDREN) — [Isin].[Isin].[некоторые Isin] возвращает ALLMEMBER - person TilleyTech; 20.11.2019
comment
На самом деле я просто сопоставил его с обычным сводом (с тем же источником куба), и - [Isin].[Isin].[DE0001104776] не имеет никакого эффекта, поскольку Notional.SUM является той же суммой, тогда как я ожидал, что общая сумма должна быть меньше суммы для этого Isin. Ммммм :) - person TilleyTech; 20.11.2019
comment
вы все еще сталкиваетесь с проблемой? - person MoazRub; 20.11.2019
comment
Привет. Да, это не сработало, хотя у меня есть другие элементы работы, которые можно добавить к этому. Пришел запрос итогов, поэтому я изменил свой [dim].CHILDREN на [Dim].Dim].Members, чтобы получить итоговую строку (в крайнем правом измерении), за исключением того, что она неверна/несовместима с необработанным поворотом Excel против куба. Я думаю, что это связано с тем, как рассчитываются определенные меры, поскольку они часто представляют собой настраиваемые «постпроцессоры» в Java, выполняющие пользовательские действия. Поэтому я буду вести свои собственные промежуточные итоги на С# :) - person TilleyTech; 21.11.2019
comment
Я обновлю этот тикет/тред, когда заработаю ЗА ИСКЛЮЧЕНИЕМ. - person TilleyTech; 21.11.2019

Я вернулся к попытке объединить мой работающий в настоящее время 1..n FILTER builder в сочетании с EXCEPT (запрошено бизнесом). К сожалению, несмотря на то, что запрос проходит проверку синтаксиса и выполняется, как сообщается в исходном сообщении, куб/сервер игнорирует его.

Я только что попробовал добавить ‹> в свой ФИЛЬТР, и это сработало! :)

Вот пример.

WITH  
  Member  [Measures].[Book_Label] AS [Book].[Book].CURRENTMEMBER.MEMBER_CAPTION 
  Member  [Measures].[Isin_Label] AS [Isin].[Isin].CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
NON EMPTY {[Measures].[Book_Label],[Measures].[Isin_Label],[Measures].[Notional.SUM]} 
ON COLUMNS, 
NON EMPTY 
ORDER( 
FILTER(
([Book].CHILDREN,[Isin].CHILDREN), 
(([Book].[Book].CURRENTMEMBER.MEMBER_CAPTION = \"ALGO1\") AND 
([Isin].[Isin].CURRENTMEMBER.MEMBER_CAPTION <> \"DE0001102309\"))
),[Notional.SUM],
BASC) 
ON ROWS 
FROM[TraderCube] 
WHERE([Date].[Date].[2019-11-21])

person TilleyTech    schedule 22.11.2019