1

我想在我的数据源表中创建一个计算字段(在我的工作簿的数据源选项卡中)。但是,Tableau 抱怨该字段包含聚合计算数据,因此它取决于可视化的详细程度。这是我的脚本(使用 TabPy):

SCRIPT_REAL("import numpy as np 
return (2*np.array(_arg1)).tolist()",
SUM([Wind Speed]))

在这种情况下,此计算字段中的所有行都显示为null

但是,当我将 SCRIPT_REAL 替换为以下内容时,它可以工作:

2*SUM([Wind Speed])

然而,在这两种情况下,我都使用 SUM [聚合函数],那么为什么它在这种情况下有效,但在我使用 SCRIPT_REAL 时却无效?

我要做的就是使用 SCRIPT_REAL 计算新字段的值(按行)并将其添加到我的数据表中。我错过了什么?

4

1 回答 1

1

在不知道您的数据是什么样子的情况下,很难说出发生了什么。计算有效:

在此处输入图像描述

在调试这些类型的问题时有很大帮助的一件事是在返回数据之前打印数据,以便您可以在控制台中检查它。

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 依赖于这些临时类型的计算,因此它有利于探索数据,但不适用于持久化数据。

于 2017-04-14T15:10:35.137 回答