限制选择并只允许在数据库查询过滤器中选择一个我想要一个只显示数据库中部分条目的查询过滤器。 我还想将用户限制为一种选择。 这是我在上一篇文章中使用的示例代码。
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "$SAMPLE_DATA\SAT.jmp",<BR /> "SATByYear" => "$SAMPLE_DATA\SATByYear.jmp"]
),
QueryName( "SATQuery" ),
Select( Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table( "SAT", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "State", "t1" ), Column( "State", "t2" ) ) &
EQ( Column( "% Taking (2004)", "t1" ),
Column( "% Taking (2004)", "t2" ) )
& EQ( Column( "X", "t1" ), Column( "X", "t2" ) )
& EQ( Column( "Y", "t1" ), Column( "Y", "t2" ) )
& EQ( Column( "Population", "t1" ), Column( "Population", "t2" ) )
& EQ( Column( "Latitude", "t1" ), Column( "Latitude", "t2" ) )
& EQ( Column( "Longitude", "t1" ), Column( "Longitude", "t2" ) )
)
)
),
Where(
In List( Column( "State", "t1" ),
_AllRows_,
UI( SelectListFilter(
ListBox,
Base( "Categorical",
Prompt( "State:", Character, PromptName( "t1.State_1" ),
ValueSource( Column( "State", Alias( "State" ), Table( "SATByYear" ) ) )
)
)
)
)
)
)
) << Run;例如,如果我只想向用户显示阿拉斯加、加利福尼亚、夏威夷、俄勒冈和华盛顿怎么办?
我可以将 _AllRows_ 替换为 {"Alaska", "California", "Hawaii", "Oregon", "Washington"}。 但是,这仍然显示所有状态。 它只是预先选择列表中的 5 个州。
我的实际应用程序是一个具有多个过滤器的大数据库,所以我不想使用中间表。
另外,我想允许用户只选择一个状态。 是否可以? 我可以更改过滤器类型。
回复:限制选择并只允许在数据库查询过滤器中选择一个一种选择是为用户选择生成提示,以将这些选定的值传递给 SQL 语句以供执行。该脚本可以使用创建数据库连接()和执行SQL ()与您的数据库进行交互。 下面是一个更简单的示例,可用于构建更强大的脚本,因此需要做更多的工作才能使它适用于您的用例。 希望这能帮助您获得想要的结果。
//clearing all symbols.
Delete Symbols ();
//defining an empty value for selection so it can handle when nothing is selected.
selection = {};
//Prompt providing values available for said user
nwp = New Window( "States",
<<MODAL></MODAL>回复:限制选择并只允许在数据库查询过滤器中选择一个感谢您管理我的期望。 一个更正是我没有要求它做所有事情。 返回空列表与未选择任何内容时返回完整列表一样简单。 将用户限制为一种选择对于许多语言和 API 来说很常见。 仅公开潜在选择的子集可能是最苛刻的要求。 开发人员可能有兴趣知道人们对这些特定功能感兴趣。
我知道事情需要时间,并且不要指望很快就会有这些功能。 与此同时,建议的变通办法大多很有帮助。 这个论坛值得赞赏。
如果有人可以推荐用于在 JMP 中构建自定义数据库查询过滤器接口的资源,我将非常感兴趣。
我也在探索其他选项,例如 JavaScript、Rails、R 等。不过,将人们推向其他语言似乎并不适合使用 JMP 论坛。 所以,如果我确实设计了其他东西,我不会在这里发布。
回复:限制选择并只允许在数据库查询过滤器中选择一个像 JMP 的查询构建器这样的通用工具可能很难做到所有事情。您是否考虑过为查询创建自己的自定义界面?一开始会有更多的工作,但随后您将拥有您想要的功能。
回复:限制选择并只允许在数据库查询过滤器中选择一个谢谢, gz摩根0 ,您的努力是有帮助和赞赏的。 避免使用中间表并不符合我的希望,但我可以看到使用 Invisible 和 Set Dirty 如何使其适用于我使用多个过滤器的情况。 我不知道那个解决方案。 我会将您的回答标记为解决方案,并希望有人会发表改进意见。
我一直在尝试在 Where 和 In List 中做事,尤其是 ValueSource。 据我所知,ValueSource 没有在我的脚本中执行任何操作。 我没有在脚本索引中看到它。
也许我被在线表格宠坏了。 我仍然想请求任何 JMP 开发人员阅读,您能否将以下功能添加到数据库查询过滤器中。
- 未选择任何内容时返回一个空列表(我之前的帖子)
- 允许在 ListBox 过滤器框中发布列的子集,可能使用 Where 或 In List 中某处的列表
- 允许限制用户只能选择一项的情况。
回复:限制选择并只允许在数据库查询过滤器中选择一个我尝试了 3 个选项:
- 对您的脚本进行简单修改,将列出所有州,但会预先选择太平洋州列表。 用户看到突出显示的列表,但需要使用 CTRL 单击来选择或取消选择。
- 删除的帖子包含一个使用手动列表的脚本。 它会提示太平洋国家列表。 但是,它没有根据用户选择进行过滤。 我尝试了 Ands 和其他语法,但查询总是返回完整的太平洋国家集。
- 我可以获得较小列表的唯一方法是打开 SATByYear,使用查询创建一个子集,然后在新 SQL 查询中使用该子集表。 注意 << Set Dirty(0) 将表设置为未编辑,一旦查询运行,SQL 查询将关闭它。
Names Default to Here(1);
dt0 = Open("$Sample_Data\SATByYear.jmp", "Invisible");
satby_dt = query(Table(dt0, "t1"),"Invisible", "SELECT DISTINCT * FROM t1
WHERE t1.State IN ( 'Alaska' , 'California' , 'Hawaii' , 'Oregon' , 'Washington' ) ");
close(dt0,NoSave);
satby_dt << Set Name("SATByYear");
satby_dt << set dirty(0);
wait(1);
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
[ "SATByYear" => "Source(satby_dt)", "SAT" => "$Sample_Data\SAT.jmp" ]
),
QueryName( "SQLQuery" ),
Select(
Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table(
"SAT",
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "State", "t2" ), Column( "State", "t1" ) ) &
EQ(
Column( "% Taking (2004)", "t2" ),
Column( "% Taking (2004)", "t1" )
) & EQ( Column( "X", "t2" ), Column( "X", "t1" ) ) &
EQ( Column( "Y", "t2" ), Column( "Y", "t1" ) ) &
EQ( Column( "Population", "t2" ), Column( "Population", "t1" ) ) &
EQ( Column( "Latitude", "t2" ), Column( "Latitude", "t1" ) ) &
EQ( Column( "Longitude", "t2" ), Column( "Longitude", "t1" ) )
)
)
),
Where(
In List(
Column( "State", "t1" ),
_AllRows_,
UI(
SelectListFilter(
ListBox,
Base(
"Categorical",
Prompt(
"State:",
Character,
PromptName( "t1.State_1" ),
ValueSource(
Column(
"State",
Alias( "State" ),
Table( "SATByYear" )
)
)
)
)
)
)
)
)
) << Run;
回复:限制选择并只允许在数据库查询过滤器中选择一个我删除了我的第一个回复。 手动列表确实提供了预期的提示,但没有根据用户选择进行过滤。
寻找更新,很快。