Диапазоны дат в Мондриане

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

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


person Tarun Kumar    schedule 22.11.2011    source источник


Ответы (1)


Возиться с датами таким образом с MDX может быть больно. Я делал подобные вещи в прошлом, преобразовывая Name или Caption в строку/число/дату и сравнивая их с вашими входными параметрами t1 и t2 (аналогично преобразованные в строку/число/дату в том же формате).

Возможно, t1 — это строка «31/12/2010», а ваш куб содержит такие элементы, как [Время].[Все время].[2010].[Декабрь].[29] затем вам нужно будет преобразовать оба в общий формат для сравнения. MDX предоставляет такие методы, как MemberToStr(), которые дают строковое представление .CurrentMember и позволяют сравнить их.

Функции VBA можно использовать в некоторых разновидностях многомерных выражений, поэтому вы можете манипулировать строками с помощью Replace и InStr и даже вызывать такие функции, как CDate(), чтобы получить значение в той же форме, что и ваш входной параметр.

Ваш окончательный MDX может выглядеть примерно так... хотя я значительно упростил манипуляции, необходимые для преобразования Caption члена в строку, которую примет функция CDate:
SELECT
{Filter({[Time].[Day].members}, CDate([Time].CurrentMember.Caption) <= CDate("2010-12-31"))} ON ROWS,
[Measures].[Something] ON COLUMNS
FROM [CubeName]

Предложение ROWS сначала берет набор всех членов [Time] на уровне [Day], а затем фильтрует этот набор, чтобы оставить только те, у которых Caption (преобразованный в объект даты) меньше или равен вашей входной строке. (преобразованный в объект даты).

person Magnus Smith    schedule 27.11.2011