PYCOMMAND コマンド

コンセプト情報

Python スクリプトの統合

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 テーブル内のフィールド、あるいは式。

  • FIELDS フィールド名 指定した 1 つまたは複数のフィールド、または式が含まれます。

    範囲をフィールド名で分けます。フィールドは一覧の順序でエクスポートされます。

    関連付けられたフィールドをエクスポートするには、フィールドの完全修飾名(つまり、テーブル名.フィールド名)を指定します。例:Vendor.Vendor_Name

  • FIELDS ALL テーブルのすべてのフィールドを含めます。

    フィールドは、テーブル レイアウトに現れる順序と同じ並びでエクスポートされます。関連フィールドはエクスポートされません。

IF テスト

省略可能

現在のレコードを処理するのに満たす必要がある条件。Python スクリプトに渡されるデータ フレームには、この条件を満たすレコードのみが含まれます。
TO テーブル名

省略可能

コマンドの結果を送信する場所:

  • テーブル名は、結果の保存先となる Analytics テーブルのことです。

    テーブル名には、ファイル拡張子 .FIL を付けた文字列を引用符で囲んで指定する必要があります。例:TO "Output.FIL"

    デフォルトでは、テーブル データ ファイル(.fil)は、Analytics プロジェクトが入っているフォルダーに保存されます。

    既存の異なるフォルダーにデータ ファイルを保存するには、絶対または相対ファイル パスを指定します。

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    メモ

    テーブル名は 64 文字の英数字(.FIL 拡張子を含まない)に制限されています。名前にはアンダースコア文字(_)を使用できますが、他の特殊文字やスペースは使用できません。名前の先頭を数字にすることはできません。

出力テーブルは、Python スクリプトが返すデータフレームから作成されます。

SCRIPT スクリプトのパス

Python スクリプトの、ファイル システムにおける絶対パスまたは相対パス。スクリプトへのパスは引用符で囲んでください。

WHILE テスト

省略可能

各レコードを処理するために真である必要がある条件式。条件が false と評価するか、テーブルの最後に達したら、コマンドは実行を中止します。

メモ

WHILE を FIRST または NEXT とともに使用する場合は、1 つの制限に達するとすぐに、レコードの処理が停止します。

FIRST 範囲 | NEXT 範囲

省略可能

処理するレコード数:

  • FIRST 指定されたレコード数に達するまで、最初のレコードから処理を開始します
  • NEXT 指定されたレコード数に達するまで、現在選択されているレコードから処理を開始します

範囲は処理するレコード数を指定します。

FIRST と NEXT を省略すると、すべてのレコードがデフォルトで処理されます。

KEEPTITLE

省略可能

データの代わりに、フィールド名としてデータの最初の行を処理します。省略すると、フィールド名は Python スクリプトに送信されません。

このオプションは、Python スクリプトの列名を使ってデータを取得したい場合に必要です。

SEPARATOR 文字

省略可能

フィールド間の区切りとして使用する文字。文字は引用符で囲まれた文字列として指定する必要があります。

デフォルトの <文字> はカンマです。

メモ

入力フィールドに表示される文字を使用しないでください。SEPARATOR 文字が入力データに表示される場合は、結果に影響する可能性があります。

QUALIFIER 文字

省略可能

フィールド値を折り返すためと識別するためにテキスト修飾子として使用する文字。文字は引用符で囲まれた文字列として指定する必要があります。

デフォルトの <文字> は二重引用符です。

メモ

入力フィールドに表示される文字を使用しないでください。QUALIFIER 文字が入力データに表示される場合は、結果に影響する可能性があります。

OPEN

省略可能

コマンドを実行した後、コマンドによって作成されたテーブルを開きます。コマンドが出力テーブルを作成する場合にのみ有効です。

Analytics と Python スクリプト間でデータをやり取りする

Analytics の買掛金データを Python スクリプトに送信し、Python でデータになんらかの分析または操作を実行してから、Python での結果を Analytics に再度エクスポートします。

Analytics コマンド

PYCOMMAND は、指定された買掛金フィールドを Python スクリプト testInOutput.py にエクスポートし、スクリプトが実行されるまで待機してから、Python スクリプトの結果を新しい Analytics テーブル AN_Python_roundtrip に保存します。

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()

''' サンプル ユーザー コード '''

# データフレームの列名と行を使用して 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)

''' サンプル ユーザー コードの終了 '''

# 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 スクリプトを使用して買掛金データを Analytics にインポートします。

この例では、Python スクリプトによってサンプル データを生成します。通常、スクリプトは外部ソースからデータを Python にインポートし、Python で分析やファイルの準備を行った後、その結果を Analytics にエクスポートします。

Analytics コマンド

PYCOMMAND が Python スクリプト testOutput.py を呼び出し、Python スクリプトの結果を新しい Analytics テーブル Input_from_Python に保存します。

PYCOMMAND SCRIPT "testOutput.py" TO Input_from_Python.fil

Python script (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)

# サンプル ユーザー コード

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 で新しいテーブルを作成します。PYCOMMAND を、Analytics スクリプト内で必要な回数だけ使用できます。

Analytics インストールには次の 2 つの Python 関数が含まれ、Python スクリプトでそれらの関数を使用してデータの入出力を行います。

  • 入力データacl_py_util.from_an() は Analytics のデータを Python にインポートします。

  • 出力データacl_py_util.to_an() は Python のデータを Analytics にエクスポートします。

ログ ファイル

Analytics によって、PYCOMMAND に関連付けられた 2 つのログ ファイルが作成されます。ログは、Analytics と Python の統合に関するトラブルシューティングや、関連する Analytics および Python スクリプトのエラーのデバッグに役立ちます。

ログ ファイルは、Analytics プロジェクト フォルダーに格納されます。

  • aclpython.log – PYCOMMAND が失敗したときの ACLScript エラー メッセージが記録されます。

  • acl_py_util.log – Python スクリプトによって出力される情報メッセージが記録されます。

acl_py_util.log をセットアップする

acl_py_util.log – Analytics インストールに含まれる構成可能なログです。以下の手順に従って、ログをセットアップして構成します。

メモ

使用する Python スクリプトごとに、個別にログをセットアップして構成する必要があります。

  1. Python スクリプトの先頭にある import ステートメントのブロックに、次のステートメントを追加します。

    from acl_py_util import logger

  2. ログ エントリを作成する Python スクリプトの任意に場所に、次の行を追加します。

    logger.info(Python_object)

    例:

    • logger.info(dataframe_name.head(10)) は、指定されたデータフレームの現在の状態から列名と最初の 10 行をログに出力します。

    • logger.info(f"*** Python script completed ***\n") は、ログの最後にスクリプト記録完了メッセージを挿入した後、それぞれのスクリプト実行に関するログ詳細の間に空の行を挿入します。