Изменение формата даты на более короткую дату

У нас есть следующий скрипт:

WITH 
SET [Last56Days] as
 TAIL ( [Date].[Date - Calendar Month].[Calendar Day].members, 56 )
MEMBER [Measures].[DateValue] as
 [Date].[Date - Calendar Month].CURRENTMEMBER.member_value, format_string = "short date"
MEMBER [Measures].[DateValue2] as
 [Date].[Date - Calendar Month].CURRENTMEMBER.member_value, format_string = "dd/mm/yyyy"
SELECT
    { [Measures].[DateValue], [Measures].[DateValue2]} ON COLUMNS,
    Hierarchize ({ [Last56Days] } ) ON ROWS
FROM [Our Cube]

Это возвращает это:

Могу ли я как-то изменить формат даты, чтобы даты были такими, как "09 Фев 2014", т.е. короче?

2 ответа

Решение

Из комментариев я предполагаю, что проблема в том, что у вас есть целочисленные ключи даты и столбец имени, который всегда имеет тип строки в службах аналитики. Они не будут работать с форматами даты, для которых нужны даты (или двойные числа, содержащие дни с 1 января 1900 года, и в виде дроби время дня, то есть 8:30 утра будет 8,5/24).

Таким образом, вы можете использовать

MEMBER [Measures].[Date as int] as
       [Date].[Date - Calendar Month].CURRENTMEMBER.Properties('Key0', Typed)
MEMBER [Measures].[Date Year] as
       Fix([Measures].[Date as int] / 10000)
MEMBER [Measures].[Date Month] as
       Fix(([Measures].[Date as int] - [Measures].[Date Year] * 10000) / 100)
MEMBER [Measures].[Date Day] as
       [Measures].[Date as int] - [Measures].[Date Year] * 10000 - [Measures].[Date Month] * 100
MEMBER [Measures].[DateValue] as
       // convert it to Date data type and use a format string on that:
       DateSerial([Measures].[Date Year], [Measures].[Date Month], [Measures].[Date Day]),
       format_string = 'dd/mm/yyyy'

Смотрите документацию Properties и список функций VBA, таких как Fix а также DateSerial,

Глядя на сложность моего кода выше, может быть лучше использовать строковую логику, а не целочисленную логику, то есть опуская typed аргумент Properties а затем рассчитать год, месяц и день, используя Left, Mid, а также Right и преобразовать это в целые числа. Но "детали этого оставлены в качестве упражнения для читателя".

Попробуйте с одним из этого формата:

 =Format(Fields!myDateTime.Value, "M/d/yy") ... 6/15/09 
 =Format(Fields!myDateTime.Value, "M/d/yyyy h:mmtt") ... 6/15/2009 2:45PM 
 =Format(Fields!myDateTime.Value, "MM/dd/yy HH:mm") ... 06/15/09 14:45 
 =Format(Fields!myDateTime.Value, "MMM d, yyyy") ... Jun 15, 2009 
 =Format(Fields!myDateTime.Value, "Short Date") ... 6/15/2009 
 =Format(Fields!myDateTime.Value, "Long Date") ... Monday, June 15, 2009 
 =Format(Fields!myDateTime.Value, "ddd dd/MM/yyyy") ... Mon 04/04/2011 

Ссылка на источник. Надеюсь, поможет

РЕДАКТИРОВАТЬ Я извиняюсь! Я не видел комментарий в конце. В любом случае, я думаю, вы уже видели эту ссылку, но, возможно, вы можете попробовать использовать format_string так:

format_string = "dd/mmm/yyyy"
Другие вопросы по тегам