---
id: object/codeunit/9200
type: object
title: Codeunit 9200 "Matrix Management"
summary: Codeunit 9200 "Matrix Management" in Base Application (Microsoft.Finance.Analysis). 13 public procedures, 13 events. Present since at least BC23, still in BC30, changed in BC24-26, BC28.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "28"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: c91ef38ccb0750823177887e3fab45832d09b7483278c01593db0687e74b61a3
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Analysis/MatrixManagement.Codeunit.al
    title: src/Layers/W1/BaseApp/Finance/Analysis/MatrixManagement.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/9275
object_type: codeunit
object_id: 9200
name: Matrix Management
namespace: Microsoft.Finance.Analysis
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "26"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 31
  events: 13
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 1
  called_by: 81
  implements: 0
---

# Codeunit 9200 "Matrix Management"

> Codeunit 9200 "Matrix Management" in Base Application (Microsoft.Finance.Analysis). 13 public procedures, 13 events. Present since at least BC23, still in BC30, changed in BC24-26, BC28.

Base Application · Microsoft.Finance.Analysis · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Analysis/MatrixManagement.Codeunit.al) · facts from BC29

## Events published

- `OnAfterGetCaption(var RecRef: RecordRef; CaptionFieldNo: Integer; var Caption: Text)` (integration): Integration event raised after retrieving caption text for record display. Enables customization of caption formatting for matrix columns and rows.
- `OnBeforeGeneratePeriodAndCaption(PeriodType: Enum "Analysis Period Type"; Calendar: Record Date; var IsHandled: Boolean; UseNameForCaption: Boolean; var CurrSetLength: Integer; var CaptionSet: array[32] of Text[80]; var PeriodRecords: array[32] of Record Date temporary)` (integration): Integration event raised before generating period-based matrix columns and captions. Enables custom period generation logic and caption formatting for time-based analysis.
- `OnSetDimColumnSetOnAfterDimValSetFilters(DimensionCode: Code[20]; DimFilter: Text; var DimensionValue: Record "Dimension Value")` (integration): Integration event raised after applying dimension value filters in column set generation. Enables additional filtering logic for dimension-based matrix columns.
- `OnFormatRoundingFactorOnElse(var AmountDecimal: Text; RoundingFactor: Enum "Analysis Rounding Factor")` (integration): Integration event for custom rounding factor formatting when standard cases don't apply. Enables extending rounding factor formatting with custom logic.
- `OnFormatRoundingFactorNegativeFormatOnElse(AmountDecimal: Text; NegativeAmountFormat: Enum "Analysis Negative Format"; var Result: Text)` (integration): Integration event raised when handling negative format options for rounding factor formatting. Allows custom formatting logic for negative amounts that don't match standard formats.
- `OnRoundAmountOnElse(var Amount: Decimal; RoundingFactor: Enum "Analysis Rounding Factor")` (integration): Integration event raised when rounding amounts with custom rounding factors. Allows custom rounding logic for rounding factors not handled by standard processing.
- `OnRoundAmountOnAfterRound(var Amount: Decimal; RoundingFactor: Enum "Analysis Rounding Factor")` (integration): Integration event raised after an amount has been rounded according to the rounding factor. Allows subscribers to further adjust the rounded amount, for example to round to whole numbers.
- `OnFormatRoundingFactorOnAfterSetAmountDecimal(var AmountDecimal: Text; RoundingFactor: Enum "Analysis Rounding Factor")` (integration): Integration event raised after the decimal format text has been set for the rounding factor and before the negative amount format is applied. Allows subscribers to change the decimal formatting based on the rounding factor.
- `OnGenerateMatrixDataExtendedOnBeforeValidatePreviousStep(Steps: Integer; MaximumSetLength: Integer; var IsHandled: Boolean)` (integration): Integration event raised before validating previous step in matrix data generation. Allows custom validation logic for matrix navigation and step processing.
- `OnGeneratePeriodMatrixDataOnBeforeAdjustPeriodWithDateFilter(DateFilter: Text; var TempPeriodRecords: array[32] of Record Date temporary; var CurrSetLength: Integer; var IsHandled: Boolean)` (integration): Integration event raised before adjusting period records with date filter in matrix data generation. Allows custom period adjustment logic for date-filtered matrix generation.
- `OnGeneratePeriodMatrixDataOnBeforeFindDateBasedOnStepType(SetWanted: Option; var CalendarDate: Record Date; PeriodType: Enum "Analysis Period Type")` (integration): Integration event raised before finding date based on step type in period matrix data generation. Allows custom date finding logic for different step types in period-based matrices.
- `OnMatrixPageStepTypeInGenerateMatrixDataExtended(SetWanted: Option; MaximumSetLength: Integer; var RecRef: RecordRef)` (integration): Integration event raised when handling matrix page step type in extended matrix data generation. Allows custom step processing logic for matrix navigation in extended scenarios.
- `OnDimToCaptionsOnAfterDimensionValueSetFiltersOnBeforeFindSet(var DimensionValue: Record "Dimension Value")` (integration): Integration event raised after setting filters on dimension value record in dimension to captions procedure. Allows additional filtering or processing after standard filter application.

