Hi - thanks for the explanation - it is all crystal clear and no you are not being dense.
"Profit" is calculated for each "project" rather than each "account". Your current crosstab query design is attempting to calculate "profit" in the wrong dimension (for want of a better word). If you had projects in the rows and months in the columns then you could calculate the profit per project per my previous suggestion (although it wouldn't show the detail). With your current report (and data) setup the projects are one dimension, months are a second dimension and accounts is a third dimension - so calculating "gross profit" won't work with your current setup given that Access struggles with a third dimension.
However, you can get around this problem by adding the "profit" value into the main table so that it is available for the report. This has it's own issues but it can be done by creating an "append" query that calculates the "profit" for each "project" for each "month" and adds a new record into your data table (same project, same month, account = "gross_profit" and value is calculated). This new line item will then appear in your crosstab report.
A quick explanation of how to do this :
Create a new query, add the main data table, add the fields project & account & month & value, view totals, enter "total_revenue :" before the value variable (without the quotes, this changes the name of the variable for later use), change group by for value to sum, enter "revenue" (with the quotes) into the criteria section under account. Save.
Create a 2nd new query, add the main data table, add the fields project & account & month & value, view totals, change group by for value to sum, enter "total_expenses :" before the value variable (this also changes the variable name), change group by for account to where, enter <>"revenue" (with the quotes) into the criteria section under account, and untick the "show" box for account. Save.
NB : be sure to use your actual revenue name where I have used the variable "revenue". If there are multiple names used for the revenue accounts (e.g. sales, income, revenue etc.), then add the account hierarchy table and use the generic name for revenue per your account hierarchy (ask if you are not sure).
Create a 3rd query, add the first and second queries, create links between the project and month fields, Click Query -> Append Query -> Select the main data table -> OK, add the project from the first query (append to project), add the month from the first query (append to month), enter "gross_profit" (with the quotes) into third column (append to account), enter "[total_revenue] - [total_expenses]" into the 4th column (without the quotes, append to value), Save and Run.
This last query will put the gross profit values by project by month into the main table. These values should now show on your report.
Please note the following :
I have assumed (probably incorrectly) that where there is income that there are also expenses (and vice versa) and that you don't get instances where there is revenue without expenses (and vice versa).
I have also assumed (incorrectly) that there will be no more data, that you are populating this table only once and that you won't be changing any of the values.
I have assumed that where the profit is zero that you actually want that value to show.
Whilst I have made some pretty bad assumptions, this should get you started and we can address issues of revenue without expenses (and vice versa) later, as well as the impact of adding more data or changing any of the existing values.
HTH, Andrew.