Mdx 以另一个维度的值为条件在一个维度上进行度量
我是MDX的新手,有一个问题一直困扰着我 我基本上有下表(显然在我的多维数据集中有更多的幕后维度)。如果一个ID昨天是新的,它将出现在多维数据集中,带有日期T-1和类别“new”,它还将为日期T和类别“Old”提供一组不同的值。如果它昨天是旧的,它今天也会是旧的,并且具有不同的价值 我可以在T-1切片上获取“New”ID的值之和,但无法获取昨天是“New”的ID的今天(T)切片上的值之和(因此今天是旧的)-即昨天是新的ID的今天的值Mdx 以另一个维度的值为条件在一个维度上进行度量,mdx,Mdx,我是MDX的新手,有一个问题一直困扰着我 我基本上有下表(显然在我的多维数据集中有更多的幕后维度)。如果一个ID昨天是新的,它将出现在多维数据集中,带有日期T-1和类别“new”,它还将为日期T和类别“Old”提供一组不同的值。如果它昨天是旧的,它今天也会是旧的,并且具有不同的价值 我可以在T-1切片上获取“New”ID的值之和,但无法获取昨天是“New”的ID的今天(T)切片上的值之和(因此今天是旧的)-即昨天是新的ID的今天的值 | ID | Category | Date |
| ID | Category | Date | Value |
|---------|------------|------|-------|
| 1 | New | T-1 | a |
| 1 | Old | T | b |
| 2 | Old | T-1 | c |
| 2 | Old | T | d |
| 3 | New | T-1 | e |
| 3 | Old | T | f |
如果数据在一个平面表中,我想我可以用SQL查询它,但是当涉及到MDX时,我有点不知所措。谢谢
编辑:
下面的MDX为我提供了“旧的”ID的总和。我想我需要创建一个新的度量,它沿着日期片查看ID的PrevMember并检查它是否是新的,如果是,那么将ID的当前度量分配给这个新度量-但我不知道如何做
SELECT
NON EMPTY (
[Date].Members
) ON 0
,
NON EMPTY (
[Measures].[Value.SUM]
) ON 1
FROM [MyCube]
WHERE (
[Category].&[Old]
)
编辑2:使用苏拉瓦的答案,我已经用下面的代码运行了我的代码
WITH
SET NewIDs AS
INTERSECT(NonEmpty([ID].Children, CROSSJOIN([Date].&[T-1], [Category].&[Old]))
, NonEmpty([ID].Children, CROSSJOIN([Date].&[T], [Category].&[EOD]))
)
SELECT
NON EMPTY([Dim2].Children
) ON 0
,
NON EMPTY([NewIDs]
) ON 1
FROM [MyCube]
WHERE [Measures].[Value]
这有用吗?(在下面的代码中添加了注释)
你能举个例子说明你到底想在输出中看到什么吗?输出应该是b+f,昨天新增的ID的值之和您是否可以添加成功的MDX以及您正在努力尝试的MDX请求您发布一个新问题,并添加要求。我已经这样做了,谢谢SouravA-这回答了我的问题。
WITH SET NewYesterdayOldToday ///Get all such Ids which were new yesterday but are old today
AS
INTERSECT(
NonEmpty(
[YourTable].[Id].[All].MEMBERS,
[YourTable].[Category].&[Old] * [YourTable].[Date]. &[T])
,
NonEmpty(
[YourTable].[Id].[All].MEMBERS,
[YourTable].[Category].&[New] * [YourTable].[Date]. &[T-1])
)
MEMBER TotalValue AS ///Getting the sum of values corresponding to those Ids which are "NewYesterdayOldToday" today
(
NewYesterdayOldToday, [YourTable].[Date]. &[T], [Measures].[Value.SUM]
)
SELECT TotalValue
ON 0
FROM [MyCube]