Оператор MDX MAX приводит к 999/99999 запросам к Dimension

Следующий запрос MDX для моего измерения возвращает значения 999/99999 в зависимости от количества элементов в измерении.

WITH MEMBER [Measures].[MaxKey] AS
   MAX(
     [Fare Media].[Fare Media Id].ALLMEMBERS
   , [Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
 SELECT
   {[Measures].[MaxKey]} ON 0
 FROM
   [SPCube]

Это дает мне результат 99999, хотя на самом деле у меня есть значения больше этого в моем измерении, а общее количество членов составляет 640 000.

Примените ту же логику к другому измерению в кубе следующим образом:

WITH MEMBER [Measures].[MaxKey] AS
   MAX(
     [Sales Period].[Sales Period Id].ALLMEMBERS
   , [Sales Period].[Sales Period Id].currentmember.MEMBER_KEY)
 SELECT
   {[Measures].[MaxKey]} ON 0
 FROM
   [SPCube]

Ответ, который я получаю, равен 999 как максимальное значение, но общее количество членов составляет 675, из которых у меня есть идентификатор больше 999.

Я попытался применить функцию StrToValue, но потом получаю сообщение об ошибке:

Ожидалось выражение MDX. Было указано пустое выражение.


person VKarthik    schedule 02.02.2015    source источник


Ответы (1)


Возвращает ли это что-то более близкое к тому, что вы ожидаете?

 WITH 
   SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
   MEMBER [Measures].[KeyMeasure] AS
     [Fare Media].[Fare Media Id].currentmember.MEMBER_KEY
   MEMBER [Measures].[MaxKey] AS
     MAX([X],[Measures].[KeyMeasure])
 SELECT
   [Measures].[MaxKey] ON 0
 FROM
   [dsvAfmsDWH_ServiceProviderCube]

Затем вы можете объединить:

 WITH 
   SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
   MEMBER [Measures].[MaxKey] AS
     MAX([X],[Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
 SELECT
   [Measures].[MaxKey] ON 0
 FROM
   [dsvAfmsDWH_ServiceProviderCube]

set X обрабатывается до остальной части скрипта, поэтому его разделение должно помочь. Пользовательские наборы всегда оцениваются перед пользовательскими мерами, поэтому теперь мера знает, с каким набором работать.


Редактировать

Поскольку я не вижу ваш куб, я немного протестировал его на AdvWrks

Это упрощенная версия ошибки в вашем скрипте:

WITH 
  MEMBER [Measures].[x] AS 
    [Customer].[Customer].CurrentMember.Member_Key 
SELECT 
  {[Measures].[x]} ON 0
 ,[Customer].[Customer].CurrentMember ON 1
FROM [Adventure Works];

Это возвращает элемент по умолчанию «Все клиенты», который, я думаю, будет соответствовать вашему 9999?

введите здесь описание изображения

Если я затем расширюсь до чего-то вроде моего первого выражения, у нас будет это:

WITH 
  SET [s] AS 
    [Customer].[Customer].MEMBERS 
  MEMBER [Measures].[KeyMeasure] AS 
    [Customer].[Customer].CurrentMember.Member_Key 
  MEMBER [Measures].[maxX] AS 
    Max
    (
      [s]
     ,[Measures].[KeyMeasure]
    ) 
SELECT 
  [Measures].[maxX] ON 0
FROM [Adventure Works];

Который возвращает гораздо лучший результат, без ошибки, которую вы добавили в комментарии.

введите здесь описание изображения

Если я затем упрощу до эквивалента моего второго сценария, у меня будет следующее:

WITH 
  SET [s] AS {[Customer].[Customer].MEMBERS}
  MEMBER [Measures].[maxX] AS 
    Max
    (
      [s]
     ,[Customer].[Customer].CurrentMember.Member_Key 
    ) 
SELECT 
  [Measures].[maxX] ON 0
FROM [Adventure Works];

Снова никаких проблем с результатом:

введите здесь описание изображения

Важно

Какой тип данных является ключевым свойством иерархии [Fare Media].[Fare Media Id]? Если это не число, то MAX не будет работать.

person whytheq    schedule 02.02.2015
comment
Ну, я получаю следующую ошибку, когда меняю это: функция Axis0 ожидает выражение набора кортежей для аргумента. Было использовано строковое или числовое выражение. - person VKarthik; 03.02.2015
comment
Спасибо за ответ. Первый запрос, как я уже сказал, выдавал ошибку, которую я указал выше. Второй снова дает 9999 в качестве ответа. - person VKarthik; 03.02.2015
comment
Еще раз спасибо за быстрое обращение. Тип данных ключевого свойства [Fare Media].[Fare Media Id] — BIGINT. Я так понимаю, когда вы говорите о ключевом столбце, вы имеете в виду значение KeyColumns в этом конкретном свойстве иерархии? Просто подтверждаю. - person VKarthik; 04.02.2015
comment
Что касается новых запросов, я снова получаю результат 99999. - person VKarthik; 04.02.2015
comment
@VKarthik Я говорю о настройке в службах анализа, где создается куб. Я не говорю о типе данных столбца в реляционной базе данных. - person whytheq; 04.02.2015
comment
Не подскажете, где именно мне нужно искать? Это в BIDS или SSMS? Должен ли я смотреть на объект Dimension в BIDS, который я разместил здесь? - person VKarthik; 05.02.2015
comment
@VKarthik точно - проверяйте в СТАВКАХ - person whytheq; 05.02.2015
comment
ссылка ‹br/› Это окно моих свойств. Он установлен на обычный, это то, что вы просите меня установить для него числовое значение? - person VKarthik; 05.02.2015
comment
@VKarthik Я изо всех сил старался ответить на ваш вопрос - если с вашим кубом возникла проблема, создайте новый вопрос. К сожалению, я не разработчик куба и не администратор, но я пишу MDX и сталкивался с проблемами MAX раньше, и это было связано с типом данных, установленным в кубе ... Затем мне пришлось попросить нашего администратора баз данных провести расследование. - person whytheq; 05.02.2015
comment
Я понимаю. Большое спасибо за ваш ответ. Я буду исследовать это с этого момента и попытаюсь поиграть с типом данных нужного столбца. В моем последнем ответе в ссылке я дал ему перенаправление на снимок экрана окна «Свойства» столбца «Идентификатор тарифного плана», где я предположил настройку числового значения, о котором вы говорили, поэтому я только просил подтвердить это. В любом случае еще раз спасибо за помощь. - person VKarthik; 06.02.2015
comment
@VKarthik Я на самом деле не играю с кубами в BIDS, поэтому не могу помочь - у меня просто ощущение, что есть проблема с типом данных. - person whytheq; 06.02.2015