One example using the AutoNumberHash128() function to generate a unique ID for each combination of properties, associating matching IDs in a separate table and thus enabling the dynamic calculation of matches based on current selections:
tabObjects:
LOAD *,
AutoNumberHash128(COLOUR,SHAPE,SIZE) as PropertyID;
LOAD RecNo() as ID,
Pick(Ceil(Rand()*4),'RED','BLUE','YELLOW','GREEN') as COLOUR,
Pick(Ceil(Rand()*3),'SQUARE','TRIANGLE','CIRCLE') as SHAPE,
Pick(Ceil(Rand()*3),'SMALL','MEDIUM','LARGE') as SIZE
AutoGenerate 30;
tabMatches:
LOAD PropertyID,
ID as MatchID
Resident tabObjects;