在不知道您的数据是什么样子的情况下,很难说出发生了什么。计算有效:
在调试这些类型的问题时有很大帮助的一件事是在返回数据之前打印数据,以便您可以在控制台中检查它。
SCRIPT_REAL(
"import numpy as np
values = (2*np.array(_arg1)).tolist()
print values
return values"
,
SUM([Value])
)
然后您可以查看 TabPy 并查看:
INFO:__main__:{"INFO": "Initializing TabPy..."}
INFO:__main__:{"INFO": "Done initializing TabPy."}
INFO:__main__:{"INFO": "Web service listening on port 9004"}
INFO:__main__:{"INFO": "function to evaluate=def _user_script(tabpy, _arg1):\n import numpy as np\n values = (2*np.array(_arg1)).tolist()\n print values\n return values\n"}
[14, 20, 32, 44, 58, 52, 40, 66]
INFO:tornado.access:200 POST /evaluate (172.17.0.1) 53.75ms
因此该计算计算值:[14, 20, 32, 44, 58, 52, 40, 66]
正如 Alex Blakemore 所提到的,这些计算是“表格计算”,默认情况下将在“表格”上计算。这意味着 Tableau 将一次将视图中的所有值传递给 TabPy。基本上,它传递一个数组,然后你得到一个数组(就像上面的例子一样)。如果您更改“计算依据”设置,它可以传递数据的一部分,甚至每行单独传递,但通常“表格”是最好的,因为它一次将所有数据传递给 TabPy,然后 TabPy 将所有结果传递回大批。
==========================================
更新:在“视图”中的数据上运行“表格计算”,它不能在基础数据中预先计算,因为无法知道您将要可视化什么。如果您查看数据准备窗格,您将看到一条关于此的消息:
基本上,“表格计算”是按需运行的,并且是短暂的。如果您希望这些值保持不变,那么我建议您运行标准计算,或预先计算数据源中的值。TabPy 依赖于这些临时类型的计算,因此它有利于探索数据,但不适用于持久化数据。