Cube Voyager: Using Cluster with DBI
October 3rd, 2010Credit for this goes to Citilabs Support, although I made some adaptations.
In Matrix when using DBI, PAR ZONES=1 will effectively shut off Cluster. Therefore, the following works really well.
DISTRIBUTEINTRASTEP ProcessID=Cluster ProcessList={CORES}
PAR ZONES={CORES}
recs = ROUND(DBI.1.NUMRECORDS/{CORES})
start = (I-1)*recs+1
IF (I={CORES})
end = DBI.1.NUMRECORDS
ELSE
end = I*recs
ENDIF
LOOP _r=start,end
x=DBIReadRecord(1,_r)
ENDLOOP
This script sets each core to process an equal portion of the database with any remainder (e.g if you cluster 4 records over 3 cores) to the last core.