Power BI DAX MEDIANX 函數:逐列評估並計算中位數 (Iterative Median) 完整指南
Power BI DAX MEDIANX 函數:逐列評估並計算中位數 (Iterative Median) 完整指南
📅 發布日期:2026-09-01
🏷️ 分類:統計函數 DAX 函數
💡 函數速查卡
| 函數名稱 | MEDIANX |
|---|---|
| 所屬類別 | 統計函數 (Statistical functions) |
| 傳回類型 | 十進位數字 (Decimal Number) 或整數 (Integer) |
| 常用頻率 | ★★★☆☆ |
在 Power BI / Analysis Services 的 DAX 數據建模中,MEDIANX 是一個反覆運算器(Iterator)函數。它會遍歷指定資料表的每一列(Row-by-row),針對每一列評估運算式(Expression),最後計算並傳回該結果集中的**中位數(Median)**。相較於只能對單一資料行計算的 MEDIAN,MEDIANX 允許在計算中位數之前先執行複雜的數學運算或多欄位組合計算。
一、 基本語法與參數
MEDIANX 函數的標準 DAX 語法結構如下:
MEDIANX(<table>, <expression>)
| 參數 | 說明 | 預設值 / 必填 |
|---|---|---|
table |
要對其進行逐列評估的資料表或傳回資料表的 DAX 運算式(例如 FILTER 或 RELATEDTABLE)。 |
必填 |
expression |
要針對資料表每一列進行評估的運算式,結果必須為數值型態。 | 必填 |
二、 核心功能說明
MEDIANX 的運作機制為:先為指定資料表(table)中的每一列計算參數二(expression)的值,接著將所有算出之數值進行排序,並找出中間位置的數值:
- 若數值總個數為**奇數**,則直接取最中間的數值。
- 若數值總個數為**偶數**,則取最中間兩個數值的平均值(Mean)。
在 Power BI 報表建模中,常見的實務應用包括:
- 計算包含跨欄位動態運算後的產品銷售額中位數(例如
[UnitPrice] * [Quantity])。 - 結合條件篩選,計算特定類別或特定客戶群體的績效中位數,排除極端值對平均值的干擾。
- 計算每個客戶在特定時間區間內的平均消費額之中位數(聚合後再算中位數)。
三、 實用 DAX 範例
範例 1:逐列計算單價乘以數量後的中位數 (Row-by-Row Calculation)
針對銷售表中的每一筆交易,先計算折後金額,再求出所有筆數的中位數:
// 建立度量值:計算每筆訂單實際金額的中位數
MedianTransactionAmount =
MEDIANX(
'Sales',
'Sales'[UnitPrice] * 'Sales'[Quantity] * (1 - 'Sales'[Discount])
)
範例 2:搭配 FILTER 進行特定條件過濾
僅針對運送時間大於 0 的訂單,計算運送天數的中位數:
// 建立度量值:計算有效訂單運送天數的中位數
MedianDeliveryDays =
MEDIANX(
FILTER(
'Orders',
'Orders'[ShipDate] > 'Orders'[OrderDate]
),
INT('Orders'[ShipDate] - 'Orders'[OrderDate])
)
範例 3:計算客戶層級聚合後的中位數 (Nested Aggregation)
先算出每位客戶的總銷售額,再統計「所有客戶銷售額」的中位數:
// 建立度量值:評估每個客戶總銷售額的中位數水準
MedianCustomerSales =
MEDIANX(
VALUES('Customer'[CustomerID]),
[Total Sales]
)
四、 常見陷阱與注意事項
⚠️ 注意事項 1:僅包含數字與邏輯值(視為數字)
MEDIANX 只會對評估結果為數字的資料列進行排序與計算。若運算式傳回文字或非數值資料,該資料列將被忽略或引發型態轉換錯誤。
⚠️ 注意事項 2:空白值 (BLANK) 與 0 的差異
若運算式結果傳回
若運算式結果傳回
BLANK(),MEDIANX 在計算時會自動忽略該資料列;但若結果為數字 0,則會被納入中位數的排序與計算中,進而影響整體統計結果。
⚠️ 注意事項 3:大型資料集的效能影響
作為 Iterative 函數,
作為 Iterative 函數,
MEDIANX 需要先在記憶體中對所有列計算結果並進行排序。當傳入的資料表包含數百萬列時,計算中位數的開銷會顯著高於平均值(AVERAGEX),使用時宜特別注意資料規模。
五、 相關函數推薦
MEDIAN:計算指定資料行中所有數字的中位數。AVERAGEX:計算針對資料表逐列評估運算式後的算術平均值。PERCENTILEX.EXC:計算資料表逐列運算後的指定百分位數(不包含邊界)。PERCENTILEX.INC:計算資料表逐列運算後的指定百分位數(包含邊界)。
六、 官方文件連結
想進一步瞭解微軟官方說明與 DAX 語法細節,可參考:
留言
張貼留言