Skip to main content
A is a company-defined axis attached to individual lines. Dimensions support reporting by location, department, customer, and other attributes without adding accounts for every combination. Cost centers can serve as a dimension and as a hierarchy for cost ownership. Dimensions and cost centers live in the accounting module and are defined once per company group, alongside the chart of accounts.

What a dimension is

A dimension has a name and an entity type that determines its values. Dimensions are scoped by company group. A posted journal line can contain at most one value for each dimension. The full set of entity types (dimensionEntityTypes in apps/erp/app/modules/accounting/accounting.models.ts): CostCenter, Custom, Customer, CustomerType, Department, Employee, FixedAssetClass, Item, ItemPostingGroup, Location, Process, Project, ScrapReason, Supplier, SupplierType, WorkCenter. A dimension carries two flags: active (an inactive dimension stops being attached to new postings) and required. Names are unique per company group.

How a value lands on a journal line

Each tag on a journal line is a pair of a dimension and a value id. That value id is deliberately polymorphic — for a Custom dimension it is the id of one of the dimension’s values; for an entity-type dimension it is the entity row’s own id (a location, a customer, a cost center). The reference target depends on the dimension’s entity type and is resolved in application code. A line holds at most one value per dimension. Operational posting resolves dimensions automatically:
  1. It loads every active dimension for the company group into a map keyed by entity type.
  2. As it builds each journal line, it already knows the source facts — the customer, the item, the item posting group, the location, the cost center behind that line.
  3. For each of those facts, if an active dimension exists for that entity type, it attaches a tag pointing the value at that entity’s id No dimension defined for an axis means no tag on that axis — defining the dimension is what turns tagging on.
For example, a Location dimension is not entered on each shipment. After the dimension is defined, shipment, receipt, invoice, and inventory postings attach the location already present on the source document. Other posting functions use the same pattern.

Cost centers

A cost center is a named organizational unit for grouping cost — a plant, a line, a service team. Cost centers form a hierarchy: each one may name a parentCostCenterId, so you can roll child centers up into a parent. Each carries an owner (ownerId, a user) responsible for it. Cost centers play two roles:
  • A standalone tree (scoped by company) you assign to purchase lines and other records to attribute spend to the responsible unit.
  • A dimension axis. Define a dimension with entityType: "CostCenter" and postings begin tagging their journal lines with the cost center the source document carries — exactly like any other entity-type dimension. That’s how cost-center-level P&L reporting works: the cost center is a tag on the line, resolved from the document at posting time.
A journal line has no cost-center column of its own. A cost center reaches the ledger the same way every other axis does — as a dimension tag whose value is the cost center’s id. Manage the tree under Accounting → Cost Centers and the dimensions under Accounting → Dimensions.

Using dimensions in reports

Reports built from journal lines can group or filter by dimension value, such as COGS by location, expense by department, or revenue by customer. This keeps the chart of accounts compact: post to one COGS account and segment it with the Location dimension. Because dimension slicing reads posted journal lines, it’s only meaningful once a period’s postings are final. See period close for how a month’s balances get snapshotted.