如果不深入了解数据结构,我们很难描述这些内容,我会尽量保持尽可能短的数据,同时提供尽可能多的信息。
我有一个衡量标准,它是一段时间内的货币价值(现金流量),以及日期维度,还有一个用于估值。估值具有日期,此日期将与第一个现金流日期相对应。
后续内容的要点是第一个值(换句话说,现金流量值与估值日期对应。如果我知道估值日期,很容易将此日期转换为日期维度以使我获得值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
由于
答案 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()函数快得多