良好的查询可以助您成功
级别:初学者
Brian Corcoran,SAS JMP 研发总监
JMP 提供了多种方式将各种数据格式导入产品。原因显而易见。多年来,开发了许多用于收集和格式化数据的工具。在大多数情况下,这些工具不允许您将数据转换为 JMP 数据表。您需要将这些数据导入 JMP 进行分析。在其他情况下,数据可能位于某个数据库中,您需要在开始之前将其提取出来。获取数据会浪费宝贵的时间。多年来,JMP 不断发展,增加了强大的数据采集功能来帮助您完成这项任务。
本文试图给出如何使用 JMP 中的查询生成器功能的一个小例子,以及使用 Excel 向导的简单示例。希望它也能表明,旅程也可以是回报,因为可以通过准备查询本身来获得对数据的洞察。虽然 Windows 版本用于桌面屏幕截图,但这里讨论的所有功能在 Mac 版本的 JMP 中也可用。使用的是 JMP 14,但 JMP 13 也可以完成讨论的所有功能。
本文提出了一个假设的使用案例。假设您正在研究世界趋势,世界银行数据库经常提供有价值的信息。一位同事告诉您,2017 年世界发展指标数据最近已发布,他们已将数据放入公司 SQL Server 数据库中。这是一个大表,有超过 400,000 个观测值和 62 列。 [1]打开 JMP 并选择文件->数据库->查询生成器,打开数据库连接并指向该表。在查询生成器的第一个屏幕中,选择 world_bank 表作为主表,并使用“表快照”查看:
Query Builder Table Snapshot查询生成器表快照查询生成器表快照
至少对于典型的 JMP 用户来说,这种格式有点奇怪。有四个变量或列用于表示国家信息,然后有一列用于表示每年的数据。行中似乎包含某个地区,然后是测量数据。在某些方面,它看起来与典型的 JMP 表的预期相反。国家名称“阿拉伯世界”似乎代表一个地区,因此这也令人困惑。如果按下“立即导入”按钮,表格就会出现,一切就会变得更清晰一些。滚动到中间,您可以看到行从相关国家开始,然后是特定主题的数据,如“农村人口”。这些都是按国家排序的,这似乎不太直观。
Immediate Import Table Appearance立即导入表格外观立即导入表格外观
让我们重新开始。这一次,我们可以继续选择“构建查询”而不是“立即导入”。我们知道我们想要包含国家/地区信息的前四个变量,因此我们可以选择这些变量,然后在查询生成器的列选择面板的“包含的列”选项卡中按“添加”。这里有很多数据,所以我们只做 2010-2017 年的变量。此时,对话框的顶部如下所示:
Initial Column Selection初始列选择初始列选择 我们之前的情况确实还没有改善。现在,我们可以将“指标代码”变量移到查询生成器的“排序依据”窗格中。这将按研究的主题而不是所讨论的地区或国家来组织数据。这对于分析来说似乎更直观。
Ordered by Indicator Code按指标代码排序按指标代码排序
数据仍然存在问题。首先,它包含目前不感兴趣的区域分组。如何排除这些聚合条目?此外,查询特定项目(如“化肥消耗量”)的最佳方法是什么?
如果我们不按“指标代码”排序,那么当然可以将所有数据导入 JMP,然后删除区域分组。 但是,这给数据分析人员带来了负担。如果是没有设置查询的人,可能会造成混淆。在查询中,可以只选择感兴趣的国家。如果我们想要欧盟的所有国家怎么办?(我本来打算使用北美,但世界银行的定义只包含美国、百慕大和加拿大!)我们可以手动选择它们,但还有更好的方法。为此,我们将快速调用 JMP 中的另一个工具,即 Excel 向导。
在这种情况下,假设我们经常使用世界银行的数据。国家代码很重要,但不直观。表格经常使用代码而不指定完整的国家名称,正如您浏览网站时所看到的那样。将这些代码放在单独的表格中可能会很方便。这样的表格是存在的,并且可以轻松地从网站导入为 Excel 文件。因此,在这种情况下,在国家和国家代码表上打开 Excel 向导。世界银行网站将它们分组在一个名为 CLASS.xls 的晦涩表格中,但您可以重命名它。文件中有两个表格,“经济体列表”和“组”。让我们看看“组”:
Preview of Groups Table in Excel FileExcel 文件中的组表预览Excel 文件中的组表预览
我们在查询生成器数据中看到了阿拉伯世界的分组。这看起来很有希望,但向下滚动不会显示欧洲,因为预览在 100 行处结束。选择“显示所有行”,我们可以看到所有内容,包括“欧洲和中亚”、“欧洲地区”和“欧盟”。 “欧盟”组包含当前联盟中所有国家的国家代码。我们可以使用它来选择查询生成器中的国家吗?答案是肯定的,所以让我们继续提取我们需要的那个组。我们可以通过在预览中选择第一行“欧盟”,然后按“数据开始于行”旁边的绿色加号来做到这一点。
Select the First Row in “European Union”选择“欧盟”的第一行选择“欧盟”的第一行
现在我们可以点击对话框中的“下一步”按钮,选择最后一行“欧洲联盟”,然后点击“数据结束于行”旁边的绿色加号。这样就可以将数据缩小到我们感兴趣的国家。
现在我们可以选择“导入”,并获取一行包含 28 个欧盟国家条目的数据。我们将继续将生成的 JMP 表保存为“EU.jmp”。
现在我们可以返回查询生成器。我们本可以通过繁琐的“国家名称”或“国家代码”从列表中选择我们感兴趣的国家。但是,查询生成器有一个强大的过滤器类型,称为“匹配列值”。要使用此功能,我们首先将“国家代码”拖到过滤器窗格中。这将生成一个包含每个代码的长列表。现在,我们可以选择“ t1.国家代码”处的红色三角形菜单作为过滤器类型,然后选择“匹配列值”。将显示一个显示打开的 JMP 表名称的框。由于我们仍然打开了“EU.jmp”,因此它会显示在列表中。我们选择它,以及我们想要匹配的变量( 国家代码 )。同样重要的是确保从下拉列表中选择“所有行”,而不是“选定行”,因为在本例中我们需要所有国家。
Selecting the Match Column Values filter选择匹配列值过滤器选择匹配列值过滤器
这会将我们的结果缩小到仅涉及欧盟国家的观察结果。这里真的没有什么魔法。我们正在构建一个 WHERE/IN 子句来替换国家代码。如果您查看查询生成器中的SQL窗格,您可以看到 JMP 正在生成的 SQL:
Generated SQL生成的 SQL生成的 SQL
但希望我们能让这个过程更容易完成。既然我们已经将数据范围缩小到我们真正感兴趣的数据,那么让我们更容易选择我们想要分析的特定信息就好了。为此,我们可以将“指标名称”拖到筛选器窗格上。虽然我们可以在这里单击我们感兴趣的项目,然后运行查询,但能够为任何用户提供更具交互性的界面会更好。我们可以按“ t1.指标名称”旁边的红色三角形菜单,然后选择“运行时提示”。这将向我们显示一个对话框,以指定提示给最终用户的标题。
Prompt on Run运行时提示运行时提示
现在,当我们按下“运行查询”按钮时,我们将获得项目列表,我们可以选择我们感兴趣的项目。例如,我们可以选择“GDP 增长(年度 %)”并得到一个 28 行的表格。然后我们可以将其放入 Graph Builder。将“国家名称”拖入“地图形状”放置区域将生成一张欧洲地图,然后我们可以将感兴趣的年份拖入。2014 年之后数据开始变得稀疏,因此执行该年份会产生:

