2011-12-21 102 views
0

我想在SSAS中编写一个KPI,它将所有员工年龄的平均值都给出。员工的出生日期在Dim_Employee中。我已经阅读了3本充满MDX日期和时间处理建议的书籍,但都没有成功。随着数小时的绝望试验和错误,我尝试了无数次的解决方案,但没有成功。在SSAS中使用DateDiff MDX

出生日期是源数据库中的datetime(空)。我试图解决方案如下:

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

当然,我应该用[Date].[Date].CurrentMember代替now(),但为了简单起见我用这个。

在Employee维度中,我使用Date数据类型创建了一个ValueColumn。当我尝试在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?

回答

1

回答我的问题。

看起来这不能像我试过的那样解决。最后,我在T-SQL下向Fact_Headcount添加了一个新列,该列现在对Dim_Employee和Dim_Date使用INNER JOIN,并使用T-SQL的DateDiff为每个给定日期时间的每个员工计算年龄。现在我在此HeadCount MeasureGroup中添加了年龄作为衡量标准,现在我可以设法执行此KPI计算。

这意味着我必须对底层模型进行修改以解决此问题。

+0

祝贺解决方案。如果可以,请确保将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯〜 – 2011-12-21 18:23:55

0

尝试使用CDATE功能:

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

我与你的答案接受,我们也可以做到这一点像

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

- 这里的格式,目前()和成员正在发行。当我在[冒险作品]立方体与正确的正方形时,我越来越几年了