0

我想在 SSAS 中编写一个 KPI,它可以返回所有员工年龄的平均值。员工的出生日期在 Dim_Employee 中。我已经阅读了 3 本关于 MDX 日期和时间处理建议的书,但没有一本有效。经过数小时的绝望试验和错误,我尝试了无数组合来解决问题,但没有成功。

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

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

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

在 Employee 维度中,我创建了一个具有 Date 数据类型的 ValueColumn。当我尝试在 Management Studio 中执行它时,它会返回以下错误:

“Axis0 函数需要参数的元组集表达式。使用了字符串或数字表达式。”

当我不使用 Member_Value 时,它​​会返回 null,而 DateDiff 会返回-2010.

因为我不负责要编写此 KPI 的多维数据集的结构,所以我搜索了一个根本不需要新的度量、维度的解决方案。(但是,如果不向多维数据集添加新元素就没有解决方案,那么我当然会在给定的多维数据集中提出更改请求)

这种情况下的解决方案是什么?是否可以在不使用其他度量的情况下编写此 KPI?

4

3 回答 3

1

回答我自己的问题。

我试过了,这似乎无法解决。最后,我在 T-SQL 下向 Fact_Headcount 添加了一个新列,该列现在对 Dim_Employee 和 Dim_Date 使用 INNER JOIN,我使用 T-SQL 的 DateDiff 计算每个给定日期时间的每个员工的年龄。现在我将 Age 作为 Measure 添加到此 HeadCount MeasureGroup 中,现在我可以设法进行此 KPI 计算。

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

于 2011-12-21T18:02:16.933 回答
0

尝试使用 CDATE 函数:

VBA!DateDiff("yyyy", now(), CDate([Employee].[BirthDate].CurrentMember.Member_Value))
于 2011-12-21T15:41:51.107 回答
0

我接受你的回答,我们也可以这样做

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

-- 这里 Now() 的格式和成员正在发出问题。当我在 [Adventure Works] Cube 做正确的格式时,我确实在几年内得到了 datediff

于 2011-12-24T13:55:46.257 回答