The shop manager wants to know which items actually make money. The board treasurer wants cost of goods sold for the month. Both open the standard merchandise sales report in Altru and find revenue by item, but not a clean “units sold” total next to a “cost of sales” figure. Then someone asks whether there’s a setting to switch those columns on.
Short version: you generally can’t edit the columns on a canned Altru report. What you can do is rebuild the view you need from a query, and that’s usually the better long-term answer anyway. Here’s how to approach it.
Why the standard report won’t stretch
Altru’s built-in reports are fixed layouts. You can filter them by date range, department, or similar parameters, but you can’t add a field the report designer didn’t include. If your version of the merchandise sales report doesn’t show unit cost or a total quantity column, no amount of parameter tweaking will produce one.
Before you build anything, run the report for a short date range and export it. Check whether quantity is already there at the line level and just isn’t totaled. If it is, a simple sum in Excel may be all you need for quantity. Cost is the harder piece, and that’s where a query comes in.
Confirm you’re storing cost at all
A cost-of-sales number is only as good as the cost data behind it. Open a handful of merchandise items and look at what’s recorded for each one: price, cost, vendor, inventory counts. Things to check:
- Is a cost value filled in for every active item? Items added in a hurry before a big exhibit opening are the usual gaps.
- Does cost change over time? If a vendor raises prices mid-year and you overwrite the item’s cost, a query will apply today’s cost to last spring’s sales. Decide whether that’s acceptable for your purposes or whether your finance team needs cost at the time of sale.
- Who owns cost in your organization? Sometimes the real cost lives in the accounting system or a buyer’s spreadsheet, and Altru only has a rough number. If that’s the case, say so in the report title so nobody treats it as audited COGS.
If you’re unsure which cost fields are available to queries in your Altru environment, look through the merchandise-related query sources in the query designer, or ask Blackbaud support which source exposes item cost alongside sales lines.
Build the replacement as a query
The goal is one row per item for a date range, showing units sold, revenue, and cost. The build usually goes like this:
- Start from sales transactions, not from the item list. You want every line where a merchandise item was sold, so begin with a source that represents sales or order lines and filter to merchandise.
- Add the item details. Item name, SKU or item number, department, and the cost value you confirmed above.
- Add quantity and line amount. Make sure you’re pulling the quantity on the sale line, not the current inventory on hand. Those are easy to mix up in a field list.
- Filter by transaction date. Use a date range filter you can prompt for at run time, so the same query works for any month.
- Account for refunds and returns. Check how returned merchandise appears in your data. If returns show up as separate negative lines, totals will net out correctly. If they don’t, your “quantity sold” will be overstated.
- Total it up. Depending on your query options, either summarize in the query itself or export the detail and use a pivot table: sum of quantity by item, sum of revenue by item, and quantity times unit cost for cost of sales.
Once the numbers look right, add one derived column outside Altru: gross margin, which is revenue minus cost of sales. That’s the figure the shop manager was really asking for.
Check it against the canned report
Run your new query and the standard merchandise sales report for the same week. Revenue by item should match. If it doesn’t, the usual suspects are:
- Discounts applied at the order level instead of the item level
- Sales tax included in one total and excluded in the other
- Voided or refunded transactions handled differently
- Member discounts recorded as a separate line
Write down whatever explains the difference. Finance will ask, and it’s easier to answer once than every month.
Keep it from becoming a monthly export chore
The weak point in this setup is the hand-off. Someone has to run the query, export it, paste it into the margin workbook, and send it around. When that person is out, the report doesn’t happen.
If the workbook already lives in Google Sheets, Data Bridge from Social Good can sync the Altru query to the sheet, so the pivot and margin formulas update without a manual export. Altru stays where the sales are recorded; the sheet just reads from it.
Quick answers
Can I edit the standard merchandise sales report to add columns?
Not in the usual sense. Canned reports have a fixed layout. A query, or a custom report built by someone with report-authoring access, is the way to get different fields.
Will a query give me true cost of goods sold?
Only if the cost stored in Altru is accurate and reflects what you paid at the time. Treat it as an operational margin view unless your finance team has signed off on the cost data.



