如何避免icCube中的错误“类别成员XXX定义为空集”?

时间:2019-06-27 16:34:21

标签: mdx iccube

我有以下MDX代码来创建具有4个成员的类别维度:

  • 所有占指标0-50%(TopPercent)的成员
  • 成员50-80%
  • 成员80-95%
  • 成员95-100%

该代码在具有很多成员的级别上完美运行:

WITH
MEMBER [measures].[v] as eval([Tijd].[Tijd].[jaar].[2018],[Measures].[Bedrag])

set [selection] as Order( nonempty([Categorie].[Categorie].[categorie].members,[measures].[v]), [measures].[v], BDESC)  

CATEGORY HIERARCHY [Stats].[ABCD], DEFAULT_MEMBER_NAME = "Totaal", LEVEL_NAME_PATTERN="L - ABCD - ${levelDepth}"
CATEGORY MEMBER [Stats].[ABCD].[Totaal].[A (0-50%)] as
     TopPercent([selection],50, [measures].[v] ), ADD_CHILDREN=true
CATEGORY MEMBER [Stats].[ABCD].[Totaal].[B (50-80%)] as
    TopPercent([selection],80, [measures].[v] )
    - TopPercent([selection],50, [measures].[v]), ADD_CHILDREN=true
CATEGORY MEMBER [Stats].[ABCD].[Totaal].[C (80-95%)] as
    TopPercent([selection],95, [measures].[v])
    - TopPercent([selection],80, [measures].[v] ), ADD_CHILDREN=true
CATEGORY MEMBER [Stats].[ABCD].[Totaal].[D (95-100%)] as
    Order([selection], [measures].[v], BDESC)
    - TopPercent([selection],95, [measures].[v]), ADD_CHILDREN=true

SELECT
// Measures
{[measures].[v]} On 0,
// Columns    
[Stats].[ABCD].[L - ABCD - 1].members on 1,
// Rows   
[Stats].[ABCD].[L - ABCD - 2].members on 2
FROM (select  [Tijd].[jaar].[2018] on 0 from [Spendzoom])
/*ic3navigation*/

但是当我使用以下命令运行MDX代码时:

set [selection] as Order( nonempty([Categorie].[Categorie].[type].members,[measures].[v]), [measures].[v], BDESC)  

我收到错误消息:类别成员“ [统计]。[ABCD]。[Totaal]。[C(80-95%)]'定义为空集。

我试图将定义重写为:

subcubeminus(TopPercent .... , TopPercent)

但这给出了完全奇怪的结果。

我该如何克服此错误,并采用一种通用方法,无论[选择]定义中层次结构和级别的内容如何,​​都可以正常工作?

2 个答案:

答案 0 :(得分:1)

要了解发生了什么,您应该检查TopPercent的工作原理(这并不是您真正期望的那样)。

尝试使用此MDX:

WITH
  MEMBER [measures].[v] as eval([Tijd].[Tijd].[jaar].[2018],[Measures].[Bedrag])
  STATIC SET [selection] as [Categorie].[Categorie].[categorie].members
SELECT
  [measures].[v] On 0,
  TopPercent([selection],95, [measures].[v]) on 1,
  TopPercent([selection],80, [measures].[v] ) on 2
FROM 
  (select  [Tijd].[jaar].[2018] on 0 from [Spendzoom])

如您所见,它们都返回相同的集合,而我猜那不是您想要的。

答案 1 :(得分:1)

正如注释中提到的ic3,从icCube 6.8.10开始,icCube现在允许具有空类别。是

对我来说,这意味着从商业角度而言,无论全局过滤器设置如何,类别始终有效。如果它是一个空集,它将在仪表板中产生一个空白值。 example of a Parato analysis for just 1 vendor

  

仅对1个供应商进行Parato分析的示例(bedrag =金额,#Fact =发票的数量,#Lev =供应商的数量)

完全符合需要。