在先胜云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,电子表格等。
回到顶部
咨询热线