如何使用 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];
我正在尝试使用 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];