我需要帮助实现线程标题中描述的任务。让我提供一些背景知识:
我正在spotfire上开发一个非常大的仪表板,它可以加载大量可视化数据。其中一些表需要按顺序加载,因为它们之间存在依赖关系,但其他表只能同时加载。
对于顺序加载的表,我使用以下脚本:
import clr
from System.Collections.Generic import List, Dictionary
from Spotfire.Dxp.Data import DataTable
from Spotfire.Dxp.Framework.ApplicationModel import NotificationService
# Empty list to hold DataTables
Tbls = List[DataTable]()
Tbls.Add(dt1) #dt1 a DataTable string parameter
Tbls.Add(dt2) #dt2 a DataTable string parameter
# Notification service
notify = Application.GetService[NotificationService]();
# Execute something after tables are loaded
def afterLoad(exception, Document=Document, notify=notify):
if not exception:
Document.Properties["lastReload"]
print "OK"
else:
notify.AddErrorNotification("Error refreshing table(s)","Error details",str(exception))
# Refresh table(s)
Document.Data.Tables.RefreshAsync(Tbls, afterLoad)***
对于没有依赖性的表,我使用了以下简单脚本:
from System.Collections.Generic import List, Dictionary
from Spotfire.Dxp.Data import DataTable
from System.Collections import ArrayList
dt3.Refresh()
dt4.Refresh()
dt5.Refresh()
我尝试简单地将脚本组合成一个脚本,但结果是所有表都按顺序加载。
使用这些脚本中使用的命名,我希望脚本按如下方式执行:
致以最诚挚的问候,并提前致谢
MR
答案 0 :(得分:2)
我不相信可以在Spotfire中同时加载数据表。
通过代码肯定是不可能的:IronPython运行单线程,虽然理论上可以添加线程,但是你会浪费大量的开发时间来实现,实际上,获得的收益很少(或者可能获得大量收益)如果您可以打包解决方案并将其出售给TIBCO工程公司哈哈)
我还建议允许Spotfire处理使用现有功能加载数据,除非你有一些非常奇怪的情况,在这种情况下你可能需要检查你的方法,因为你做的远远超出了平台的意图。
无论如何,所有这一切,听起来你可以从“按需”加载数据中受益,因为在Spotfire中调用了这个功能:
当要将数据连接中的信息链接或数据表作为新数据表添加到分析中时,您可以选择一次加载所有数据,或仅按需加载数据。当您可以访问大量数据时,您的分析可以从按需加载中受益,但您只需要一次处理数据的某些部分。设置按需数据表时,您可以根据一个或多个其他数据表指定条件以控制要加载的内容。您还可以首先让按需数据表成为分析中的第一个(或唯一)数据表,如果其输入是由文档属性定义的。
使用此功能,您可以在触发器上加载数据表,例如:
您可以在Spotfire documentation中找到有关按需表的更多信息。