我已经搜索了相当多的内容,无法找到一个好的解决方案,在我看来这个产品的正常问题。
我有一个来自汇总表的数据表(在内存中)(称之为'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:如何将一个可视化中的选定行用作另一个可视化数据的过滤表达式?
答案 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之间',将其作为字符串传递给存储过程,它将执行准动态语句,并获取结果数据集。