tompivot.gms : Excel을 사용한 보고서 생성을 보여주는 Tom Rutherford의 작은 슬롯 게임 프로그램

설명

표준 전송 모델을 예시로 사용하세요.

먼저 GAMSLIB를 사용하여 현재 버전의 복사본을 검색합니다.
디렉토리:

카테고리 : 슬롯 게임 데이터 유틸리티 라이브러리


메인 파일 : tompivot.gms 포함: tompivot.gms

$title Excel을 사용한 보고서 생성을 보여주는 Tom Rutherford의 작은 슬롯 게임 프로그램

* 표준 전송 모델을 예시로 사용합니다.

* GAMSLIB를 사용하여 현재 버전의 복사본을 검색하는 것으로 시작합니다.
* 디렉토리:

$callTool win32.msappavail Excel
$if errorlevel 1 $abort.noError "사용 가능한 Excel이 없습니다."

$call 'gamslib -q trnsport'

* 라이브러리 모델을 포함합니다.  이는 모델을 정의하고
* 초기 해결 방법을 제공합니다.

$include trnsport

* 참조 용액을 저장할 매개변수를 생성합니다.
* 우리는 이 솔루션을 참조 지점으로 사용합니다.
* 정책 개입으로 인한 변화를 평가합니다.

매개변수 x0(i,j) 벤치마크 거래 흐름;
x0(i,j) = x.l(i,j);

* 계산할 몇 가지 시나리오를 선언합니다.

scn /0,50,100,150,200,250,300/을 설정합니다.

* 백분율 변화를 계산하는 매크로를 정의하십시오.

$macro pct(x0,xscn) ((100*(xscn/x0-1))$(x0>0))

* 변경사항에 라벨을 지정하려면 다음을 추가하세요.
* 제로 베이스:

* (+inf)$(x0=0 및 xscn>0) + (-inf)$(x0=0 및 xscn<0))

* 모델 결과를 저장할 매개변수를 선언합니다.
* 더 복잡한 모델에서는 이러한 항목이 많이 있을 수 있습니다.
* 매개변수.

매개변수 보고서(*,*,i,j) 요약 보고서;

* "보고 서브루틴"을 생성합니다.
* $echov 구문을 사용하면 %1을(를) 쓸 수 있습니다.
* 확장하지 않은 파일입니다.

* 스크래치 디렉토리에 서브루틴을 저장합니다.
* ".scr" 접미사가 붙어서 삭제됩니다.
* 슬롯 게임 작업을 종료합니다.

$onEchoV >%슬롯 게임scrdir%report.%슬롯 게임scrext%
보고서(%1,"lvl",i,j) = x.l(i,j);
보고서(%1,"%",i,j) = pct(x0(i,j),x.l(i,j));
$offEcho

* 계산 및 보고를 통해 시나리오를 반복합니다.

* 더 복잡한 모델이 더 잘 처리될 수 있습니다.
* 개별 .gdx 파일에 저장된 출력으로 하나씩.
옵션 solPrint=off;
옵션 제한=0;
옵션 limcol=0;

루프(scn,

* 시나리오 정책 할당 - 상한
* 시애틀에서 시카고로 가는 흐름:

        X.UP("시애틀","시카고") = scn.val;

        z 를 최소화하는 lp를 사용하여 전송을 해결합니다.

* 보고서 코드를 서브루틴으로 사용하십시오.

$batInclude "%슬롯 게임scrdir%report.%슬롯 게임scrext%" scn

);

* 언로드 시나리오 결과로 GDX 파일이 생성됩니다.

Execute_unload 'pivotdata.gdx',report;

* xlsx 출력 디렉터리가 이미 존재하는 경우
* 보고서 데이터를 해당 디렉터리의 모든 XLSX 파일로 피벗합니다.

$ifThen 존재 '.\xlsx\nul'
  'for %F in (.\xlsx\*.xlsx) do (gdxxrw i=pivotdata.gdx o=.\xlsx\%~nF.xlsx par=report rng=PivotData!a2 cdim=0 Trace=0)'을 실행합니다.

$else

* xlsx 출력 디렉터리가 없으면 디렉터리를 만들고 덤프합니다.
* 새 보고서 파일에 데이터를 보고합니다.

  'mkdir .\xlsx'를 실행합니다.
  'gdxxrw i=pivotdata.gdx o=.\xlsx\report.xlsx par=report rng=PivotData!a2 cdim=0 Trace=0'을 실행합니다.
$endIf

$onText
여기서는 표준 형식인 XLSX Excel 파일 형식을 사용합니다.
Excel 2007. 이 형식을 사용하면 얻을 수 있는 중요한 이점은 다음과 같습니다.
개별 행 수의 상한이 훨씬 더 큽니다.
워크시트(~150만).  이는 피벗 보고서 테이블에 많은 도움이 됩니다.
많은 키 또는 많은 시나리오가 있습니다.

"for %F in (xlsx\*.xlsx) do ()" DOS 문의 유용성은 다음과 같습니다.
즉시 밝혀지지는 않습니다.  이 문은 동일한 GDXXRW를 적용합니다.
xlsx 디렉토리의 모든 워크시트로의 데이터 전송은 매우
피벗 보고서로 작업하고 보고서를 생성한 경우 도움이 됩니다.
더 많은 보고서 테이블이나 차트.  이 구문을 사용하면 업데이트할 수 있습니다.
모델과 관련된 모든 보고서 파일이 자동으로 생성됩니다.

이 접근 방식의 중요한 장점은 다음과 같습니다.
모델에 결함이 있어 모든 사례를 다시 실행해야 한다는 것을 알게 되었습니다.
그러면 이전 편집 내용을 잃을 필요가 없습니다.  당신은 함께 일할 수 있습니다
Excel로 보고서를 원하는 만큼 피봇하고 원하는 만큼 저장하세요.
보고서 디렉터리에 파일을 저장하고 매번 다시 로드하도록 함
모델을 다시 실행합니다.

추신. 고급 Excel 사용자는 피벗 테이블을 설정할 수 있다는 것을 알고 있을 것입니다.
피벗 테이블 캐시를 자동으로 다시 로드하도록 요청하는 스위치
통합 문서가 열릴 때마다.  아아, 엑셀에서 이 옵션을 설정하면,
통합 문서로 데이터를 이동하려고 하면 GDXXRW가 충돌합니다.  누가 알겠는가,
아마도 이 문제는 GDXXRW의 향후 버전에서 수정될 수 있을까요?

조달청.  GDXXRW가 전송되는 방식과 관련하여 큰 성가심이 있습니다.
정수 레이블.  피벗 테이블에서 행을 정렬하려면
수치적으로는 A열의 레이블을 변환해야 합니다.
PivotData 워크시트를 숫자 형식으로 변환합니다.  열 제목을 클릭하세요.
(A) 노란색 상자가 보이는 동안 Shift 키를 누른 상태에서
열쇠.  그런 다음 "숫자로 변환"을 클릭하십시오.  이것은 정말 고통입니다. 아마도
누군가 이 작업을 자동으로 수행하는 방법을 알려줄 수 있나요?
$offText