如何使用mdx创建分组维度

时间:2016-04-18 11:08:14

标签: mdx

我正在尝试使用mdx创建分组分组。我有一个名为QtyOpen和时间维度的度量。

我希望这个逻辑有一个维度:

第1段用于显示截至昨天的所有OpenQty

用于显示今天所有OpenQty的Bucket 2

Bucket 3用于显示所有明天的OpenQty日期

因此,如果直到昨天所有的OpenQty都是15,那么今天的所有OpenQty都是7,明天的所有OpenQty都是12,它应该显示如下:

Bucket 1 | Todays date | Tomorrows date
   15           7              12

所以我设法获得了我想要的日期范围的语法。对此的查询看起来像这样:

select (
            {StrToMember("[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "].&[Q" + format(datepart("q", now())) + "].&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "]")
            : 
            StrToMember("[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "].&[Q" + format(datepart("q", now())) + "].&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "].lead(3)")}
            ) on columns, 
non empty ([PPV].[Country].[Country], [Measures].Receipt Quantity]) on rows
from [Model]

这里缺少的是“Bucket 1”,它收集了今天之前所有日子的OpenQty。

如果能够将这个维度用于所有类型的措施,我将是一个很大的好处。

感谢。

感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要的是动态时间计算。易于设置但不是非常简单。看到这个链接它会帮助你: Dynamic Time Calculations

答案 1 :(得分:0)

您可以在WITH子句中执行此操作:

WITH
  SET [Today] AS
    STRTOSET(
       "{[Time].[Time YQMD].[Year].&[" + format(now(), "yyyy") + "]" + 
       ".&[Q" + format(datepart("q", now())) + "]" &
          ".&[" + format(now(), "MMM") + "].&[" + format(now(), "dd") + "]}"
    )
  MEMBER [Time].[Time YQMD].[All].[Today] AS
    [Today].item(0).item(0)
  SET [Pre-Today] AS
    {null:[Today].lag(1)}
  MEMBER [Time].[Time YQMD].[All].[Pre-Today] AS  
    AGGREGATE([Pre-Today])
  MEMBER [Time].[Time YQMD].[All].[Tomorrow] AS
    [Today].item(0).lead(1)
  SET [BUCKETS] AS
   {
     [Time].[Time YQMD].[All].[Pre-Today]
    ,[Time].[Time YQMD].[All].[Today]
    ,[Time].[Time YQMD].[All].[Tomorrow]
   }
SELECT
   [BUCKETS] ON 0, 
NON EMPTY 
  ([PPV].[Country].[Country], [Measures].Receipt Quantity]) ON 1
FROM [Model];