我是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]
答案 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]