如何正确使用MDX ClosingPeriod功能

时间:2016-07-12 02:53:53

标签: date ssas mdx

我们正在为分析Sales for Stock的业务构建一个多维数据集。

我需要一个单独的措施来显示交割库存数量。

该业务在包含零售周的零售期间运行。本周总是在星期天结束,所以我的收盘库存数量必须来自星期日。

因此,如果我们查看今天(2016年7月12日星期二)的销售情况,那么该列应显示刚刚过去的星期日的价值,即2016年7月10日星期日。

这需要是动态的,具体取决于用户查看数据的级别。

  • 如果最低级别显示在日期级别,那么对于该周的所有日期,它应显示上一个星期日的值。
  • 如果最低级别显示在周级别,则每周应显示前几周的期末余额

,如果用户没有按日期打破数据透视表,但只是零售周,那么它应该显示上周最后一天的值。 如果用户将数据透视表分解为期间级别,则应使用相同的规则 - 它应显示上一个最后一天的值

我们有一个Date维度,其中包含以下相关层次结构:

  • 日历
    • 日历年
    • 日历季度
    • 日历月
    • 日期
  • 零售
    • 零售年度
    • 零售期
    • 零售周
    • 日期

我知道我可以使用ClosingPeriod函数,但我遇到了语法问题。

我有以下但是我得到了NULL。这是我第一个真正的MDX计算,对此非常新!

WITH MEMBER [Measures].[Closing On Hand Qty] AS
(
  ClosingPeriod(
    [Date].[Retail].[Retail Week],
    [Date].[Retail].CurrentMember
  ),
  [Measures].[On Hand Qty]
)

SELECT
  [Date].[Retail].[Date].Members ON ROWS,
  {
    [Measures].[On Hand Qty],
    [Measures].[Closing On Hand Qty]
  } ON COLUMNS
FROM
  Retail
WHERE
  [Date].[Retail Year].&[2017] 

1 个答案:

答案 0 :(得分:0)

(注意:它不会抛出异常,但mdx标准是在Select子句中的行之前说明列)

ClosingPeriod我没有玩过,但以下内容可能有所帮助:

WITH 
MEMBER [Measures].[Closing On Hand Qty] AS
(
  TAIL(
    DESCENDANTS(
      EXISTING [Date].[Retail].[Retail Week],
      [Date].[Retail].[Date]
    )
  ).ITEM(0).ITEM(0)
 ,[Measures].[On Hand Qty]
)
SELECT
  {
    [Measures].[On Hand Qty],
    [Measures].[Closing On Hand Qty]
  } ON 0,
  [Date].[Retail].[Date].MEMBERS ON 1
FROM Retail
WHERE [Date].[Retail Year].&[2017]; 

查看ClosingPeriod的文档我认为以下内容可能有效:

WITH MEMBER [Measures].[Closing On Hand Qty] AS
(
  ClosingPeriod(
    [Date].[Retail].[Date],
    EXISTING [Date].[Retail].[Retail Week] 
  ),
  [Measures].[On Hand Qty]
)
SELECT
  {
    [Measures].[On Hand Qty],
    [Measures].[Closing On Hand Qty]
  } ON COLUMNS,
  [Date].[Retail].[Date].Members ON ROWS
FROM Retail
WHERE [Date].[Retail Year].&[2017];