代码之家  ›  专栏  ›  技术社区  ›  Meff

递归日级计算的汇总

  •  0
  • Meff  · 技术社区  · 14 年前

    我正试图建立一个立方体计算。我目前的汇款是收到汇率,这些汇率将在月初寄出。有时他们会在一个月内改变,我会收到一个汇率,用于该货币。

    最初的问题是lastnonempty使用了被质疑的粒度,这意味着当我按天查询时,大多数天没有汇率,所以计算失败。我最初用递归计算替换了汇率度量,但后来又用以下方法替换:

    WITH  
    MEMBER [Measures].[EOD]
    AS 
        Aggregate({NULL:[Date].[Calendar Y M D].CurrentMember}, [Measures].[End Of Day Rate])
    

    因此,在日期维度上查看时,它将获得最新的汇率。这允许每日计算如下:

    MEMBER [Measures].[Converted]
    AS
        SUM 
        ( 
            {[Currency].[Currency].[Currency] * [Date].[Calendar Y M D].CurrentMember},
            (
                (   
                    [Measures].[Sales]
                )
                / [Measures].[EOD]
            )
        )
    

    最后,我在一个查询中使用这个:

    SELECT
    {
        [Measures].[Converted]
    }
    ON COLUMNS,
    NON EMPTY
    {
        [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-01] : 
        [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-31] 
    }
    ON ROWS
    FROM [Cube]
    

    这一切都很好,但理想情况下我更喜欢按年/月查询,因为这些是月末报告。我可以在代码层中总结所有这些内容,但我宁愿让MDX自己完成。

    问题是,这些计算几乎是在日级别递归进行的,然后我希望将它们汇总到月(甚至年)级别。

    我确实尝试过货币转换向导,将汇率与上面聚合的时间交换,但尝试在SSMS中浏览多维数据集时锁定了服务器,因为它尝试对整个日历进行聚合:(

    对什么方法最好采取有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Registered User    14 年前

    如果在DSV中使用视图或命名查询而不是表,则可以调整视图或命名查询,将数据限制在加载汇率数据的天数内。我不确定这是否能满足您的业务需求,但是您可以通过这种方法消除空数据问题。毕竟,加载不包含值的数据没有多大用处,或者更糟的是,预加载一个客户预计汇率,一旦实际数字可用,就必须覆盖该汇率。