執行內容轉換
在資料列內容中評估量值或量值運算式時,會發生什麼事? 這種情況可能發生在計算結果欄公式中,或在迭代器函式中的運算式評估時。
在下列範例中,您將在 Customer 資料表中新增計算結果欄,以將客戶分類至忠誠度類別。 案例很簡單:當客戶產生的收益小於 2500 美元時,會將客戶分類為 [低];否則,會分類為 [高]。
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
在報表的 Page 4 上,將 Customer Segment 資料行新增為圓形圖的圖例。
請注意,只有一個 [客戶區段] 值存在。 原因是計算結果欄公式產生不正確的結果:會將 High 的值指派給每個客戶,因為 SUM(Sales[Sales Amount])
運算式不會在篩選內容中進行評估。 因此,系統會根據 Sales 數據表中每個Sales Amount 數據行值的總和來評估每個客戶。
若要強制評估「每個客戶」的 SUM(Sales[Sales Amount])
運算式,必須進行內容轉換,將資料列內容資料行值套用至篩選內容。 您可以使用 CALCULATE
函式,不傳入篩選運算式即完成此轉換。
修改計算結果欄定義,使其產生正確的結果。
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
在圓形圖視覺效果中,將新的計算結果欄新增至圖例基礎來源,確認現在會顯示兩個圓形圖區段。
在此情況下,CALCULATE
函式會套用資料列內容值做為篩選條件,又稱為「內容轉換」。 為了正確起見,當唯一資料行在資料表上時,此程序並沒有太大的作用。 當資料表上有唯一的資料行時,您只需要在該資料行上套用篩選條件,就能進行轉換。 在此情況下,Power BI 會針對資料列內容中的值,在 CustomerKey 資料行上套用篩選條件。
如果您在資料列內容中評估的運算式中參考量值,內容轉換會是自動的。 因此,您不需要將量值參考傳遞給 CALCULATE
函式。
修改計算結果欄定義,這會參考 Revenue 量值,並請注意其會繼續產生正確的結果。
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
現在,您可以完成 Sales Commission 量值公式。 若要產生總計,您必須使用迭代器函式來反復查看篩選內容中的所有區域。 迭代器函式運算式必須使用 CALCULATE
函式,將資料列內容轉換成篩選內容。 請注意,其不再需要測試 Sales Territory 資料表中的單一 Country 資料行值是否在篩選內容中,因為已知是由單一國家/地區篩選 (因為其會逐一查看篩選內容中的區域,而區域僅屬於一個國家/地區)。
切換至報表的 Page 3,然後修改 Sales Commission 量值定義,以使用 SUMX
迭代器函式:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
資料表視覺效果現在會顯示所有區域的銷售傭金總計。