全部文档
文档中心财务模型多维表达式MDXMDX中使用变量

MDX中使用变量

在先胜云MDX中,变量通过在参数前面加“$”符号来表示,如$year,$scenario_1。$符号后的参数只允许由数字,字母和下划线组成,并且必须以字母开头。 如以下是合法的变量名:

  • $year

  • $scenario_1

以下是不合法的变量名:

  • $12345 (不允许以数字开头)

  • $_abc (不允许以符号开头)

  • $year+1 (不允许包含数字、字母、下划线之外的其他符号)

MDX 仅支持文字值或标量值的参数。 若要创建引用成员、集或元组的参数,必须使用函数,如 StrToMember

假设我们定义了两个变量scenario和period,分别会在运行MDX的时候对其赋值为: scenario = ‘[Scenario].[actual]’ period = ‘[Period].[Q1]’

则MDX计算脚本可以写成如下:

Use cube_test;
Scope(strToMember($scenario), [Version].[V1], [Year].[2022], Descendants(strToMember($period)),Base([Product].[TotalProduct]),Base([Entity].[TotalEntity]));
    [Account].[Total_Sales] = [Account].[Volume]*[Account].[Price]->[Period].[Begbalance];
End Scope;

在上例中,我们定义了两个字符串的变量scenario和period,随后,通过函数strToMember的转换,将其类型转换成成员类型,随后被Descendants函数以及scope语句所使用。

如果,对于变量scenario和period,在运行时赋值时只有维度成员名,而不是严格的MDX标识符字符串,如下: scenario=‘Actual’ period=’Q1’, 则可以使用strToMember的另一种用法来实现将变量转换为成员类型:

Scope(strToMember('Scenario',$scenario), [Version].[V1], [Year].[2022], MemberSet(strToMember('Period',$period)), Base([Product].[TotalProduct]), Base([Entity].[TotalEntity]));
...

此外,我们还可以看到,在Scope参数中,strToMember函数不仅可以直接用于限定计算范围,还可以被Descendants等函数使用,因为strToMember函数方法返回的是一个成员类型,而Descendants函数的入参也是一个成员类型,因此Descendants函数可以使用strToMember函数的结果作为自己的入参。

定义了变量的MDX语句,需要在执行的时候传入变量的赋值信息。变量的值的传入通常依赖于其他能够触发MDX计算的组件,如可视化计算脚本,python,电子表格等。

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send