【问题标题】:Change column header depending on marked row on Spotfire根据 Spotfire 上的标记行更改列标题
【发布时间】:2023-08-02 13:44:01
【问题描述】:

我在一个页面上有两个交叉表。

第一个交叉表是一个摘要,其中横轴为组件,纵轴为设施。单元格值显示颜色“红色”、“黄色”或“NA”。第二个交叉表是汇总表上标记行的向下钻取,水平轴组件和类型在垂直轴上。单元格值是一个计数函数。

我需要的是让我标记的颜色显示在向下钻取的每个组件下方。

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     |
+-------+--------+-------+

有谁知道交叉表是否可以做到这一点?关于如何做到这一点的任何提示?感谢您的帮助。

谢谢, 约翰

编辑:我这样做是为了解决无法为交叉表的列标题着色的问题,所以如果有人有其他选择,我将不胜感激。

当前使用 Spotfire 7.11

【问题讨论】:

  • 如果你用两种不同的颜色标记两行,你想看到这两个词吗?我最初在想一个 IPython 脚本,但这里确实没有发生任何事情来触发它读取。但是 IPython 脚本可以遍历列的标记行并读取值,然后在标题中使用的 Doc Prop 中返回它...
  • 我没想过标记两行,但比较两个设施会很好。你有关于如何做脚本的参考吗?将每列的值读取然后保存到文档属性中的问题是,目前大约有 150 个组件,将来可能会添加更多。我在想是否有可能有一个具有我选择的颜色的计算行,但是我知道如何做到这一点(不过,我得到了一个提示,可以将它添加到我的表的 SQL 中)。跨度>
  • 如果不给标题上色,而是给背景上色怎么办?此外,python 可以非常快速地迭代数千行并提取不同的值,因此数字不是问题,问题是您需要一些动作控制来告诉它运行。更改标记不是一个动作,除非我们将其绑定到 R 脚本。

标签: r spotfire tibco


【解决方案1】:

好的。在这里忍受我,因为我已经破解了一个解决方案。我会说,我对你的数据结构做了一些假设。根据您的数据结构,答案可能需要稍作修改。

这是我的数据结构:

第 1 步: 创建两个文档属性来保存标题的值。我创建了两个名为“tableTitle1”和“tableTitle2”的文档属性(详细信息交叉表中的每一列都有一个)。创建一个文档属性来保存 r 脚本将传递给我们的 DateTime 值(稍后将讨论)。我把我的名字命名为“时间”。

第 2 步:创建您拥有的交叉表。确保第一个交叉表使用标记“标记”,第二个交叉表受标记“标记”限制。在第二个交叉表中,确保标题看起来像这样: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 应该是你的数据表,所有列,并且应该被标记限制。确保选中自动刷新功能复选框。

第 5 步: 将 python 脚本映射到时间文档属性。在 Edit > Document Properties 对话框的 Properties 下,将我们创建的 python 脚本分配给 document 属性。每次表格上的标记发生变化时,R 脚本都会更改当前日期时间,从而为我们运行 Python 脚本。

第 6 步:观看奇迹发生。

【讨论】:

  • 哇,感谢您的回答。我将对其进行一些更改,因为计数是表中的一列,而不是数据条目的计数。使用我的数据集需要一些麻烦,但非常感谢! :)
最近更新 更多