如何将向量从画面传递到 R

How to pass a vector from tableau to R

我需要将参数向量从 tableau 传递给 Rserve。具体来说,我在 R(在 Rserve 上)中使用 IRR 计算,并且我想传递作为列的现金流向量 table(而不是 rows/measure)。所以,我想将所有这些 CF 收集到一个向量中并将其传递给 Rserve。一次传递一个会减慢 IO。

SCRIPT_REAL("r_func(c(.arg1, .arg2, .arg3))",sum(cf1),sum(cf2),sum(cf3))

cf1..cfn是各个时期对应的现金流量。当 cf 很少时,上面的代码运行良好,但当我的 hundereds 很少时需要很长时间。此外,与远程 Rserve 通信时,花费的时间不是计算,而是 IO。如果我有一个本地 Rserve,这个计算在远程几秒钟内发生,需要一分钟多。

另外,想指出的是tableau / Rserve,一个接一个地设置参数,这需要时间。我的期望是,一旦我有了一个向量,它就只是 1 次传输和参数设置,因此这应该会加速

了解 Tableau 如何与 R 或 Python 交互的第一步是了解 Tableau 的 table 计算如何工作。

Tableau Script_XXX() 函数是 table 计算,这意味着您可以在聚合查询结果的 向量 和相应的 R 或 Python 代码需要 return 一个通常大小相同的 vector。 (我想你可以 return 一个标量或更小的向量,它被复制看起来像一个与参数大小相同的向量——但不确定)

您可以通过编辑 table 计算来指定 分区和该计算的寻址

分区决定了如何将聚合查询结果分解为向量以用于计算目的。寻址决定了每个向量的元素是如何排序的。您可以根据 table 结构的物理布局,或(更好)根据特定尺寸来做到这一点。

有关详细信息,请参阅 Tableau on-line help for table calcs,并查看来自 Tableau 或博客条目的在线培训视频(尤其是来自任何名为 Bora 的人)

测试您对这些概念的理解的一种方法是创建一个 Tableau table(即具有文本标记类型的可视化项),在行和列货架上具有多个维度。然后为 INDEX() 和 SIZE() 创建计算字段并将它们显示在文本上。最后,通过编辑那些 table 计算以不同的方式更改分区和寻址。尝试几种不同的排列。当您可以自信地预测这些函数针对不同设置会产生什么时,您就可以准备好执行更复杂的任务了——例如与 R 对话。

尝试使用 FIRST()、LAST()、LOOKUP()、WINDOW_SUM() 等并最终深入研究 PREVIOUS_VALUE() 也很有启发意义。警告,PREVIOUS_VALUE() 有点奇怪,并且不会按照您可能认为的方式运行。尽管如此,它仍然是一种可以实现递归计算的有用技术,并且与 Tableau 中的 for 循环一样接近。