2017-12-03 24 views
0

누군가 다음 분석에 대한 힌트를 얻을 수 있기를 바랍니다. 학생들은 일부 코스 (등록, 가입, 부여, ...)에 대해 일부 조치를 취할 수 있으며 역순으로 - 최신 조치를 취소 할 수도 있습니다. 첫 번째 통계는 두 날짜 사이에 시스템에서 발생한 모든 작업을 계산하는 것으로 필터/슬라이서처럼 노출됩니다. 일부 샘플 데이터 :카운트 및 고유 카운트 측정 (또는 계산 된 열)에 대한 dax 코드

person-id,person-name,course-name,event,event-rank,startDT,stopDT 
11, John, CS101, enrol,1,2000-01-01,2000-03-31 
11, John, CS101, grant,2,2000-04-01,2000-04-30 
11, John, CS101, cancel,3,2000-04-01,2000-04-30 
11, John, PHIL, enrol, 1, 2000-02-01,2000-03-31 
11, John, PHIL, grant, 2, 2000-04-01,2000-04-30 

데이터 세트 (DS)는 이상이고 I는 카운트 메트릭 다음 코드 추가 :

 evaluate 
sumx(
    addcolumns(ds 
     ,"z+", if([event] <> "cancel",1,0) 
     ,"z-", if([event] = "cancel",-1,0) 
     ) 
    ,[z+] + [z-]) 
    } 

메트릭을 표시한다 : 3 개 구독 (존 CS101을 = 1, John-PHIL = 2).

다른 규칙이 있지만 DAX 코드에 추가하는 방법을 모르지만 취소 날짜는 위의 작업 (취소되지 않음) 및 취소 작업의 순위 = non -cancel-action + 1.

또한 복합 키의 고유 한 학생 및 코스 번호를 추가해야 할 필요가 있습니다. 이것을 코드에 어떻게 추가할까요?

감사 Q

답변

0

(요약 할 rankx 통해)이 기술적으로 응답하지 않지만 추천 이상.

당신의 도전처럼 당신은 그때 취소 될 수있는 행동이 있다는 것입니다. 작업이 취소되었는지 여부를 결정하는 특정 논리가 있습니다 (즉, 취소가 바로 다음 행이어야하고 날짜가 일치해야 함).

귀하의 특정 질문에 답하지 않는 것이 좋겠지 만, DAX에 취소 논리를 넣는 대신 데이터 모델을 조정하는 것이 좋습니다.

예를 들어 데이터 모델에 후속으로 취소 된 행을 플래그로 표시하는 열을 추가 할 수있는 경우 모든 DAX는 해당 플래그를 확인하여 작업이 취소되었는지 여부를 확인해야합니다. CALCULATE 문. 이벤트가 취소되었는지 여부를 판별하기 위해 많은 논리를 가질 필요는 없습니다. SUMX에 대한 필요성을 완전히 없애줍니다. SUMX는 여러 행으로 작업 할 때 느려질 수 있습니다.

조치가 취소되었는지 여부에 대한 논리는 소스 시스템 (예 : SQL 또는 Excel의 계산 된 열) 또는 ETL (예 : Power BI의 쿼리 편집기)으로 이동합니다 작업. 논리는 한 번 적용되고 측정 값이 사용될 때마다 논리를 적용 할 필요없이 모든 측정 값에 대한 데이터 모델에 존재합니다.

이 질문은 논리 질문을 해결하는 데 도움이되지 않는다는 것을 알고 있습니다.하지만 제가 권장하는 이유는 DAX가 근본적으로 거대한 계산기라는 것입니다. 그것은 물건을 추가합니다. 필터는 훌륭하지만 다른 것들은 추가하지 않는 것이 좋습니다.하지만 모든 것이 합산 또는 계산할 수있는 열로 축소 될 때 가장 효과적입니다. 일단 당신이 그것을 넘어서면 (예를 들어 현재 행에 대해 뭔가를 조정하기 위해 아래 행을보고 싶을 때), DAX는 매우 복잡하고 (느린) 반면 소스 시스템이나 Query Editor는 처리 할 수 ​​있습니다 그러한 요구 사항을보다 쉽게

+0

안녕하세요 Leonard, 내 게시물에 추가 된 메모 주셔서 감사합니다. 예, 필요한 로직을 추가 할 수있는 가장 좋은 곳은 어디입니까? 안부 인사, 질문. –