執行內容轉換

已完成

在資料列內容中評估量值或量值運算式時,會發生什麼事? 這種情況可能發生在計算結果欄公式中,或在迭代器函式中的運算式評估時。

在下列範例中,您將在 Customer 資料表中新增計算結果欄,以將客戶分類至忠誠度類別。 案例很簡單:當客戶產生的收益小於 2500 美元時,會將客戶分類為 [低];否則,會分類為 [高]。

Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

在報表的 Page 4 上,將 Customer Segment 資料行新增為圓形圖的圖例。

圖中顯示標題為 [依客戶區段的收益] 的圓形圖視覺效果。只有一個區段:高,表示資料的 100%。

請注意,只有一個 [客戶區段] 值存在。 原因是計算結果欄公式產生不正確的結果:會將 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")

在圓形圖視覺效果中,將新的計算結果欄新增至圖例基礎來源,確認現在會顯示兩個圓形圖區段。

圖中顯示標題為 [依客戶區段的收益] 的圓形圖視覺效果。有兩個區段:[高] 和 [低]。[高] 代表資料的 76%,而 [低] 代表 24%。

在此情況下,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
        )
    )
)

資料表視覺效果現在會顯示所有區域的銷售傭金總計。

圖中顯示出具有三個資料行的資料表視覺效果:區域、收入和銷售傭金。會顯示十個區域的資料列和總計。總銷售傭金現在有總計。