举个栗子!Tableau 技巧(170):用旭日图 Sunburst Chart 呈现多层数据

发布于: 2022-10-19

旭日图又称太阳图,是一种饼图(或环形图)基础上的升级图表。旭日图既能像饼图一样展示数据各自的占比,还能直观的表达数据的层级和从属关系,呈现数据的构成情况。

旭日图中,每一层图表代表同一级别的数据占比。图表从内到外,对应的数据级别便从高到低,并且相邻两层是内外包含关系。

很多数据粉因为颜值关注到旭日图,希望它让数据分析更美观。其实,旭日图不仅仅是颜值担当,它在实际业务分析场景中,也是一种非常实用的分析图表。



通过旭日图可以了解数据构成、还可以快速洞察业务。如何在 Tableau 中实现呢?今天来分享方法吧!

本期《举个栗子》,我们要给大家分享的 Tableau 技巧是:用旭日图 Sunburst Chart 呈现多层数据。


为方便学习,栗子使用 Tableau 自带的"示例-超市"数据源。掌握栗子方法后,数据粉可尝试使用自己的数据源。

具体步骤如下:

1、准备数据


首先,需要将 Tableau 自带的“示例-超市”数据源做一些调整,改成如下结构:



打开“示例-超市” Excel 数据源,使用数据透视表得到地区、细分、类别、销售额的分层级汇总数据。再根据如下规则添加 Level 列:

IF(NOT(ISBLANK(C2)),3,IF(NOT(ISBLANK(B2)),2,1))


然后,需要准备一个辅助数据源,结构如下:


2、连接数据源


打开 Tableau Desktop,连接数据源。创建 link 计算连接“基础数据源”和“辅助数据源”。

3、创建数据桶和计算字段


➤ 创建 Path 数据桶,如图设置:

➤ 创建计算字段:Index,键入函数

INDEX()

➤ 创建计算字段:Max-Level,键入函数

WINDOW_MAX(MAX([Level]))


➤ 创建计算字段:Max-销售额,键入函数

WINDOW_MAX(MAX([销售额]))

➤ 创建计算字段:Slice-Level,键入函数

WINDOW_MAX(MAX([Level]))

➤ 创建计算字段:Slice-Size,键入函数

[Max-销售额]/WINDOW_SUM(IIF([Max-Level]=1,[Max-销售额]/203,0))

➤ 创建计算字段:Edges,键入函数

IF [Max-Level]>LOOKUP([Max-Level],-1) THEN PREVIOUS_VALUE(0)

ELSEIF [Max-Level]<=LOOKUP([Max-Level],-1) THEN PREVIOUS_VALUE(0)+LOOKUP([Slice-Size],-1)

ELSE PREVIOUS_VALUE(0)

END


➤ 创建计算字段:X,键入函数

IF([Index]<>WINDOW_MAX([Index]) AND [Index]>=(WINDOW_MAX([Index])+1)/2)

THEN

([Slice-Level]+5.8)

* COS(WINDOW_MAX(2*PI())*[Edges]+

(WINDOW_MAX([Index])-([Index]+1))*WINDOW_MAX(2*PI())*[Slice-Size]/(((WINDOW_MAX([Index])-1)/2)-1))

ELSEIF([Index]=WINDOW_MAX([Index]) OR [Index]<(WINDOW_MAX([Index])+1)/2)

THEN

([Slice-Level] + 5)

* COS(WINDOW_MAX(2*PI())*[Edges]+

(((IIF([Index]=WINDOW_MAX([Index]), 1,[Index])-1)*WINDOW_MAX(2*PI())*[Slice-Size]/((((WINDOW_MAX([Index])-1)/2)-1)))))

END


➤ 创建计算字段:Y,键入函数

IF([Index]<>WINDOW_MAX([Index]) AND [Index]>=(WINDOW_MAX([Index])+1)/2)

THEN

([Slice-Level]+5.8)

* SIN(WINDOW_MAX(2*PI())*[Edges]+

(WINDOW_MAX([Index])-([Index]+1))*WINDOW_MAX(2*PI())*[Slice-Size]/((((WINDOW_MAX([Index])-1)/2)-1)))

ELSEIF([Index]=WINDOW_MAX([Index]) OR [Index]<(WINDOW_MAX([Index])+1)/2)

THEN

([Slice-Level] + 5)

* SIN(WINDOW_MAX(2*PI())*[Edges]+

(((IIF([Index]=WINDOW_MAX([Index]), 1,[Index])-1)*WINDOW_MAX(2*PI())*[Slice-Size]/(((WINDOW_MAX([Index])-1)/2)-1))))

END


4、创建视图

在“数据”窗格,右键单击“Level”字段,在下拉菜单中选择:转换为维度。然后,将维度“区域”、“细分”、“类别”依次拖放至“标记”卡的详细信息中。


将标记类型改为“ 多边形“,并将前面创建的“Path(数据桶)”拖放至“标记”卡的路径中,再将维度“Level”拖放至详细信息中。

将计算字段“X”和“Y”分别拖放至列和行,右键单击列上的“X”胶囊,在下拉菜单中选择:编辑表计算。在弹出的对话框中,分别对 X、Index、Edges、Max-Level、Max-销售额、Slice-Size、Slice-Level 做如下表计算。相同的步骤,也对行上的“Y”字段进行设置。

在“标记”卡中,将“地区”、“细分”和“类别”字段从详细信息切换成:颜色。再通过设置格式移除网格线和零值线,就得到了我们想要的旭日图。

今天的 Tableau 技巧,你 Get 到了吗?赶快试试看吧!


更多相关信息,请访问专题页: BI大数据分析可视化工具