저는 회사의 구매 보고서를 제공하기위한 기본적인 스타 스키마를 구현하고 있습니다. 팩트 테이블은 4 차원으로 요약되고 매일, 매주, 매월 및 연간 합계로 집계됩니다.PHP에서의 간단한 데이터웨어 하우징 날짜 간 간격
코드는 현재 일, 주, 월 및 년 보고서를 처리하는 방법을 알고 있습니다. 다음 단계는 임의의 날짜 범위보고를 구현하는 것입니다. 범위를 제공하면 목표는 두 날짜 사이의 총 연수, 월, 주 및 일 수를 파악하고 합계를 계산할 적절한 기록을 가져 오는 것입니다. 문제는 경과 된 시간뿐만 아니라 두 날짜 사이의 각 전체 기간의 수를 결정해야한다는 것입니다.
예를 들어 '2009-06-29'와 '2011-06-29'사이에 2 년이 경과되었지만이 범위는 1 년 (2010 년), 11 개월 (1 월 - May/10 & Jul-Dec/09) 및 58 일 (Jun 1-29/09 & Jun 1-29/11).
이 결과를 통해 이미 70 개의 세부 기간에서 요약 된 레코드를 가져 와서 결합하고 합계를 표시 할 수 있습니다.
날짜 범위를 구성 요소로 분해하는 최선의 방법을 결정하기 위해 테스트 코드를 작성했지만,이 프로세스를 지나치게 의심하고있는 것으로 보아서 다시 스테핑하고 있습니다. 현재 초안은 다음과 같이 작동합니다 :
- "datesToParse"배열에 초기 날짜 범위를 채 웁니다.
- 날짜 사이에 하나 이상의 전체 연도가 존재하는지 확인하십시오.
- 날짜 사이의 각 기간에 대해 해당 기간을 기간에서 제거하고 "기간 전"및 "기간 후"를 두 개의 새로운 기간으로 나눕니다.
- "datesToParse"스택에서 두 개의 새로운 기간을 푸시합니다.
- 반복 가능한 모든 년은 "datesToParse"배열에서 제거 된
- , 월, 주 및 일의 과정을 반복합니다.
이론적으로 이것은 초기 날짜 범위를 전체 연도, 월, 주 및 일의 집합으로 재귀 적으로 줄여야합니다.
더 좋은 방법이 있나요? 이것은 전에 여러 번 해결 된 문제처럼 보입니다.
해당 기간의 모든 집계 된 일일 총계를 선택하고 SQL에서 합계 할 수는 없습니까? – liquorvicar