## Procedures

- `SetPeriodColumnSet(DateFilter: Text; PeriodType: Enum "Analysis Period Type"; Direction: Option Backward,Forward; var FirstColumn: Date; var LastColumn: Date; NoOfColumns: Integer)`: Sets up period-based column set for matrix reports with date filters and navigation.
- `SetDimColumnSet(DimensionCode: Code[20]; DimFilter: Text; SetWanted: Option; var RecordPosition: Text; var FirstColumn: Text; var LastColumn: Text; NoOfColumns: Integer)`: Sets up dimension-based column set for matrix reports with dimension value navigation.
- `DimToCaptions(var CaptionSet: array[32] of Text[80]; var MatrixRecords: array[32] of Record "Dimension Code Buffer"; DimensionCode: Code[20]; FirstColumn: Text; LastColumn: Text; var NumberOfColumns: Integer; ShowColumnName: Boolean; var CaptionRange: Text; DimensionValueFilter: Text)`: Generates matrix data for dimension captions and records within a specified range.
- `GenerateMatrixData(var RecRef: RecordRef; SetWanted: Option; MaximumSetLength: Integer; CaptionFieldNo: Integer; var RecordPosition: Text; var CaptionSet: array[32] of Text[80]; var CaptionRange: Text; var CurrSetLength: Integer)`: Generates matrix data with standard caption length limit for record navigation.
- `GenerateMatrixDataExtended(var RecRef: RecordRef; SetWanted: Option; MaximumSetLength: Integer; CaptionFieldNo: Integer; var RecordPosition: Text; var CaptionSet: array[32] of Text; var CaptionRange: Text; var CurrSetLength: Integer; MaxCaptionLength: Integer)`: Generates matrix data with extended caption length support for record navigation.
- `GeneratePeriodMatrixData(SetWanted: Option; MaximumSetLength: Integer; UseNameForCaption: Boolean; PeriodType: Enum "Analysis Period Type"; DateFilter: Text; var RecordPosition: Text; var CaptionSet: array[32] of Text[80]; var CaptionRange: Text; var CurrSetLength: Integer; var PeriodRecords: array[32] of Record Date temporary)`: Generates period-based matrix data for analysis views and reports with time-based columns. Creates column captions, date ranges, and period records for matrix displays.
- `SetIndentation(var TextString: Text[1024]; Indentation: Integer)`: Adds indentation spaces to a text string for hierarchical display formatting. Used to create visual hierarchy in matrix displays and analysis reports.
- `GetPKRange(var RecRef: RecordRef; KeyFieldNo: Integer; RecordPosition: Text; CurrSetLength: Integer): Text[100]`: Gets the primary key range for matrix column generation based on record position and set length. Calculates the key range for matrix navigation and column boundary determination.
- `GenerateDimColumnCaption(DimensionCode: Code[20]; DimFilter: Text; SetWanted: Option; var RecordPosition: Text; FirstColumn: Text; LastColumn: Text; var CaptionSet: array[32] of Text[80]; var DimensionCodeBuffer: array[32] of Record "Dimension Code Buffer"; var NumberOfColumns: Integer; ShowColumnName: Boolean; var CaptionRange: Text)`: Generates dimension column captions for matrix display based on dimension values and filters. Creates header text and populates dimension code buffers for matrix column generation.
- `RoundAmount(Amount: Decimal; RoundingFactor: Enum "Analysis Rounding Factor"): Decimal`: Rounds amounts according to the specified analysis rounding factor for display purposes. Provides consistent amount rounding for analysis reports and matrix displays.
- `FormatAmount(Value: Decimal; RoundingFactor: Enum "Analysis Rounding Factor"; AddCurrency: Boolean): Text[30]`: Formats decimal amount values with specified rounding and currency formatting. Applies rounding factor and formats the result for display in matrix cells.
- `FormatRoundingFactor(RoundingFactor: Enum "Analysis Rounding Factor"; AddCurrency: Boolean): Text`: Generates formatting string for rounding factor display with currency support. Returns format pattern for decimal formatting with appropriate currency symbols.
- `FormatRoundingFactor(RoundingFactor: Enum "Analysis Rounding Factor"; AddCurrency: Boolean; NegativeAmountFormat: Enum "Analysis Negative Format"): Text`: Generates formatting string for rounding factor display with currency and negative format support. Returns format pattern for decimal formatting with specified rounding, currency, and negative formatting.

