【问题标题】:Using DateDiff in SSAS MDX在 SSAS MDX 中使用 DateDiff
【发布时间】:2011-12-21 10:00:04
【问题描述】:

我想在 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 函数需要一个元组集表达式作为参数。A 使用了字符串或数值表达式。”

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

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

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

【问题讨论】:

    标签: ssas mdx kpi


    【解决方案1】:

    回答我自己的问题。

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

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

    【讨论】:

    • 祝贺解决方案。如果可以,请确保将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯~
    【解决方案2】:

    尝试使用 CDATE 函数:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        相关资源
        最近更新 更多