Spotfire 自定义表达式

Posted

技术标签:

【中文标题】Spotfire 自定义表达式【英文标题】:Spotfire Custom Expression 【发布时间】:2014-04-10 12:28:42 【问题描述】:

在 spotfire 中需要提取特定季度的员工姓名、添加和离开的员工数量。

像我们一样

Employee_nm 季度 磨憨1 罗汉 1 索韩1 磨憨2 罗汉 2 约瑟夫 2

输出:- 当我们选择 Quarter 2 时,结果应该

左添加 索汉约瑟夫

【问题讨论】:

【参考方案1】:

IronPython 脚本可以通过设置感兴趣的季度的属性控件来执行此操作。

用户从下拉菜单中选择数字 1-4,该下拉菜单存储在文档属性“lstQuarter”中并连接到执行计算的脚本。

计算伪代码:

访问表 用 lstQuarter - 1 中的所有名称填充 listA 用 lstQuarter 中的所有名称填充 listB 遍历比较每个名称的列表。 listA 中但 listB 中的那些已被删除,listB 中但 listA 中的那些已被添加。 将此信息写入一个字符串,输出到 Excel,无论您想要它。

如果您想使用此信息更新 Spotfire 中的表,您需要先将其写入 Excel,然后用它替换数据表,但这都可以编写脚本。

【讨论】:

【参考方案2】:

这个问题的解决方案只需要一个属性控件和 2 个设置到文本区域的计算值以及 2 个计算列。

首先,我扩展了数据集以显示一整年:

Employee_nm Quarter
Mohan   1
Rohan   1
Sohan   1
Mohan   2
Rohan   2
Joseph  2
Mohan   3
Joseph  3
Katelyn 3
Katelyn 4
Joseph  4
Wesley  4

接下来,计算列:

    Case First([Quarter]) OVER ([Employee_nm]) 
when 1 then "Q1" 
when 2 then "Q2" 
when 3 then "Q3" 
when 4 then "Q4"
end as [added]

-和-

    if(Last([Quarter]) OVER ([Employee_nm])!=Max([Quarter]),
 Case Last([Quarter]) OVER ([Employee_nm]) 
when 1 then "Q2" 
when 2 then "Q3" 
when 3 then "Q4" 
when 4 then "Q1 Following Year"
end,"") as [left]

注意:以上内容仅适用于给定的数据集,但可以轻松扩展以适应多年。

属性控件应该这样设置:

最后是计算出来的值:

UniqueConcatenate(if([added]='$Quarter',Concatenate([Employee_nm]," added ",[added]),""))

-和-

UniqueConcatenate(if([Left]='$Quarter',Concatenate([Employee_nm]," left ",[Left]),""))

注意: 由于 'UniqueConcatenate()' 函数,上述值在许多情况下会以逗号开头。这些可以使用计算值中的文本函数来处理,并且为了可读性,该逻辑已被排除在此答案之外。

我希望这会有所帮助。

【讨论】:

【参考方案3】:

您可以插入一个计算列来识别每个季度添加/删除的员工:

Concatenate(If(Find([Employee_nm],Concatenate([Employee_nm]) OVER
(Previous([Quarter])))=0,"Added in this Quarter"),If(Find([Employee_nm],
Concatenate([Employee_nm]) OVER (Next([Quarter])))=0,"Removed from Next
Quarter"))

您可以通过按季度列过滤来查看每个季度的结果。

【讨论】:

以上是关于Spotfire 自定义表达式的主要内容,如果未能解决你的问题,请参考以下文章

百分比计算 - SpotFire

Spotfire 创建增长计算列

javaweb之EL自定义函数

如何在计算表达式中定义自定义运算符

向自定义正则表达式添加动态错误消息

java 如何让用户自定义函数呢?