4

[Excel 2010의 경우 MS PowerPivot 용] DAX 식을 적용하여 적용된 범위의 값 합계를 균등하게 분산하려고합니다. - 주어진 시간대/기간에 해당하는 것입니다. 모든 시도에서 동일한 잘못된 결과가 발생하지만 SQL 서버에서 교차 적용하는 것은 간단합니다.DAX/PowerPivot 쿼리를 통해 누적 값을 균등하게 분산시킬 수 있습니다.

Excel로 저장되고 PowerQuery를 사용하여 가져온/변환 된 MS Project의 출력이 있으므로 시작 날짜와 종료 날짜/종료 날짜는 적절한 날짜이며 {X} h와 {Y} d는 정수이고 이들 사이의 달력 날 기간은 모델에 대해 이미 계산/포맷되어 있습니다. 또한 첫 번째 날짜부터 마지막 ​​날짜까지 연속적인 날짜가있는 dates 테이블과 요약하려는 4 자리 연도의 문자열 표현이있는 연도 테이블을 만들었습니다.

모델은 같은 같습니다

PowerPivot Model

내가 (모든 직접 MS 프로젝트 출력에서 ​​가져온)를 ResourceQuery, TaskQuery 및 AssignmentQuery 테이블에 계산 된 열을 생성하고, ServiceAreaQuery에있다 (고유 값 TaskQuery에서 ... 본질적으로 하위 프로젝트). 또한 각각에는 할당 된 시간 열의 합계 인 간단한 측정 값이 있습니다.

데이터 자체는 Project 2010 파일에서 기대하는 것처럼 보이며 {start_date}, {finish_date} 시간이 있습니다. 작업 날짜는 1 일에서 5 년까지 다양 할 수 있으며, 여기에는 내 문제가 있습니다.

내가 쓰는 시간 간격과 일치하도록 장시간 실행되는 작업에 대해 미리 합계 된 값을 분할/청크하는 방법은 무엇입니까?

내가 날짜 테이블에서 연도 열을 사용하더라도, 시간 인텔리전스 내가 (SUM (FILTER (COUNTROWS (DATESBETWEEN))))을 입력 CALCULATE에 대한 아이디어의 부족 해요 그것을 & 잡을하지 않습니다 사물의.

아무런 쓸모가없는 것으로 파악하려고 시도한 두 가지 중간 단계가 있습니다. 나는 그들이 의 최종 목표, 서비스 지역별, 자원 별, 연도 별에 도달하기 위해 동일한 효과적인 기능으로 해결된다고 생각합니다.

피벗 테이블

의 최종 목표를 보여주기 위해 올해

