Использование DateDiff в SSAS MDX - PullRequest
0 голосов
/ 21 декабря 2011

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

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

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

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

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

"Функция Axis0 ожидает выражение набора кортежей для аргумента. Использовалось строковое или числовое выражение."

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

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

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

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

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

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

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

0 голосов
/ 24 декабря 2011

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

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

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

0 голосов
/ 21 декабря 2011

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

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