在Report Studio中使用TM1多维数据集时,IF/CASE表达式出现了一些问题。
我正在用一个元组函数"过滤"一个交叉表,该函数包含一个来自"分支"维度的元素。用户可以通过我所做的值提示在这个分支层次结构中导航。
因此,用户要求他们每次都能看到自己在分支层次结构中的位置(即,看到从根到当前节点的路径)。
因此,我尝试制作两个查询表达式,它们始终表示当前节点和当前级别:
[CurrentBranch]:
#prompt('pBranch', 'MUN', '[Cube].[Dimension].[Hierarchy].[Level]->:[TM].[Dim_Branch].[Dim_Branch].[@MEMBER].[49981]')#
[CurrentLevel]:
ordinal(level([CurrentBranch]))
这两种方法都按预期工作。然而,当我试图使用IF/CASE语句来显示正确数量的父级时,我会遇到各种各样的任意错误。一个例子是[FirstPrent]表达式:
IF ([CurrentLevel] > 1) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
它会产生以下错误。。。
Data size error. The data type is 'cclDTypeExternalBuffer'.
当[FirstPParent]添加到布局计算时。
如果我将表达式更改为(只是为了测试If语句):
IF (1 > 0) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
显示了相同的错误。如果我将语句更改为
IF (1=0) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
或
IF (1=1) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
没有显示错误,结果是正确的。
但是,如果我现在将表达式更改为:
IF ([CurrentLevel]=1) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
则再次显示相同的错误。
Data size error. The data type is 'cclDTypeExternalBuffer'.
我曾尝试将[CurrentLevel]封装在使用OLAP时支持的各种常见函数中(例如abs()),但没有成功。
你知道为什么会发生这种情况以及如何解决吗?
这真的超出了我的理解范围。
感谢您的任何意见!
找到了这样的解释,称"报表表达式旨在访问参数和报表会话属性;使用它们访问查询项可能容易出错。"报表表达式就是我所说的布局计算
http://www-01.ibm.com/support/docview.wss?uid=swg21340596
因此,我解锁了报告并直接包含了数据项。这样一来,一切都按计划进行。