2016-07-25 2 views
0
id datetime    new_column   datetime_rankx 
1 12.01.2015 18:10:10 12.01.2015 18:10:10 1 
2 03.12.2014 14:44:57 03.12.2014 14:44:57 1 
2 21.11.2015 11:11:11 03.12.2014 14:44:57 2 
3 01.01.2011 12:12:12 01.01.2011 12:12:12 1 
3 02.02.2012 13:13:13 01.01.2011 12:12:12 2 
3 03.03.2013 14:14:14 01.01.2011 12:12:12 3 

ID별로 그룹의 각 행에 대한 날짜 시간 값이 최소 인 새 열을 만들고 싶습니다.Power BI Desktop의 GROUP BY를 사용한 최소값

DAX 쿼리를 사용하여 Power BI 데스크탑에서 어떻게 수행 할 수 있습니까?

답변

1

사용이 식 :

NewColumn = 
    CALCULATE(
    MIN(
     Table[datetime]), 
     FILTER(Table,Table[id]=EARLIER(Table[id]) 
    ) 
) 

전원 BI에서 데이터가있는 테이블을 사용하여이를 생성합니다 :

enter image description here


UPDATE : 설명 및 EARLIER 기능 사용 .

기본적으로 EARLIER 함수를 사용하면 다른 행 컨텍스트의 값에 액세스 할 수 있습니다.

CALCULATE 함수를 사용하면 전체 테이블의 행 컨텍스트가 만들어 지므로 이론적으로 모든 테이블 행을 반복합니다. FILTER 함수를 사용하면 전체 테이블을 반복하고 모든 행을 필터 조건과 비교하여 평가할 때도 마찬가지입니다.

지금까지 행 컨텍스트가 CALCULATE으로 생성되고 행 컨텍스트가 FILTER 인 두 개의 컨텍스트가 있습니다. FILTEREARLIER을 사용하면 CALCULATE의 행 컨텍스트에 액세스 할 수 있습니다. 그런데 외부 (CALCULATE의 행 컨텍스트)에있는 모든 행에 대한 우리의 경우에 FILTER은 외부 컨텍스트의 현재 id에 해당하는 행 집합을 반환합니다.

프로그래밍 배경 지식이 있다면 이해할 수 있습니다. 중첩 루프와 유사합니다.

희망이 파이썬 코드는 뒤에 주요 아이디어 포인트 :

outer_context = ['row1','row2','row3','row4'] 
inner_context = ['row1','row2','row3','row4'] 

for outer_row in outer_context: 
    for inner_row in inner_context: 
     if inner_row == outer_row: #this line is what the FILTER and EARLIER do 

      #Calculate the min datetime using the filtered rows 
      ... 
      ... 

업데이트 2 :가 순위 열을 추가.

enter image description here

이 도움이되는지 알려주세요 :

RankColumn = 
    RANKX(
    CALCULATETABLE(Table,ALLEXCEPT(Table,Table[id])) 
    ,Table[datetime] 
    ,Hoja1[datetime] 
    ,1 
) 

이 순위 열이있는 테이블입니다 :

은이 표현을 사용할 수 원하는 순위를 얻으려면.

+0

대단히 감사합니다. 정말 도움이됩니다. EARLIER가하는 일을 설명해 주시겠습니까? 왜 이드가 고정 되었습니까? –

+1

@ 업데이트 됨, 내 업데이트를 확인하십시오. 도움이되기를 바랍니다. –

+0

고맙습니다. 이해합니다. 예를 들어 네 번째 행 (id = 3)에 대한 계산을 수행하면 EARLIER는 id = 3 인 열을 반환합니까? –