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 值。
使用範例超級市場資料源解釋。
- 首先建立一個 "區域"、"國家/地區" 交叉表
2. 接著建立一個計算式 ATTR(城市),並將此計算式放在行區
我們發現在交叉表中,在新增字段的對應位置,顯示出許多星號。
那*為什麼會出現在交叉表中呢?那是因為每個"國家/地區"中都對應了許多"城市",按照ATTR()函數的定義,當返回值不止一個時,就會返回*。
舉例來說,當我們查看Australia的完整資料時,可以看到有不同的城市,如Sydney、Hobart等,因此返回了*
此時若將資料源中的最詳細的資料級別(最細粒度),即"訂單ID"字段拖放到"ATTR([城市])"前,*將全部消失,因為返回的值不再是多個值而是唯一值,即每筆訂單ID對應的城市,如下圖:
以上說明,希望能幫你們了解ATTR()函數,如果有任何問題歡迎留言給我,我們下次見掰掰
Ernie Liu