후행 누적 합계 공식나는 매우 쉬운 공식이 필요할 것 같은 것을 가지고 있습니다. 온도 데이터 세트가 있고 지난 120일 동안의 후행 누적 합계를 계산해야 합니다(이 합계를 7로 나누어 주 단위로 변환하기 때문에 "도 난방 주"라고 함). 나는 후행 평균을 얻는 방법을 알고 누적 합계를 얻는 방법을 알고 있지만 후행 120일 누적 합계를 얻을 수 있습니까? 이 경우 온도가 31.3C를 넘으면 0.25의 "점수"가 부여됩니다(공식은 "DH-6시간" 열 참조). 기본적으로 120일 기간 동안 이러한 0.25 값의 누적 합계를 원하지만 실제 기간이 아닌 날짜/월/년 등으로 분할하는 방법만 알고 있습니다(예: "#DHW" 스크립트 참조). 시간. 나는 이것이 가능해야 한다고 확신합니다!
해석학데이터 테이블스크립팅Re: 후행 누적 합계 공식다음은 디버깅에 사용할 수 있는 새로운 공식입니다.마지막에 If() 문에 입력한 행 번호에 대한 데이터 테이블을 생성합니다.데이터 테이블을 생성하지 않으려면 찾으려는 행 번호를 -1로 변경하십시오.절대 -1 행이 없으므로 테이블이 생성되지 않습니다.어쨌든, 무슨 일이 일어나고 있고 어디에서 오류가 발생하는지 볼 수 있는지 확인하십시오.
테이블이 올바르게 정렬되어 있고 처리를 원하지 않는 행이 테이블에서 삭제되었는지 확인하십시오.스크립트는 제외된 행을 존중하지 않습니다.
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
rowMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
rowMatrix = rowMatrix || Row();
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While(
dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 &
N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
rowMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
If( Row() == 22159,
New Table( "row" || Char( Row() ),
New Column( "RowNum", set values( rowMatrix ) ),
New Column( "Values", set values( holdMatrix ) ),
New Column( "dates", set values( dateMatrix ), Format( "m/d/y" ) )
)
);
(x / 24) / 7;
Re: 후행 누적 합계 공식수식에 다음을 추가하면
If( Row() == ????,
new table("row" || char(row()),new column("Values", set values(holdMatrix)),<BR /> new column("dates", set values(dateMatrix), format("m/d/y")));
);
(x / 24) / 7;
그리고 그냥 교체 ???? 데이터가 이상하다고 생각되는 행 번호를 사용하면 값에 추가된 모든 값과 값이 수집된 날짜가 포함된 데이터 테이블이 표시됩니다.그것은 당신에게 무슨 일이 일어나고 있는지에 대한 단서를 줄 수 있습니다.
Re: 후행 누적 합계 공식당신의 인내에 감사드립니다! 그것은 실제로 문제로 보였고 이제 데이터가 더 이해가 됩니다. 2018년 10월부터 2019년 6월까지 여전히 문제가 있습니다. 온도가 31.3C 이상으로 올라가지 않음에도 불구하고 값은 2019년 6월(120일 이상)까지 0으로 떨어지지 않습니다. 그곳에서 무슨 일이 일어나고 있는지 말할 수 있습니까?
Re: 후행 누적 합계 공식이전 공식에서 문제를 발견했습니다.누락된 값으로 인해 문제가 발생했습니다.또한 데이터는 전송 날짜 순서로 되어 있어야 합니다.따라서 수식을 적용하기 전에 표를 정렬하십시오.
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 & N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
(x / 24) / 7;
Re: 후행 누적 합계 공식여전히 이상한 일이 벌어지고 있습니다. 이 데이터 테이블을 보면 "#DHW(후행 120일)" 열에서 공식(약간 수정되었지만)을 찾을 수 있습니다. 31.3C 이상의 온도가 없는 4-6개월의 기간이 있지만 값이 줄어들지 않습니다(예: 2014년 10월-2015년 5월). 120일 동안 31.3C 이상의 온도가 없으면 "#DHW"가 0으로 떨어질 것입니다. 나는 당신의 공식이 이것을 해야 한다고 생각합니다. 1년에서 다른 년으로 넘어가서 생기는 문제인지 궁금합니다. "Day"를 1에서 20,000으로 줄바꿈할 수 있을까요?
Re: 후행 누적 합계 공식합계만 원하면 합계를 아무 것으로 나누지 마십시오.
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) ;
,
x = .
);
x;
Re: 후행 누적 합계 공식Jim, 내 질문을 다시 봐주셔서 감사합니다. 새 공식의 값이 너무 낮은 것 같지만(공식이 말이 되는 것 같긴 하지만) 그러나 아마도 내가 필요로 하는 것을 다르게 말했어야 했을 것입니다. 이 경우 더 간단한(또는 최소한 더 간단한 해결책)이 있을 수 있습니다. 온도가 OVER였던 후행 120일 기간의 총 시간 수를 알고 싶습니다. 31.3C. 온도는 매 3시간마다(대부분의 경우) 측정되기 때문에 일반적으로 3시간 블록에 해당하므로 기본적으로 일련의 3 합계입니다(첨부 표의 "DHHs" 열 참조). 따라서 가장 따뜻한 달의 값은 수백 개가 될 수 있습니다. 따라서 기본적으로 DHH 열의 후행 120일 합계가 필요하지만 측정 횟수/일의 차이를 감안할 때 까다롭습니다!
Re: 후행 누적 합계 공식어떤 제수를 사용하고 있는지 정확히 모르겠지만 데이터 행렬의 범위에서 시간 수를 사용했습니다.여기 내가 생각해낸 공식이 있다
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) / ((dateMatrix[N Cols( dateMatrix )] - dateMatrix[1]) / In Hours( 1 ));
,
x = .
);
x;
Re: 후행 누적 합계 공식데이터 세트의 한 가지 성가신 문제에서 발생하는 질문이 있습니다. 후행 120일 기간 동안 누적 합계를 시간(앞서 언급한 것처럼 주가 아님) 단위로 평가해야 합니다. 그러나 시간 간격은 일치하지 않습니다(첨부 표 참조). 대부분의 경우 하루에 8번의 측정이 있지만 때로는 더 적습니다. 기본적으로 온도가 31.3보다 높을 때마다 열에 시차를 추가하고 싶습니다. 이것은 "dif" 기능을 사용하면 충분히 쉽습니다. 그러나 내가 고투하는 곳은 행렬 공식에 "120일"을 추가하는 방법입니다. 따라서 첨부된 표에서 후행 120일 기간 동안 "DHH"의 누적 합계를 계산하고 싶습니다. 수식에 "행" 수가 있는 대신 날짜를 추적하는 데 필요합니다. 그게 가능한가요?
Re: 후행 누적 합계 공식엄청난! 그게 트릭을 했다. 나는 하루에 8번의 측정 시간이 있다는 사실을 반영하도록 수정했습니다(즉, 각 행은 고유한 날짜가 아니므로 평가에서 121 x 8 = 968을 곱했습니다). 값이 떨어지기 전에 이전에 계산한 연간 최대값에서 최대값을 나타내기 때문에 데이터가 의미가 있습니다. 정말 고마워. 열 이동 평균(나는 항상 사용)과 유사한 입력이 있는 수식 편집기에 후행 누적 합계가 있기를 바랍니다. 이전에는 가중치 및 N입니다. 어쩌면 나는 그것을 위시리스트에 추가 할 것입니다.
Re: 후행 누적 합계 공식내가 원하는 것을 올바르게 해석하고 있다면 아래 공식이 실행 중인 120개의 후행 누적 합계를 계산할 것이라고 믿습니다.
If( Row() == 1,
holdMatrix = []
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || Matrix( 0.25 ),
holdMatrix = holdMatrix || Matrix( . )
);
If( N Cols( holdMatrix ) == 121,
holdMatrix[1] = []
);
Sum( holdMatrix ) / 7;