回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?您确定括号位于应有的位置吗?


回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?@jthi , 正确的。
我更正了代码
...并添加了不同情况下外星人列表在我的系统上的外观的屏幕截图。
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?根据您最终想要做什么,您确实有一些可能的解决方法:
- 添加“空白”行:alien = 1(除了外星人为 1 之外,所有其他值均缺失)
- 使用列表框(或其他东西)创建自定义过滤器,然后您可以拥有自己的逻辑和选项
- 如果没有找到,请使用某种逆过滤器
- 如果没有找到,则使用不同的视图
- 不要隐藏数据过滤器,以使正在过滤的内容更加明显(或者在这种情况下没有被过滤)
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?一些见解为什么该方法通过在哪里()不是动态的
使用Where()过滤分析创建新的链接私有数据表:
生成数据表的私有子集
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?这是向用户显示 Jmp 中存在问题的解决方法吗 - 我希望用户使用 Jmp 而不会看到问题:)
关于其他解决方法:
我不喜欢它重新发明轮子(创建我自己的数据过滤器)——只是为了防止 Jmp“做错事”。
所以剩下的就是选项#1:
将虚拟行添加到数据表中,以便数据过滤器不会因找不到任何匹配行而被清除。
有一些令人讨厌的缺点:虚拟行必须在其他地方手动“删除”......
- 列号 (if(:dummy_row, ., :alien), ...);
- 图形生成器 (...,Where(Ismissing(:dummy_row));
- dfRows = myDataFilter << 获取过滤行;
NRowsAfterDummyScreening=NItems(Loc(-dt[dfRows,"dummy"]+1));
只要用户不激活它就会起作用
包括缺失的分组列 ( 1 )。
对于 Jmp 的未来版本,我希望有一个选项可以防止数据过滤器在未找到匹配项时重置。 这是愿望:
本地数据过滤器:调整当前数据的选项
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?我找到了解决这个问题的方法
Include missing for grouping columns( 1 )
使用数据过滤器外星人=1和虚拟 = 0 - 另外设置计算排除的行数(1) [默认]。
那么数据过滤器将不会注意到对于许多年龄组来说,没有外星人 = 1 和虚拟 = 0 的行。
因为它没有注意到,所以它不会重置选择:)
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "dummy", Nominal );
dt << New Column( "alien", Nominal );
For( myAge = 12, myAge <= 17, myAge++,
dt << add rows( {:name = "xxx", :age = myAge, :dummy = 1, :alien = 1} )
);
:alien[12]=1;
:sex[12]="";
:alien[39]=1;
New Window( "Outlier Screening",
Data Filter Context Box(
H List Box(
dt << Data Filter(
Local,
Add Filter( columns( :age ), Where( :age == 13 ), Display( :age, N Items( 6 ) ) )
),
dt << Tabulate(
Show Control Panel( 0 ),
Include missing for grouping columns( 1 ),
Add Table(Row Table( Grouping Columns( :name, :sex ) ) ),
Local Data Filter(
Close Outline( 1 ),
Mode( Show( 0 ) ),
//Count Excluded Rows( 0 ),
Add Filter( columns( :dummy, :alien ), Where( Is Missing( :dummy ) ), Where( :alien == 1 ) )
)
)
)
)
);
注意:如果有一天整个数据集中没有一个外星人,这个解决方案就会失败。
对于这种情况...
- 人们可以在虚拟年龄组(“-99”)中隐藏一个虚拟 = 0 的额外外星人
...并注意不要有人计算全班的非虚拟外星人 - 或者:将数据过滤器分成两部分:
然后它们都获得足够的匹配行,这样它们就不会重置。
查看更多...Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "dummy", Nominal );
dt << New Column( "alien", Nominal );
For( myAge = 12, myAge <= 17, myAge++,
dt << add rows( {:name = "xxx", :age = myAge, :dummy = 1, :alien = 1} )
);
:sex[12] = "";
New Window( "Outlier Screening with worarounds",
Data Filter Context Box(
H List Box(
dt << Data Filter( Local, Add Filter( columns( :age ), Where( :age == 13 ), Display( :age, N Items( 6 ) ) ) ),
Data Filter Context Box(
H List Box(
dt << Data Filter( Local, Add Filter( columns( :dummy ), Where( Is Missing( :dummy ) ), Display( :age, N Items( 6 ) ) ) ),
dt << Tabulate(
Show Control Panel( 0 ),
Include missing for grouping columns( 1 ),
Add Table( Row Table( Grouping Columns( :name, :sex ) ) ),
Local Data Filter( Close Outline( 1 ), Mode( Show( 0 ) ), Add Filter( columns( :alien ), Where( :alien == 1 ) ) )
)
)
)
)
)
);
使用 Jmp Dashboards 筛选异常值 (:alien:) - 如何进行?我想通过列出班上的外星人来进行一些异常值筛选。
第一次尝试:本地数据过滤器
我对大班里的所有外星人感到非常震惊!
...但后来我注意到数据过滤器被忽略了(因为在第一天,班级中没有外星人 - 并且没有匹配的行,数据过滤器只是重置 - 而不是显示 0 个匹配行!!!)。
这似乎与数据过滤器:如何指定限制:
如果某个值仅在数据过滤器中使用,但未在数据表中使用,则会从数据过滤器中删除该值。
此行为会干扰 Jmp 的另一个行为:如果取消选择最后一个过滤器值,全部行被选择(而不是没有)。
所以,随着当前的数据过滤器的行为,这种方法不起作用:(
接下来,我使用了一个在哪里()条款限制制表报告。
不幸的是,如果有一天类中没有外星人,Where 子句会生成一条错误消息 - 而不是将数据集限制为 0 行:
This Where-clause for data table 'Big Class' resulted in no rows: :alien == 1
4例“外星人”名单:




请注意:
对于以下情况在哪里() ,还有一个问题:
报表的行选择是静态的。
XX 更改为非外国人后 - 他仍然列在报告中:

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "alien", nominal, set each value( 0 ) );
myDashboard = Function( {myTitle, withWhereClause},
New Window( myTitle,
<<SHOW menu=""> so many aliens ?!?! no, Data filter was ignored (filter is OK, see below)
myDashboard( "1) Data Filter, no alien", 0 );
// 2) Where Cause + no matching row --> error message instead of a report
myDashboard( "2) Where(), no alien", 1 );
dt << add rows( {name = "XX", alien = 1, sex = "M", age = 200} );
// 3) Data Filter + 1 alien
myDashboard( "3) Data filter, 1 alien", 0 ); // new test: --> filter OK --> works
myDashboard( "4) Where(), 1->0 aliens ...", 1 ); // Where Clause + matching row --> dashboard is created, but ...
// XX gets human -> Dashboard #4 stays the same :(
//dt[41, {"alien"}] = 0;
;</SHOW>
数据混合和清理数据探索和可视化回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?
@jthi写道:- 不要隐藏数据过滤器,以使正在过滤的内容更加明显(或者在这种情况下没有被过滤)
?
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?@hogi写道:
注意:此解决方案将会失败 *)
...结果非常令人惊讶 - 似乎页眉和页脚以及数据过滤器本身都不知道有关重置的任何信息:

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "dummy", Nominal );
dt << New Column( "alien", Nominal );
For( myAge = 12, myAge <= 17, myAge++,
dt << add rows( {:name = "xxx", :age = myAge, :dummy = 1, :alien = 1} )
);
:sex[12]="";
New Window( "Outlier Screening",
Data Filter Context Box(
H List Box(
dt << Data Filter(
Local,
Add Filter( columns( :age ), Where( :age == 13 ), Display( :age, N Items( 6 ) ) )
),
dt << Tabulate(
Show Control Panel( 0 ),
Include missing for grouping columns( 1 ),
Add Table(Row Table( Grouping Columns( :name, :sex ) ) ),
Local Data Filter(
Close Outline( 1 ),
Mode( Show( 0 ) ),
//Count Excluded Rows( 0 ),
Add Filter( columns( :dummy, :alien ), Where( Is Missing( :dummy ) ), Where( :alien == 1 ) )
)
)
)
)
);
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?我准备此脚本用于有关 Jmp 中异常值筛选的内部讨论。
它显示了大部分方面,并且可以用作进一步开发解决方法的起点......
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "dummy", Nominal );
dt << New Column( "alien", Nominal );
:alien[12] = 1;
:sex[12] = "";
:alien[39] = 1;
New Window( "alien screeing",
<<SHOW menu=""></SHOW>
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?谢谢@hogi - 这看起来绝对是一个错误,我们将在未来的版本中修复。
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?@danschikore
该视频提示了问题所在:
仪表板以制表中的错误列表开始 - 数据过滤器仅限于“外星人”,但列表中有许多条目带有外星人 = 缺失。
为了删除错误的条目,用户必须更改“内部”数据过滤器中的选择。 (视频的拳头部分)。 (*)
另一方面(第二部分),关于数据过滤器上下文框中的数据过滤器 - 一旦用户更改那里的选择,制表的内容就会重置,并且“内部”数据过滤器的设置将被忽略
...直到用户通过 (*) 再次更正它
支持票:TS-00046650
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?谢谢 :)
所以,我终究还是回到了@jthi的第一个建议:
@jthi写道:
- 添加“空白”行::alien = 1 (缺少所有其他值外国人除外 1)
只是一个带有alien=1的空行,没有for循环,没有额外的虚拟列等。
然后,虚拟外星人通过附加数据过滤器条目显示性别 = 缺失、姓名 = 缺失、年龄 = 缺失
- 这样可以通过选择轻松从报告中删除虚拟外星人一个相应数据过滤器中的条目(!=丢失)。
- 与虚拟柱方法相比的优点:
如果“今天没有外星人”,异常值筛选将不会重置:)
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "alien", Nominal );
dt << add rows( {:alien = 1} );
addAliens=0;
if(addAliens,
:alien[12]=1;
:alien[39]=1;
);
New Window( "Outlier Screening",
Data Filter Context Box(
H List Box(
dt << Data Filter(
Local,
Add Filter( columns( :age, :sex ), Where( :age == 13 ) )
),
dt << Tabulate(
Show Control Panel( 0 ),
Include missing for grouping columns( 1 ),
Add Table(Row Table( Grouping Columns( :name, :sex ) ) ),
Local Data Filter(
Add Filter( columns( :alien ), Where( :alien == 1 ) )
)
)
)
)
);
回复:使用 Jmp Dashboards 筛选异常值 - 如何进行?在 Jmp 17 中,为表/摘要引入了数据过滤器。
这里的问题要严重得多:最后,只有错误的结果 - 仪表板左侧没有数据过滤器显示“明显”错误的设置。表格/摘要中有 2 个错误
回复:如何使用 Jmp Dashboards 进行异常值筛选?嗨@danschikore ,
@danschikore写道:
谢谢@hogi——这看起来绝对是一个错误,我们会在将来的版本中修复它。
这个评论是指两个数据过滤器的特殊情况还是一般情况:
如果值不在当前数据表中,数据过滤器会忘记其设置吗?
回复:如何使用 Jmp Dashboards 进行异常值筛选?嗨@hogi - 我指的是视频中展示的第一个问题,即当外部过滤器发生变化时,Tabulate 没有显示正确的子集。但我没有看到您在此处提供的脚本 - 您是通过技术支持发送的吗?
-和
回复:如何使用 Jmp Dashboards 进行异常值筛选?该视频基于之前 2 篇帖子的代码,存在同样的问题。
在 Jmp18 中看起来好多了。看来这个问题可以修复了。
另一方面,数据过滤器仍然存在“忘记”其设置的问题:
https://community.jmp.com/t5/Discussions/Can-animation-of-this-difficulty-be-achieved-with-JSL/mp/755896#M93798
回复:如何使用 Jmp Dashboards 进行异常值筛选?在 JMP19 中修复:
Jmp 和 JSL 中的小陷阱
回复:如何使用 Jmp Dashboards 进行异常值筛选?请观看
使用 JMP 和 JMP Pro 的最新增强功能@ 9 分钟 / 作者: @brady_brady
观看现场演示,了解强制值如何解决数据过滤器的问题。
现在如此流畅优雅:)