You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spotfire IronPython脚本运行后过滤器消失及服务器错误求助

Spotfire IronPython脚本过滤器异常及列消失修复方案

问题现象

  • 运行生成可视化的IronPython脚本后,右侧过滤器栏内容消失
  • 抛出内部服务器错误,具体信息如下:

XmlHttpRequest failed. Internal Server Error
Read error (-1): {"viewId":"ceb0fbf6-5bd1-4b3f-a191-a431f1ffaa0a","method":"InitializeFilter","args":"{"id":"97b12241-cb78-46c1-8b24-97cb789b34d2","filterContainerId":"poppedFilter11"}"}
XMLHttpRequest: {"readyState":4,"responseText":"","status":500,"statusText":"Internal Server Error"}

  • 数据表中未在可视化中使用的过滤列自动消失

原脚本

from Spotfire.Dxp.Data import DataTableSaveSettings
from Spotfire.Dxp.Application.Visuals import ScatterPlot, BoxPlot
from Spotfire.Dxp.Application import Layout
page = Document.Pages.AddNew()

#visualization (I copy this for a total of 4 visualizations)

myVis = Document.ActivePageReference.Visuals.AddNew[ScatterPlot]()
myVis.Data.DataTableReference = input_table
myVis.Title = "Title"
myVis.XAxis.Expression = '\[Date\]'
myVis.YAxis.Expression = '\[Item1\]'
myVis.ColorAxis.Expression = '\[Item2\]'
myVis.YAxis.ManualZoom = True
myVis.LineConnection.ConnectionAxis.Expression = '\<\[Item3\]\>'
myVis.LineConnection.UseMarkerColor = True

#format

lst = []
for visual in page.Visuals:
lst.append(visual)
format = Layout.LayoutDefinition()
format.BeginStackedSection(1)
format.Add(lst\[0\])
format.Add(lst\[2\])
format.BeginSideBySideSection(1)
format.Add(lst\[1\])
format.Add(lst\[3\])
format.EndSection()
format.EndSection()

page.ApplyLayout(format)

修复方案

1. 修正可视化页面引用错误

原脚本创建新页面后,错误地将可视化添加到旧的活跃页面,导致布局操作与可视化所在页面不匹配,引发资源加载异常。修改为直接在新创建的页面上添加可视化:

# 替换原可视化添加代码
myVis = page.Visuals.AddNew[ScatterPlot]()  # 使用新创建的page对象

2. 强制保留所有数据表列

Spotfire默认会隐藏未在可视化中使用的列,需显式设置所有列可见:

# 在脚本开头添加,确保input_table的所有列不被隐藏
for col in input_table.Columns:
    col.Properties["Hidden"] = False

3. 修正布局列表索引问题

原脚本通过遍历页面可视化构建列表,若新页面存在默认元素(如文本框),会导致索引错位。建议在添加可视化时直接存入列表:

# 重构可视化添加与列表构建逻辑
lst = []

# 添加第一个可视化
vis1 = page.Visuals.AddNew[ScatterPlot]()
vis1.Data.DataTableReference = input_table
vis1.Title = "Title 1"
# ... 其他配置项
lst.append(vis1)

# 添加第二个可视化
vis2 = page.Visuals.AddNew[ScatterPlot]()
vis2.Data.DataTableReference = input_table
vis2.Title = "Title 2"
# ... 其他配置项
lst.append(vis2)

# 同理添加第三、第四个可视化并加入lst

# 应用布局
layout_def = Layout.LayoutDefinition()
layout_def.BeginStackedSection(1)
layout_def.Add(lst[0])
layout_def.Add(lst[2])
layout_def.BeginSideBySideSection(1)
layout_def.Add(lst[1])
layout_def.Add(lst[3])
layout_def.EndSection()
layout_def.EndSection()

page.ApplyLayout(layout_def)

4. 页面刷新确保过滤器容器初始化

布局应用完成后,显式刷新页面,确保过滤器容器正常加载:

# 在布局应用后添加
page.Refresh()

内容的提问来源于stack exchange,提问作者intergalactic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:02:49