根据 Spotfire 上标记的行更改列 header
Change column header depending on marked row on Spotfire
我在一个页面上有两个交叉 table。
第一个十字 table 是一个摘要,横轴是组件,纵轴是设施。单元格值显示颜色 "RED"、"YELLOW" 或 "NA"。第二个交叉 table 是摘要 table 上标记行的向下钻取,水平轴是组件,垂直轴是类型。单元格值是一个计数函数。
我需要的是让我标记的颜色显示在向下钻取中的每个组件下方。
Summary
+----------+--------+-------+--------+
| Facility | COMP1 | COMP2 | COMP3 |
+----------+--------+-------+--------+
| FAC1 | NA | RED | RED |
| FAC2 | YELLOW | NA | RED |
| FAC3 | RED | RED | YELLOW |
+----------+--------+-------+--------+
Drilldown (If I mark the FAC2 row)
+-------+--------+-------+
| Type | COMP1 | COMP3 |
+ + YELLOW + RED +
|-------|--------|-------|
| TYPE1 | 12 | |
| TYPE2 | 11 | 4 |
+-------+--------+-------+
有人知道交叉 table 是否可行吗?关于如何做的任何提示?感谢您的帮助。
谢谢,
约翰
编辑:我这样做是为了解决无法为十字 table 的列 headers 着色的问题,所以如果有人有替代方案,我将不胜感激。
目前正在使用 Spotfire 7.11
好的。请耐心等待,因为我已经找到了一个解决方案。我会说,我对你的数据结构做了一些假设。根据您的数据结构,答案可能需要稍作修改。
这是我的数据结构:
步骤 1: 创建两个文档属性来保存标题的值。我创建了两个名为 "tableTitle1" 和 "tableTitle2" 的文档属性(详细信息交叉 table 中的每一列都有一个)。创建一个文档 属性 来保存 r 脚本将传递给我们的 DateTime 值(稍后讨论)。我将我的命名为 "time".
第 2 步: 创建十字架 table确保第一个交叉 table 使用标记 "Marking",第二个由标记 "Marking" 限制。在第二个交叉 table 中,确保标题看起来像这样:Count([Comp1]) as [Comp1 ${tableTitle1}], Count([Comp3]) as [Comp2 ${tableTitle2}]
。您需要使用在步骤 1 中创建的文档属性。
步骤 3: 创建 python 脚本。代码如下:
from System.Collections.Generic import List
from Spotfire.Dxp.Data import *
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
dataTable = Document.Data.Tables["SOTest"]
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp1"])
# Retrieve the marking selection
markings = Document.Data.Markings["Marking"].GetSelection(dataTable).AsIndexSet()
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle1"] = ', '.join(valData)
####DO IT AGAIN FOR THE SECOND COLUMN#####
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp2"])
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle2"] = ', '.join(valData)
第 4 步: 创建一个 R 脚本以在标记数据时启动 python 脚本。这将是一个非常简单的 R 脚本。代码如下:
markedTable <- inputTable
time <- Sys.time()
应取消选中允许缓存复选框。输出参数时间应该去文档属性时间。输入参数 inputTable 应该是你的数据table,所有列,并且应该被标记限制。确保选中自动刷新功能复选框。
第 5 步: 将 python 脚本映射到时间文档 属性。在“编辑”>“文档属性”对话框的“属性”下,将我们创建的 python 脚本分配给文档 属性。每次 table 上的标记更改时,R 脚本都会更改当前日期时间,因此 运行 我们的 python 脚本。
第 6 步:观看奇迹发生。
我在一个页面上有两个交叉 table。
第一个十字 table 是一个摘要,横轴是组件,纵轴是设施。单元格值显示颜色 "RED"、"YELLOW" 或 "NA"。第二个交叉 table 是摘要 table 上标记行的向下钻取,水平轴是组件,垂直轴是类型。单元格值是一个计数函数。
我需要的是让我标记的颜色显示在向下钻取中的每个组件下方。
Summary
+----------+--------+-------+--------+
| Facility | COMP1 | COMP2 | COMP3 |
+----------+--------+-------+--------+
| FAC1 | NA | RED | RED |
| FAC2 | YELLOW | NA | RED |
| FAC3 | RED | RED | YELLOW |
+----------+--------+-------+--------+
Drilldown (If I mark the FAC2 row)
+-------+--------+-------+
| Type | COMP1 | COMP3 |
+ + YELLOW + RED +
|-------|--------|-------|
| TYPE1 | 12 | |
| TYPE2 | 11 | 4 |
+-------+--------+-------+
有人知道交叉 table 是否可行吗?关于如何做的任何提示?感谢您的帮助。
谢谢, 约翰
编辑:我这样做是为了解决无法为十字 table 的列 headers 着色的问题,所以如果有人有替代方案,我将不胜感激。
目前正在使用 Spotfire 7.11
好的。请耐心等待,因为我已经找到了一个解决方案。我会说,我对你的数据结构做了一些假设。根据您的数据结构,答案可能需要稍作修改。
这是我的数据结构:
步骤 1: 创建两个文档属性来保存标题的值。我创建了两个名为 "tableTitle1" 和 "tableTitle2" 的文档属性(详细信息交叉 table 中的每一列都有一个)。创建一个文档 属性 来保存 r 脚本将传递给我们的 DateTime 值(稍后讨论)。我将我的命名为 "time".
第 2 步: 创建十字架 table确保第一个交叉 table 使用标记 "Marking",第二个由标记 "Marking" 限制。在第二个交叉 table 中,确保标题看起来像这样:Count([Comp1]) as [Comp1 ${tableTitle1}], Count([Comp3]) as [Comp2 ${tableTitle2}]
。您需要使用在步骤 1 中创建的文档属性。
步骤 3: 创建 python 脚本。代码如下:
from System.Collections.Generic import List
from Spotfire.Dxp.Data import *
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
dataTable = Document.Data.Tables["SOTest"]
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp1"])
# Retrieve the marking selection
markings = Document.Data.Markings["Marking"].GetSelection(dataTable).AsIndexSet()
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle1"] = ', '.join(valData)
####DO IT AGAIN FOR THE SECOND COLUMN#####
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp2"])
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle2"] = ', '.join(valData)
第 4 步: 创建一个 R 脚本以在标记数据时启动 python 脚本。这将是一个非常简单的 R 脚本。代码如下:
markedTable <- inputTable
time <- Sys.time()
应取消选中允许缓存复选框。输出参数时间应该去文档属性时间。输入参数 inputTable 应该是你的数据table,所有列,并且应该被标记限制。确保选中自动刷新功能复选框。
第 5 步: 将 python 脚本映射到时间文档 属性。在“编辑”>“文档属性”对话框的“属性”下,将我们创建的 python 脚本分配给文档 属性。每次 table 上的标记更改时,R 脚本都会更改当前日期时间,因此 运行 我们的 python 脚本。
第 6 步:观看奇迹发生。