PYCOMMAND 命令
概念信息
将 Analytics 表作为数据帧传递给一个外部 Python 脚本,并且使用该 Python 脚本返回的输出在 Analytics 项目中创建一个新表。
语法
PYCOMMAND <<FIELDS> 域 <...n>|<FIELDS> ALL> <IF 测试> <TO 表名称> SCRIPT 脚本路径 <WHILE 测试> <FIRST 范围|NEXT 范围> <KEEPTITLE> <SEPARATOR 字符> <QUALIFIER 字符> <OPEN>
参数
| 名称 | 描述 |
|---|---|
|
FIELDS 域名称 <...n> | FIELDS ALL 可选 |
要包括在发送给 Python 脚本的数据帧中的源 Analytics 表中的域或表达式。
|
| IF 测试 可选 |
要处理当前记录所必须满足的条件。被传递给 Python 脚本的数据帧仅包含那些满足该条件的记录。 |
| TO 表名 可选 |
要将命令结果发送到的位置:
输出表是从 Python 脚本返回的数据帧创建的。 |
| SCRIPT 脚本路径 |
文件系统上的 Python 脚本的完整或相对路径。请将脚本路径放在引号中。 |
| WHILE 测试 可选 |
一个条件表达式,它必须为真以便处理每个记录。该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。 说明 如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。 |
| FIRST 范围 | NEXT 范围 可选 |
要处理的记录数:
请使用范围指定要处理的记录数。 如果您省略 FIRST 和 NEXT,则会默认处理所有记录。 |
| KEEPTITLE 可选 |
将第一行数据视为域名称而非数据。如果省略,则不会向 Python 脚本发送任何域名。 如果您想要在 Python 脚本中使用列名称检索数据,则需要此选项。 |
| SEPARATOR 字符 可选 |
要用作域之间的分隔符的字符。您必须将该字符指定为带引号的字符串。 默认字符是一个逗号。 说明 请避免使用出现在输入域中的任何字符。如果 SEPARATOR 字符出现在输入数据中,则结果可能受到影响。 |
| QUALIFIER 字符 可选 |
要用作文本限定符以便环绕和标识域值的字符。您必须将该字符指定为带引号的字符串。 默认字符是一个双引号。 说明 请避免使用出现在输入域中的任何字符。如果 QUALIFIER 字符出现在输入数据中,则结果可能受到影响。 |
|
OPEN 可选 |
在命令执行后打开该命令创建的表。仅当该命令创建输出表时有效。 |
示例
您将应付账款数据从 Analytics 发送到 Python 脚本,在 Python 中对数据执行一些分析或操作,然后将 Python 结果导出回到 Analytics。
Analytics 命令
PYCOMMAND 将指定的应付账款域导出到 Python 脚本 testInOutput.py,并等待脚本执行,然后将 Python 脚本的结果保存到名为 AN_Python_countrip 的新 Analytics 表中。
OPEN Ap_Trans
PYCOMMAND FIELDS Vendor_No Invoice_No Invoice_Date Invoice_Amount Prodno Quantity Unit_Cost SCRIPT "testInOutput.py" KEEPTITLE TO AN_Python_roundtrip.fil
此版本的命令会将 Ap_Trans 表中的所有域导出到 Python 脚本中。
OPEN Ap_Trans
PYCOMMAND FIELDS ALL SCRIPT "testInOutput.py" KEEPTITLE TO AN_Python_roundtrip.fil
Python 脚本 (testInOutput.py)
import sys
import os
import logging
import pandas as pd
from acl_py_util import acl_py_util
from acl_py_util import logger
def main(args):
error_file = os.getenv("ACL_PY_ERROR_FILE")
if not error_file:
error_file = os.getenv('LOCALAPPDATA') + "/acl_py_utl.error"
# 将数据从 Analytics 导入至 Python
# 使用 Analytics 附带的 Python 函数
df = acl_py_util.from_an()
''' Sample user code '''
# 使用数据帧中的列名称和行创建 acl_py_util 日志条目
logger.info(df)
# 将原始数据帧复制到新数据帧
user_df = df.copy()
# 将 Invoice_Amount 列乘以 2
user_df.Invoice_Amount = user_df.Invoice_Amount * 2
# 使用数据帧中的列名称和行创建 acl_py_util 日志条目
logger.info(user_df)
''' End sample user code '''
# 将数据从 Python 导出到 Analytics
# 使用 Analytics 附带的 Python 函数
acl_py_util.to_an(user_df)
# 创建 acl_py_util 日志条目记录脚本完成,并添加一个空行
logger.info(f"*** Python script completed successfully ***\n")
if __name__ == "__main__":
main(sys.argv)
您使用 Python 脚本将应付账款数据导入到 Analytics。
为了作为示例,Python 脚本生成了一些示例数据。通常,脚本会将数据从外部源导入到 Python,在 Python 中执行分析或进行文件准备,然后将结果导出到 Analytics。
Analytics 命令
PYCOMMAND 调用 Python 脚本 testOutput.py,然后将 Python 脚本的结果保存到名为 Input_from_Python 的新 Analytics 表中。
PYCOMMAND SCRIPT "testOutput.py" TO Input_from_Python.fil
Python 脚本 (testOutput.py)
import sys
import os
import logging
import pandas as pd
from acl_py_util import acl_py_util
from acl_py_util import logger
def main(args):
# 初始化应付账款数据样本
data = {'Vendor_Number': ['12701', '10134', '11663'],
'Vendor_Name': ['Harris Projects', 'Stars Trading', 'More Power Industries'],
'Vendor_City': ['Baton Rouge', 'Milwaukee', 'Los Angeles'],
'Invoice_Number': ['232556', '74841', '5986811'],
'Invoice_Date': ['2024-10-22', '2024-10-22', '2024-10-23'],
'Invoice_Amount': [2064.48, 18883.34, 1145.58],
'Product_Number': ['030302903', '030302303', '090501551'],
'Quantity': [204, 458, 626],
'Unit_Cost': [10, 41, 1]}
# 创建数据帧
df = pd.DataFrame(data)
# 使用数据帧中的列名称和行创建 acl_py_util 日志条目
logger.info(df)
# Sample user code
user_df = df
# 用户代码的最终示例
# 将数据从 Python 导出到 Analytics
# 使用 Analytics 附带的 Python 函数
acl_py_util.to_an(user_df)
# 创建 acl_py_util 日志条目记录脚本完成,并添加一个空行
logger.info(f"*** Python script completed ***\n")
if __name__ == "__main__":
main(sys.argv)
备注
PYCOMMAND 的工作原理
PYCOMMAND 将 Analytics 表作为数据帧传递给外部 Python 脚本,在 Python 脚本执行期间等待,然后使用 Python 脚本返回的输出在 Analytics 中创建一个新表。在运行 Analytics 脚本的过程中,您可以根据需要多次使用 PYCOMMAND。
Analytics 安装中包含两个 Python 函数,您可以在 Python 脚本中使用它们来输入和输出数据:
-
输入数据acl_py_util.from_an() 将数据从 Analytics 导入到 Python
-
输出数据acl_py_util.to_an() 将数据从 Python 导出到 Analytics
日志文件
Analytics 创建了两个与 PYCOMMAND 关联的日志文件。日志可以帮助您排除 Analytics 和 Python 之间的集成故障,以及调试关联 Analytics 和 Python 脚本中的错误。
日志文件存储在 Analytics 项目文件夹中:
-
aclpython.log – 当 PYCOMMAND 失败时记录 Analytics 错误消息
-
acl_py_util.log – 记录 Python 脚本输出的消息
Set up acl_py_util.log
acl_py_util.log 是 Analytics 安装中附带的可配置日志。按照以下步骤设置和配置日志。
说明
您必须为要使用它的每个 Python 脚本单独设置和配置日志。
-
在 Python 脚本顶部的 import 语句块中,添加以下语句:
from acl_py_util import logger
-
在 Python 脚本中任何要创建日志条目的位置,添加以下行:
logger.info(Python_object)
例如:
-
logger.info(dataframe_name.head(10)) 会创建一个具有列名称的日志条目,并且前 10 行都来自指定数据帧的当前状态。
-
logger.info(f"*** Python script completed ***\n") 插入到脚本末尾,会在日志中记录脚本完成情况,并为运行的单独脚本在日志详细信息之间插入一个空行。
-