通过 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 参数需要一个文字参数,而不是一个变量。 请参阅有关此帮助条目编写虚拟连接脚本.