[Day27] Tableau 轻松学 - TabPy 除错技巧

前言

相信走到这里,读者应该有办法依需求在 Tableau Desktop 中活用 TabPy。但还有一个部分有可能造成开发困难,就是不知道如何查看错误讯息的详细资讯或者确认 Tableau Desktop 传来的资料格式,也就无法根据这些资讯来修正程序码或 TabPy 的使用方式,进而导致在除错遇到困难。因此这篇文章会分享使用 TabPy 应该要知道的除错技巧。

详细错误讯息

若在 Tableau Desktop 使用 TabPy 的过程中,遇到类似下图的错误讯息是很正常的事,我们要学习的是如何知道问题详细资讯,并且将问题排除

错误讯息

当我们看到错误讯息视窗的时候,可以切换至启动 TabPy Server 的 cmd.exe 中查看 Log,Log 中记录所有通讯的过程,当然也包含错误讯息。这里仅撷取关键资讯来展示

[INFO] : function to evaluate=def _user_script(tabpy, _arg1):
 return [x > 10000 for x in arg1]

[ERROR] : Responding with status=500, message="Error processing script", info="NameError : name 'arg1' is not defined"
[ERROR] : 500 POST /evaluate (::1) 3.99ms

这几行 Log 告诉我们一个资讯,TabPy 要执行下方的程序,却发现未定义的变数名称 (name 'arg1' is not defined)

def _user_script(tabpy, _arg1):
    return [x > 10000 for x in arg1]
  • _user_script(tabpy, _arg1):第一个参数 tabpy 不是我们所关心的,因此可以从第二个参数开始看。这里的参数 _arg1 是不是很眼熟?就是在 [Day24] Tableau 轻松学 - TabPy 使用方法 1 提到的,TabPy 预设会以 _arg# 变数名称来存取资料,就是因为这里的 _user_script 函式所定义,而我们在 Tableau Desktop 所写的 Python 程序会变成 _user_script 的本体。

到这里,应该知道为什麽会出现错误讯息 name 'arg1' is not defined 了吧,因为在 _user_script 中资料的变数名称为 _arg1 而不是 arg1

传输资料查看

有的时候,我们会怀疑是不是因为 Tableau Desktop 传输到 TabPy 的资料格式与我们想像中的不同,进而造成错误的发生。因此,如何查看传输至 TabPy 的资料也是需要学习的技术,才能更确定问题发生的原因。

销售额大於10000 运算函式修改为

SCRIPT_BOOL("print('Hello TabPy')
return [x > 10000 for x in _arg1]", SUM([Sales]))

同样观察 TabPy Server 的 Log,会发现单独一行的 Hello TabPy,这是因为 print('Hello TabPy') 这行的运行结果。也就是说,所有的 print 讯息都会被输出到 Log 中

[INFO] : function to evaluate=def _user_script(tabpy, _arg1):
 print('Hello TabPy')
 return [x > 10000 for x in _arg1]

Hello TabPy

利用这样的运作流程,我们可以将资料 print 在 Log 来查看

SCRIPT_BOOL("print(_arg1[:10])
return [x > 10000 for x in _arg1]", SUM([Sales]))

观察 Log 後发现,其实 Tableau Desktop 不是我们想像中的一次传递所有销售额资料,而是一次只传送一笔资料来运算,且有几笔就会传几次

...
...
...
[INFO] : function to evaluate=def _user_script(tabpy, _arg1):
 print(_arg1[:10])
 return [x > 10000 for x in _arg1]

[1270.53]
[INFO] : function to evaluate=def _user_script(tabpy, _arg1):
 print(_arg1[:10])
 return [x > 10000 for x in _arg1]

[1603.1360000000002]

结语

知道如何 Debug 是程序开发的必经之路,使用 print 来 Debug 是最万用也是最容易的,这之中最关键的是需要知道 print 输出的位置,蒐集的资讯够多之後便能有目标性的修正 Bug,最後顺利在 Tableau Desktop 使用属於自己的 Model。


<<:  最短路径问题 (2)

>>:  建立AWS RDS

Day 24 - Rancher Fleet 玩转第一个 GitOps

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

[第17天]理财达人Mx. Ada-股款交割

前言 本文说明查询帐户股款交割资讯。 程序实作 程序 # 股款交割 settlements =api...

LeetCode解题 Day16

54. Spiral Matrix https://leetcode.com/problems/sp...

第 3 集:CSS 魔力

此篇内容不会有 CSS 语法教学,而是着重在使用 Bootstrap 5 时需要具备的 CSS kn...

那些被忽略但很好用的 Web API / CreateDocumentFragment

除了功能完善,有时候效能也该一并考虑。 今天要介绍的是 CreateDocumentFragmen...