개요
PowerBI에 요청하는 것은 어려운 일이므로 깔끔한 접근 방식을 찾기가 어려울 수 있습니다.
가장 큰 문제는 PowerBI의 데이터 모델이 적어도 Excel에서하는 방식이 아니라 달리는 탈리 개념을 지원하지 않는다는 것입니다. Excel에서 열은 동일한 열의 '이전 행'에서 발생하는 값을 참조한 다음 다른 열에 나열된 '일별 변경'으로 조정할 수 있습니다.
PowerBI는 일부 하위 행에 대한 모든 일일 변경 사항을 추가하여이를 모방 할 수 있습니다. 현재 행의 날짜 값을 가져 와서 모든 날짜가이 현재 행의 날짜보다 작은 필터링 된 테이블을 만든 다음 해당 하위 집합의 모든 일일 변경 사항을 요약합니다. 이것은 미묘한 차이처럼 보이지만 상당히 중요합니다.
이는 누적 합계를 '재정의'할 방법이 없음을 의미합니다. 수행되는 유일한 수학은 매일의 변경 사항을 포함하는 열에서 발생합니다. '총계'가 포함 된 열은 결과 일뿐입니다. 이는 후속 행 계산에 사용되지 않습니다.
우리는 '재설정'이라는 개념을 버리고 대신 '조정'값을 포함하는 열을 만드는 것을 상상해야합니다. 조정은 설명 된 조건이 충족 될 때 일일 잔고 및 조정의 총계가 1이되도록 포함 할 수있는 값입니다.
OP가 제공 한 계산 된 실행 량을 보면, '작업 일'직전의 '비 작업'일에 실행 된 총계의 값에 따라 반대로 계산하면 0과 다음 영업일의 누적 합계가 1 씩 증가합니다. 이것은 우리가 원하는 행동입니다 (나중에 설명 할 문제가 하나 있습니다).
결과
Most Recent Date Prior to Work =
CALCULATE(
Max(Leave[Date]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] = EARLIER(Leave[Date]) -1 && Leave[Type] <> "Working" && Earlier(Leave[Type]) = "Working"
))
행 컨텍스트와 필터 컨텍스트의 차이점과 EARLIER가이 계산을 수행하는 방법을 이해하는 데 도움이됩니다. 이 시나리오에서 "EARLIER"는 "이 참조는 현재 행의 값을 가리 킵니다"를 의미하고 그렇지 않으면 "ALLEXCEPT (Leave, Leave [Id])"에 의해 리턴 된 전체 테이블을 가리 킵니다. 현재 행에 "Working"유형이 있고 전날 행에 다른 유형이있는 장소를 찾습니다.
Most Recent Date Prior to Work Complete =
CALCULATE(
Max(Leave[Most Recent Date Prior to Work]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] <= EARLIER(Leave[Date])
))
이 계산은 '채우기'종류의 작업을 모방합니다. "이 행의 날짜 이전 날짜가있는 모든 행을 볼 때 '근무 전 가장 최근 날짜'에서 가장 큰 값을 반환합니다."
Daily Balance Adjustment =
CALCULATE(
SUM(Leave[Running Daily Balance]),
FILTER(
ALLEXCEPT(Leave, Leave[Id]),
Leave[Date] = EARLIER(Leave[Most Recent Date Prior to Work Complete])
))
이제 모든 행에 조정으로 사용할 일일 잔고를 어디로 찾아야하는지 설명하는 필드가 있으므로 테이블에서 찾아 볼 수 있습니다.
Adjusted Daily Balance = Leave[Running Daily Balance] - Leave[Daily Balance Adjustment]
마지막으로 조정 결과를 최종 결과에 대한 누적 합계에 적용합니다.
문제
이 방법은 일일 일일 잔고가 0 미만이 아니면 카운트를 재설정해서는 안된다는 점을 해결하지 못합니다. 나는 전에 틀린 것으로 판명되었지만 순환 의존성을 생성하기 때문에 이것이 DAX에서만 달성 할 수 없다고 말할 것입니다. 기본적으로 요구 사항을 만듭니다. 집계 된 값을 사용하여 집계에 포함 할 대상을 결정하십시오.
그래서 내가 당신을 데려 올 수있는 한입니다. 도움이 되길 바랍니다.