MDX:与去年同期相比

时间:2015-10-16 15:08:07

标签: mdx iccube

假设我有一个简单的表格,其中包含以下销售数据:

  • id shop
  • id product
  • 日期
  • 金额

你能帮我为计算成员编写MDX查询,以获得与上一年同期相比的当期销售比率吗?

例如,如果将月份或季度选为维度之一。

2 个答案:

答案 0 :(得分:0)

假设您拥有[年],[月]和[日]等级的[时间]维度。

如果

SELECT
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0,
    [Measures].[Sales] on 1
FROM
    [Cube]

返回2015年所有月份的销售额。我们可以添加一个计算度量来获得比率:

  WITH
    MEMBER [Sales Ratio] AS DivN( 
                [Sales], 
               ( ParallelPeriod( [Time].[Year], 1, [Time].current ), [Sales] )
  SELECT
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0,
    {[Sales],[Sales Ratio]} on 1
  FROM
    [Cube]

DivN是特定于icCube的,允许将“空白”划分为“空白”。安全

ParallelPeriod是标准的MDX函数,它返回上一年的月份。你也可以使用Lag( - 12),即旅行'向后退了12次。

current (aka Currentmember)也是标准MDX,允许检索层次结构/维度的当前值。

在icCube中,我添加function以导航到上一年,以便您可以重复使用它(并根据需要修复一个)。喜欢:

  WITH
    FUNCTION timePrevYear(t_) AS ParallelPeriod( [Time].[Year], 1, t_ )
    MEMBER [Sales Ratio] AS DivN( 
                [Sales], 
                ( timePrevYear( [Time].current ), [Sales] )
  SELECT
    [Time].[Jan 2015]:[Time].[Dec 2015] on 0,
    {[Sales],[Sales Ratio]} on 1
  FROM
    [Cube]

它会有点太多但最终你可以在MDX Utility或Stats维度中添加这种计算,所以你甚至可以让最终用户在下拉列表中选择这个报告工具。有关here的更多信息。

答案 1 :(得分:0)

在我为客户创建的模型中,我有时采用另一条路线,正如ic3所建议的那样:

特别是在这些基础上会有很多额外的计算(例如年初至今,从最初开始到今天,到目前为止等)。

这是: 再次加载相同的事实数据,但将“加载日期”设置为“日期” - 1年(例如mySQL:DATE_ADD(,INTERVAL -1 YEAR)。

优点:

  • 可以浏览历史记录
  • 可以在这些“最上面”添加许多公式,你总是知道基本没问题