<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />埃里克·希尔(埃里克·希尔),JMP 首席系统开发人员,SAS
注意:这只是论文的正文;不包括屏幕截图。请参阅附版本的纸张以获得整个事情。

查询生成器
用于将 SQL 数据导入 JMP 的新 JMP 12 工具
(针对 JMP 12.1 进行了更新)
作者:Eric Hill,JMP 软件开发人员
内容
- 介绍。 2
第 1 部分:建立连接。 3
第 2 部分:为查询选择表。 6
第 3 部分:构建查询。 11
添加列。 13
保存查询。 15
运行查询。 15
回答问题。 16
- 过滤。 19
提示过滤器。 23
- 采样。 25
编写您自己的 SQL 。 26
第 4 部分:管理后台查询。 27
查询状态面板28
运行查询窗口.. 28
第 5 部分:共享查询。 28
第 6 节:从 JMP 脚本语言 (JSL) 运行查询。 29
JMP 12.1 中有哪些新增功能? 。 31
- 搜索。 31
添加相关表。 32
作为模板打开。 34
编辑计算列公式。 34
Bug修复。 35
- 结论。 35
介绍
JMP 为您提供了大量触手可及的分析工具,但如果您无法按照您需要的方式将分析所需的数据输入到 JMP 中,那么这些工具对您来说毫无用处。JMP 长期以来一直支持通过以下方式将数据从关系数据库导入 JMP:文件>数据库>打开表。 开表就目前而言还不错,但它确实有一些明显的局限性:
- 关系数据库中的大多数数据都以规范化的方式存储,需要连接才能获取所需的所有数据,但是开表不会帮助您进行连接;你必须自己写SQL。
- 尽管开表提供了公式编辑器例如,对于构建 WHERE 子句,它不会显示分类变量的不同值来帮助您对其进行过滤。
- 与他人安全地分享您的查询可能很困难,因为开表将您的密码存储在它生成的 JSL 脚本的连接字符串中。
- 开表无法帮助您完成导入数据后所需的后处理步骤,例如数据清理、建模类型和格式设置。
查询生成器是为了解决以下限制而从头开始设计的开表,帮助您构建带有提示交互式过滤的多表查询,并可以安全地与同事共享。
在本文中,我将使用查询生成器具有免费可用的PostgreSQL示例数据库名为戴尔商店2 。 PostgreSQL是一个开源数据库,可以从这里免费下载:
http://www.postgresql.org/download/
这戴尔商店2示例数据库可以在这里找到:
http://wiki.postgresql.org/wiki/Sample_Databases
这戴尔商店2示例数据库也可用于其他数据库平台(MySQL、Oracle 和 SQL Server)。
第 1 部分:建立连接
发起查询生成器使用文件 > 数据库 > 查询生成器从菜单中:
您也可以从首页启动它JMP 入门版:
最后,在 Windows 上,您还可以找到查询生成器工具上的家庭窗户工具栏:
启动后查询生成器,您将受到欢迎选择数据库连接对话框:
这选择数据库连接对话框是一个子集开表窗户。查询生成器和开表使用相同的 ODBC 连接并且实际上共享连接,因此您在任一位置建立的任何连接都将显示在两个位置中。
点击新连接...使用现有 DSN 连接到数据库或创建新 DSN。系统将提示您提供任何所需的凭据:
连接后,JMP 将从连接中检索架构,以帮助您确保这是您想要的连接:
您还可以查看所选架构中可用的表。 点击下一个继续下一步。
JMP 12.2 中的新增功能:注意这两个搜索盒子里的模式 – 表格控制板。这些是 JMP 12.1 更新中的新增功能,它们可以在模式和表格列表。我们知道你们中的许多人在给定模式中有数百个模式和数百个表,因此新的搜索框可以帮助您缩小列表范围,以便您找到所需的内容。
第 2 部分:为查询选择表
图 1:为查询选择表
当您点击下一个, 这选择表格将出现对话框。在里面选择表格对话框中,您将选择要包含在查询中的表(请参阅图1多于)。选择表中的可用的桌子列出您想要包含在查询中的列表并将它们添加到基本的和中学表格列在右上角。
- 这基本的查询中的表通常是应从中检索所有行的表,无论它们在其他表中是否具有匹配的值。这是你的事实表,用数据仓库术语来说。一个查询中只能有一个主表。
- 中学表通常是查找表。默认情况下,仅当查询中某列的值满足时,辅助表中的行才会包含在查询中。基本的表中指定列的值匹配中学桌子。这些是你的尺寸表,用数据仓库术语来说。您可以添加任意数量中学根据需要将表添加到查询中。
右下角的面板显示有关所选表的信息。这列选项卡显示有关表中每列的信息,包括它是否是某种类型的键:
JMP 12.2 中的新增功能:请注意搜索框在里面可用的桌子面板,这是 JMP 12.1 中的新增功能。 当您的架构包含大量表时,可以使用它来查找您要查找的表。
这表快照面板显示数据快照,以便您可以确保表包含您需要的信息:
通常,在构建查询时,您会想到一个或多个希望回答的问题,这些问题会决定您的查询需要包含哪些表。我们正在探索的数据来自一家虚构的 DVD 租赁公司。我想回答的问题是:
- 哪些电影类型带来的收入最多?
- 哪些演员带来的收入最多?
这出租表包含该公司生命周期内每个 DVD 租赁事件的记录,因此该表将成为此查询的主表。我可以从列面板那个出租具有与外键关系的列存货和顾客表:
图 2:外键
A外键关系(也称为外键约束) 表示需要在一个表的列中找到该值首要的关键的列其他桌子。从图2 ,我们可以看到来自库存_id的栏目租金表必须存在于首要的关键的栏目存货表中的值客户ID的栏目租金表必须存在于首要的关键的栏目顾客表,以及来自的值员工编号租金表的列仅存在于首要的关键的栏目职员桌子。对于此查询,我正在寻找有关租赁的电影的更多信息,而不是参与租赁的工作人员的客户,因此我将添加存货表作为辅助表进行查询。
看着列面板为存货表,我可以进一步看到外键与的关系电影桌子:
图3:库存表详细信息
所以电影表也进入查询。查看详细信息电影表,我看到一个租金率列,这应该是我计算收入所需要的,但是我没有看到任何关于电影的类别或电影中的演员的信息:
图 4:胶片表中的列
然而,纵观可用的桌子列表,我看到一个电影演员表和一个电影类别表,该表似乎将电影的 ID 映射到其演员和类别,以及演员和类别包含有关参与者和类别的更多信息的表。所以我也希望在查询中包含这些表。但是,如果我只是添加这 4 个表,就会出现问题:
图5:自动加入不成功
中间带有“X”的“停止标志”图标表示 JMP 无法自动连接这两个表,因此我必须手动设置连接。如果您发现JMP的自动连接功能经常无法完成您需要它做的事情,您可以通过旁边的红色小三角将其关闭选择表进行查询。
如果我选择public.film_actor (t14)并单击编辑加入按钮 ( ),编辑条件出现对话框,允许我配置连接。最初,该对话框如下所示:
图 6:编辑连接条件
因为还不存在连接条件。我要参与film_actor.film_id到库存.film_id 。为了实现这一点,我只需选择存货表从左栏列出并选择电影_id在两个列表中:
图 7:编辑连接条件
同样,我可以设置连接条件公共电影类别成为库存.电影_id = 电影_类别.电影_id 。这样做之后,事情看起来好多了:
图 8:表之间的联接有效
所有辅助表都显示左外连接维恩图图标。使用我们刚刚在之间建立的连接电影演员和存货例如,左外连接意味着全部行从存货表(本例中为左表)将包含在查询中是否有匹配项电影演员与否,但仅来自电影演员与中的行匹配的表存货表将被包括在内。
顺便说一句, t1 , t2 , t3等,表名称后面的括号中是当您将表添加到查询时 JMP 分配给表的表别名。表别名可以更轻松地生成正确的 SQL,并使生成的 SQL 更具可读性。您可以通过右键单击表中的表来更改表的表别名基本的或者中学表列表和选择更改别名。表别名不能包含空格或特殊字符。
如果您需要左外连接以外的其他连接,可以使用编辑加入对话。连接类型和维恩图图标将发生变化以反映复选框的状态。
图 9:更改连接类型
要检查连接设置是否正确,您可以单击预览加入按钮。这将运行查询并显示前几百行数据的快照,以便您可以检查情况是否正确。
现在我们已经拥有了查询中所需的所有表,我们可以单击构建查询提出查询生成器本身,我们可以在其中指定查询中包含哪些列、要使用的过滤条件、结果数据应如何排序等等。
第 3 部分:构建查询
当。。。的时候查询生成器此查询最初出现窗口,如下所示:
- 这查询名称框保存查询的名称,默认为主表的名称。这查询名称是分配给运行查询所产生的 JMP 数据表的名称,也是将查询保存到文件时的默认文件名。这数据源显示查询正在使用的数据源的名称。
- 这表格框显示当前查询中的表。要添加或删除表或更改连接,请单击改变…按钮。
- 这可用列列表显示查询中所有表的所有列。从此列表中选择列并将它们拖到包含的列,过滤器, 或者订购依据面板。或者,如果您愿意,可以通过右键单击选项来完成相同的操作。
JMP 12.1 中的新增功能:这可用列面板现在有一个搜索框,以防您需要在长列表中查找特定列。与其他一样搜索框,它会在您键入时进行过滤。 - 这包含的列面板显示查询包含的所有列的网格。使用包含的列grid 用于设置列数据导入 JMP 后应具有的格式和建模类型等内容。您还可以指定聚合通过...分组如果您希望在数据进入 JMP 之前对数据进行汇总,请使用列。
还有一个样本此面板中的选项卡用于在服务器上生成数据的随机样本,适用于支持采样的数据库。 - 这查询预览该区域中的选项卡会自动更新,以显示您的查询在运行时将返回的数据的快照。 这SQL选项卡显示的 SQL查询生成器正在根据当前选择生成。这查询后脚本选项卡允许您指定将在查询完成后运行的 JSL 脚本。这查询状态选项卡显示在后台运行的查询的状态并允许您取消它们。
- 这过滤器面板允许您指定过滤数据的条件(创建 WHERE 子句)并将过滤器转换为每次运行查询时运行的提示。
- 这订购方式面板允许您指定用于对返回的行进行排序的列(ORDER BY 子句)。
添加列
每个查询都需要一些列。使用以下任一方法将列添加到查询:
- 点击全部添加按钮添加查询中所有表中的所有可用列
- 从中选择特定列可用列列出并单击添加或将它们拖过去。
- 双击其中的一列可用列列表。
对于这个查询,我将添加电影_id ,标题, 和租金率来自电影桌子,类别_id和姓名来自类别表,以及演员 ID ,名, 和姓来自演员桌子。
图 10:最初添加列后
使用JMP 名称,建模类型和格式的列包含的列,我可以控制数据导入JMP后每列的名称、建模类型和格式。
图 11:调整列详细信息后
出于分析的目的,我还希望将演员姓名连接在单个列中,而不是分成单独的列名和姓列。为了实现这一点,我可以添加一个计算列通过选择添加计算列从红色小三角菜单可用列控制板。
这将添加一个名为计算1到可用列列表,但我可以右键单击它并使用重命名列将其重命名为演员姓名,将其添加到查询中并删除名和姓。以下是执行此操作后查询预览的外观:
图 12:带有计算列的查询预览
(这些 Actor Name 值可能看起来有点奇怪,但这些实际上是数据库中的正确名称。演员的名字似乎是通过随机配对名字和姓氏生成的。)
保存查询
此时,我在这个查询上投入了足够的时间,我想保存它,这样我就不会丢失我的工作。只需单击节省按钮位于右下角查询生成器窗口保存查询。系统将提示您提供文件名,其中包含文本查询名称默认提供框。我将命名查询电影类别演员。屏幕左下角将会显示一条消息查询生成器确认查询已保存的窗口:
保存查询会创建一个文件.jmpquery扩大。回到上查询生成器窗口,你会注意到查询名称已更改为匹配文件名,所以现在是电影类别演员。
如果您需要创建另一个与您打开的查询类似的查询,但您想保留原始查询,则可以使用另存为…按钮以使用不同的名称保存副本。
运行查询
此时,我还可以运行查询来创建一个包含数据库中所有行的 JMP 数据表。点击运行查询按钮位于底部查询生成器窗口来运行查询。 默认情况下,JMP 在后台运行查询,以便您可以在查询运行时继续工作。使用查询状态窗口底部中心部分的选项卡可查看仍在处理中的查询的状态查询生成器窗口,或使用查看 > 运行查询查看当前在后台运行的所有查询的状态。这个特定的查询只需要一两秒,返回 88,020 行:
图 13:JMP 数据表中的查询结果
请注意,生成的 JMP 数据表有 3 个脚本和一个SQL表变量定义:
回答问题
此时,我已经接近能够回答我一直在寻求答案的原始问题了,但我需要做出一个决定:我是想让数据库总结结果,还是想让原始数据带入数据库? JMP 并让 JMP 来做这项工作吗?如果原始数据不是太大而无法放入内存,并且导入时间也不会太长,那么将原始数据导入 JMP 并在那里进行分析有很多优点 – JMP 比关系型数据库更能分析数据。数据库。
对于手头的任务,使用分配平台上分类名称和演员姓名, 使用租金率作为频率多变的。如果我对结果直方图进行排序计数升序,我得到的结果回答了我们两个问题:
图14:使用分发平台处理查询结果
但是,如果引入所有原始数据的大小或经过的时间令人望而却步,我可以作为替代方法使用聚合栏目中的包含的列面板让数据库汇总数据。然而,为此,我需要一次回答两个问题。
回答以下问题哪些电影类型带来的收入最多? , 我可以从查询中删除与演员信息有关的列,并要求数据库进行求和租金率分组依据分类名称,然后我可以按总和对结果进行排序租金率。步骤如下:
- 点击聚合列为租金率并选择和。
请注意通过...分组检查所有没有指定聚合的变量。一旦查询中的任何列指定了聚合,查询中的所有列都会执行聚合操作不是指定一个聚合必须是通过...分组列。 - 右键单击变量名列为租金率并选择订购方式。
- 选择SUM(t4.租金率)在里面订购方式面板并单击向下箭头按钮 (降序)。
结果如下:
同样,取出类别列并将演员列放回原位,我可以回答以下问题哪些演员带来的收入最多? :
过滤
让我们回到查询正在检索所有原始数据并且我们正在使用的状态分配回答我们收入问题的平台。在 JMP 中进行分析时,我们可以选择的一种选择是请求用于 JMP 分析的脚本:
然后我可以将该脚本粘贴到查询后脚本小组的查询生成器:
图 15:添加查询后 JSL 脚本
现在,每次运行查询时都会运行该脚本。
现在,我想稍微完善一下我的问题。我可能不想查看数据库中所有租赁的类别和演员收入,而是根据租赁电影的国家/地区、租赁电影的商店或特定日期范围来查看它。
这出租表有租赁日期, 和客户ID领域,所以我即将获得我需要的东西。我们之前看到客户ID是对的外键引用顾客桌子。来自顾客表中,我们可以获取客户所在的国家/地区以及租借 DVD 的商店。
如果我点击改变…按钮在表格在查询生成器面板中,我可以返回并向查询添加更多表。要获取国家/地区信息,我需要添加顾客,地址,城市, 和国家表到查询。幸运的是,通过该数据库管理员设置的关键关系,所有表都成功自动连接。
添加必要的附加表后,回到查询生成器,我可以将所需的列添加到查询中:租赁日期,商店ID , 和国家。我还设置了友好的 JMP 名称并更正了建模类型商店ID :
图 16:添加租赁日期、商店 ID 和国家/地区列后
首先,让我们过滤客户所在的国家/地区。我可以右键单击t7.国家变量在包含的列面板并选择过滤。执行此操作后,国家/地区过滤器将出现在过滤器控制板:
图 17:国家过滤器
此时,我可以简单地向下滚动国家/地区列表并检查我感兴趣的国家/地区,然后运行查询,并且只会包含来自这些国家/地区的行。
同样,我可以添加过滤器商店ID和租赁日期,之后“过滤器”面板如下所示:
当我添加租赁日期过滤器,因为它是连续变量,所以我得到简单比较默认过滤。我想要的是范围筛选。使用旁边的红色小三角菜单t1.租赁日期,我可以将过滤器类型更改为范围:
现在过滤器为t1.租赁日期好像:
允许我指定日期范围。因此,如果我想查找 2005 年下半年以来的所有租金,我可以这样做:
图 18:日期范围过滤器
中的所有过滤器类型查询生成器有一种方法可以让您有效地禁用它们,从而允许您向查询添加多个过滤器,即使并非所有过滤器对于给定查询都处于活动状态。对于显示值列表的分类过滤器,选择(全部)顶部的项目禁用过滤器。对于请求数值的过滤器,将值设置为丢失的(.)禁用过滤器(或过滤器的一部分)。因此,如果我想要 2006 年 1 月 1 日以后的所有租金,我可以这样做:
现在过滤器我的查询面板看起来像图19以下。
| 图 19:使用 Missing 来停用过滤器 | 图 20:具有两个 OR 组的过滤器 |
过滤器选择如图所示图19 ,现在运行查询将返回客户所在国家/地区为法国或德国的行,并且该 DVD 是在 2006 年 1 月 1 日或之后在商店 2 租用的。默认情况下,多个筛选器会通过 AND 组合在一起,因此一行必须匹配所有筛选条件过滤器出现在结果中。如果您需要 OR 过滤器,请单击或者按钮,这将创建另一个过滤器组,并且这两个过滤器组将被或运算在一起。例如,如图所示的过滤器图20以上返回类别为的租金戏剧或者电影标题包含“桶” 。
提示过滤器
虽然很高兴能够在中指定过滤条件查询生成器,您可能还想创建一个查询供其他人使用,而这些人实际上并不需要提供整个查询查询生成器用户界面,但您希望他们每次运行查询时都能够输入不同的过滤条件。完成此操作的最简单方法是选择运行时全部提示从旁边的红色小三角菜单过滤器:
这会将查询中的所有过滤器变成提示过滤器。如果您只想提示某些过滤器而不提示其他过滤器,则可以使用其红色小三角菜单为每个单独的过滤器打开和关闭提示。
设置后运行时全部提示,当我运行此查询时,系统会提示我按照我想要的方式设置过滤器值:
提示的默认设置将是在中选择的任何设置查询生成器(如果直接从文件运行查询,则在保存的查询文件中)在运行查询之前。
您还可以自定义提示中使用的标签。例如,假设不是“国家: “我想要提示说”客户国家: ”。返回查询生成器,使用红色小三角菜单t7.国家过滤、选择配置提示。这会弹出一个对话框,允许您更改提示的标签,还可以更改为提示提供类别级别的表:
采样
如果您的数据库支持随机抽样,样本顶部中心部分的选项卡查询生成器将显示您的数据库支持的采样选项。 我在本文中的示例中一直使用 PostgreSQL,它支持对指定行数进行简单随机采样:
SQL Server 和 Oracle 支持不同的采样选项,因此样本选项卡将反映不同的选项:
| 图 21:SQL Server 采样选项 | 图 22:Oracle 采样选项 |
进行抽样通过数据库,在数据下载到 JMP 之前,因此这是限制从查询检索的行数的好方法,否则会检索到大量的行。
编写您自己的 SQL
我们认识到,尽可能多的功能查询生成器现在或将来可能有,有时您可能需要一个查询来执行以下操作查询生成器不直接支持。此外,许多人已经编写并精心调试了一些 SQL,这些 SQL 可以准确执行您需要 JMP 执行的查询。查询生成器有两个选项可用于为查询提供您自己的 SQL:
- 自定义过滤器表达式- 如果查询生成器正在执行您需要的操作,即选择表并指定要包含的列,但您只想将自定义 SQL 表达式作为过滤器的一部分包含在内,您可以选择添加自定义表达式来自过滤器红色小三角菜单:
| 图 23:添加自定义过滤器表达式 | 图 24:最终的过滤器 |
在其中输入您想要的任何 SQL自定义表达框,只要它是查询的有效 SQL。
如果一个自定义表达过滤器设置为提示过滤器,自定义表达式将出现在过滤器提示对话框中并且可以编辑。
- 将整个查询转换为自定义 SQL 查询– 如果您只想为整个查询编写自己的 SQL,那么在启动后查询生成器并指定数据连接,您可以使用左上角的红色小三角菜单查询生成器旁边的查询名称字段并选择转换为自定义 SQL :
图 25:转换为自定义 SQL
这查询生成器窗口将切换到自定义 SQL 模式,给您一个大区域来输入您自己的 SQL。如果您已开始以交互方式构建查询,自定义SQL框将使用根据您目前所做的选择生成的 SQL 进行初始化(请参阅图26以下)。
图 26:自定义 SQL 查询
您可以根据需要编辑 SQL,或从其他来源粘贴 SQL,然后单击更新按钮来更新查询预览。一些注意事项:
- 您无法使用自定义 SQL 查询进行提示过滤。
- 将查询转换为自定义 SQL 并编辑 SQL 后,如果将查询恢复为交互式,您将丢失对 SQL 所做的任何自定义。 查询生成器不会尝试解释 SQL。
第 4 部分:管理后台查询
查询生成器默认情况下在后台运行查询,也可以从 JMP 脚本语言 (JSL) 在后台运行查询(请参阅第 6 节)。JMP 提供两种方式供您查看当前正在运行的后台查询的列表,并在必要时停止运行查询。
查询状态面板
在查询生成器的底部中间部分,有一个查询状态标签。启动的任何后台查询从该查询生成器窗口将出现在该选项卡中:
如果您想停止正在运行的查询,只需在列表中选择它并单击停止按钮。如果已检索到某些行,JMP 将打开一个包含已检索的行的数据表。数据表的名称将反映出结果是部分的。
运行查询窗口
来自看法主窗口或其他包含菜单的 JMP 窗口上的菜单,选择运行查询。这将打开一个看起来与查询状态的选项卡查询生成器,但是运行查询窗口将包含全部当前在后台运行的查询,无论它们是如何调用的(查询生成器窗口或 JMP 脚本语言):
再次选择一个查询并单击停止阻止它运行,打开任何部分结果。
第 5 部分:共享查询
在简介中提到,开表创建了难以共享的脚本,因为数据库密码包含在连接字符串中。查询生成器工作方式不同。 如果您保存一个.jmpquery其连接需要密码的查询的文件,并且您在文本编辑器中打开该文件,您将看到如下内容:
您可以看到用户名(用户识别码) 存在于连接字符串中,但随后您会看到密码=%_PWD_% 。“%_PWD_%”不是密码;它是查询生成器放置的占位符。当查询生成器看到该占位符时,它知道最初需要密码,因此如果在用户打开该查询时打开该查询尚未与该查询建立连接Postgres dvdrental DSN、查询生成器会知道提示用户输入密码。
那么 DSN 本身又如何呢?如果您将此 .jmpquery 文件发送给没有名为 DSN 的 JMP 用户,会怎样? Postgres dvdrental在他们的机器上定义的?开表在这种情况下无法继续,但是查询生成器将通知用户这种情况,并让他们有机会连接到不同的 DSN(可能连接到同一数据库)或创建一个新的 DSN。
由于不同用户可能在其计算机上定义不同的 DSN,因此一些组织已转向无 DSN 连接。查询生成器当前无法将基于 DSN 的连接字符串转换为无 DSN 的连接字符串,但如果您更改查询脚本中的连接字符串,则不必指定数据服务网络,它指定了一个司机和服务器,查询生成器将在其生成的任何脚本或 .jmpquery 文件中传播此无 DSN 连接。
第 6 节:从 JMP 脚本语言 (JSL) 运行查询
查询生成器构建的查询也可以从以下位置运行JMP 脚本语言 (JSL)脚本。 最好的选择是将查询另存为.jmpquery文件,从 JSL 打开它,然后运行它。 例如,假设您有一个查询保存在c:\用户\公共\临时文件夹名为pg_rentals.jmpquery 。您可以使用 JSL 中的查询文件执行以下操作:
打开( “c:\用户\公共\临时\pg_rentals.jmpquery” ) ;
询问=打开( “c:\用户\公共\临时\pg_rentals.jmpquery” ,私人的) ;
询问<<调整;
询问<<跑步() ;
- 在前台运行查询。 查询完成后,生成的数据表将在 JMP 中打开。 dtResult 将是对结果数据表的引用。
dt结果=询问<<运行前台() ;
- 在前台运行查询,但执行不是在 JMP 中打开结果数据表;保密。dtResult 将是对结果数据表的引用。
dt结果=询问<<运行前台(私人的) ;
- 在后台运行查询。 查询完成后,生成的数据表将在 JMP 中打开。 运行后台无法返回对结果数据表的引用,因为查询只是在后台启动。下面的示例展示了如何在后台运行查询时获取对结果数据表的引用。
询问<<运行背景() ;
- 在后台运行查询。 如果查询成功,则对结果数据表调用分发平台(查询结果是一个特殊的 JSL 变量运行完成时引用结果数据表的脚本)。 如果查询被用户取消或出现错误,请将消息写入 JMP 日志。
询问<<运行背景(
运行完成时(
查询结果<<分配(名义分布(柱子( :标题) ) ) ;
) ,
运行中取消(写( “\!N查询已取消!”) ) ,
出错时(写( “\!N运行查询时出错!”) ; )
) ;
- 在后台运行查询。成功完成查询后,调用 MyFunc 函数。 查询结果数据表始终作为第一个参数传递给函数。
::我的函数=功能( { dt } , {默认本地} ,
写( "\!n出租数量: " , N行( dt ) ) ;
dt <<分配(名义分布(柱子( :标题) ) ) ;
) ;
询问<<运行背景(运行完成时( ::我的函数) ) ;
如果从 JSL 脚本中的单独 .jmpquery 文件打开查询不令人满意,您可以从 JSL 脚本左上角的红色小三角菜单获取用于创建查询可编写脚本对象的原始脚本。查询生成器窗户:
例如,调用将运行脚本保存到脚本窗口对于一个简单的查询给我:
新的 SQL 查询返回一个 SQL 查询可编写脚本的对象,就像打开打开 .jmpquery 文件时执行此操作,并且可以以所有相同的方式使用。
JMP 12.1 中有哪些新增功能?
搜索
我们交谈过的许多人的数据库中都有数百个架构、表和列中的大量数据。在 JMP 12.1 版本的查询生成器中,我们添加了搜索模式、表和列列表中的框可帮助您快速找到所需的内容:
所有这些搜索框会在您键入时更新,并且您可以选择使用常用表达优化您的搜索。
添加相关表
在里面选择表进行查询对话框中,如果已添加到查询的表具有对其他表的外键引用,则可以通过单击添加相关表按钮。
作为模板打开
通常,您需要构建一个与您已构建并保存到 .jmpquery 文件的另一个查询非常相似的查询。您始终可以打开以前保存的查询,对其进行更改,然后使用另存为将其保存到不同的 .jmpquery 文件,但如果您不小心点击了节省如果错误的话,您的原始查询将被覆盖。这作为模板打开存在功能可以防止这种情况发生。作为模板打开可从 Mac 和 Windows 上的 .jmpquery 文件的主窗口上下文菜单中找到:
当您打开 .jmpquery 作为模板时,您实际上是在打开一个复制与磁盘上的 .jmpquery 文件没有关联的原始查询的内容。如果您已将查询作为模板打开、进行了更改并意外点击了节省按钮,系统将提示您提供用于保存查询的文件。
您还可以从 JMP 脚本语言 (JSL) 打开 .jmpquery 文件作为模板:
打开( “C:\Users\Public\Temp\rentals.jmpquery” ,作为模板) ;
编辑计算列公式
在 JMP 12.0 中,您可以向查询添加计算列,该计算列将在数据库服务器上计算,并在查询中返回结果值。但是,如果您需要编辑之前创建的计算列的公式,则无法执行此操作。相反,您必须删除计算列并添加一个新列,这可能需要您重新创建一个复杂的公式。在 JMP 12.1 中,您现在可以选择编辑计算列。只需右键单击该列即可可用列并选择编辑公式:
Bug修复
正如您所期望的,我们修复了 JMP 12.1 中查询生成器中的许多错误,其中一些是客户报告的。如果您在使用查询生成器时遇到问题,请通过 SAS 技术支持报告问题,以便我们解决。
结论
查询生成器是 JMP 12 中的一项新功能(在 JMP 12.1 中更新),可帮助您针对关系数据库构建高度自定义的多表 SQL 查询。目标是让您比以前更轻松地将数据以分析就绪形式更快地导入 JMP,并更轻松地安全地共享您的查询。我们希望您尝试一下并向我们发送反馈( eric.hill@jmp.com )什么对你有效,什么对你无效。