Подобные манипуляции с датами с помощью MDX могут быть проблемой.Я делал подобные вещи в прошлом, преобразовав Name
или Caption
в строку / число / дату и сравнив ее с вашими входными параметрами t1 и t2 (аналогично преобразованными в строку / число / дату в том же формате).
Возможно, t1 - это строка "31/12/2010", и ваш куб содержит элементы, такие как [Время]. [Все время]. [2010]. [Декабрь]. [29]тогда вам нужно будет преобразовать оба в общий формат для сравнения.MDX предоставляет такие методы, как MemberToStr()
, который даст вам строковое представление .CurrentMember
и позволит вам сравнить две функции.
Функции VBA могут использоваться в некоторых разновидностях MDX, поэтому вы можете манипулировать строками с помощьюReplace
и InStr
, и даже вызывать такие функции, как CDate()
, чтобы получить значение в той же форме, что и ваш входной параметр.
Ваш окончательный MDX может выглядеть примерно так ... хотяЯ значительно упростил манипуляции, необходимые для получения заголовка члена в строку, которую примет функция CDate:
SELECT<br>
{Filter({[Time].[Day].members}, CDate([Time].CurrentMember.Caption) <= CDate("2010-12-31"))} ON ROWS,<br>
[Measures].[Something] ON COLUMNS<br>
FROM [CubeName]
Предложение ROWS сначала берет набор всех членов [Time] вУровень [день], а затем отфильтровывать этот набор, чтобы оставить только те, у которых заголовок (преобразованный в объект даты) меньше или равен вашей входной строке (преобразованный в объект даты).