MDX 错误,除法函数需要一个字符串或数字
Error with MDX the divide function expects a string or numeric
我在 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)the divide function expects a string or numeric
expression for the 1 argument. A tuple set expression was used .
过滤函数returns一个设置因此你的错误信息:
https://msdn.microsoft.com/en-us/library/ms146037.aspx
Returns the set that results from filtering a specified set based on a search condition.
所以您正试图将组 成员除以一个数字。
要解决它,您需要一个数值表达式而不是一个集合。数值表达式为以下之一:
- 一个数
- 一个数字度量
- 一个数字格式的成员属性
- 元组的结果
可能数字 4 是 mdx
中对于刚接触该语言的人来说最难以理解的概念。
正如@BillAnton 所提到的,这是一个元组,因此是一个数值表达式:
([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual Hours])
这也是一个元组和数值表达式:
([WORK ACTUAL].[MAINT D].&[PRO])
它将简单地使用脚本上下文中使用的度量或多维数据集默认度量。
同样在Filter
的定义中可以看到它的签名如下:
Filter(Set_Expression, Logical_Expression )
在您的脚本中有以下内容
Filter
(
[Measures].[Actual Hours] //<<measures are numeric_expression
,
[WORK ACTUAL].[MAINT D].[Maintenance Code] = 'PRO'
)
就消除错误而言,这里是 1 个解决方案:
IIF
(
//10 is a numeric placeholder (you can replace with something that returns a number)
10 / [Measures].[Actual Hours]
* 100
= 0
,0
,
//20 is a numeric placeholder (you can replace with something that returns a number)
20 / [Measures].[Actual Hours]
* 100
)
您没有正确使用过滤功能。 Filter-function 通常用于通过度量或一些其他计算逻辑来过滤一组元组。为了按特定成员过滤度量(我认为您正在尝试这样做),您可以简单地创建一个元组...
([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual Hours])
这会使用与 [Work Actual] 维度中 [Maint D] 属性的 [PRO] 成员关联的事实记录来计算实际小时数(使用定义的聚合函数,这很可能是 SUM)。根据您的 dimension/attribute/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>]
)
对数值度量使用 CoalesceEmpty(Expression, NumaricValue)
同时使用 DIVIDE(Numerator, Denominator, 0) 自动处理除以 0 异常
我在 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)the divide function expects a string or numeric expression for the 1 argument. A tuple set expression was used .
过滤函数returns一个设置因此你的错误信息:
https://msdn.microsoft.com/en-us/library/ms146037.aspx
Returns the set that results from filtering a specified set based on a search condition.
所以您正试图将组 成员除以一个数字。
要解决它,您需要一个数值表达式而不是一个集合。数值表达式为以下之一:
- 一个数
- 一个数字度量
- 一个数字格式的成员属性
- 元组的结果
可能数字 4 是 mdx
中对于刚接触该语言的人来说最难以理解的概念。
正如@BillAnton 所提到的,这是一个元组,因此是一个数值表达式:
([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual Hours])
这也是一个元组和数值表达式:
([WORK ACTUAL].[MAINT D].&[PRO])
它将简单地使用脚本上下文中使用的度量或多维数据集默认度量。
同样在Filter
的定义中可以看到它的签名如下:
Filter(Set_Expression, Logical_Expression )
在您的脚本中有以下内容
Filter
(
[Measures].[Actual Hours] //<<measures are numeric_expression
,
[WORK ACTUAL].[MAINT D].[Maintenance Code] = 'PRO'
)
就消除错误而言,这里是 1 个解决方案:
IIF
(
//10 is a numeric placeholder (you can replace with something that returns a number)
10 / [Measures].[Actual Hours]
* 100
= 0
,0
,
//20 is a numeric placeholder (you can replace with something that returns a number)
20 / [Measures].[Actual Hours]
* 100
)
您没有正确使用过滤功能。 Filter-function 通常用于通过度量或一些其他计算逻辑来过滤一组元组。为了按特定成员过滤度量(我认为您正在尝试这样做),您可以简单地创建一个元组...
([WORK ACTUAL].[MAINT D].&[PRO],[Measures].[Actual Hours])
这会使用与 [Work Actual] 维度中 [Maint D] 属性的 [PRO] 成员关联的事实记录来计算实际小时数(使用定义的聚合函数,这很可能是 SUM)。根据您的 dimension/attribute/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>]
)
对数值度量使用 CoalesceEmpty(Expression, NumaricValue)
同时使用 DIVIDE(Numerator, Denominator, 0) 自动处理除以 0 异常