Power BI DAX MOD 函數:計算兩數相除後的餘數完整指南

Power BI DAX MOD 函數:計算兩數相除後的餘數完整指南

📅 發布日期:2026-09-20 🏷️ 分類:數學與三角函數 DAX 函數
💡 函數速查卡
函數名稱 MOD
所屬類別 數學與三角函數 (Math and Trig functions)
傳回類型 整數或十進位數字 (與除數符號相同)
常用頻率 ★★★★☆

在 Power BI / Analysis Services 的 DAX 數據建模中,MOD 函數用於計算**兩數相除後的餘數(Remainder)**。結果的正負號總是與**除數(Divisor)**相同。此函數常用於奇偶數判斷、週期性循環計算、單位包裝換算(如將總件數拆解為箱數與零散件數)以及時間頻率分析。

一、 基本語法與參數

MOD 函數的標準 DAX 語法結構如下:

MOD(<number>, <divisor>)
參數 說明 預設值 / 必填
number 要尋找餘數的**被除數**(Dividend)。可以是數值常數、資料行或度量值。 必填
divisor 用於相除的**除數**(Divisor)。**不能為 0**。可以是數值常數、資料行或度量值。 必填

二、 核心功能說明

MOD 函數傳回兩數相除後的餘數。數學計算原理可視為:MOD(n, d) = n - d * INT(n / d)

在 Power BI 報表建模中,常見的實務應用包括:

  • 奇偶數與分組判斷:使用 MOD(RowIndex, 2) 判斷奇偶列以建立視覺化隔行變色或分流邏輯。
  • 單位裝箱拆解:例如總商品數為 25,每箱裝 6 件,透過 MOD(25, 6) 可求得零散剩餘 1 件。
  • 時間週期轉換:將總秒數或分鐘數轉換為「剩餘秒數」或「幾小時幾分」。

三、 實用 DAX 範例

範例 1:基本餘數計算與正負號表現

直接計算不同數值組合的餘數,注意傳回值的正負號會與除數相同:

// 9 除以 3 恰好整除,傳回 0
ModZero = MOD(9, 3)

// 7 除以 3 餘數為 1
ModPositive = MOD(7, 3)

// 除數為負數 (-3) 時,傳回結果與除數同號,傳回 -2
ModNegativeDivisor = MOD(7, -3)

範例 2:判斷訂單編號或項目的奇偶數 (Odd / Even)

搭配 IF 函數建立計算行,判斷流水號為奇數或偶數:

// 建立計算行:判斷 OrderID 是奇數還是偶數
IsOddOrEven = 
IF(
    MOD('Sales'[OrderID], 2) = 0,
    "偶數",
    "奇數"
)

範例 3:動態安全防錯與包裝拆算

計算產品出貨時裝滿大箱後剩餘的散裝數量,並搭配 IF 避免除數為零導致的錯誤:

// 計算剩餘未滿一箱的零散商品數量
LooseItems = 
VAR TotalQty = 'Inventory'[TotalQuantity]
VAR BoxCapacity = 'Inventory'[ItemsPerBox]
RETURN
    IF(
        BoxCapacity > 0,
        MOD(TotalQty, BoxCapacity),
        BLANK()
    )

四、 常見陷阱與注意事項

⚠️ 注意事項 1:除數 (divisor) 不能為零
若第二個參數 divisor 為 0,DAX 會傳回錯誤或被視為無效運算。在動態數據資料列中,建議務必搭配 IFDIVIDE 概念檢測除數是否為零。
⚠️ 注意事項 2:結果的正負號與除數相同
MOD 的結果符號與除數(divisor)一致,而非被除數。例如 MOD(-5, 3) 傳回 1,而 MOD(5, -3) 則會傳回 -1。這點與某些程式語言(如 C# 或 Java 中的 % 運算子)的行為有所不同,需特別留意。

五、 相關函數推薦

  • DIVIDE:執行安全除法,自動處理除以 0 的情況並傳回指定替代值。
  • INT:將數值無條件捨去取整數,常與 MOD 搭配計算商數。
  • QUOTIENT:傳回兩數相除後的整數商數(捨去餘數)。
  • ROUND:將數字四捨五入至指定的位數。

六、 官方文件連結

想進一步瞭解微軟官方說明與 DAX 語法細節,可參考:

留言

相關文章 / 薪資情報

文章載入中...

你可能有興趣

精選文章 / 推薦情報

文章載入中...