根据另一个维度的值测量一个维度

Measure over one dimension conditional on value of another dimension

我是 MDX 的新手,遇到了一个一直困扰我的问题。

我基本上有以下 table(在我的多维数据集 中幕后显然有更多维度)。如果 ID 是昨天新的,它将出现在 多维数据集 中,日期为 T-1,类别为“New”,对于日期 T 和类别“Old”,它也会有一组不同的值。如果昨天是旧的,那么今天将是旧的并且具有不同的值。

我可以获取 T-1 切片上“New”ID 的值总和,但无法获取昨天为“”(因此今天为旧)的 ID 在今天 (T) 切片上的值 - 即昨天新 ID 的今天值。

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

如果数据是平坦的 table 我想我可以 SQL 查询它,但是当涉及到 MDX 时我有点难过。谢谢

编辑:

下面的 MDX 给出了 "Old" ID 的总和。我想我需要以某种方式创建一个新度量,它沿着日期切片查看 ID 的 PrevMember 并检查它是否是新的,如果是,则分配该新度量的 ID 的当前度量 - 但我不知道如何去做...

SELECT
NON EMPTY (
    [Date].Members
            ) ON 0
,
NON EMPTY (
    [Measures].[Value.SUM]
            ) ON 1
FROM [MyCube]
WHERE (
[Category].&[Old]
    )  

编辑 2:
使用 SouravA 的回答,我的代码使用以下代码工作。

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]

这有帮助吗? (在下面的代码中添加了注释)

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]