如何使用 mdx 创建分组维度

How to make a grouping dimension using mdx

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

我想要一个符合这个逻辑的维度:

桶 1 用于显示截至昨天日期的所有 OpenQty

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

桶 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。

如果能够在所有类型的度量中使用这个维度,我将是一个很大的收获。

谢谢。

感谢任何帮助。

谢谢。

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

您可以在 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];