我有一个MDX查询驱动一个正常工作的Telerik交叉表控件:
WITH MEMBER [Product].[Product Group Name].[Total] as [Product].[Product Group Name].[All]
select
NON EMPTY{[Measures].[Annual Premium - Fact Distinct Transaction],
[Measures].[Fact Distinct Transaction Count],
[Measures].[API - Fact Distinct Transaction],
[Measures].[Fact New Members Count]} on columns,
NON EMPTY{
[Product].[Product Group Name].&[Protection],
[Product].[Product Group Name].&[Pension],
[Product].[Product Group Name].&[Savings and Investment],
[Product].[Product Group Name].&[Child Savings],
[Product].[Product Group Name].&[ISA],
[Product].[Product Group Name].[Total]
} on rows,
NON EMPTY{[Region Manager].[Full Name].Children} on 2
,
NON EMPTY{[Transaction Type].[Premium Frequency].&[S],[Transaction Type].[Premium Frequency].&[M]} on 3
from [Cube]
where (
{StrToMember('[Effective Date].[Date].&[2015-01-01T00:00:00]'):StrToMember('[Effective Date].[Date].&[2015-09-01T00:00:00]')},
StrToMember('[Transaction Type].[Transaction Description].[All].[Net Issued]'),
[Adviser].[Status].&[A]
)
我被要求排除
WHERE [Product].[Product Group Name].&[Pension] AND [Transaction Type].[Premium Frequency].&[S]
并尝试使用多个交叉连接,但解决方案似乎总是过于冗长,我确信有一种更简单的方法。
答案 0 :(得分:0)
我发现最令人满意的方法是使用子立方体:
SELECT
NON EMPTY{[Measures].[Annual Premium - Fact Distinct Transaction],
[Measures].[Fact Distinct Transaction Count],
[Measures].[API - Fact Distinct Transaction],
[Measures].[Fact New Members Count]
} on columns,
NON EMPTY
{
[Product].[Product Group Name].&[Protection],
[Product].[Product Group Name].&[Pension],
[Product].[Product Group Name].&[Savings and Investment],
[Product].[Product Group Name].&[Child Savings],
[Product].[Product Group Name].&[ISA]
} on rows,
NON EMPTY{[Region Manager].[Full Name].Children} on 2,
NON EMPTY{[Transaction Type].[Premium Frequency].&[S],[Transaction Type].[Premium Frequency].&[M]} on 3
from
(
select
EXCEPT(
CROSSJOIN([Product].[Product Group Name].Children, UNION([Transaction Type].[Premium Frequency].&[M] , [Transaction Type].[Premium Frequency].&[S])),
CROSSJOIN([Product].[Product Group Name].[Pension], [Transaction Type].[Premium Frequency].&[S])
)on 0
from [Cube]
)
WHERE (
{StrToMember('[Effective Date].[Date].&[2015-01-01T00:00:00]'):StrToMember('[Effective Date].[Date].&[2015-09-01T00:00:00]')},
StrToMember('[Transaction Type].[Transaction Description].[All].[Net Issued]'),
[Adviser].[Status].&[A]
)
这意味着需要通过使用相同查询在整个集合上分组的第二个交叉表来获取“总计”数字,而不是作为单独的成员。