通過 JSL 的虛擬加入不起作用親愛的 JMP 社區,
我正在通過 JSL 鏈接兩個數據表以進行虛擬連接:
dt1:Link_Column<< Set Property( "Link ID", 1 );
dt2:Link_Column << Set Property( "Link Reference", Reference table(dt1 ));
我在兩個表和列信息中都看到了鍵符號,因此鏈接似乎有效,但虛擬連接的列沒有出現在我的連接數據表中。
如果我手動執行完全相同的操作並在 JMP 中單擊,它會起作用並且會出現連接的列。
有沒有辦法在虛擬加入後強制更新?
腳本回复:通過 JSL 虛擬加入不起作用似乎已通過 Jmp 17 修復。
回复:通過 JSL 虛擬加入不起作用謝謝@Feli和@hogi對此進行調查。
這裡的關鍵問題是:
如何通過單個腳本在兩個未保存的數據表之間創建工作鏈接?
實際上可以使用兩個不同的腳本,但不能使用一個腳本: https://community.jmp.com/t5/Discussions/Setting-link-ID-in-jsl-seems-not-to-work-what-is-wrong/mp/598505
該線程的主要內容是“必須保存它們”。
後續問題:
為什麼可以通過單擊而不是通過一個腳本鏈接到未保存的表格?
這個問題(我認為這是一個錯誤)是否得到解決並擺在桌面上的某個地方? 對我來說,最初的問題是@Feli沒有解決。
回复:通過 JSL 虛擬加入不起作用有趣的問題。
是否“僅”需要保存表格來為鏈接獲取唯一的文件名?
是否可以改用數據表名稱(沒有完整路徑)?
在這個例子中,要將參考表 (dt2) 正確鏈接到 dt1,必須先保存它
- 對於 dt3,無需保存就可以了。
在不保存任何表的情況下,有時僅從引用表中刪除鏈接 ID(由 JSL 腳本生成)並再次手動添加它對我有幫助。
如果 jmp 行為保持這樣,是否可以顯示一條警告消息,如“鏈接到未保存的數據表不起作用”
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Data table summary
// → Data Table( "Big Class By (sex)" )
dt 2 = Data Table( "Big Class" ) << Summary(
Group( :sex ),
Median( :height ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
// Change column link ID: sex
dt2:sex << Set Property( "Link ID", 1 );
// uncomment this line to make the virtual link work table d1
//dt2 << save( "$desktop/summaryTable.jmp" );
// Change column link reference: sex
dt1:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
dt3 = Eval(dt1 << getScript);
dt3:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
回复:通過 JSL 虛擬加入不起作用現在我有點困惑——所以虛擬連接在 JSL 中不起作用的大問題是它沒有保存?
這有技術原因嗎? - 虛擬鏈接在我手動執行時適用於未保存的數據表,但在 JSL 中不起作用? 兩者都在做不同的事情嗎?
我的 dt1 是通過導入數據並對其進行操作創建的 - 為什麼變量 dt1 與我使用的變量 dt1 不同,例如 json 導入嚮導來創建它,而不是在現有數據表上使用 Open() 兩者都指向一個開放的數據表在 JMP 中?
回复:通過 JSL 虛擬加入不起作用dt1 = Open( "$SAMPLE_DATA\Pizza Profiles.jmp" );
dt2 = Open( "$SAMPLE_DATA\Pizza Responses.jmp" );
dt1:ID << Set Property( "Link ID", 1 );
dt2:Choice << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice1 << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice2 << Set Property( "Link Reference", Reference Table( dt1 ) );
dist1 = dt2 << Distribution(
Nominal Distribution( Column( Referenced Column( "Cheese[Choice]", Reference( Column( :Choice ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice1]", Reference( Column( :Choice1 ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice2]", Reference( Column( :Choice2 ), Reference( Column( :Cheese ) ) ) ) ) )
);
這是一個可行的示例——這些是示例數據表,使用了 dt1、dt2 腳本概念。 確保它始終有效的一個好習慣是按照上面的建議進行操作,並始終在創建鏈接之前保存表格。 在這個例子中,因為這些是樣本,所以這裡沒有保存。
回复:通過 JSL 虛擬加入不起作用偉大的!
在將 Lat-Lon 反向地理編碼為 Zip我也必須保存文件;您可以使用句柄而不是磁盤文件名,但磁盤文件確實需要存在。
1 blobdbf = za << read( "cb_2019_us_zcta510_500k.dbf", Format( blob ) );
2 tempfile = Save Text File( "$temp/cb_2019_us_zcta510_500k.dbf", blobdbf );
3 zipcodeNS:dtdbf = Open( tempfile, Add to Recent Files( 0 ), invisible );
4 zipcodeNS:dtdbf << save( "$desktop/cb_2019_us_zcta510_500kdbf.jmp" );
5 , //
6 zipcodeNS:dtshp = Open( "$desktop/cb_2019_us_zcta510_500kshp.jmp", Add to Recent Files( 0 ), invisible );
7 zipcodeNS:dtdbf = Open( "$desktop/cb_2019_us_zcta510_500kdbf.jmp", Add to Recent Files( 0 ), invisible );
8 );
9 zipcodeNS:dtdbf:shape << Set Property( "Link ID", 1 );
10 zipcodeNS:dtshp:shape << Set Property( "Link Reference", Reference Table( zipcodeNS:dtdbf ) );
第 3 行將非 JMP 文件作為表格打開。
第 4 行將表另存為 JMP 文件,或者第 7 行從磁盤重新打開。
第 10 行從 dtdbf 句柄創建鏈接引用,但沒有明確使用 $desktop 名稱。
可以使用適當的鏈接重新保存 dtshp 文件,但我沒有這樣做。 如果該文件在此腳本之外使用,那將很有幫助。
回复:通過 JSL 虛擬加入不起作用秘訣是 a) 保存數據表和 b) Set Property( "Link Reference", Reference table() 必須是文件名引用,如回復中所述。
不知道為什麼,但我會接受它......
回复:通過 JSL 虛擬加入不起作用這是一個例子,應該可以。
它從 JMP 示例表中查詢兩個表,然後將它們連接起來。
正如其他人提到的,可能存在一些問題需要進行故障排除,可能您可以在日誌中找到一些內容
- 需要保存引用的表
- 引用的表需要沒有重複項
- 引用(表名、列名)是否正確?
- ...
兩側的按鍵需要顏色飽和,而不是蒼白。 蒼白意味著不工作。
我也遇到了一些麻煩,但它有效。
// User Dialog for query from datatable (database)
/***************************************************************************/
// Initialization
/***************************************************************************/
Names Default To Here( 1 );
Clear Log();
// Query 1st table with filter conditions
dt_filter = New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables( ["Big Class" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class.jmp"] ),
QueryName( "filter" ),
CustomSQL( "SELECT distinct t1.name, t1.age, t1.sex, t1.weight, t1.height FROM \!"Big Class\!" t1 where t1.sex = 'M' and t1.age<=13;" )
) << Run;
Summarize( name_lst = by( dt_filter:name ) );
dt_filter:name << set property("Link ID", 1);
dt_filter << save("$TEMP\dt_filter.jmp");
// (2) assign custom SQL,
Assign(
custom_sql,
"\[
SELECT t1.picture, t1.name, t1."sibling ages",
t1.sports, t1."countries visited", t1."family cars", t1."reported illnesses",
t1."age vector"
FROM "Big Class Families" t1
where t1.name in __NAMELIST__
;
]\"
);
// (3) Put namelist into custom_sql
Substitute Into( custom_sql, "__NAMELIST__", Substitute( Char( name_lst ), "{", "(", "}", ")" ) );
// (4) execute Query
dt_result = New SQL Query( Version( 130 ), Connection( "JMP" ),
, JMP Tables( ["Big Class Families" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class Families.jmp"] ),
QueryName( "dt_result" ), CustomSQL( custom_sql ) )
<< Run;
dt_result << save("$TEMP\dt_result.jmp");
// (5) Connect both tables by symbolic link
dt_result:name << set property("Link Reference", Reference Table("$TEMP\dt_filter.jmp"));
回复:通過 JSL 虛擬加入不起作用此外,在加入之前保存表格可能會有所幫助。
回复:通過 JSL 虛擬加入不起作用我只是在猜測快速回复,但您是否比較了 dt2:LinkColumn 的列屬性的最終定義,當您成功地交互式定義它時與您編寫腳本失敗時?
我擔心 Reference Table 參數需要一個文字參數,而不是一個變量。 請參閱有關此幫助條目編寫虛擬連接腳本.