为 Analytics Exchange 编写脚本

Analytics 脚本未被限制为仅在 Analytics 中运行。通过将其转换为解析脚本并将其打包在分析应用程序中,您还可以在 Analytics Exchange 中调度和运行脚本。

您需要什么?

要完成该快速开始,您需要如下各项:

  • 安装 AX 客户端,且具有至 AX 服务器实例可用连接
  • 具有与您的 Analytics Exchange 安装相同版本(Unicode 或非 Unicode)的 Analytics 安装
  • 对 Analytics 附带的样例数据的访问权限

    说明

    默认情况下,样例数据项目被安装在您的本地文件系统上的 C:\Users\用户名\Documents\ACL Data\Sample Data Files

AX 服务器上的脚本执行

Analytics Exchange 使用 AX 引擎运行被标识为 AX 服务器上的解析的脚本。一旦脚本被转换为解析并且被导入到服务器上,该解析脚本的每次执行都表示单个具有它自己的结果集的作业。

当解析在 AX 服务器上运行时:

  1. 将在服务器上为该作业创建一个新的临时文件夹。
  2. 该解析和任何关联的表会被导出到临时文件夹中的新 Analytics 项目中。
  3. 服务器上的 AX 引擎将打开该 Analytics 项目,创建一个新的命令日志,并且运行该解析脚本。
  4. 分析标头所指定的任何文件、表或日志会被保留在与特定作业执行相关联的“结果”文件夹中。
  5. 临时文件夹和文件会被从服务器中删除。

提示

因为 AX 引擎执行临时文件夹中的解析脚本,所以请使用相对路径来引用服务器上的文件夹和文件:

  • Analytics 中的脚本C:\ACL Data\MyProject\output\results
  • Analytics Exchange 中的脚本output\results

将脚本转换为解析

通过包括分析标头并删除任何不在 AX 服务器上运行的 Analytics 功能,可以将 Analytics 脚本转换为分析。

以下 Analytics 脚本在 Analytics 中运行并执行以下操作:

  1. 使用 IMPORT 命令从 ACL_Rockwood 样例数据中的 Pay_scales.xlsx 文件导入数据。
  2. 使用 SORT 命令按表达式对数据进行排序。
  3. 使用 ACCEPT 命令提示用户输入一些记录以供提取。
  4. 使用 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

添加分析标头

通过在文件顶部添加分析标头来开始将脚本转换为解析。

分析标头是围在脚本开头处的注释块内的一系列声明。在 Analytics 项目中创建和测试脚本之后,请包括一个分析标头以将其转换为在 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 服务器之前,请检查常见的 Analytics 脚本方案:

  • 交互命令用于接受通常在对话框中输入的用户输入信息,以替换以下带有输入参数的命令:PAUSEACCEPTDIALOGPASSWORD
  • 覆盖文件用于在没有确认的情况下覆盖文件,在脚本的开头添加 SET SAFETY OFF,然后可以在脚本末尾用 SET SAFETY ON 进行重置
  • 确认对话框用于在 DELETERENAME 命令之后避免确认对话框,并且使用 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
Analytics Exchange 14.1 客户端帮助