Tableau教學–你應該要知道的常見問題04:Tableau ATTR()函數應用,解決"無法將彙總和非彙總參數與此函數混合"問題

在我一開始接觸Tableau函數時,因為對詳細資料級別的觀念還不清楚,常常寫出混和不同詳細級別的函數,跳出以下警告:

無法將彙總和非彙總參數與此函數混合(cannot mix aggregate and non-aggregate arguments with this function)

(跳出錯誤之函數)

針對此類問題,ATTR()函數可以用來解決建立計算式時,聚合和非聚合欄位不能混合的問題。

原函數:

IF SUM([銷售額])>10000 and CONTAINS([子類別],”椅子”) THEN “藍”
ELSE “紅”
END

此時,就可以使用ATTR()函數,將CONTAINS字段包裹在裡面,轉換為聚合字段,解決該問題。

…………………………..

修改後函數:

IF SUM([銷售額])>10000 and ATTR(CONTAINS([子類別],”椅子”)) THEN “藍”
ELSE “紅”
END

(計算有效函數)

原理:ATTR()函數是什麼?

引用Tableau官網定義:

ATTR():如果它的所有列都有一個值,則返回該運算式的值。否則返回星號。會忽略 Null 值。

使用範例超級市場資料源解釋。

  1. 首先建立一個 "區域"、"國家/地區" 交叉表

2. 接著建立一個計算式 ATTR(城市),並將此計算式放在行區

我們發現在交叉表中,在新增字段的對應位置,顯示出許多星號。

那*為什麼會出現在交叉表中呢?那是因為每個"國家/地區"中都對應了許多"城市",按照ATTR()函數的定義,當返回值不止一個時,就會返回*。

舉例來說,當我們查看Australia的完整資料時,可以看到有不同的城市,如Sydney、Hobart等,因此返回了*

此時若將資料源中的最詳細的資料級別(最細粒度),即"訂單ID"字段拖放到"ATTR([城市])"前,*將全部消失,因為返回的值不再是多個值而是唯一值,即每筆訂單ID對應的城市,如下圖:

以上說明,希望能幫你們了解ATTR()函數,如果有任何問題歡迎留言給我,我們下次見掰掰

Ernie Liu

--

--

Tableau 資料視覺化與商業分析筆記

“20%的時間花在資料處理,80%的時間用於分析” 持續分享Tableau教學,希望能讓大家淺顯易懂為何我開始使用Tableau做視覺化資料分析的原因,進而也開始使用Tableau,增加工作效率。FB: https://www.facebook.com/tableaunote