Tableau ATTR() 函数

0. 目的

文本主要介绍Tableau ATTR函数,包括该函数的计算逻辑、示例分析与应用场景

1. 示例数据

Picture 1

图1 示例数据

上图数据为C. S. Lewis、J. K. Rowling两位作者出版的图书相关信息。其中,Book ID是数据的主键用来唯一标识一行数据;Book Name是出版图书的名称;Series是图书所属的系列;Year Released是图书发行的年份;Author是图书的作者。

Picture 2

图2 C. S. Lewis出版的图书信息

Picture 3

图3 J. K. Rowling出版的图书信息

从图2、图3可知,图1表中的图书分别由C. S. Lewis、J. K. Rowling两位撰写,包含The Chronicles of Narnia、Harry Potter两个系列。

其中,

  • The Chronicles of Narnia系列均由C. S. Lewis撰写,该系列共包含The Lion,the Witch and the Wardrobe、Prince Caspian、The Return to Narnia、The Voyage of the Dawn Treader、The Silver Chair、The Horse and His Boy、The Magician’s Nephew、The Last Battle 7本书籍,分别发行于1950年、1951年、1952年、1953年、1954年、1955年、1956年
  • Harry Potter系列均由J. K. Rowling撰写,该系列包含Harry Potter and the Philosopher’s Stone、Harry Potter and Chamber of Secrets、Harry Potter and the Prisoner of Azkaban、Harry Potter and the Goblet of Fire、Harry Potter and the Order of the Phoenix、Harry Potter and the Half-Blood Prince、Harry Potter and the Deathly Hallows 7本书籍,分别发行于1997年、1998年、1999年、2000年、2003年、2005年、2007年。

2. 函数本质

在官方文档中,对ATTR()函数的定义如下:
ATTR() 会比较基础数据的每条记录中分组为视图中的一个分区(例如,一个条形、一个圆圈、一个单元格等)的所有值,并且,如果值均相同,则 ATTR() 将返回该值。否则 ATTR() 将返回星号。该函数的计算逻辑如下:

IF MIN ([dimension]) = MAX ([dimension]) THEN MIN ([dimension]) ELSE “*” END

针对该函数的深入理解将在示例分析中展开阐述。

3. 示例分析

3.1 从公式的角度

Picture 4

图4 ATTR返回本身

从上图中可以看出,对于Book ID 为1 的数据,ATTR(Book ID)=1。根据2. 函数本质 中的公式计算可知,Book ID为1 的这条数据Book ID只有唯一值1,因此最大值、最小值均为1 ,故ATTR(Book ID)=1。
从此可以得出结论:

  • ATTR() 函数是行级别(row-level calculation)的函数

Picture 5

图5 ATTR返回*

由上图可以看出,Harry Potter系列对应的ATTR(Book ID)=*。因为Harry Potter系列对应多本书,这些书籍的Book ID分别是8-14,对这些ID求最大 、最小值,分别为8、14。参照公式,最小值不等于最大值,因此计算结果为*。
由此可以得出结论:

  • ATTR()函数的传入参数可以是一个值,也可以是列表

进一步分析,通过图4、图5可以看出这样的规律:

  • 图4中Book ID + Series的组合字段与Book ID之间的关系是1:1(一对一)
  • 图5中Series与Book ID之间的关系是1:N(一对多)
    其实,通过ATTR()函数可以体现出字段之间的逻辑关系(显而易见,该示例中的逻辑关系也是符合数据源的)。
    值得注意的是:
  • 这种逻辑关系并不仅仅是某一个字段与另外一个字段之间的关系,而是组合字段与一个字段之间关系。图4的示例中就是描述了Book ID + Series的组合字段与Book ID之间的关系。
    导致这种情况的原因是,Tableau的数据存储是列式存储(Column-Oriented Database Systems),在行级别的计算情况下数据展示方式也是直接将将列式存储的内容简单展现出来。

3.2 从聚合字段的角度

Picture 6

图6 各系列下的书籍名称

Picture 7

图7 对Book Name字段使用ATTR函数

通过图6、图7可以看出,使用ATTR函数后,对Book Name字段进行聚合,降低了Book Name的维度。

5. 参考资料

6. 示例数据

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注