透過 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 進行虛擬加入不起作用謝謝@費利和@hogi以便對此進行調查。
這裡的關鍵問題是:
如何透過單一腳本在兩個未儲存的資料表之間建立工作連結?
實際上可以使用兩個不同的腳本,但不能使用一個腳本: https://community.jmp.com/t5/Discussions/Setting-link-ID-in-jsl-seems-not-to-work-what-is-wrong/mp/598505
這個主題的主要內容是「他們必須被拯救」。
後續問題:
為什麼可以透過點擊連結到未儲存的表,但不能透過單一腳本連結?
這個問題(我認為這是一個錯誤)是否已解決並放在某個地方? 對我來說最初的問題是@費利沒有解決。
回覆:透過 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 不同,如果我使用(例如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 進行虛擬加入不起作用偉大的!
在將經緯度反向地理編碼為郵遞區號我也必須保存文件;您可以使用句柄而不是磁碟檔案名,但磁碟檔案確實需要存在。
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)設定屬性(“連結引用”,引用表()必須是檔案名稱引用,如回覆所述。
不知道為什麼,但我會接受...
回覆:透過 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 列屬性的結果定義與未成功編寫腳本時的結果定義?
我擔心參考表參數需要文字參數,而不是變數。 請參閱此說明條目有關編寫虛擬連線腳本。