轻松实现文本翻译、网页数据抓取,甚至创建高级日期表来增强 Tableau 可视化效果!
作为一款强大的数据可视化工具,Tableau 的可视化能力毋庸置疑。然而,对于跟表格打交道的用户来说,它没有“创建表格”的功能,即在数据源端直接生成或输入数据的能力。
因此,如果你有这样的需求,可以将 Google Sheets 用作补充工具,再与 Tableau 仪表板进行无缝结合。
为了验证 1+1 是否 > 2,今天我们就来探索数据粉 Matthias Giger 分享的一些用例,看看如何用 Google Sheets 增强 Tableau 分析!话不多说,马上开始吧~
Tableau + Google Sheets = ?
作为最受欢迎的电子表格工具之一,Google Sheets 就是线上版的 Excel。在早期版本中,Tableau 提供了直连至 Google Sheets 的连接器,可助你轻松分析实时数据。
2023.1 版本后,Tableau 虽然停用了 Google Sheets 连接器,但依然支持连接到 Google Drive 云端硬盘,以便用户灵活分析云端数据表格。
比如,当用 Google Forms 进行问卷调查时,你可将表单数据存储在 Google Sheets 中,再通过 Tableau 进行可视化分析。这种方法非常适合希望在网站上公示数据的场景,且无需编写代码。
当然了,Google Sheets 的功能绝对不仅于此。接下来,我们就来探索 3 种玩法,看看它如何帮助你增强 Tableau 数据分析。
01 快速实现多语言翻译
在 Google Sheets 中,借助 GOOGLETRANSLATE() 函数,你可以轻松将文本值翻译成多种语言,以便将 Tableau 问卷分析仪表板中的问题、答案或其他内容转化为多语言版本。
假设,我们需将表格中的“Hello World”文本值翻译成多种语言。如何实现呢?只需在 Google Sheets 中使用以下公式,即可创建一个翻译表:=GOOGLETRANSLATE(A2, B2,C2)
A2:需要翻译的值的单元格
B2:原语言代码,这里为“EN”,即英语
C2:目标语言代码,比如:“ZH”表示中文
这么做有啥好处呢?之前有数据粉咨询过类似需求,但 Tableau 不支持直接翻译。
借助这种方法,你就可以对问卷的问题、答案或文本数据进行实时翻译,然后将包含翻译结果的 Google 表格连接至 Tableau ,并使用参数操作为不同地区的报表用户显示不同语言的仪表板,实现更个性化的用数体验。
02 用 Google Sheets 抓取网页数据
Google Sheets 的另一个强大功能是通过 IMPORTHTML() 函数从网页抓取数据,对于提取外部数据并丰富 Tableau 可视化内容非常有用。
假设,我们想从百度百科页面获取巴黎奥运会数据。只需打开 Google Sheets ,任意选择一个单元格输入公式:
=IMPORTHTML("https://baike.baidu.com/item/2024%E5%B9%B4%E5%B7%B4%E9%BB%8E%E5%A5%A5%E8%BF%90%E4%BC%9A/17619118?fr=ge_ala", "table", 1)
URL:数据所在的网页地址
table:表示你想从 HTML 表格中提取数据
1:指的是网页上的第一个表格。如果有多个表格,可更改数字进行抓取
如视频所示,你不需要专门学习或花很多时间进行爬虫,就能快速、自动化地从网页中采集结构化数据,既能节省时间又能解放双手。
此外,通过将最新的网页数据整合到分析中,你可以进一步丰富数据与可视化,并做出更准确、及时的决策。例如,在 Tableau 仪表板中调用 Google Sheets 中最新的统计数据。
03 用 Apps Script 创建高级日期表
此外,Google Sheets 中还支持通过 Google Apps Script 实现高级功能。例如,生成一张日期维度表,以便在分析不同日期类型(如项目里程碑、截止日期)时提供便利。
举个例子,在项目管理中,你可能需要比较实际日期与截止日期,或将多个日期(如开始、里程碑、结束日期)绘制在同一条时间轴上。借助专用的日期表,我们可以独立呈现这些日期,且不依赖事实表中的日期结构。
具体步骤如下:
首先,打开一个新的或现有的 Google Sheets 表格,点击菜单栏中的“扩展程序”- “Apps 脚本”,打开 Google Apps Script 编辑器。
在 Apps Script 编辑器中,你会看到一个默认的 Code.gs 文件。然后,直接复制以下用于创建日期表的完整代码到 Google Sheets 的 Apps 脚本编辑器中,覆盖默认内容。
PS:代码设置的日期范围是 2020 年 1 月 1 日到 2030 年 12 月 31 日。你可以在代码中的 startDate 和 endDate 变量中调整这个范围。
function createDateTable() {
// 定义起始和结束日期
var startDate = new Date(2020, 0, 1); // 一月在 JavaScript 中是 0
var endDate = new Date(2030, 11, 31); // 十二月在 JavaScript 中是 11
// 计算起始和结束日期之间的天数
var dayCount = (endDate - startDate) / (1000 * 60 * 60 * 24) + 1;
// 获取活动表格
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 设置标题行
var headers = ["Date", "Year", "Month", "Month Name", "Quarter", "Week Number", "Day", "Day of Week", "Day Name", "Is Weekend", "Start of Week", "End of Week", "Start of Month", "End of Month", "Start of Quarter", "End of Quarter", "Start of Year", "End of Year", "European Date", "DateKey"];
sheet.appendRow(headers);
// 生成日期表
for (var i = 0; i < dayCount; i++) {
var currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
var year = currentDate.getFullYear();
var month = currentDate.getMonth() + 1; // 一月在 JavaScript 中是 0
var monthName = currentDate.toLocaleString('default', { month: 'long' });
var quarter = Math.floor((currentDate.getMonth() + 3) / 3);
var weekNumber = getWeekNumber(currentDate);
var day = currentDate.getDate();
var dayOfWeek = currentDate.getDay();
var dayName = currentDate.toLocaleString('default', { weekday: 'long' });
var isWeekend = dayOfWeek == 0 || dayOfWeek == 6;
var startOfWeek = new Date(currentDate);
startOfWeek.setDate(currentDate.getDate() - dayOfWeek + 1); // 周一为一周的开始
var endOfWeek = new Date(startOfWeek);
endOfWeek.setDate(startOfWeek.getDate() + 6);
var startOfMonth = new Date(year, currentDate.getMonth(), 1);
var endOfMonth = new Date(year, currentDate.getMonth() + 1, 0);
var startOfQuarter = new Date(year, (quarter - 1) * 3, 1);
var endOfQuarter = new Date(year, quarter * 3, 0);
var startOfYear = new Date(year, 0, 1);
var endOfYear = new Date(year, 11, 31);
var europeanDate = Utilities.formatDate(currentDate, Session.getScriptTimeZone(), 'dd/MM/yyyy');
var dateKey = year * 10000 + month * 100 + day;
var row = [currentDate, year, month, monthName, quarter, weekNumber, day, dayOfWeek, dayName, isWeekend, startOfWeek, endOfWeek, startOfMonth, endOfMonth, startOfQuarter, endOfQuarter, startOfYear, endOfYear, europeanDate, dateKey];
sheet.appendRow(row);
}
}
function getWeekNumber(date) {
var start = new Date(date.getFullYear(), 0, 1);
var days = Math.floor((date - start) / (24 * 60 * 60 * 1000));
var weekNumber = Math.ceil((days + start.getDay() + 1) / 7);
return weekNumber;
}
点击“保存”按钮,为项目命名(如“日期表生成器”)。然后,点击“运行”-“createDateTable”,此时会弹出授权请求,按提示选择你的 Google 账户并授予权限。
成功授权后,再次点击“运行” - “createDateTable”。代码开始执行,并在当前 Google Sheets 表格的第一个工作表中生成日期表。
PS:如果生成的数据过多导致执行超时,可以重新运行代码,并调整 startDate 以跳过已完成的部分,继续生成剩余数据。
代码执行过程中,Google Sheets 会生成一张全新的日期表,包含以下信息:
Date:具体日期
Year:年份
Month:月份(数字格式)
Month Name:月份名称(英文)
Quarter:季度
Week Number:周数
Day:日期中的“日”部分
Day of Week:星期几(数字格式,0 表示星期天,6 表示星期六)
Day Name:星期几的名称(英文)
Is Weekend:是否为周末(布尔值)
Start of Week / End of Week:每周的开始和结束日期
Start of Month / End of Month:每月的开始和结束日期
Start of Quarter / End of Quarter:每季度的开始和结束日期
Start of Year / End of Year:每年的开始和结束日期
European Date:欧洲日期格式(dd/MM/yyyy)
DateKey:日期键,用于在 Tableau 等 BI 工具中进行数据关联
如此,你就可以将这个完整日期表用于 Tableau 时间序列分析。PS:可将结果复制到新表或在 Tableau 中使用 UNION 函数进行合并。
正如上文所述,通过结合 Google Sheets 与 Tableau ,你就可以轻松实现文本翻译、网页数据抓取,甚至创建高级日期表来增强 Tableau 可视化效果啦~
无论你是想翻译问卷分析、收集最新的网页数据,还是创建时间轴,Google Sheets 都能提供强大灵活的工具,助你将 Tableau 仪表板变成动态、多语言、数据丰富的可视化作品。
👉 心动不如马上行动!立即打开你的 Google Sheets 试试看吧~