Диапазон дат в Мондриане - PullRequest
2 голосов
/ 22 ноября 2011

Я хочу получить данные для метки времени от t1 до t2.Но t1 и t2 не обязательно могут быть в моей таблице базы данных.Итак, что я хочу: он должен найти следующую доступную временную метку, большую или равную t1 (> t1, если t1 отсутствует в таблице db, или t1, если она там есть), и последняя доступная временная метка меньше или равна t2 (

.FirstSibling, .LastSibling, .FirstChild, .LastChild, .NextMember, .LastMember, HEAD, TAIL не будутработать для меня, так как я хочу, чтобы временная метка была> = t1 и <= t2 (обе они доступны в дБ).Как мне это сделать? </p>

1 Ответ

0 голосов
/ 27 ноября 2011

Подобные манипуляции с датами с помощью 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] вУровень [день], а затем отфильтровывать этот набор, чтобы оставить только те, у которых заголовок (преобразованный в объект даты) меньше или равен вашей входной строке (преобразованный в объект даты).

...