根据另一维

时间:2018-04-17 13:53:44

标签: mdx

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

我基本上有下面的表格(在我的多维数据集中幕后有明显更多的维度)。如果ID昨天是新的,它将显示在多维数据集中,日期 T-1 和类别“”,它也会有所不同日期 T 和类别“”的值集。如果昨天它是旧的,它今天将变老并具有不同的价值。

我可以在 T-1 切片上获得“”ID的值之和,但无法获得Today(T)切片上的值之和对于昨天“”的ID(因此今天老了) - 即昨天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   |

如果数据在平面表中,我想我可以用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]
    )  

EDIT2:
使用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]

1 个答案:

答案 0 :(得分:1)

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

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]