JMP 正在寻找“斯洛伐克”而不是“斯洛伐克共和国”,因此这可能是使用Recode 的机会。查看这些数据时,似乎我们总是会做类似的操作。我们将选择地图形状的国家名称,然后选择我们感兴趣的年份来检查结果。如果我们要重复查看某一年份,则保存脚本并将其作为后查询脚本放入查询生成器中是有意义的。预览窗格旁边有一个选项卡。如果我们转到上一个图表并使用红色三角形菜单执行保存脚本->到脚本窗口,我们将得到如下所示的脚本:
Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables( Color( :Name( "2014" ) ), Shape( :Country Name ) ),
Elements( Map Shapes( Legend( 7 ) ) )
);
如果我们将其粘贴到查询后脚本选项卡中,当我们选择要检查的观察结果时,它将在提取数据并创建 JMP 表后始终运行相同的 Graph Builder 报告。这可以大大简化重复性任务。
Post-Query Script查询后脚本查询后脚本
最好的部分是,当我们保存查询时,我们可以设置它,以便最终用户甚至看不到查询生成器对话框。通过在查询名称字段的下拉菜单中选择“打开时运行”,然后保存查询,最终用户将只看到提示和生成的表格和图形。
Run on Open在开放状态下运行在开放状态下运行
Query with Run on Open started from Recent Files从最近的文件开始使用“打开时运行”的查询从最近的文件开始使用“打开时运行”的查询 使用匹配列过滤器的一个注意事项是,包含要匹配的值的表必须存在于我们将运行查询的机器上。如果这是一个问题,有一种方法可以解决这个问题。创建带有匹配列的过滤器后,转到过滤器的红色三角形菜单。在本例中,该菜单为“ t1.Country Code”。选择过滤器类型 -> 手动列表。这会将匹配列过滤器创建的值导入到将用于 SQL 的文本列表中。下次保存时,它将保存到查询中,并且您不再需要匹配数据表。这种方法的缺点是失去了动态更改所选匹配值和更改查询的能力。
至此,我们已经过滤了大量令人困惑的数据,并创建了一个可重复的查询和分析,可以发送给最终用户。使用该查询的人实际上并不需要了解查询,或者根本不需要了解 JMP 的大部分内容。
使用的约定:
查询生成器窗格以粗体显示
按钮/对话框控件“加引号并加粗”
变量/列名称“带引号且为斜体”
[1]世界银行集团。 《世界发展指标》 ,世界银行集团,网址: https://datacatalog.worldbank.org/dataset/world-development-indicators 。根据 Create Commons CC BY 4.0 许可证获得。