在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语句来显示正确数量的父母时,我会得到各种任意错误。一个例子是 [FirstParent] 表达式:
IF ([CurrentLevel] > 1) THEN
(roleValue('_memberCaption', parent([CurrentBranch])))
ELSE
('')
它产生以下错误......
Data size error. The data type is 'cclDTypeExternalBuffer'.
...将[FirstParent]添加到布局计算。
如果我将表达式更改为(只是为了测试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()),但是,没有运气。
为什么会发生这种情况以及如何解决这个问题?
这真的超出了我的理解。
感谢您提供任何意见!
答案 0 :(得分:1)
找到了这个解释,说“报表表达式旨在访问参数和报表会话属性;使用它们访问查询项可能容易出错。”报告表达式就是我所说的布局计算
http://www-01.ibm.com/support/docview.wss?uid=swg21340596
因此,我解锁了报告并直接包含了数据项。这样一切都按预期工作。