2013-08-19 3 views
1

Я новичок в MDX, и у меня есть простой вопрос. Я работаю с TFS Cube, он называется Team System. Моя проблема:MDX Сравните атрибут DateTime

У меня есть выражение IIF, где я хочу проверить дополнительное мое выражение с помощью оператора И. Там я хочу сравнить два объекта DateTime. В отчете должны отображаться только данные с фактической даты. Вот мой код:.

IIF(ISEMPTY(SUM(YTD(
    [Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember), 
    [Measures].[EffectivelyValue])) 

И [Элемент работы] [PlannedWeek__HierarchyByWeek] .CurrentMember < Теперь()

, [Measures].[EffectivelyValue] 
    , SUM(YTD(
    [Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember), 
    [Measures].[EffectivelyValue])) 

Запланированные Неделя само создано поле, которое имеет тип данных DateTime. Функция Now() также имеет тип данных DateTime, поэтому сравнение должно быть правильным, но ничего не происходит.

Поблагодарив вас в ожидании

Eugen

ответ

1

членов иерархии в MDX имеет тип данных «член», и не имеет «примитивный» типа данных, как даты и время, строку или целое число. Только свойства элемента имеют «примитивные» типы данных. Вы можете либо определить свойство, как datetime атрибута вашей недели. Предполагая, что вы SQL Server Analysis Services, это будет сделано через отношения.

Или вы можете использовать строковые операции для извлечения информации о дате из свойства UniqueName, что позволяет избежать необходимости менять куб. Уникальное имя содержит данные, которые вы определили как ключ в вашем дизайне куба. Предполагая, что члены иерархии вашей недели имеют ключ, из которого можно извлечь что-то вроде 20130820 20 августа 3013 с помощью строковых функций (я просто буду использовать Mid(, 30, 8) как пример ниже), вы могли бы сделать что-то вроде

CLng(Mid([Work Item].[PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName, 30, 8)) 
< 
CLng(Format(Now(), "yyyymmdd")) 

Вы будете нужно проверить, что именно показывает CurrentMember.UniqueName в вашем кубе, чтобы адаптировать приведенный выше код.

И, наконец, вы могли бы также использовать строковые методы для извлечения соответствующих частей из UniqueName, а затем функцию CDate, чтобы сравнить с неизменным Now(), i. е. выполните все операции с левой стороны от <.

1

Здравствуйте, большое вам спасибо за ответ. Я пробовал:

Mid([Work Item].[xxxx_PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName,58,10) 

показывается, например. 2013-07-21, 2013-07-28 (она показывает неделю окончаний)

поэтому я попытался это:

AND CLng(Mid([Work Item].[xxxx_PlannedWeek__HierarchyByWeek].CurrentMember.UniqueName,58,10)) 
<CLng(Format(Now(), "yyyy-mm-dd")) 

Но ничего не происходит. Если я выполняю его одним способом, он везде отображается «истина». Но у меня есть наборы данных с датами, например. > 2013-08-23. Поэтому также должны быть ложные значения.

EDIT: OK Я решил проблему.

Format(Now(), "yyyy-mm-dd") 

должен быть

Format(Now(), "yyyy-MM-dd") 
+0

Рад, что вы нашли его. – FrankPl

Смежные вопросы