在MDX中根据日期获取度量

时间:2009-12-10 10:58:14

标签: ssas mdx

如果不深入了解数据结构,我们很难描述这些内容,我会尽量保持尽可能短的数据,同时提供尽可能多的信息。

我有一个衡量标准,它是一段时间内的货币价值(现金流量),以及日期维度,还有一个用于估值。估值具有日期,此日期将与第一个现金流日期相对应。

后续内容的要点是第一个值(换句话说,现金流量值与估值日期对应。如果我知道估值日期,很容易将此日期转换为日期维度以使我获得值im后:

WITH MEMBER [Measures].[Value at Valuation Date]
AS
(
    [Measures].[Value], 
    [Date].[Date].&[2009-09-30T00:00:00]
)

但是,如果我有一组估值日期(比如,我试图在估值日期获得3个月的估值麦芽汁值),这种方法就会崩溃,因为之前的估值会有一个与日期相对应的值。后期评估。

因此,例如,此计算成员将返回错误的值:

WITH MEMBER [Measures].[Value at Valuation Date]
AS
(
    [Measures].[Value], 
    {[Valuation.[Valuation Date].&[2009-07-31T00:00:00]:[Valuation].[Valuation Date].&[2009-09-30T00:00:00]}
)

在此示例中,有3个估值(7月底,8月和9月),每个估值具有从相应估值日期开始(月末)的每月现金流量值。而不是返回每个估值的第一个现金流量值,而是获得恰好与估值日期相对应的所有现金流量值的总和。

我希望这很清楚,可以开始讨论这个问题。如果它有用,这是一个SQL查询,它将从我的多维数据集临时数据库中获取正确的数据:

SELECT 
    v.valuationDate,
    SUM(cf.value) as [value at valuation date]
FROM dbo.Valuation v
INNER JOIN dbo.Cashflow cf
ON v.id = cf.valuationId
and v.valuationDate = cf.cashflowDate
GROUP BY v.valuationDate

由于

2 个答案:

答案 0 :(得分:2)

我最终确实解决了这个问题,以防万一这里的其他人使用了它。

我最终得到了一个像这样的计算成员:

([Measures].[Value], 
HEAD(
      FILTER([Date].[Date].Members, Not IsEmpty([Measures].[Value])), 
      2).Item(1))

如果你还记得我需要给定一组日期的第一个“价值”。

答案 1 :(得分:1)

当您将一个集合压入计算成员时,您隐含地要求汇总该度量。

为了获得与SQL查询等价的内容,您必须编写一个MDX查询,该查询要求在行上设置一组日期。

例如

SELECT
  Measures.[Value] on columns,
  {[Valuation.[Valuation Date].&[2009-07-31T00:00:00]
  :[Valuation].[Valuation Date].&[2009-09-30T00:00:00]} on rows
FROM [<Cube Name here>]

但是如果您不知道特定的日期范围并且只想获得第一个值,您可以执行以下操作:

NONEMTPY([Value]。[Valuation Date]。[Valuation Date] .Members * Measures.Value).Item(0)

哪个应该比使用Filter()函数快得多