1

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

  • 身份证店
  • 标识产品
  • 日期
  • 数量

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

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

4

2 回答 2

0

在我为客户创建的模型中,我有时会按照 ic3 的建议采取另一条路线:

尤其是当在这些之上还有很多额外的计算时(例如年初至今、开始至今、月初至今等)。

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

优点:

  • 可以追溯历史
  • 可以在这些“之上”添加很多公式,你总是知道基础是好的
于 2015-10-17T13:28:07.773 回答
0

假设您有一个具有 [Year]、[Month] 和 [Day] 级别的 [Time] 维度。

如果

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

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

  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(又名 Currentmember)也是标准 MDX,允许检索层次结构/维度的当前值。

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

  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

于 2015-10-17T11:25:09.340 回答