Plus 5 local procedures.

## Triggers

OnRun

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 362 "PeriodPageManagement"](../codeunit/362.md) (6 calls: `FindDate → FindDate`, `GeneratePeriodAndCaption → CreatePeriodFormat`, `GeneratePeriodMatrixData → GetFullPeriodDateFilter`, …)

## Called by

- [Page 7157 "Purch. Analysis by Dimensions"](../page/7157.md) (7 calls: `GenerateColumnCaptions → GeneratePeriodMatrixData`, `SetPointsDim → GenerateMatrixData`, `SetPointsDim → GetPKRange`, …)
- [Page 7158 "Sales Analysis by Dimensions"](../page/7158.md) (7 calls: `GenerateColumnCaptions → GeneratePeriodMatrixData`, `SetPointsDim → GenerateMatrixData`, `SetPointsDim → GetPKRange`, …)
- [Page 9203 "Budget Matrix"](../page/9203.md) (4 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`, `OnAfterGetRecord → RoundAmount`, …)
- [Page 9219 "Purch. Budget Overview Matrix"](../page/9219.md) (4 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`, `OnAfterGetRecord → RoundAmount`, …)
- [Page 9233 "G/L Balance by Dim. Matrix"](../page/9233.md) (4 calls: `Load → FormatRoundingFactor`, `LoadDefault → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`, …)
- [Page 9239 "Sales Budget Overview Matrix"](../page/9239.md) (4 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`, `OnAfterGetRecord → RoundAmount`, …)
- [Page 113 "Budget"](../page/113.md) (3 calls: `GenerateColumnCaptions → GenerateDimColumnCaption`, `GenerateColumnCaptions → GenerateMatrixData`, `GenerateColumnCaptions → GeneratePeriodMatrixData`)
- [Page 7138 "Purchase Budget Overview"](../page/7138.md) (3 calls: `GenerateColumnCaptions → GenerateDimColumnCaption`, `GenerateColumnCaptions → GenerateMatrixData`, `GenerateColumnCaptions → GeneratePeriodMatrixData`)
- [Page 7139 "Sales Budget Overview"](../page/7139.md) (3 calls: `GenerateColumnCaptions → GenerateDimColumnCaption`, `GenerateColumnCaptions → GenerateMatrixData`, `GenerateColumnCaptions → GeneratePeriodMatrixData`)
- [Page 7159 "Invt. Analysis by Dimensions"](../page/7159.md) (3 calls: `GenerateColumnCaptions → GenerateDimColumnCaption`, `GenerateColumnCaptions → GenerateMatrixData`, `GenerateColumnCaptions → GeneratePeriodMatrixData`)
- [Page 866 "Cash Flow Availability Lines"](../page/866.md) (3 calls: `CalcLine → RoundAmount`, `GetAmount → RoundAmount`, `SetLines → FormatRoundingFactor`)
- [Page 9249 "Analysis by Dimensions Matrix"](../page/9249.md) (3 calls: `Load → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`, `OnAfterGetRecord → RoundAmount`)
- [Codeunit 5488 "Graph Mgt - Reports"](../codeunit/5488.md) (2 calls: `FormatStr → FormatRoundingFactor`, `SetUpAccountScheduleBaseAPIData → RoundAmount`)
- [Page 1110 "Cost Type Balance"](../page/1110.md) (2 calls: `GenerateColumnCaptions → GeneratePeriodMatrixData`, `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 1117 "Cost Budget per Period"](../page/1117.md) (2 calls: `GenerateColumnCaptions → GeneratePeriodMatrixData`, `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 1130 "Cost Type Balance Matrix"](../page/1130.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Page 1131 "Cost Budget per Period Matrix"](../page/1131.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Page 1132 "Cost Bdgt. per Center Matrix"](../page/1132.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Page 1133 "Cost Bdgt. per Object Matrix"](../page/1133.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Page 490 "Acc. Schedule Overview"](../page/490.md) (2 calls: `FormatStr → FormatRoundingFactor`, `LoadColumns → RoundAmount`)
- [Page 5827 "Item Statistics"](../page/5827.md) (2 calls: `GenerateColumnCaptions → GenerateMatrixData`, `GenerateColumnCaptions → GeneratePeriodMatrixData`)
- [Page 9201 "Inventory Analysis Matrix"](../page/9201.md) (2 calls: `FormatStr → FormatRoundingFactor`, `OnAfterGetRecord → RoundAmount`)
- [Page 9205 "Purchase Analysis Matrix"](../page/9205.md) (2 calls: `FormatStr → FormatRoundingFactor`, `OnAfterGetRecord → RoundAmount`)
- [Page 9207 "Sales Analysis Matrix"](../page/9207.md) (2 calls: `FormatStr → FormatRoundingFactor`, `OnAfterGetRecord → RoundAmount`)
- [Page 9223 "Item Statistics Matrix"](../page/9223.md) (2 calls: `Calculate → RoundAmount`, `LoadMatrix → FormatRoundingFactor`)
- [Page 9225 "Purch. Analysis by Dim Matrix"](../page/9225.md) (2 calls: `CalcAmt → RoundAmount`, `LoadMartix → FormatRoundingFactor`)
- [Page 9227 "Sales Analysis by Dim Matrix"](../page/9227.md) (2 calls: `CalcAmt → RoundAmount`, `LoadMatrix → FormatRoundingFactor`)
- [Page 9257 "Opportunities Matrix"](../page/9257.md) (2 calls: `FormatAmount → RoundAmount`, `LoadMatrix → FormatRoundingFactor`)
- [Page 9275 "T. Value Insured per FA Matrix"](../page/9275.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Page 9277 "FA Posting Types Overv. Matrix"](../page/9277.md) (2 calls: `LoadMatrix → FormatRoundingFactor`, `MATRIX_OnAfterGetRecord → RoundAmount`)
- [Codeunit 6493 "Serv. CashFlow Subscribers"](../codeunit/6493.md) (1 call: `OnAfterCalcLine → RoundAmount`)
- [Codeunit 7130 "Item Budget Management"](../codeunit/7130.md) (1 call: `FormatToAmount → RoundAmount`)
- [Codeunit 7153 "Item Analysis Management"](../codeunit/7153.md) (1 call: `FormatToAmount → RoundAmount`)
- [Codeunit 8 "AccSchedManagement"](../codeunit/8.md) (1 call: `FormatCellAsText → FormatAmount`)
- [Page 1118 "Cost Budget by Cost Center"](../page/1118.md) (1 call: `GenerateColumnCaptions → GenerateMatrixData`)
- [Page 1119 "Cost Budget by Cost Object"](../page/1119.md) (1 call: `GenerateColumnCaptions → GenerateMatrixData`)
- [Page 1506 "Workflow Event Hierarchies"](../page/1506.md) (1 call: `SetColumns → GenerateMatrixData`)
- [Page 1507 "WF Event/Response Combinations"](../page/1507.md) (1 call: `SetColumns → GenerateMatrixDataExtended`)
- [Page 213 "Resource Capacity"](../page/213.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 214 "Res. Group Capacity"](../page/214.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 221 "Resource Allocated per Job"](../page/221.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 228 "Res. Gr. Allocated per Job"](../page/228.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 2901 "Demand Forecast Card"](../page/2901.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 491 "Items by Location"](../page/491.md) (1 call: `SetMatrixColumns → GenerateMatrixData`)
- [Page 5099 "Tasks"](../page/5099.md) (1 call: `CreateCaptionSet → GeneratePeriodMatrixData`)
- [Page 5131 "Opportunities"](../page/5131.md) (1 call: `CreateCaptionSet → GeneratePeriodMatrixData`)
- [Page 5225 "Absence Overview by Periods"](../page/5225.md) (1 call: `SetMatrixColumns → GeneratePeriodMatrixData`)
- [Page 5226 "Empl. Absences by Categories"](../page/5226.md) (1 call: `GenerateColumnCaptions → GenerateMatrixData`)
- [Page 5228 "Misc. Articles Overview"](../page/5228.md) (1 call: `GenerateColumnCaptions → GenerateMatrixData`)
- [Page 5229 "Confidential Info. Overview"](../page/5229.md) (1 call: `GenerateColumnCaptions → GenerateMatrixData`)
- and 31 more: data/code/graph/29/calls.json

## Recent changes

- 2026-07-10 [#9275 [ALAppExtensions #30250] Matrix Management: reorder OnFormatRoundingFactor Signature](../../changes/bcapps/9275.md) (main, BC30, breaking)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-26, BC28

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "codeunit", object_name: "Matrix Management")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
