2014-11-26 6 views
1

Я хочу извлечь данные за тот же период прошлого года и в прошлом месяце. для этого я использую Parallelperiod(), для напримернеправильный результат parallelperiod() для DATE в MDX

PARALLELPERIOD([date].[year],1,[date].[date].[20-Sep-2014]) , 

, для которого я получаю выход: 21-Sep-2014

и

PARALLELPERIOD([date].[month],1,[date].[date].[20-Sep-2014]) , 

, для которого я получаю выход: 16-авг-2014

Такая же функция могла бы выбросить какую-то другую дату в течение какого-либо другого месяца

Можете ли вы посоветовать о проблеме, где я делаю неправильно или если есть какая-то другая альтернатива этому?

ответ

1

У вас должно быть несколько дат, которые не существуют в кубе. не

Что функция PARALLELPERIOD делает, говорят нормально, мы 262 членов на [дата] level в 2014 -. Затем он идет к 2013 году и находит элемент на [дата] level, который также 262 членов в Таким образом, если у вас есть полные наборы дат в вашем кубе, эта функция вернет неожиданные результаты.

Поэтому решение состоит в том, чтобы все исторические даты были представлены в кубе. Эти дополнительные даты не должны вызывать дополнительных накладных расходов, так как они будут создавать пустое пространство в кубе, которое обрабатывается очень хорошо SSAS

+0

Хорошо, это правильно. Но я хочу знать, если parallelperiod() идентифицирует месяц с 30 днями, или 31 день или feburary с 28 или 29 днями? потому что после вашего ответа и в соответствии с моим анализом результатов он не может идентифицировать это. Скорее, это просто возврат к 30 дням до указанной даты. Если да, то точность данных очень сложна. можете ли вы направить какое-то решение в этом случае? – sam140

+0

Вам нужно добавить пустые дни в свою базу данных и в куб, тогда он должен работать так, как вы ожидаете. – whytheq

+0

вы хотите добавить пустые дни на самом деле? потому что в date_dimension у меня уже есть полные данные для календаря, но на самом деле таблица, если транзакция для определенной даты не существует, запись для этого date_sid не существует. – sam140