使用Loc Sorted進行跨表的精確匹配-還是其他工具?客戶有興趣在類似於VLOOKUP(excel)的列中設置公式。 該函數將產生與使用表聯接相同的輸出,但是客戶有合理的理由使用公式而不是聯接來執行此操作。
例如,他的基表可能如下所示:

第二個參考表可能是這樣的:

我們可以將此公式分配給基表的“輸出”列:
dtRefTable =數據表(“ RefTable”);
KeyBracket = Loc Sorted(dtRefTable:Key << getvalues,:Key);
dtRefTable:SpecificInfo [KeyBracket];
當公式執行時,它會將基本表更改為如下所示:

問題是在基表中,第2行的鍵是2401。 Ref Table中沒有匹配2401,因此Loc Sorted向下取整併選擇Key的下一個較低值(在本例中為Key = 2400),並選擇111作為輸出。
客戶想要的是將該單元格(“輸出”列,第2行)設置為“缺少”,或通過條件語句將其標識為“找不到匹配項”的任何其他值。 當然,這並不像說“如果Key = 2401將單元格設置為Missing”那樣簡單,因為在真實數據中存在許多匹配和不匹配的可能性。
小號 o理想的基本表如下所示:

我們如何做到這一點?是否有另一個函數(而不是Loc Sorted)可以跨這樣的表工作?
謝謝,
傑瑞
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?真好!感謝布雷迪,並感謝所有答复。 我認為客戶會滿意的。
JSL繼續為我提供所有可用的功能。 我對“ Try”功能一無所知,也沒有使用“ As List”。 非常酷,非常感謝!
傑瑞
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?我比較喜歡這個。更短更優雅。
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?
這是另一種選擇。
dt = Data Table( "reftable" );
Try( dt:specificInfo[Loc( As List( dt:key << getvalues ), :Key )[1]], . );
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?只要“鍵”列中的值為數字,並且您已設置表引用變量,此方法就應該起作用。您在示例中使用的列引用在列公式中似乎不起作用。
KeyBracket = Loc(Column(dtRefTable,"Key") << getvalues == :Key);
If(N Row(KeyBracket > 0,
Column(dtRefTable,"SpecificInfo")[KeyBracket[1]],
.
);
不知道我對錶公式中的代碼的感覺如何。但是,它確實避免了遍歷目標表中所有鍵值的麻煩。如果您的鍵值是字符,請在Loc命令中用逗號替換“ ==”並切換參數的順序。
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?是的-我的意思是您可以使用公式執行此操作... 如果存在表控制問題,那麼更好的方法可能是涉及JMP表查詢生成器。然後他們可以將標準化的工作流程另存為QB文件,並創建具有更新功能的表。QB的優點是代碼已經由JMP格式化和構建。回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?聯接(常規聯接或虛擬聯接)確實有效,我最初向客戶推薦了它們。 但是,它們有一些內部需求(很多人訪問安全數據文件-我不了解所有的來龍去脈),要求他們使用公式而不是聯接來完成。 抱歉!
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?我也建議這樣做。請注意,在保存包含公式的表之前,請勿關閉引用的表。如果這樣做,該公式將被刪除!
回复:使用Loc Sorted進行跨表的精確匹配-還是其他工具?您嘗試過虛擬聯接嗎?
中號