MDX错误divide函数需要字符串或数字

MDX错误divide函数需要字符串或数字,mdx,Mdx,我有MDX中的表达式 IIF ( IsEmpty ( Filter ( [Measures].[Actual Hours] , [WORK ACTUAL].[MAINT D].[Maintenance Code] = 'PRO' ) / [Measures].[Actual Hours] * 100 ) ,0 , Filt

我有MDX中的表达式

IIF
(
  IsEmpty
  (
        Filter
        (
          [Measures].[Actual  Hours]
         ,
          [WORK ACTUAL].[MAINT D].[Maintenance Code] = 'PRO'
        )
      / 
        [Measures].[Actual  Hours]
    * 100
  )
 ,0
 ,
      Filter
      (
        [Measures].[Actual  Hours]
       ,
        [WORK ORDER ACTUAL].[MAINT D].[Maintenance Code] = 'PRO'
      )
    / 
      [Measures].[Actual  Hours]
  * 100
)
我得到了以下错误:

MdxScript(test)除法函数需要字符串或数字 1参数的表达式。使用了元组集表达式


Filter函数返回一个集合,因此返回错误消息:

返回根据搜索条件筛选指定集而得到的集

因此,您试图将一组成员除以一个数字

要解决它,您需要一个数值表达式,而不是一个集合。数值表达式为以下任一表达式:

  • 数字量度
  • 数字格式的成员属性
  • 元组的结果
  • 对于新手来说,数字4可能是mdx中最难理解的概念

    正如@BillAnton所提到的,这是一个元组,因此是一个数值表达式:

    ([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual  Hours])
    
    ([WORK ACTUAL].[MAINT D].&[PRO])
    
    这也是一个元组和数值表达式:

    ([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual  Hours])
    
    ([WORK ACTUAL].[MAINT D].&[PRO])
    
    它将只使用脚本上下文中使用的度量值或多维数据集默认度量值

    过滤器的定义中,您还可以看到它的签名如下:

    过滤器(集合表达式、逻辑表达式)

    在脚本中,您有以下内容

    Filter
        (
          [Measures].[Actual  Hours] //<<measures are numeric_expression
         ,
          [WORK ACTUAL].[MAINT D].[Maintenance Code] = 'PRO'
        )
    

    您没有正确使用筛选功能。Filter函数通常用于通过度量或某些其他计算逻辑过滤一组元组。为了按特定成员过滤度量值(我认为您正在尝试这样做),您只需创建一个元组

    ([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual  Hours])
    
    这将使用与[Work actual]维度中[Maint D]属性的[PRO]成员关联的事实记录计算实际小时数(使用定义的聚合函数,该函数很可能是总和)。根据维度/属性/etc的设置方式,这可能不是精确的语法…但希望您能理解

    MEMBER [Measures].[<calc-measure-stage1>]
        IIF(
            [Measures].[Actual  Hours] = 0
            ,NULL
            ,(
                (
                     [WORK ACTUAL].[MAINT D].&[PRO]
                    ,[Measures].[Actual  Hours]
                )
                /
                [Measures].[Actual  Hours]
             ) * 100
        )
    MEMBER [Measures].[<calc-measure-stage2>]
        IIF(
            [Measures].[Actual  Hours] = 0
            ,NULL
            ,(
                (
                     [WORK ORDER ACTUAL].[MAINT D].&[PRO]
                    ,[Measures].[Actual  Hours]
                )
                /
                [Measures].[Actual  Hours]
             ) * 100
        )
    MEMBER [Measures].[<calc-measure>]
        IIF(
             IsEmpty([Measures].[<calc-measure-stage1>]
            ,[Measures].[<calc-measure-stage2>]
            ,[Measures].[<calc-measure-stage1>]
        )
    
    成员[度量].[]
    IIF(
    [度量值].[实际小时数]=0
    无效的
    ,(
    (
    [实际工作][维护D]和[专业]
    ,[措施][实际时数]
    )
    /
    [措施][实际时数]
    ) * 100
    )
    成员[措施].]
    IIF(
    [度量值].[实际小时数]=0
    无效的
    ,(
    (
    [实际工单].[MAINT D]和[PRO]
    ,[措施][实际时数]
    )
    /
    [措施][实际时数]
    ) * 100
    )
    成员[措施].]
    IIF(
    IsEmpty([Measures].[]
    ,[措施].[]
    ,[措施].[]
    )
    
    将CoalesceEmpty(表达式,NumaricValue)用于数字度量


    同时使用除法(分子、分母、0)自动处理0异常的devided by 0 exception

    我想提供帮助,但不是猜测,你能告诉我这个计算的预期结果吗?你能用文字解释一下吗?还有上下文-这是一个更大脚本的一部分,还是这个逻辑进入了另一个工具,例如ssrs?提供了这个答案账单-尽管很难理解解释问题并准确了解用户希望从该计算中得到什么。当计算包括元组中的
    [Measures].[Actual Hours]
    ,然后除以
    [Measures].[Actual Hours]
    时,答案不仅仅是1?不……因为被除数是除数的子集。它类似于父计算的百分比。