Spotfire:将一个选择用作另一个数据的范围

时间:2016-03-30 20:47:34

标签: tibco spotfire

我已经搜索了相当多的内容,无法找到一个好的解决方案,在我看来这个产品的正常问题。

我有一个来自汇总表的数据表(在内存中)(称之为'Ranges')。基本上是这样的:

id |   name   |  f1 |  f2 | totals 
 0 | Channel1 | 450 | 680 |     51 
 1 | Channel2 | 890 | 990 |    220 

......等等

创建一个条形图,其中包含X上的名称和Y上的总计。

我有另一个表,它是指向大型(500M +行)表的外部链接。该表(称为'Actuals')有一个列('Fc'),可以放入范围的F1和F2值。

我需要一种方法让Spotfire Analyst(v7.x)使用​​范围条形图的选择来触发此选择语句:

SELECT * FROM Actuals WHERE Actuals.Fc between [Ranges].[F1] AND [Ranges].[F2]

但两个数据源之间没有任何关系(外键),一个在内存中(Ranges),另一个是动态加载的。

TLDR:如何将一个可视化中的选定行用作另一个可视化数据的过滤表达式?

1 个答案:

答案 0 :(得分:0)

我选择的解决方法: 添加一个显示“加载所选数据”的按钮

这将运行以下代码,它将在文档属性中存储F1和F2的值,然后您可以使用它来过滤动态加载表并触发刷新(使用刷新代码或将其设置为自动加载)。

rowIndexSet=Document.ActiveMarkingSelectionReference.GetSelection(Document.Data.Tables["IL_Ranges"]).AsIndexSet()

if rowIndexSet.IsEmpty != True:
    Document.Properties["udF1"] = Document.Data.Tables["IL_Ranges"].Columns["F1"].RowValues.GetFormattedValue(rowIndexSet.First)
    Document.Properties["udF2"] = Document.Data.Tables["IL_Ranges"].Columns["F2"].RowValues.GetFormattedValue(rowIndexSet.First)

if Document.Data.Tables.Contains("IL_Actuals")==True:
    myTable=Document.Data.Tables["IL_Actuals"]     
if myTable.IsRefreshable and myTable.NeedsRefresh:
    myTable.Refresh()

目前,这是假设您不允许用户一次查看多个范围,而只是显示所选的第一个范围。

如果您想要允许它们查看多个范围,您可以在IL_Ranges表中运行游标,以获取每个值的最小值和最大值,并限制最小值和最大值之间的实际值,或者您可以创建一个字符串本质上会说'Fc在450和680之间或Fc在890和990之间',将其作为字符串传递给存储过程,它将执行准动态语句,并获取结果数据集。