TabPy supports deployed functions which are recommended way for reusing Python code, creating and sharing models and moving code form
SCRIPT_... calculated fields outside of workbooks. However when working or experimenting with code it is not very convenient if you’ll have to deploy new version of a function with every change. And this is why you may have a question if it is possible just to invoke some code from standalone Python file.
And it is possible! Let me show you how.
The files with Python function(s) in them should be on the same machine where your instance of TabPy is running. Let’s create simple file with couple of simple functions in it:
def my_add_lists(list1, list2): return [x + y for x, y in zip(list1, list2)] def my_inc_list_items(list1): return [x + 1 for x in list1]
For Python to be able to find the module (
my_python_functions.py file) we need to set up environment variable
PYTHONPATH. As explained in Python documentation (https://docs.python.org/3/using/cmdline.html#environment-variables)
PYTHONPATH augments where Python is looking for modules when they are referenced with
import. The variable needs to be set before TabPy is started.
For Windows the variable can be set in command line:
<my-python-functions-folder> is the path to where your Python module(s) are located, e.g.:
For Linux and Mac the variable can be set similarly:
Now in calculated fields you can import the modules and use functions from them. For example:
SCRIPT_INT( " from my_python_functions import my_add_lists return my_add_lists(_arg1, _arg2) ", SUM([Price]), SUM([Tax]) )
In the example above
from my_python_functions import my_add_lists tells Python to load
my_python_functions module (which will be
my_python_functions.py file in the folder we previously added to
PYTHONPATH) and load
my_add_lists function from it.
After that the function is used in the calculation.
Hope this simple example is helpful for you when working on Python code to be used in Tableau calculations.