麻烦操纵列表表格我不太明白为什么我在从列表报表创建的表中操纵列时遇到问题。我已附上表格和脚本供您参考。我正在尝试创建一个匹配当前报表的表。
永远,谢谢你的帮助
Names Default To Here(1);
dt = Current Data Table();
LotListSQLString = "Wafer_1";
tab = dt
<< Tabulate(
invisible,
Show Control Panel( 0 ),
Add Table(
Column Table(
Category Table,
Statistics(
N,
Name( "% of Total" )
)
),
Row Table(
Columns by Categories(
:Name( "test" ),
:Name( "[Rx] test1" ),
:Name( "[Rx] test2" ),
:Name( "[Rx] test3" ),
:Name( "[Tx] test1" ),
:Name( "[Tx] test2" ),
:Name( "[Tx] test3" ),
:Name( "test4" ),
:Name( "Composite" )
)
)
)
);
dtFinal = tab << Make Into Data Table;
Wait( 1 );
dtFinal << set name( " Yield Report" );
dtFinal = New Column( "Mode",
<< Formula(
If( (:Columns by Categories == "test" ), "-",
IF( :Columns by Categories == "[Rx] test1", "Rx",
IF( :Columns by Categories == "[Rx] test2", "Rx",
IF( :Columns by Categories == "[Rx] test3", "Rx",
IF( :Columns by Categories == "[Tx] test1", "Tx",
IF( :Columns by Categories == "[Tx] test2", "Tx",
IF( :Columns by Categories == "[Tx] test3", "Tx",
If( :Columns by Categories == "test4", "-"
)
)
)
)
)
)
)
)
)
);
Wait( 0 );
dtFinal = New Column( "TestName",
<< Formula(
If( (:Columns by Categories == "test" ), "test",
IF( :Columns by Categories == "[Rx] test1", "test1",
IF( :Columns by Categories == "[Rx] test2", "test2",
IF( :Columns by Categories == "[Rx] test3", "test3",
IF( :Columns by Categories == "[Tx] test1", "test1",
IF( :Columns by Categories == "[Tx] test2", "test2",
IF( :Columns by Categories == "[Tx] test3", "test3",
If( :Columns by Categories == "test4", "test4"
)
)
)
)
)
)
)
)
)
);
// ------------------------ BEGIN FORMATING TABLE FOR FINAL REPORTING
// Says Scriptable[] but won't delete
dtFinal << Delete Columns( {"N(Fail)", "% of Total(Fail)"} );
// Works Correctly
dtFinal = New Column( "wafer_number",
<< Formula(
LotListSQLString
)
);
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal << Go To( "wafer_number" );
Wait ( 0.5 );
dtFinal << move selected Columns( To First );
dtFinal << clear Column selection;
// Works Correctly
dtFinal = Column( "Mode" ) << Delete Formula;
dtFinal = Column( "TestName" ) << Delete Formula;
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal << Go To( :Mode );
Wait ( 1 );
dtFinal << move selected Columns( after( "wafer_number" ) );
dtFinal << Clear Column Selection;
// Says Scriptable[] but won't go to delete
dtFinal << Delete Columns( :Columns by Categories);
// Says Scriptable[] but won't go to delete
dtFinal << go to( :TestName );
Wait( 1 );
dtFinal << Move Selected Column( after( "name" ) );
dtFinal << clear Column selection;
// Works Correctly
lot = "XYZ";
part = New Column( "part_number" );
part << Set Formula( lot );
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal << go to( :part_number );
Wait ( 1 );
dtFinal << Move Selected Column( after( "name" ) );
dtFinal << clear Column selection;
// Works Correctly
die = 334;
numdie = New Column( "NumDie" );
numdie << Set Formula( die );
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal<< go to( :NumDie );
Wait ( 1 );
dtFinalYield<< move selected Columns( after( "part_number" ) );
dtFinalYield<< clear Column selection;
回复:麻烦操纵列表表刚刚获得语法就是杀了我.. 谢谢你指出了.. 由于我还在学习如何在JSL中编码,我最明确地将这些formus,脚本指南和脚本索引都打开以搜索如何做事。我错过了=到<< ..回复:麻烦操纵列表表dtFinalYield应该只是dtFinal .. 当我将脚本附加到此论坛时,我必须重命名所有内容而我错过了那个... 我很抱歉。
我看到'='符号而不是'<<'的问题我不知道为什么我这样做..回复:麻烦操纵列表表下面是我对你的剧本的评论......问题似乎是不了解何时使用“=”和何时使用“<<”之间的区别,而且你似乎也更加小心,这有时与不完全理解JSL。 所以我强烈建议你阅读脚本指南!
帮助==>图书==>脚本指南
这是我的带注释的脚本
Names Default To Here(1);
dt = Current Data Table();
LotListSQLString = "Wafer_1";
tab = dt
<< Tabulate(
invisible,
Show Control Panel( 0 ),
Add Table(
Column Table(
Category Table,
Statistics(
N,
Name( "% of Total" )
)
),
Row Table(
Columns by Categories(
:Name( "test" ),
:Name( "[Rx] test1" ),
:Name( "[Rx] test2" ),
:Name( "[Rx] test3" ),
:Name( "[Tx] test1" ),
:Name( "[Tx] test2" ),
:Name( "[Tx] test3" ),
:Name( "test4" ),
:Name( "Composite" )
)
)
)
);
dtFinal = tab << Make Into Data Table;
Wait( 1 );
dtFinal << set name( " Yield Report" );
// changed from
// dtFinal = New Column( "Mode",
// to
dtFinal << New Column( "Mode", character,
// More efficient way to code the If()
Formula(
If(
:Columns by Categories == "test", "-",
:Columns by Categories == "[Rx] test1", "Rx",
:Columns by Categories == "[Rx] test2", "Rx",
:Columns by Categories == "[Rx] test3", "Rx",
:Columns by Categories == "[Tx] test1", "Tx",
:Columns by Categories == "[Tx] test2", "Tx",
:Columns by Categories == "[Tx] test3", "Tx",
:Columns by Categories == "test4", "-"
)
)
);
Wait( 0 );
// changed from
// dtFinal = New Column( "TestName",
// to
dtFinal << New Column( "TestName", character,
// More efficient way to code the If()
Formula(
If(
:Columns by Categories == "test", "test",
:Columns by Categories == "[Rx] test1", "test1",
:Columns by Categories == "[Rx] test2", "test2",
:Columns by Categories == "[Rx] test3", "test3",
:Columns by Categories == "[Tx] test1", "test1",
:Columns by Categories == "[Tx] test2", "test2",
:Columns by Categories == "[Tx] test3", "test3",
If( :Columns by Categories == "test4",
"test4"
)
)
)
);
// ------------------------ BEGIN FORMATING TABLE FOR FINAL REPORTING
// Says Scriptable[] but won't delete
// You had not used the proper syntax in the above step, so that dtFinal
// was changed from a data table pointer to pointer to column "TestName"
dtFinal << Delete Columns( {"N(Fail)", "% of Total(Fail)"} );
// Works Correctly
// changed from
// dtFinal = New Column( "wafer_number",
// to
dtFinal << New Column( "wafer_number", character,
<< Formula(
LotListSQLString
)
);
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal << Go To( "wafer_number" );
Wait ( 0.5 );
dtFinal << move selected Columns( To First );
dtFinal << clear Column selection;
// Works Correctly
// Changed from
// dtFinal = Column( "Mode" ) << Delete Formula;
// to
dtFinal:Mode << Delete Formula;
// Changed from
// dtFinal = Column( "TestName" ) << Delete Formula;
// to
dtFinal:TestName << Delete Formula;
// Says Scriptable[] but won't go to column and obviously doesn't move
// With keeping dtFinal as a pointer to the data table this now works
dtFinal << Go To( :Mode );
// Wait ( 1 ); // not necessary wait
dtFinal << move selected Columns( after( "wafer_number" ) );
dtFinal << Clear Column Selection;
// Says Scriptable[] but won't go to delete
// With keeping dtFinal as a pointer to the data table this now works
dtFinal << Delete Columns( :Columns by Categories);
// Says Scriptable[] but won't go to delete
dtFinal << go to( :TestName );
//Wait( 1 );
// changed from
// dtFinal << Move Selected Column( after( "name" ) );
// to
dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
dtFinal << clear Column selection;
// Works Correctly
// This form will not work, once you save the table and reopen it
// because the formula requires a variable named Lot
//lot = "XYZ";
//part = New Column( "part_number" );
//part << Set Formula( lot );
// here is a form that will work
dtFinal << New Column( "part_number", character, set each value("XYZ" ) );
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal << go to( :part_number );
//Wait ( 1 );
// There is not a column named "name", therefore
// changed
// dtFinal << Move Selected Column( after( "name" ) );
// to
dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
dtFinal << clear Column selection;
// Works Correctly
// This form will not work, once you save the table and reopen it
// because the formula requires a variable named die
//die = 334;
//numdie = New Column( "NumDie" );
//numdie << Set Formula( die );
dtFinal << New Column( "NumDie", set each value(334) );
// Says Scriptable[] but won't go to column and obviously doesn't move
dtFinal<< go to( :NumDie );
//Wait ( 1 );
// There is no pointer called dtFinalYield
// changed from
// dtFinalYield<< move selected Columns( after( "part_number" ) );
// dtFinalYield<< clear Column selection;
// to
dtFinal << move selected Columns( after( "part_number" ) );
dtFinal << clear Column selection;
回复:麻烦操纵列表表不正确的语法创建了几个名称冲突:
dtFinal = tab << Make Into Data Table;
Wait( 1 );
dtFinal << set name( " Yield Report" );
dtFinal = New Column( "Mode",
正如您编写的脚本所期望的那样,dtFinal是表引用,但语法dtFinal = New Column()将新列分配给引用dtFinal。 语法应该是dtFinal << New Column()也在脚本的末尾你引用dtFinalyield,没有这样的表。
您还应该查找JMP If()函数的语法。您不需要嵌套ifs:
如果(cond1,result1,cond2,result2,... condk,结果k,else);
回复:麻烦操纵列表表我用您的数据运行您的脚本没有问题....
创建制表报告和相关表格.... 并且也可以修改这样的表....
你能更好地解释一下你遇到了什么样的麻烦吗?
再见
Gianpaolo