首页 > 解决方案 > IronPython Spotfire:创建层次结构列并将关联的过滤器移动到 TableGroup.Subgroup

问题描述

我正在为 TIBCO Spotfire 编写 IronPython 脚本以创建新的层次结构列,然后将与层次结构关联的过滤器移动到 TableGroup.Subgroup。

在我的脚本中,我正在执行以下操作:
1. 检索表组“Result Table Group”
2. 检索数据表“Result Table”
3. 创建一个新的子组“Result hierarchy subgroup”
4. 循环遍历表中的所有过滤器组和
- 隐藏过滤器
- 为过滤器关联列创建层次结构列
- 尝试将过滤器移动到子组

以下是代码中的相关部分:

filterPanel = Document.ActivePageReference.FilterPanel

# get the correct tableGroup
for tableGroup in filterPanel.TableGroups:
    if tableGroup.Name == "Result Table Group":
        resultTableGroup = tableGroup

# get the correct dataTable
for table in Document.Data.Tables:
    if table.Name == "Result Table":
        resultDataTable = table

# create new subgroup
hierarchyfilterGroup = resultTableGroup.AddNewSubGroup("Result hierarchy subgroup")

filterPanel.InteractiveSearchPattern = ""
for filterHandle in filterPanel.FiltersMatchingSearchPattern:
    tableGroupFilterHandle = resultTableGroup.GetFilter(filterHandle.FilterReference.Name)

    if tableGroupFilterHandle != None:
       tableGroupFilterHandle.Visible = False # hide filter in table group

       # create a new hiearchy column
       hierarchyColName = tableGroupFitlerHandle.FilterReference.Name + " - process hierarchy"
       hierarchyExpressions = List[str]()
       hierarchyExpressions.Add("[" + tableGroupFitlerHandle.FilterReference.Name + "]")
       hierarchyExpressions.Add("[Process]")
       hierarchy = HierarchyDefinition(HierarchyNestingMode.Nested, hierarchyExpressions)
       resultDataTable.Columns.AddHierarchyColumn(hierarchyColName, hierarchy)

       # try to get the hierarchy associated filter
       hieararchyFilterHandle = tableGroup.GetFilter(hierarchyColName)
       if hiearchyFilterHandle != None:
           hierarchyfilterGroup.Add(hierarchyFilter.FilterReference)

但是, tableGroup.GetFilter(hierarchyColName)总是返回None层次结构的列。作为运行脚本的结果,我正确地获得了层次过滤器,并且我也正确地看到了子组,但是层次过滤器没有分类到子组中。

以下是我尝试过的其他一些事情:

  1. 在整个 FilterPanel 中搜索层次过滤器
FilterPanel.InteractiveSearchPattern = hierarchyColName
for filterHandle in filterPanel.FiltersMatchingSearchPattern:
    ...

--> 没有找到任何 MatchingFilters

  1. 在尝试查找过滤器之前刷新数据表
resultDataTable.Refresh()
...

​​​​​​​-->对结果没有影响

  1. 在第一个循环之后使用单独的第二个循环来移动过滤器

你能帮我把层次过滤器移到新创建的子组吗?

先感谢您!

标签: filterironpythonhierarchyspotfire

解决方案


终于想通了并留下答案,以防其他人被困在同一个地方。

filterPanel = Document.ActivePageReference.FilterPanel

# get the correct tableGroup
for tableGroup in filterPanel.TableGroups:
    if tableGroup.Name == "Result Table Group":
        resultTableGroup = tableGroup

# get the correct dataTable
for table in Document.Data.Tables:
    if table.Name == "Result Table":
        resultDataTable = table

# create new subgroup
hierarchyfilterGroup = resultTableGroup.AddNewSubGroup("Result hierarchy subgroup")

filterPanel.InteractiveSearchPattern = ""
for filterHandle in filterPanel.FiltersMatchingSearchPattern:
    tableGroupFilterHandle = resultTableGroup.GetFilter(filterHandle.FilterReference.Name)

    if tableGroupFilterHandle != None:
       tableGroupFilterHandle.Visible = False # hide filter in table group

       # create a new hiearchy column
       hierarchyColName = tableGroupFitlerHandle.FilterReference.Name + " - process hierarchy"
       hierarchyExpressions = List[str]()
       hierarchyExpressions.Add("[" + tableGroupFitlerHandle.FilterReference.Name + "]")
       hierarchyExpressions.Add("[Process]")
       hierarchy = HierarchyDefinition(HierarchyNestingMode.Nested, hierarchyExpressions)
       resultDataTable.Columns.AddHierarchyColumn(hierarchyColName, hierarchy)

       colExists, hierarchyCol = resultDataTable.Columns.TryGetValue(hierarchyColName)
       resultTableGroup.FilterCollectionReference.AddNewFilter(hierarchyCol)

       # move the filter to the subgroup
       hierarchyFilterHandle = resultTableGroup.GetFilter(hierarchyColName)
       hierarchyFilterHandle.Visible = True
       dynamicSubGroup.Add(hierarchyFilterHandle.FilterReference)

推荐阅读