Да, вы можете:
with member Measures.[date string] as
Left(Right([Date].[Date].CurrentMember.UniqueName, 9), 8)
member Measures.[date formatted] as
Left(Measures.[date string], 4) + "-" +
Mid(Measures.[date string], 5, 2) + "-" +
Right(Measures.[date string], 2)
member Measures.[date date] as
CDate(Measures.[date formatted])
member Measures.[to today] as
now() - Measures.[date date]
, format_string = 'yy" years, "m" months, "d" days"'
select {
Measures.[date string],
Measures.[date formatted],
Measures.[date date],
Measures.[to today]
}
on columns,
[Date].[Date].[Date].Members
on rows
from [Adventure Works]
дает то, что вы хотите. Конечно, вам не нужны все промежуточные меры, они просто показывают шаг за шагом, что подсчитывается.
Одно замечание, однако: я отформатировал меру to today
с форматом даты, используя yy
. Четырехзначный год будет отображаться как «1912 лет» и т. Д., Поскольку SSAS внутренне использует кодировку даты, например Excel, число дней с 1 января 1900 года. Я неправильно использовал форматирование даты здесь, чтобы отформатировать продолжительность, которая является номер, а не реальная дата. Этот метод форматирования дает только правильные результаты для положительных сроков менее 100 лет. Но это только вопрос форматирования, и, тем не менее, правильный расчет продолжительности. Он просто показывает продолжительность в днях и время в течение дня как фракции.