假设我有一个简单的表,其中包含销售数据,例如:
- 身份证店
- 标识产品
- 日期
- 数量
你能帮我为计算成员编写MDX查询以获得当前期间与上一年同期的销售比率吗?
例如,如果选择月份或季度作为维度之一。
在我为客户创建的模型中,我有时会按照 ic3 的建议采取另一条路线:
尤其是当在这些之上还有很多额外的计算时(例如年初至今、开始至今、月初至今等)。
这是:再次加载相同的事实数据,但将“日期”设置为“加载日期” - 1 年(例如 mySQL:DATE_ADD(,INTERVAL -1 YEAR)。
优点:
假设您有一个具有 [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。