Ssas MDX在开始日期和结束日期之间重复测量

Ssas MDX在开始日期和结束日期之间重复测量,ssas,mdx,Ssas,Mdx,考虑以下事实表: customer | StartDate | EndDate | FeePerDay | FeeDayDuration A | 01.01.2015 | 03.01.5015 | 10 | 3 是否可以创建一个计算过的度量值,该度量值将重复“FeePerDay”,直到达到EndDate。 如果我创建一个MDX表达式,如(这是伪MDX): 结果应如下表所示: customer | Date | ValuePer

考虑以下事实表:

 customer  | StartDate  | EndDate     | FeePerDay | FeeDayDuration
      A    | 01.01.2015 | 03.01.5015  | 10        |  3
是否可以创建一个计算过的度量值,该度量值将重复“FeePerDay”,直到达到EndDate。 如果我创建一个
MDX
表达式,如(这是伪MDX):

结果应如下表所示:

 customer | Date         | ValuePerDay
    A     | 31.12.2014   | NULL
    A     | 01.01.2015   | 10
    A     | 02.01.2015   | 10
    A     | 03.01.2015   | 10
    A     | 04.01.2015   | NULL
    A     | 05.01.2015   | NULL
    A     | 06.01.2015   | NULL

未经测试,但你可以试一试

WITH MEMBER Measures.ValuePerDay AS
IIF(
    DateDiff(
            "d", 
            EXISTS([Customer].[StartDate].MEMBERS, ([Customer].CurrentMember, FeePerDay)).Item(0), 
            [Date].CurrentMember
            ) <=0
    and
    DateDiff(
            "d", 
            [Date].CurrentMember, 
            EXISTS([Customer].[EndDate].MEMBERS, ([Customer].CurrentMember, FeePerDay)).Item(0)
            ) <=0
    ,
    FeePerDay 
    ,
    NULL
   )

SELECT {[Customer].Members} 
*
{ [Date].[31.12.2014] : [Date].[06.01.2015] } ON 1,
ValuePerDay ON 0
FROM [Cube]
,成员度量值为.ValuePerDay
IIF(
DateDiff(
“d”,
存在([Customer].[StartDate].MEMBERS,([Customer].CurrentMember,FeePerDay))。项(0),
[日期].CurrentMember

)你能在数据源或数据源视图中计算它吗?这是实现类似目标的最简单的方法。1.当你说重复度量时,你的意思是针对该客户?2.在本例中,度量在结束日期之后重复(也就是说,第04位的值也是10,而它应该是空的。Thx SouravA,第04位必须是空的。是的,应该为指定的客户重复测量A@AdrianChodkowski:我的第一次尝试是,通过视图计算它,这对小型Facttables非常有效。在我们的例子中,视图的结果将创建数十亿行,因此视图性能非常差。除了多维数据集prozessing不好之外,我还必须使用ROLAP等…我必须找到其他解决方案:-)啊。我明白了。ValuePerDay实际上是每月的值(或者在您的示例中,至少每月只有一天)。如果您不希望数据在几天内聚合,则可以使用多对多日期维度。但这不会使数据聚合。因此,我必须说,您最初创建视图的方法是正确的。您只需咬紧牙关,购买足够的硬件来处理数十亿行。如果您这样做,SSA中可能会有数十亿行不正确。另一个选择是糟糕的查询性能,在叶级使用一些非常慢的MDX。它将无法与MDX一起使用
WITH MEMBER Measures.ValuePerDay AS
IIF(
    DateDiff(
            "d", 
            EXISTS([Customer].[StartDate].MEMBERS, ([Customer].CurrentMember, FeePerDay)).Item(0), 
            [Date].CurrentMember
            ) <=0
    and
    DateDiff(
            "d", 
            [Date].CurrentMember, 
            EXISTS([Customer].[EndDate].MEMBERS, ([Customer].CurrentMember, FeePerDay)).Item(0)
            ) <=0
    ,
    FeePerDay 
    ,
    NULL
   )

SELECT {[Customer].Members} 
*
{ [Date].[31.12.2014] : [Date].[06.01.2015] } ON 1,
ValuePerDay ON 0
FROM [Cube]