我正在尝试使用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。
如果能够将这个维度用于所有类型的措施,我将是一个很大的好处。
感谢。
感谢任何帮助。
谢谢。
答案 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];