为 Analytics Exchange 编写脚本
ACL 脚本未被限制为仅在 ACL Analytics 中运行。 通过将其转换为解析脚本并将其打包在分析应用程序中,您还可以在 Analytics Exchange 中调度和运行脚本。
您需要什么?
要完成该快速开始,您需要如下各项:
- 安装 AX 客户端,且具有至 AX 服务器实例可用连接
- 具有与您的 Analytics Exchange 安装相同版本(Unicode 或非 Unicode)的 ACL Analytics 安装
- 对 ACL Analytics 附带的样例数据的访问权限
说明
默认情况下,样例数据项目被安装在您的本地文件系统上的 C:\Users\用户名\Documents\ACL Data\Sample Data Files。
AX 服务器上的脚本执行
Analytics Exchange 使用 AX 引擎运行被标识为 AX 服务器上的解析的脚本。 一旦脚本被转换为解析并且被导入到服务器上,该解析脚本的每次执行都表示单个具有它自己的结果集的作业。
当解析在 AX 服务器上运行时:
- 将在服务器上为该作业创建一个新的临时文件夹。
- 该解析和任何关联的表会被导出到临时文件夹中的新 ACL 项目中。
- 服务器上的 AX 引擎将打开该 ACL 项目,创建一个新的命令日志,并且运行该解析脚本。
- 分析标头所指定的任何文件、表或日志会被保留在与特定作业执行相关联的“结果”文件夹中。
- 临时文件夹和文件会被从服务器中删除。
提示
因为 AX 引擎执行临时文件夹中的解析脚本,所以请使用相对路径来引用服务器上的文件夹和文件:
- ACL Analytics 中的脚本C:\ACL Data\MyProject\output\results
- Analytics Exchange 中的脚本output\results
将脚本转换为解析
通过包括分析标头并删除任何不在 AX 服务器上运行的 ACL Analytics 功能,可以将 ACL 脚本转换为解析。
以下 ACL 脚本在 ACL Analytics 运行和执行以下操作:
- 使用 IMPORT 命令从 ACL_Rockwood 样例数据中的 Pay_scales.xlsx 文件导入数据。
- 使用 SORT 命令按表达式对数据进行排序。
- 使用 ACCEPT 命令提示用户输入一些记录以供提取。
- 使用 EXTRACT 命令从排序表中提取用户指定的记录数。
SET SAFETY OFF COMMENT 将 EXCEL 数据导入到项目中 IMPORT EXCEL TO pay_scales "C:\Users\用户名\Documents\acl_working\pay_scales.fil" FROM "C:\Users\用户名\Documents\ACL Data\Sample Data Files\ACL_Rockwood\Pay_scales.xlsx" TABLE "Payscales$" KEEPTITLE FIELD "DEPARTMENT" C WID 19 AS "" FIELD "POSITION" C WID 25 AS "" FIELD "MIN_HOURLY" N WID 6 DEC 2 AS "" FIELD "MAX_HOURLY" N WID 6 DEC 2 AS "" COMMENT 打开导入的表并按照最大和最小小时费率之间的差异进行排序 OPEN pay_scales SORT ON (MAX_HOURLY - MIN_HOURLY) D TO "pay_scales_sorted" OPEN COMMENT 询问用户要从排序表中提取的记录数 ACCEPT "要提取的记录数: " TO v_top COMMENT 基于差异提取前 N 个记录 EXTRACT FIELDS DEPARTMENT MAX_HOURLY MIN_HOURLY POSITION (MAX_HOURLY - MIN_HOURLY) AS "SALARY_D" IF RECNO() <= %v_top% TO "top_difference" OPEN SET SAFETY ON
添加分析标头
通过在文件顶部添加分析标头来开始将脚本转换为解析。
分析标头是围在脚本开头处的注释块内的一系列声明。 在 ACL 项目中创建和测试脚本之后,请包括一个分析标头以将其转换为在 Analytics Exchange 中运行的解析脚本。
分析标头必须以将脚本标识为解析的 ANALYTIC 标记开头:
COMMENT //ANALYTIC TopWageGap 导入一个 EXCEL 文件并且基于工资差距提取前 N 个记录 END
有关解析标记的详细信息,请参见解析标头和标记。
更改 IMPORT 命令
因为 AX 引擎执行临时文件夹中的解析脚本,所以请将 IMPORT 命令的绝对路径更改为相对路径,以便 AX 引擎可以在服务器上找到文件:
COMMENT 将 EXCEL 数据导入到项目中 IMPORT EXCEL TO pay_scales "pay_scales.fil" FROM "Pay_scales.xlsx" TABLE "Payscales$" KEEPTITLE FIELD "DEPARTMENT" C WID 19 AS "" FIELD "POSITION" C WID 25 AS "" FIELD "MIN_HOURLY" N WID 6 DEC 2 AS "" FIELD "MAX_HOURLY" N WID 6 DEC 2 AS ""
您还必须向标头中添加 FILE 标记以指定输入文件 Pay_scales.xlsx:
COMMENT //ANALYTIC TopWageGap 导入一个 EXCEL 文件并且基于工资差距提取前 N 个记录 //FILE Pay_scales.xlsx END
当该解析执行时,AX 引擎会在 AX 服务器上的相关文件子文件夹中寻找输入文件。 要了解更多信息,请参考 FILE。
删除用户交互
因为解析脚本在服务器上运行且无需用户交互,所以您必须删除任何在执行过程中要求用户输入的命令。 在将脚本导入到 AX 服务器之前,请检查常见的 ACL 脚本方案:
- 交互命令用于接受通常在对话框中输入的用户输入信息,以替换以下带有输入参数的命令:PAUSE、ACCEPT、DIALOG、PASSWORD
- 覆盖文件用于在没有确认的情况下覆盖文件,在脚本的开头添加 SET SAFETY OFF,然后可以在脚本末尾用 SET SAFETY ON 进行重置
- 确认对话框用于在 DELETE 或 RENAME 命令之后避免确认对话框,并且使用 OK 参数:DELETE table.fmt OK
在此例中,您必须删除 ACCEPT 命令并将其替换为计划或运行该解析时在 AX 客户端中设置的参数:
COMMENT 打开导入的表并按照最大和最小小时费率之间的差异进行排序 OPEN pay_scales SORT ON (MAX_HOURLY - MIN_HOURLY) D TO "pay_scales_sorted" OPEN COMMENT 基于差异提取前 N 个记录 EXTRACT FIELDS DEPARTMENT MAX_HOURLY MIN_HOURLY POSITION (MAX_HOURLY - MIN_HOURLY) AS "SALARY_D" IF RECNO() <= %v_top% TO "top_difference" OPEN
您必须使用 PARAM 标记向分析标头中添加该参数,以便您可以从 AX 客户端设置 v_top 的值:
COMMENT //ANALYTIC TopWageGap 导入一个 EXCEL 文件并且基于工资差距提取前 N 个记录 //FILE Pay_scales.xlsx //PARAM v_top N v_top 要提取的记录数 END
当您从 AX 客户端运行或计划解析时,系统会提示您输入一个数值类型的值,以供 AX 引擎在解析中出现 %v_top% 时使用。 要了解更多信息,请参考 PARAM。
保存解析结果
就像您使用解析标记来定义解析输入一样,您还使用解析标记声明来定义被保存到 AX 服务器上的结果子文件夹的输出表和文件。 只有使用 RESULT 标记在分析标头中指定的项会被保留下来,而任何其他表、文件或日志都在解析作业完成后被丢弃:
COMMENT //ANALYTIC TopWageGap 导入一个 EXCEL 文件并且基于工资差距提取前 N 个记录 //FILE Pay_scales.xlsx //RESULT LOG //RESULT TABLE top_difference //PARAM v_top N v_top 要提取的记录数 END
现在,每当在 AX 服务器上执行该解析后,日志和 top_difference 将被保存为结果,并且可在 AX Web 客户端中使用。 要了解更多信息,请参考 RESULT。
完整的解析
您现在可以将完整的解析与相关的 MS Excel 文件一起导入到 AX 服务器上的文件夹中。 当该解析运行时,您需要指定要提取的记录数,并且表和日志文件被保留为可从 AX Web 客户端访问的结果:
COMMENT //ANALYTIC TopWageGap 导入一个 EXCEL 文件并且基于工资差距提取前 N 个记录 //FILE Pay_scales.xlsx //RESULT LOG //RESULT TABLE top_difference //PARAM v_top N v_top 要提取的记录数 END SET SAFETY OFF COMMENT 将 EXCEL 数据导入到项目中 IMPORT EXCEL TO pay_scales "pay_scales.fil" FROM "Pay_scales.xlsx" TABLE "Payscales$" KEEPTITLE FIELD "DEPARTMENT" C WID 19 AS "" FIELD "POSITION" C WID 25 AS "" FIELD "MIN_HOURLY" N WID 6 DEC 2 AS "" FIELD "MAX_HOURLY" N WID 6 DEC 2 AS "" COMMENT 打开导入的表并按照最大和最小小时费率之间的差异进行排序 OPEN pay_scales SORT ON (MAX_HOURLY - MIN_HOURLY) D TO "pay_scales_sorted" OPEN COMMENT 基于差异提取前 N 个记录 EXTRACT FIELDS DEPARTMENT MAX_HOURLY MIN_HOURLY POSITION (MAX_HOURLY - MIN_HOURLY) AS "SALARY_D" IF RECNO() <= %v_top% TO "top_difference" OPEN SET SAFETY ON