我想在我的数据源表中创建一个计算字段(在我的工作簿的Data Source选项卡中)。但是,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计算新字段的值(按行)并将其添加到我的数据表中。我错过了什么?
答案 0 :(得分: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将所有结果传回一个数组。
=========================================
更新:a"表计算"运行"视图"中的数据。它无法在基础数据中预先计算,因为无法知道您将可视化的内容。如果您查看数据准备窗格,您将看到有关此内容的消息:
基本上,"表计算"按需运行并且是短暂的。如果您希望值保持不变,那么我建议运行标准计算,或预先计算数据源中的值。 TabPy依赖于这些短暂的计算类型,因此它有利于探索数据,但不能用于持久化。