构建自定义公式函数
您可以创建自定义函数。在 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 元素包含实际执行工作的公式。内容对用户不可见。参数始终引用为 P1、P2、P3 等,与 InsertText 中显示的文本无关。
要将第二个函数添加到同一 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 的必要信息。
<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 文件的名称保持一致。
如果一台计算机上同时运行两个 Designer 实例(管理员版和非管理员版),则包含自定义公式函数的 XML 文件应通过不同的路径分别存放,以便在相应版本的 Designer GUI 中显示。
对于非管理员版本,路径为
C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn。对于管理员版本,路径为
C:\Alteryx\RuntimeData\FormulaAddIn。