通过 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 列属性的结果定义与未成功编写脚本时的结果定义?
我担心参考表参数需要文字参数,而不是变量。 请参阅此帮助条目有关编写虚拟连接脚本。