【问题标题】:how to avoid the error "Category member XXX defined as an empty set" in icCube?如何避免icCube中出现“Category member XXX defined as an empty set”的错误?
【发布时间】:2019-11-09 17:31:48
【问题描述】:

我有以下 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)  

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

我试图重写定义,如下:

subcubeminus(TopPercent .... , TopPercent)

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

我怎样才能克服这个错误,并有一个通用的方法,无论 [selection] 定义中的层次结构和级别的内容如何,​​它都始终有效?

【问题讨论】:

    标签: mdx iccube


    【解决方案1】:

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

    对我来说,这意味着,从业务角度来看,无论全局过滤器设置如何,类别始终有效。如果它是一个空集,它会在仪表板中产生一个空白值。

    仅针对 1 家供应商的 Parato 分析示例(bedrag = 数量,#Fact = nr 发票,#Lev = nr 供应商)

    完全符合要求。

    【讨论】:

      【解决方案2】:

      要了解发生了什么,您应该检查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])
      

      如您所见,两者都返回相同的集合,我猜这不是您所期待的。

      【讨论】:

      • 不知道我是否理解。当我运行第一个 TopPercent(在 1 上)时,我有 26 个成员,第二个(在 2 上)给了我 12 个成员。所以不是同一套?
      • 你怎么能在类别中得到一个空集? .. 玩一下 MDX 和调试器
      • 例如,当 [selection] 只产生一个成员时(由于全局过滤器)。然后它适合 A 而 B、C 和 D 为空并导致错误(非常讨厌,我不知道如何解决)。
      • 在我们的场景中仍然看不到它。
      • 那太好了。谢谢!
      猜你喜欢
      • 2021-06-07
      • 2010-12-29
      • 1970-01-01
      • 2020-07-13
      • 2016-11-14
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多