CR is limited to one dimensional arrays, so it requires a good deal of coding for complex operations, and the version of crystal is critical as older versions were limited.
That is to say that you should post your software version, of course.
To avoid subreports that hinder performance, try to write SQL that returns the data required for the report.
Subreports are NOT always a disadvantage, at times they can be faster and the only intelligent solution. A good example is a dashboard report with unrelated select statements, such as an HR subreport which supplies personnel counts, then an Accounting subreport which returns financial information, so different selects are used, and possibly different databases.
As for advanced array use, you can store values and then use them later, and here's a basic example:
I would address your array concerns were you to give an example of them, however there are 1000's of articles on array theory on the web in various languages, so if you're simply seeking theory, do a search and read up on them.
I have used pseudo 2 and 3 dimensional arrays in Crystal, if you have a real world example of something you need to do, or you would like to improve performance, post your environment and examples of the data and expected output.
What you're asking for is a vast topic which has been covered many times throughout the web.
-k