Skip to main content

カスタムフォーミュラ関数の構築

ツール設定で式エディターが使用可能なDesignerの任意の場所で、ユーザーがアクセスできるカスタム関数を作成できます。カスタム関数を作成するには、次の手順に従います。

  • パラメーターを他の関数呼び出しにラップするXMLファイルを書き込む。

  • CスタイルのDLLを書き込む。

作成方法に関係なく、関数はXMLフォーミュラ関数ファイルを介してDesignerで使用できます。このファイルには、次の属性が含まれている必要があります。

  • <name>: 関数の一覧に表示する一意の名前。

  • <NumParams>: 関数が受け入れるパラメーターの数。

  • <Category>: 関数を表示する関数カテゴリ。これは、新しいカテゴリにも既存のカテゴリにもできます。

  • <InsertText>: 関数が使用されたときに式エディターに挿入される定型文。

  • <Description>: 関数にカーソルを合わせたときに表示される説明。

カスタムフォーミュラ関数

カスタムフォーミュラ関数を使用し、そのカスタム関数の名前が既存のAlteryx関数(または新しく導入されたAlteryx関数)と同じである場合、予期しない結果や競合が発生することがあります。

この問題を解決するには、カスタム関数の名前を変更して(または接頭辞/接尾辞を追加して)、ベースインストールされているDesigner関数と違う名前にします。

XMLを使用して作成する

XMLのみを使用して関数を作成する場合、ファイルの構造は以下の例のようになります。

<?xml version="1.0" encoding="utf-8"?>
<FormulaAddIn>
  <Function>
    <Name>Sample_XML</Name>
    <NumParams variable="false">3</NumParams>
    <Category>Sample</Category>
    <InsertText>Sample_XML(Num1, Num2, Num3)</InsertText>
    <Description>Obtains the average of three numbers.</Description>
    <Formula>((P1+P2+P3)/3)</Formula>
  </Function>
</FormulaAddIn>

NumParams要素は、variable属性を含みます。受け入れられるパラメーターの数が固定されているため、属性はfalseに設定されています。XMLのみを使用して関数を作成する場合、受け入れられるパラメーターの数は常に固定されます。

Formula要素には、実際に処理を実行する数式が含まれます。その内容はユーザーには表示されません。パラメーターは、InsertTextに表示されるテキストに関係なく、常にP1P2P3などとして参照されます。

2つ目の関数を同じXMLファイルに追加するには、FormulaAddIn要素内に別のFunction要素を作成します。

DLLとXMLを使用して作成する

DLLを使用するには、目的の関数を記述し、DLLからエクスポートします。エクスポートされた関数が次のように定義されているとします。

struct FormulaAddInData{
        int nVarType;           // 1 for double, 2 for wchar_t
        int isNull;             // 1 if NULL, 0 if valid
        double dVal;            // valid if nVarType==1 && isNull==0
        const wchar_t * pVal;   // valid if nVarType==2 && isNull==0
};

エクスポートされた関数には、次の署名が含まれます。

typedef long ( _stdcall * FormulaAddInPlugin)(int nNumArgs, FormulaAddInData *pArgs, FormulaAddInData *pReturnValue);

nNumArgsには、呼び出し内の実際の引数の数が含まれます。

pArgsは、実際の引数の配列を指します。

この関数では、成功の場合は1を、失敗の場合は0を返します。

pReturnValueは、呼び出しが成功した場合は計算された結果を返し、失敗した場合は文字列のエラーメッセージを返します。返された文字列はすべてGlobalAllocで割り当てる必要があります。その文字列の解除は、Alteryx Designerが管理します。

DLLが正常に設定されたら、XMLファイルからDLLを参照する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<FormulaAddIn>
  <Function>
    <Name>AddInData</Name>
    <NumParams variable="true">3</NumParams>
    <Category>Sample</Category>
    <InsertText>AddInData(VarType, isNull, double)</InsertText>
    <Description>Verifies data type before adding data.</Description>
    <Dll>
        <Name>AddInData</Name>
        <EntryPoint>FormulaAddInData</EntryPoint>
    </Dll>
  </Function>
</FormulaAddIn>

NumParams要素は、variable属性を含みます。受け入れられるパラメーター数は可変のため、属性はtrueに設定されています。可変のパラメーター数を使用する場合、値は必要な最小数と等しくする必要があります。

Dll要素には、DLLに関する必要な情報を提供する2つの子要素が含まれています。

  • <Name>: 拡張子なしのDLLファイルの名前。

  • <EntryPoint>: 使用されているエクスポートされた関数の名前。

  • <RunSingleThreaded>: (オプションのパラメーター)シングルスレッド処理を強制するオプション。このオプションの値は、False (既定)またはTrueのいずれかです。このパラメーターは、マルチスレッド環境で関数が正しく動作しない場合に使用できます。

    注記

    パフォーマンスを向上させるため、このパラメーターを使用する代わりに、マルチスレッド環境で機能するように関数を変更することをお勧めします。

Designerで関数を使用する

Alteryx Designerで関数を使用できるようにするには、Alteryx DesignerインストールのRuntimeDataフォルダーに移動します。\FormulaAddInというタイトルのフォルダーを確認します。フォルダーが存在しない場合は、作成します。

FormulaAddInのサンプルXML

フォルダーには、正しく設定されたSample.xmlファイルが含まれています。カテゴリを追加し、ファイルを保存してAlteryx Designerを再起動し、サンプルの関数を確認します。

C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn

XMLファイルを\FormulaAddInディレクトリに保存します。DLLを使用している場合は、関連するDLLファイルを同じ場所に保存します。一般的には、DLLファイルとXMLファイルに同じ名前を付けます。

1台のマシン(管理者と非管理者)で2つのDesignerインスタンスが同時に実行されている場合、Designer GUIに表示させるためには、カスタムフォーミュラ関数を含むXMLファイルを、両方のバージョンを異なるパスを使用して個別に用意する必要があります。

  • 非管理者バージョンの場合のパスは、C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddInです。

  • 管理者バージョンの場合のパスは、C:\Alteryx\RuntimeData\FormulaAddInです。