에 의해, 연도 별, 서비스 영역에 의해

  • 시간을 자원하여

    • 시간을 표시합니다
      • 시간, servi에 의해 ce 영역, 리소스 별, 연도 별

      아래 출력에서 ​​문제를 확인할 수 있습니다. 할당 된 총 시간 및 AssignmentQuery에서 리소스 이름을 사용하는 경우, 내가 올바른 금액을 얻을 수 있지만, 어떤 날짜 값을 사용할 때 ... 난 단지 시작 날짜에 대한 시간을합니다 (얻을

      Bad Output Example

      주 모델에서 적극적인 관계).내가 필요로하는 것은 그 시간들이 그들이 적용될 수있는 기간에 걸쳐 균등하게 퍼져 나가야한다는 것입니다 (따라서 어떤 것이 1/1/16과 1/1/19 사이에 1,000 시간을 가지면 333 시간/년을 보여줄 것으로 기대합니다) .

      • (예 : 월/년으로 필터링 된 기간에 일을 선택하는 사람
      • 의 시간을 선택

        내 초기 생각은 선택기/필터/기능을 계산하면 다음을 수행 할 필요가 있다는 것입니다 하루에 시간을 계산

      • 중 필터에서 또는 열 머리글로/무엇이든)/분기
      • 오에서 시간의 합을 선택 필터링 된 기간
      • 의 일 받기 verlap

      모든 아이디어를 매우 높이 평가합니다! PowerQuery 단계로 몇 가지 추가 ETL/데이터 작성을 할 수는 있지만 실제로이 작업에 올바른 DAX 식을 계산할 수 있으므로 프로젝트의 시간 슬라이서/필터로 사용할 수 있습니다.

      미리 감사드립니다.

      이 ** 편집

      [Hours Apportioned Raw] := 
      DIVIDE (
          CALCULATE (
             [Hours], 
             FILTER (
              AssignmentQuery, 
              AssignmentQuery[Start_Date] <= MAX (Dates[Date]) 
               && AssignmentQuery[Finish_Date] >= MAX (Dates[Date]) 
               ) 
             ) 
          , (COUNTROWS (
              DATESBETWEEN ( 
                  Dates[Date] 
                  , FIRSTDATE (AssignmentQuery[Start_Date]) 
                  , LASTDATE (AssignmentQuery[Finish_Date]) 
                 ) 
             ) 
          ) 
      ) 
      
  • 답변

    5

    당신이 장소에서 상대적으로 복잡한 모델을 가지고 귀하의 요구 사항이 전혀 간단하지 않습니다 감안할 ** 제공 대답의 수정 된 버전을 게시, 잘 모르겠어요이 그 거기에서 모든 것을 얻을 수있을 것입니다. 그러나 적어도 당신에게 당신의 목적을 위해 그것을 수정하거나보다 자세한 토론을 시작할 영감을 줄 것입니다.

    아래의 측정 값은 시간을 효과적으로 합산하여 시작일과 종료일 사이의 날짜에 적용하고 총계를 일수로 나눕니다. 약간의 복잡성은 x2 번 반복 될 필요가 있습니다. 한 번은 날짜를 초과하고 한 번은 시간을 포함하는 테이블의 행을 초과합니다.

    내가 연결되지 않은 날짜 테이블을 사용하고있을 가능성이 있고 모델에서이 상황을 복제 할 수없는 경우 일부 ALL() 함수를 대신 사용해야합니다.

    아래의 솔루션은 id, start, end, value 및 calendar라는 두 개의 열이있는 '데이터'라는 테이블을 가정합니다.이 테이블에는 날짜와 월의 두 열이 있습니다.

    측정 1 : 합계 시간

    [Hours] =SUM(Data[Value]) 
    

    측정 2 :에 날짜와 IDS 이상으로 반복 측정 2 : 날짜

    [Hours Apportioned Raw] = 
    CALCULATE ([Hours], 
    FILTER (
        Data, 
        Data[Start] <= MAX (Calendar[Date]) 
         && Data[END] >= MAX (Calendar[Date]) 
         ) 
          ) 
    /(MAX (Data[End]) - MAX (Data[Start])) 
    

    측정 3의 수에 의해 날짜와 분열의 시간을 적용 여기 몇 가지 의미가 올바른 값을

    = 
        SUMX (
         VALUES (Calendar[Date]), 
         SUMX (VALUES (Data[ID]), [Hours Apportioned RAW]) 
        ) 
    

    희망을주고, 매우 간단한 테스트 모델 : Test Model

    참고 브라우저를 보는 것뿐만 아니라 모델을 다운로드해야합니다.

    +0

    Brilliant - 똑같은 날 (뺄셈에 의해 일수에 0을 반환)이 시작되고 끝날 수 있다는 사실을 설명하기 위해 몇 가지 작은 변경을해야했습니다. && 나누기를 사용하여 나누기를 방지하려면 그 기간에 아무런 일도 없다면 제로가 될 것입니다. 엄청 고마워. 내 질문에 업데이트 된 버전을 넣을 것이다. – iivel

    +0

    도움이 될 수있어서 기쁩니다. Pls는 답으로 그것을 표시합니다 :-) – Jacob