2017-01-30 11 views
0

개념적/논리적 관점에서 다소 복잡한 DAX 문을 작성해야하므로 설명하기 어려울 수 있습니다.DAX 다른 테이블의 두 열을 기반으로 계산 된 열

두 개의 테이블이 있습니다.

첫 번째 표 (아래 참조)에는 숫자 값 목록 (임금)이 있습니다. 각 값에 대해 해당 날짜 범위가 있습니다. 나는 또한 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'의 모든 행에서 EmployeeID를 하루 종일 지불 한 금액을 알 수 있습니다 (8 시간 근무시 가정).

정말 논리 단계와 사투를 벌인거야, 그래서이 계산을 할 수있는 가장 좋은 방법이 무엇인지 모르겠어요 ...

는 상황이 더 악화하기 위해, 직원 ID는 다른 임금에 대한 돈을받을 수 있습니다 다른 날짜에 동일한 기능. 그들은 일하는 임금 함수 X에서 시작해서 일반적으로 임금이 앞으로 몇 개월은 올라갈 것입니다 ... 즉, EmployeeID와 FunctionID를 연결하려고하면 연결될 수 없습니다 어느 테이블도 고유 값을 가지지 않으므로 연결된 값의 테이블.

즉, EmployeeID와 FunctionID를 EmpFunID로 구성하면 현재 행의 EmpFunID + 날짜를 가져 와서 "현재 행의 EmpFunID를 가져 와서 현재 날짜 행은 다음 동일한 EmpFunID를 가지며 덜 CurrentRowDate AND가 CurrentRowDate HERE

보다 종료 날짜보다했다는 STARTDATE을 갖는다 임금 테이블 임금 열에서의 값을 반환하는 것은 지금까지 것을이다

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

방금 ​​업데이트 됨 - 임금 값이 시간이 지남에 따라 변경 될 수 있으므로 표 2에서 직원 1/32가 2011 년 1 월 4 일에 18 달러/시간, 2016 년 1 월 5 일에 직원이 인상을받는 경우 22 달러가되면 두 가지 임금 값을 가진 동일한 WageFunctionID 콤보가 생깁니다. – james5

답변

0

잘 맞는지는 모르겠지만 그럴 지 모르겠습니다. 이것을 Table2에 계산 열로 넣으면 Table2의 현재 행 컨텍스트가 필터 컨텍스트로 변환됩니다.

그래서 SUMX는 Table2의 현재 행 데이터를 사용하고 필터링 된 버전의 임금 테이블에서 합계를 계산합니다. 임금 테이블은 Table2의 현재 날짜, employeeid 및 functionid 및 각 행에 대해 필터링됩니다 Table2 itt는 현재 행에 속한 임금 만 합산합니다.

CALCULATE(
    SUMX(
    FILTER(
    'Wages', 
    'Wages'[StartDate] >= 'Table2'[Date], 
    'Wages'[EndDate] <= 'Table2'[Date], 
    'Wages'[EmployeeId] = 'Table2'[EmployeeId], 
    'Wages'[FunctionId] = 'Table2'[FunctionId] 
    ), 
    'Wages'[Wage] 
)