2016-10-04 4 views
1

У меня есть размер даты оболочки и размер даты продажи. Не удалось настроить рассчитанную меру с разницей в днях между двумя датами. Я пробовал несколько вещей, и вычисление всегда возвращает ошибку.MDX количество дней между измерением даты и размерами даты даты

mdx пример:

WITH 
MEMBER [Measures].[TimeDate] AS [Date].[Day].currentmember 
MEMBER [Measures].[DSODate] AS [DSO Date].[Day].currentmember 
MEMBER [Measures].[DaysSinceSale] AS 
    DateDiff(
     "d" 
     , [Measures].DSODate.MemberValue 
     , [Measures].TimeDate.MemberValue 
    ) 
Select 
    {[Measures].[DaysSinceSale]} ON COLUMNS, 
    {[Date].[Day].members} ON ROWS 
from [Receivables]; 

Я попытался с помощью DATEDIFF, и попытался просто вычитая 2 даты. Предполагая, что это может иметь какое-то отношение к двум параметрам даты, имеющим разные иерархии, но я не совсем уверен, как с этим справиться.

MDX Results

ответ

0

Я нашел способ заставить это работать ... Основная проблема заключалась в том, что у меня не было скрещивания, как и почему. Мне также не нужны пользовательские меры, объявленные в верхней части.

Другая корректировка, которую я сделал, - использовать DateKey в расчете даты. Это, казалось, работало во всех моих тестах и ​​улучшило производительность совсем немного.

WITH 
MEMBER [Measures].[DaysSinceSale] AS 
    [Date].[DateKey].CurrentMember.MemberValue - [DSO Date].[DateKey].CurrentMember.MemberValue 
Select 
    {[Measures].[DaysSinceSale]} ON COLUMNS, 
    {[Date].[DateKey].Members * [DSO Date].[DateKey].members} ON ROWS 
from [Receivables]; 

Если вы видите какие-либо проблемы, которые могут возникнуть при использовании DateKey, дайте мне знать. Для того, что я делаю, это, казалось, отменило правильное значение даты и позволило мне найти разницу между датами без использования функции датифф.

0

Дата преобразования может быть сложно в MDX так, может быть, сначала попробуйте следующий простой подход:

WITH 
MEMBER [Measures].[TimeDate] AS [Date].[Day].currentmember 
MEMBER [Measures].[DSODate] AS [DSO Date].[Day].currentmember 
MEMBER [Measures].[DaysSinceSale] AS 
    DateDiff(
     "d" 
     , VBA!CDate([Measures].DSODate.MemberValue) 
     , VBA!CDate([Measures].TimeDate.MemberValue) 
    ) 
Select 
    {[Measures].[DaysSinceSale]} ON COLUMNS, 
    {[Date].[Day].members} ON ROWS 
from [Receivables]; 

В противном случае вам может понадобиться использовать ключ и подход, аналогичный этому:
MDX - Converting Member Value to CDate

+0

Спасибо за ответ. Я получаю тот же результат #Error. Они оба являются размерами даты, поэтому я считаю, что они являются значениями даты. Оба измерения имеют иерархию Year, Quarter, Month, Day. Размер [Date] - это размер оболочки, который может вызвать проблему. Основная цель здесь - выбрать диапазон дат и рассчитать дни с момента продажи для каждой даты в этом диапазоне дат. Возможно, есть другие способы добиться этого с помощью функций временных рядов, но я действительно не видел, чтобы они работали на индивидуальном дневном уровне. Пример отчета «День за днем», а не «месяц за месяц» –

+0

@ T.Byberg, если вы дважды щелкните #Error в ячейке SSMS, что он говорит? – whytheq

+0

Произошла следующая системная ошибка: несоответствие типов. Запрос (5, 4) Выполнение управляемой хранимой процедуры DateDiff не удалось. Возможно, вы правы, это похоже на проблему, относящуюся к типу. Я попробую несколько вещей с этим и опубликую, если я что-то придумаю. –

Смежные вопросы