0

すべての従業員の年齢の平均を返す KPI を SSAS に書きたいと思います。従業員の生年月日は Dim_Employee にあります。MDX の日付と時刻の処理に関する推奨事項が満載の本を 3 冊読みましたが、どれもうまくいきませんでした。何時間にもわたる必死の試行錯誤で、私は無数の組み合わせを試みましたが、成功しませんでした。

生年月日は、ソース データベースでは datetime(null) です。私が試した解決策は次のとおりです。

VBA!DateDiff("yyyy", now(), [Employee].[BirthDate].CurrentMember.Member_Value)

もちろん、[Date].[Date].CurrentMember代わりにを使用する必要がありますnow()が、簡単にするためにこれを使用しました。

Employee ディメンションでは、Date データ型の ValueColumn を作成しました。Management Studio で実行しようとすると、次のエラーが返されます。

「Axis0 関数は、引数にタプル セット式を予期しています。文字列または数値式が使用されました。」

Member_Value を使用しない場合は null が返され、DateDiff は が返され-2010ます。

私は、この KPI を書きたいキューブの構造について責任を負っていないため、新しいメジャーやディメンションをまったく必要としないソリューションを探します。(ただし、キューブに新しい要素を追加せずに解決策がない場合は、もちろん、指定されたキューブで変更要求を提案します)

この場合の解決策は何ですか?追加のメジャーを使用せずにこの KPI を作成することは可能ですか?

4

3 に答える 3

1

私自身の質問に答えます。

私が試したように、これは解決できないようです。最後に、T-SQLの下の新しい列をFact_Headcountに追加しました。これは、Dim_EmployeeとDim_Dateの両方にINNER JOINを使用し、T-SQLのDateDiffを使用して、指定された日時ごとにすべての従業員の年齢を計算します。これで、このHeadCount MeasureGroupにメジャーとしてAgeを追加し、このKPI計算を実行できるようになりました。

つまり、ケースを解決するには、基になるモデルに変更を加える必要があります。

于 2011-12-21T18:02:16.933 に答える
0

私はあなたの答えで受け入れます、私たちはこれを次のようにすることもできます

Datediff("yyyy",Now(),[Delivery Date].[Date].CurrentMember.Name)

-- ここで、Now() とメンバーの形式が問題になっています。[Adventure Works] Cube で実際に正しい形式で行ったとき、何年にもわたって datediff を取得しています

于 2011-12-24T13:55:46.257 に答える
0

CDATE 関数を使用してみてください。

VBA!DateDiff("yyyy", now(), CDate([Employee].[BirthDate].CurrentMember.Member_Value))
于 2011-12-21T15:41:51.107 に答える