2017-01-30 27 views
0

概念/論理の観点からやや複雑なDAX文を書く必要があります。DAX他のテーブルの2つの列に基づいて計算された列

私は2つのテーブルを持っています。

最初の表(下に表示)には、数値(賃金)のリストがあります。それぞれの値について、私は対応する日付範囲を持っています。私もEmployeeIDとFunctionIDを持っています。この表の目的は、特定の日付範囲で特定の機能を実行する従業員に支払われる時間別賃金を追跡することです。各ファンクションにはウェイジテーブルに独自のウェイジがありますが、の各ファシリティには同じファンクション(ファンクションと従業員のディメンションもあります)に対して異なる賃金が支払われることがあります。

'Wages' 

Wage StartDate EndDate  EmployeeID  FunctionID 
20  1/1/2016  1/30/2016  3456   20 
15  1/15/2016 2/12/2016  3456   22 
27.5 1/20/2016 2/20/2016  7890   20 
20  1/21/2016 2/10/2016  1234   19 

「表2」では、従業員が特定の機能を果たした毎日の記録があります。表1には、すべての機能の賃金情報が記載されています。

'Table 2' 

Date  EmployeeID  FunctionID DailyWage 
1/1/2016 1234   $20   =CALCULATE(SUMX(???)) 
1/2/2016 1234   $20   =CALCULATE(SUMX(???)) 
1/3/2016 1234   $22   see below 
1/4/2016 1234   $22 
1/1/2016 4567   $27 
1/2/2016 4567   $27 
1/3/2016 4567   $27 

は(賃金は時間の経過とともに変化することに注意してください)

私がやろうとしている何DailyWage 'と呼ばれる「表2」に基づいて計算列を作成することです。私は「表2」のすべての行に従業員IDが1日分支払われた金額を教えてほしいです(8時間の就業日を前提とします)。さらに悪いことに...

を私は本当にロジック段階に苦しんだので、私はこの計算を行うための最善の方法は何であるかわからないんだけど

、社員はのためのさまざまな賃金を支払ってしまうかもしれません別の日付の同じ機能。彼らは1つの賃金関数Xで始まるかもしれませんし、一般的に、彼らの賃金は将来数ヶ月に上がるはずです...つまり、私がEmployeeIDとFunctionIDを連結しようとすると、私は接続できませんどちらの表も一意の値を持たないため、連結された値の表は使用できません。

つまり、EmployeeIDとFunctionIDをEmpFunIDにまとめると、現在の行のEmpFunID +日付を取得し、現在の行のEmpFunIDと現在の日付の日付を取る必要があります行し、次いでCurrentRowDate、ここでCurrentRowDate

より大きい終了日を持っているが、私はこれまで持っているものであることを同じEmpFunIDを有し、より少ない開始日を有する賃金テーブル上賃金列から値を返す:

Step 1 = Filter 'Wages' table so that StartDate < CurrentRowDate 
Step 2 = Filter 'Wages' table so that EndDate > CurrentRowDate 
Step 3 = LOOKUPVALUE('Wages'[Wage], 'Wages'[EmpFunID], Table2[EmpFunID]) 

これでDAX関数に変換するだけでいいです。

+0

従業員IDと機能IDを両方のテーブルに結合し、それを使用してデータをルックアップする列を作成しないのはなぜですか? – teylyn

+0

ちょうど更新 - 賃金の値は、従業員#1234が2011年1月4日に18ドル/時間、2016年1月5日に従業員が募集を取得した場合、 $ 22になると、2つの異なる賃金値を持つ同じWageFunctionIDコンボが作成されます。 – james5

答えて

0

完全に正しいかどうかわかりませんが、似たようなものでしょうか?これをTable2に計算列として入れると、Table2の現在の行コンテキストがフィルタコンテキストに変換されます。

SUMXはTable2の現在の行のデータを使用し、フィルタリングされた賃金表の合計を計算します。賃金表は、Table2の現在の日付、employeeidおよびfunctionid、および各行表2では、現在の行に属する賃金だけを合計します。

CALCULATE(
    SUMX(
    FILTER(
    'Wages', 
    'Wages'[StartDate] >= 'Table2'[Date], 
    'Wages'[EndDate] <= 'Table2'[Date], 
    'Wages'[EmployeeId] = 'Table2'[EmployeeId], 
    'Wages'[FunctionId] = 'Table2'[FunctionId] 
    ), 
    'Wages'[Wage] 
) 
関連する問題