2011-12-21 2 views
0

Я хотел бы написать KPI в SSAS, который возвращает мне среднее значение для всего возраста сотрудника. Дата рождения сотрудника находится в Dim_Employee. Я уже прочитал 3 книги, полный рекомендаций по дате и времени MDX, но ни один из них не работал. С часами отчаянного испытания и ошибки я пробовал бесчисленные комбинации с решением без успеха.Использование DateDiff в SSAS MDX

Дата рождения - это дата и время (null) в исходной базе данных. Решение, которое я попробовал это следующее:

VBA!DateDiff("yyyy", now(), [Employee].[BirthDate].CurrentMember.Member_Value) 

Конечно, я должен использовать [Date].[Date].CurrentMember вместо now(), но для простоты я использовал это.

В измерении Employee я создал ValueColumn с типом данных Date. Когда я пытаюсь выполнить его в Management Studio, он возвращает мне следующую ошибку:

"The Axis0 function expects a tuple set expression for the argument. A string or numeric expression was used."

Когда я не использую Member_Value, она возвращает нуль, и DateDiff возвращает -2010.

Поскольку я не несу ответственности за структуру куба, где я хотел бы написать этот KPI, я ищу решение, которое не требует новых измерений, измерений вообще. (однако, если нет решения без добавления новых элементов в куб, тогда я, конечно, предложим запрос на изменение в данном кубе)

Каково решение в этом случае? Можно ли написать этот KPI без использования дополнительных мер?

ответ

1

Отвечая на мой собственный вопрос.

Похоже, что это невозможно решить, как я пытался. Наконец, я добавил новый столбец под T-SQL к Fact_Headcount, который теперь использует INNER JOINs для Dim_Employee и Dim_Date, и я использую DateDiff T-SQL для расчета возраста для каждого сотрудника с каждым дат-временем. Теперь я добавил Age как меру в эту группу HeadCount MeasureGroup, и теперь мне удастся выполнить этот расчет KPI.

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

+0

Поздравляем с решением. Когда вы в состоянии, пожалуйста, отметьте свой ответ как «принятый», чтобы другие могли узнать о вашем успехе. Приветствия ~ –

0

Попробуйте использовать функцию CDate:

VBA!DateDiff("yyyy", now(), CDate([Employee].[BirthDate].CurrentMember.Member_Value)) 
0

Я принимаю с ответом, мы могли бы также сделать это как

Datediff("yyyy",Now(),[Delivery Date].[Date].CurrentMember.Name) 

- Здесь формат Now() и член делает вопрос. Когда я делал в [Приключенческие работы] Куб с правильным фоном, я получаю датичный в годах

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