2017-07-03 160 views
1

我正在使用Spotfire工具,我正在使用主数据表中的计算列将数据行通过正则表达式匹配到“家庭”中。例如,一行可能具有ABC1234xyz的“名称”,因此它将成为ABC家族的一部分,因为它包含字符串'ABC'。另一行可能是AQRST31x2af,属于QRST系列。重点是“家庭”是通过匹配名称中的子字符串来决定的,但该子字符串可以是任意长度,并且不一定是名称字符串的开头。如何通过正则表达式匹配来合并2个spotfire表?

现在我正在通过一个带有计算列的大嵌套If语句来做这件事。然而,这对于添加新家庭以及维持当前的家庭列表而言是乏味的。我想要做的是创建一个包含2列的表格,字符串匹配和姓氏。然后,我想从这张表中匹配来确定家庭而不是嵌套if。所以,它可能看起来像下表:

Match Table: 

id_string | family 
---------------------- 
ABC  | ABC 
QRST  | QRST 
SUP  | Super 

Main Data Table: 

name  | data  | family 
--------------------------------------- 
ABC1234  | 1.02342  | ABC 
ABC1215  | 1.23749  | ABC 
AQRST31x2af | 1.04231  | QRST 
BQRST32x2ac | 1.12312  | QRST 
1903xSUP | 1.51231  | Super 
1204xSUP | 1.68123  | Super 

如果您有任何建议,我将不胜感激。

谢谢。

回答

0

正如@ ksp585提到的那样,Spotfire看起来并不像我想要的那样,所以我想出了一个使用IronPython的解决方案。从本质上讲,这里是我做了什么:

  1. 创建的表称为家,其中列IDString和家庭,它看起来像这样(用上述同样的例子字符串):

    IDString | Family 
    ------------------------ 
    ABC  | ABC 
    SUP  | Super 
    QRST  | QRST 
    
  2. 创建一个名为NAMES的表,作为我主数据表的一个枢轴,唯一的列是NAME。这仅仅是创建独特的名单(因为数据表中,每个名行):

    NAME 
    ------------------------ 
    ABC1234 
    ABC1215 
    AQRST31x2af 
    BQRST32x2ac 
    ... 
    
  3. 创建了标记匹配家庭按钮,它调用的脚本的IronPython文本区域。该脚本读取NAMES表和FAMILIES表,使用正则表达式将每个名称与IDString列进行比较,并将每个名称与结果中的族关联起来。任何不匹配单个IDString的名称都会得到姓氏“Other”。然后,它会生成一个名为NAME_FAMILY_MAP的新表,其中包含NAME和FAMILY列。

  4. 使用这个新表格,我可以使用来自NAME_FAMILY_MAP的左外连接将匹配到NAME的列添加回原始数据表。由于NAME_FAMILY_MAP不直接链接到NAMES表(由按钮生成),因此不会创建循环依赖关系。

然后,我可以使用其他脚本将FAMILIES表添加到FAMILIES表中,或者使用更新列表替换FAMILIES表。它比我所希望的稍微更乏味,但它有效,所以我很高兴。

0

@ wcase6-据我所知,不能根据表达式将列从一个表添加到另一个表。添加列时,一个匹配列中的值应该与另一个匹配。

相反,您可以在“主数据表”上尝试以下解决方案。

注意:此解决方案基于发布的方案。如果有更多/不同的情况,您可能需要调整提供的自定义表达式。

第1步:添加一个忽略小写字母和数字的计算列'ID_string'。

Trim(RXReplace([Name],"[a-z0-9]","","g")) 

步骤2:添加计算的列的 '家族'。

If([ID_string]="SUP","Super",If(Len([ID_string])>3,right([ID_string],4),[ID_string])) 

最终输出:

enter image description here

希望这有助于!

+0

嗯,谢谢你的建议。不幸的是,我的例子并没有涵盖每一个案例,所以这是行不通的。我需要的一些家庭包括数字,这将打破这一点,等等。问题是我不控制名称字段中项目的命名约定,但为了进行分析,我需要将它们分类。然后,我将尝试使用IronPython来完成此操作。 – wcase6