データ分析において、標準的なAVERAGE関数は主力ツールですが、重大な弱点があります。外れ値による歪みに非常に影響を受けやすいことです。高いか低いかを問わず、単一の極端な値が結果全体を歪め、データの真の中心傾向を誤って表現してしまう可能性があります。
\ ここでトリム平均が不可欠になります。計算から最小値と最大値の指定された割合を除外することで、より堅牢な平均値の測定を提供します。
\ 最新のPower BIモデルにはTRIMMEAN関数が組み込まれていますが、古いAnalysis Services (SSAS)モデルへのライブ接続を使用している場合、この関数は利用できないことがよくあります。この記事では、この機能を再現し、レポート内のすべてのスライサーとフィルターに応答し続ける、完全に動的な堅牢な手動DAXパターンを提供します。
このメジャーは、残りの80%を平均する前に、値の下位10%と上位10%を削除することで、20%トリム平均を計算します。
\ このコードは「新しいメジャー」の数式バーに直接貼り付けることができます。
Trimmed Mean (20%) = VAR TargetTable = 'FactTable' VAR TargetColumn = 'FactTable'[MeasureColumn] VAR LowerPercentile = 0.10 // トリムする下位10%を定義 VAR UpperPercentile = 0.90 // トリムする上位10%を定義 (1.0 - 0.10) // 1. 10パーセンタイルの値を見つける VAR MinThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, LowerPercentile ) // 2. 90パーセンタイルの値を見つける VAR MaxThreshold = PERCENTILEX.INC( FILTER( TargetTable, NOT( ISBLANK( TargetColumn ) ) ), TargetColumn, UpperPercentile ) // 3. 閾値間の値のみを含む平均を計算 RETURN CALCULATE( AVERAGEX( FILTER( TargetTable, TargetColumn >= MinThreshold && TargetColumn <= MaxThreshold ), TargetColumn ) )
この数式は3つの明確なステップで機能し、すべて現在のフィルターコンテキスト内で実行されます(例:ユーザーが選択したスライサーなど)。
TargetTable & TargetColumn: クリーンで再利用可能なコードのために、テーブル名と列名を変数に割り当てます。データモデルに合わせて'FactTable'[MeasureColumn]を変更する必要があります。LowerPercentile / UpperPercentile: 境界を定義します。0.10と0.90は、下位10%と上位10%をトリムすることを意味します。各端から5%(合計10%のトリム)をトリムするには、0.05と0.95を使用します。MinThreshold & MaxThreshold: これらの変数は、パーセンタイル境界に対応する実際の値を格納します。PERCENTILEX.INC: この「イテレーター」関数を使用するのは、最初にテーブルをFILTERできるからです。MinThresholdは現在表示されているデータの10パーセンタイルの値(例:4.5)を保持し、MaxThresholdは90パーセンタイルの値(例:88.2)を保持します。RETURN CALCULATE(...): CALCULATE関数は、メジャーを動的にするための鍵です。レポート内のスライサーやビジュアルによって適用されたフィルターを計算全体が尊重することを保証します。AVERAGEX(FILTER(...)): 計算のコアです。AVERAGEXを使用してテーブルを反復処理します。FILTER(...): TargetTableを最後にもう一度フィルタリングします。このフィルターが「トリム」です。TargetColumnの値が次の条件を満たす行のみを保持します:AVERAGEX(..., TargetColumn): AVERAGEXは、フィルターを通過した行のみのTargetColumnの単純平均を計算します。このDAXパターンを実装することで、堅牢で動的、外れ値に強いKPIを作成できます。このメジャーは、データの中心傾向のより正確な描写を提供し、ユーザーがPower BIレポートと対話する際に正しく再計算されます。
データに関する洞察を私と一緒に探求していただき、ありがとうございます。ご参加いただき感謝いたします。この情報が役立つと思われる場合は、LinkedInまたはX(@Luca_DataTeam)で私をフォローまたは接続してください。良い探求を!👋


