web-dev-qa-db-ja.com

ディメンション属性のパーセンテージを計算して正しい集計を取得するにはどうすればよいですか?

トラック/ドライバー/日で輸送される重量のファクトテーブルがあります。

そして、トラックあたりの最大重量の寸法。

重量の%を輸送したいので、

create MEMBER CURRENTCUBE.[Measures].[% WT]
 AS [Measures].[Weight]/[Dim Truck].[Max_weight].currentmember.properties("key"), 
FORMAT_STRING = "Percent";

これは、1つのトラックに特定の日とドライバーのリーフが1つしかない個々の列でのみ機能します。

トラックがsum(weight)/ sum(max_weight)の代わりに1日に2回トリップする場合、またはsum(weight)/(n * max_weight)を希望する場合は、sum(weight)/ max_weightが機能しません。

まったく同じことが、どの集約レベルでも発生します。たとえば、月、年、または合計。または単にトラックレベルで。

私たちはあらゆる種類の公式とスコープを使って遊んでいますが、成功していません。

集計が期待どおりに機能するように定義する方法はありますか?

3
DeepButi

主な問題は、measureをディメンションに格納していることです。それが属するメジャー、つまりファクトテーブルにメジャーを保存しない限り、複数選択や集計で問題が発生し続けます。

ETLを変更して、ファクトテーブルのmax_weightをコピーするか、DMVで名前付きクエリを使用して、ファクトテーブルをディメンションテーブルに結合し、実際のメジャーを作成できます。

状況に応じて、新しいメジャーグループを追加することもできます。

おそらく一部のMDX COUNT関数でうまくいきますが、実際のファクトテーブルは多少複雑で、他の関連情報の中でこの特定の行を識別する定数値1が既にあるため、式を次のように変更しました。

create MEMBER CURRENTCUBE.[Measures].[% WT]
 AS [Measures].[Weight]/[Dim Truck].[Max_weight].currentmember.properties("key")/[Measures].[N_Deliveries], 
FORMAT_STRING = "Percent";

N_Deliveriesは常に1(または他の関連情報を持つ他の行の場合は0)です。

これは機能します... Excelはいくつかの合計を計算する方法を知りませんが、それでも生き残ることができます:)

2
DeepButi