tableau在V10版本内嵌了一个工具,Data Interpreter,作用是自动去适配一些Excel中的格式。在数据不是特别复杂的情况下,你其实可以通过Data Interpreter 自动处理,但它并不能百分之百解决这些问题。
tableau通过KB发布了这篇文章,总结了常见的不合适的格式,强烈建议大家按照这些建议规整数据。比如,请不要使用合并单元格、居中、字体这些扩展信息。因为这些扩展的信息是Excel私有的,tableau并没有兼容这些格式化的信息,所以这些格式化信息对tableau是无用的,有的时候甚至是阻碍。
如下表的“邮寄方式”就是一种典型的“合并单元格”:
那么,开始正题,按照如下顺序聊聊让tableau抓狂的数据格式:
当数据的结构是参照数据透视表结构,或者叫交叉表(cross-tab format)结构,那么这种表是面向“列”的。也就是说,每一列的列首是妈妈,后别带着一群孩子。比如下表的数据,Math学科名是妈妈,分数(90、50、50)是孩子。我们关注的数据以这样一个方式,变量名被存储位为列标题。
而在tableau中,它则是类似数据库结构一样的,面向“行”存储。
比如下面这个表格,就是所谓的数据透视表样式的,“面向列”的表格
注意,面向列的特点在于,三个学科的成绩---math, science,history---是以三列单独存在
回想一下,生活中遇到的各种统计信息吗,是不是大多是这样的?
再来看看tableau中面向行应该是什么样子。
我们遵循这个原则
一般的,我们将具有同一类属性的数据记录在相同的字段
源数据中,math、science、history是三个学科的名字,同属于一件对象,就是“学科”(Subject),所以将这三科的成绩组合在一起,新建一列标题为"Subject",同时,再命名一个列,叫做分数"Score"
修改优化后的结构如下:
我们日常所用的数据,为了便于阅读,往往会在表格底部或者右边做汇总处理(如下图)subtotals 或 grand totals.,但是这些汇总处理在tableau中,其实是无用值,我们需要把它去掉。
换句话说,数据中包含了总计、平均、中位数等等聚合
有人说了,我是需要这个总计的啊,不能移除!
别急,正确的做法应该是:
将这一行汇总移出
然后将excel数据连接到tableau
使用tableau内置的汇总计算生成subtotals 或 grand totals
你可以这样理解,读入tableau数据都是最原始的客观记录数据,不需要任何二次计算,因为在tableau中这些二次计算都是最基本、最简单的功能。
修改优化后的结构如下:
Excel在邮件中往来,在表格顶端加上描述语言,其实是很有利于阅读的事情。而在tableau当中就不一样了,它只关心数据,不关心数据以外的事情,比如介绍。
比如下表,第1列中,包含了这篇报告的名字和日期,这一块数据就是所谓的introductory text
所以在这个案例中,标题和日期信息需要被移除掉,修改优化后的结构如下:
如果你一定要看到日期和,报告的名字,tableau中是可以设置标题和文字注释的。
总之,给tableau数据,它只认识结构完整的数据
一类数据中,包含着更上级的数据。比如下表,1-5的数据都是隶属于California,所以作者在大表的顶端增加了California。
一般情况下,tableau需要只有第一行表头,就是是你的excel数据表头
因为,如果你的数据包含了多层表头,分析可能会出现问题。比如你的,报表字段包含了主要分类和次要分类,这种情况下,一定要将双层表头,变成单层表头。
修改方法很简单,你可以创建一个新列,名字就是California。
修改优化后的结构如下:
上一个案例,我们将双层表格转换成了单层,有时候会遇到没有全部填充的情况,会出现空单元格,这是肯定有误的,如下:
* 注意:不能留有空白单元格,需要填充,记住tableau是以行为单位去读取数据的
假如ID 2对应的state没有填充California,它是不会去读取ID 1的state的。
而我们需要的是将这个新列的数据向下填充,保持每行的数据都有这个字段,保持一致。如果是不重要的数据,一定要将它移除。
修改优化后的结构如下:
同样,数据中间也不能存在空行,需要移除,如下是错误的:
既然state中间不能有空白数据,那么行首的单元格,也就是表头也不能为空。
如下表,第一列(序号)和第二列(Oregon)的首行都为空,
其实如果你的行首为空,又或者是有重复字段名,tableau在读入数据的时候会自动将空的字段名补全一个默认的名字,但是你有可能混淆,不方便分辨,所以建议在原始数据excel中,将字段补全。
如下是原始数据,首行并未设置
如下是tableau自动补全的字段名,使用Fx依次填充(x=1,2,3,4.....):