2017-07-03 54 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