---
id: object/codeunit/7110
type: object
title: Codeunit 7110 "Analysis Report Management"
summary: Codeunit 7110 "Analysis Report Management" in Base Application (Microsoft.Inventory.Analysis). 27 public procedures, 22 events. Present since at least BC23, still in BC30, changed in BC24-25, BC27.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "27"
  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: d951b38887828b75a24994d41f8a001d4aadcc5efb9935cd33ab0edd695a3782
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Inventory/Analysis/AnalysisReportManagement.Codeunit.al
    title: src/Layers/W1/BaseApp/Inventory/Analysis/AnalysisReportManagement.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 7110
name: Analysis Report Management
namespace: Microsoft.Inventory.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"
  - "27"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 93
  events: 22
  subscribers: 0
relations:
  out: 1
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 4
  called_by: 15
  implements: 0
---

# Codeunit 7110 "Analysis Report Management"

> Codeunit 7110 "Analysis Report Management" in Base Application (Microsoft.Inventory.Analysis). 27 public procedures, 22 events. Present since at least BC23, still in BC30, changed in BC24-25, BC27.

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

## Properties

| Property | Value |
|---|---|
| TableNo | Analysis Line |

## Events published

- `OnAfterCalcItemStatistics(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var AnalysisLine: Record "Analysis Line"; var AnalysisColumn: Record "Analysis Column"; DrillDown: Boolean; var ColValue: Decimal)` (integration)
- `OnAfterCalcIndirectCost(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; Item: Record Item; var Result: Decimal)` (integration)
- `OnAfterFilterItemAnalyViewEntry(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var ItemAnalysisViewEntry: Record "Item Analysis View Entry")` (integration)
- `OnAfterFilterItemAnalyViewBudgEntry(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var ItemAnalysisViewBudgEntry: Record "Item Analysis View Budg. Entry")` (integration)
- `OnAfterFilterItemBudgetEntry(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var ItemBudgetEntry: Record "Item Budget Entry")` (integration)
- `OnAfterFilterItemLedgEntry(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var ItemLedgEntry: Record "Item Ledger Entry")` (integration)
- `OnAfterFilterValueEntry(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var ValueEntry: Record "Value Entry")` (integration)
- `OnAfterSetItemColumnFilters(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; var AnalysisColumn: Record "Analysis Column")` (integration)
- `OnAfterSetItemRowFilters(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var AnalysisLine: Record "Analysis Line")` (integration)
- `OnBeforeValidateFilter(var FilterText: Text; RecNo: Integer; FieldNumber: Integer)` (integration)
- `OnCalcItemStatisticsOnAfterSetFilters(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var AnalysisLine: Record "Analysis Line")` (integration)
- `OnCalcUnitPriceOnBeforeReturnUnitPrice(var TempPriceListLine: Record "Price List Line"; Item: Record Item)` (integration)
- `OnBeforeOpenAnalysisLinesForm(var AnalysisLine2: Record "Analysis Line"; CurrentAnalysisLineTempl: Code[10]; var IsHandled: Boolean)` (integration)
- `OnBeforeOpenAnalysisColumnsForm(var AnalysisLine: Record "Analysis Line"; CurrentColumnTempl: Code[10]; var IsHandled: Boolean)` (integration)
- `OnAfterOpenColumns(var CurrentColumnTempl: Code[10]; var AnalysisLine: Record "Analysis Line"; var AnalysisColumn: Record "Analysis Column")` (integration)
- `OnCopyColumnsToTempOnBeforeAnalysisColumnFindset(var AnalysisColumn: Record "Analysis Column"; ColumnName: Code[10])` (integration)
- `OnDoLookupSourceNoOnElseCurrentSourceTypeFilter(CurrentSourceTypeFilter: Enum "Analysis Source Type"; var CurrentSourceTypeNoFilter: Text)` (integration)
- `OnBeforeCalcSalesAmount(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; Invoiced: Boolean; var IsHandled: Boolean; var Result: Decimal)` (integration)
- `OnBeforeCalcQuantity(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; Invoiced: Boolean; var IsHandled: Boolean; var Result: Decimal)` (integration)
- `OnBeforeCalcBudgetQuantity(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; var IsHandled: Boolean; var Result: Decimal)` (integration)
- `OnBeforeDrillDownQuantity(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; Invoiced: Boolean; var IsHandled: Boolean)` (integration)
- `OnBeforeDrillDownBudgetQuantity(var ItemStatisticsBuffer: Record "Item Statistics Buffer"; var IsHandled: Boolean)` (integration)

## Procedures

- `LookupAnalysisReportName(CurrentAnalysisArea: Enum "Analysis Area Type"; var CurrentReportName: Code[10]): Boolean`
- `CheckReportName(CurrentReportName: Code[10]; var AnalysisLine: Record "Analysis Line")`
- `OpenAnalysisLines(var CurrentLineTemplate: Code[10]; var AnalysisLine: Record "Analysis Line")`
- `CheckAnalysisLineTemplName(CurrentAnalysisLineTempl: Code[10]; var AnalysisLine: Record "Analysis Line")`
- `SetAnalysisLineTemplName(CurrentAnalysisLineTempl: Code[10]; var AnalysisLine: Record "Analysis Line")`
- `LookupAnalysisLineTemplName(var CurrentAnalysisLineTempl: Code[10]; var AnalysisLine: Record "Analysis Line"): Boolean`
- `OpenAnalysisLinesForm(var AnalysisLine2: Record "Analysis Line"; CurrentAnalysisLineTempl: Code[10])`
- `OpenAnalysisColumnsForm(var AnalysisLine: Record "Analysis Line"; CurrentColumnTempl: Code[10])`
- `OpenColumns(var CurrentColumnTempl: Code[10]; var AnalysisLine: Record "Analysis Line"; var AnalysisColumn: Record "Analysis Column")`
- `OpenColumns(var CurrentColumnTempl: Code[10]; var AnalysisColumn: Record "Analysis Column")`
- `GetColumnTemplate(CurrentAnalysisArea: Option Sale,Purchase,Inventory; CurrentColumnTemplate: Code[10])`
- `SetColumnName(CurrentAnalysisArea: Option Sale,Purchase,Inventory; CurrentColumnName: Code[10]; var AnalysisColumn: Record "Analysis Column")`
- `CopyColumnsToTemp(var AnalysisLine: Record "Analysis Line"; ColumnName: Code[10]; var TempAnalysisColumn: Record "Analysis Column")`
- `LookupAnalysisColumnName(CurrentAnalysisArea: Enum "Analysis Area Type"; var CurrentColumnName: Code[10]): Boolean`
- `SetSourceType(var AnalysisLine: Record "Analysis Line"; CurrentSourceTypeFilter: Option " ",Customer,Vendor,Item)`
- `SetSourceNo(var AnalysisLine: Record "Analysis Line"; CurrentSourceTypeNoFilter: Text)`
- `DoLookupSourceNo(var AnalysisLine: Record "Analysis Line"; CurrentSourceTypeFilter: Enum "Analysis Source Type"; var CurrentSourceTypeNoFilter: Text)`
- `CalcCell(var AnalysisLine: Record "Analysis Line"; var AnalysisColumn: Record "Analysis Column"; DrillDown: Boolean): Decimal`
- `SetItemRowFilters(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var AnalysisLine: Record "Analysis Line")`
- `SetItemColumnFilters(var ItemStatisticsBuf: Record "Item Statistics Buffer"; var AnalysisColumn: Record "Analysis Column")`
- `GetDivisionError(): Boolean`
- `GetPeriodError(): Boolean`
- `GetFormulaError(): Boolean`
- `GetCyclicError(): Boolean`
- `SetAnalysisLineTemplate(var NewAnalysisLineTemplate: Record "Analysis Line Template")`
- `SetExpression(Expression: Text[250])`
- `ValidateFilter(var Filter: Text; RecNo: Integer; FieldNumber: Integer; ConvertToNumbers: Boolean)`

Plus 44 local procedures.

## Triggers

OnRun

## Relations

- runs on [Table 7114 "Analysis Line"](../table/7114.md)

## 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 360 "Accounting Period Mgt."](../codeunit/360.md) (4 calls: `AccPeriodStartEnd → AccPeriodStartEnd`, `CalcCell → FindFiscalYear`, `SetItemColumnFilters → FindEndOfFiscalYear`, …)
- [Page 30 "Item Card"](../page/30.md) (4 calls: `DrillDownIndirectCost → (object)`, `DrillDownStdCost → (object)`, `DrillDownUnitCost → (object)`, …)
- [Codeunit 7001 "Price Calculation Mgt."](../codeunit/7001.md) (2 calls: `CalcUnitPrice → GetHandler`, `DrillDownUnitPrice → GetHandler`)
- [Codeunit 921 "Period Formula Parser"](../codeunit/921.md) (1 call: `AccPeriodStartEnd → ParsePeriodFormula`)

## Called by

- [Page 7117 "Sales Analysis Report"](../page/7117.md) (14 calls: `CurrentColumnTemplateOnAfterValidate → CopyColumnsToTemp`, `CurrentLineTemplateOnAfterValidate → SetAnalysisLineTemplName`, `CurrentReportNameOnAfterValidate → CopyColumnsToTemp`, …)
- [Page 7118 "Purchase Analysis Report"](../page/7118.md) (14 calls: `CurrentColumnTemplateOnAfterValidate → CopyColumnsToTemp`, `CurrentLineTemplateOnAfterValidate → SetAnalysisLineTemplName`, `CurrentReportNameOnAfterValidate → CopyColumnsToTemp`, …)
- [Page 7119 "Inventory Analysis Report"](../page/7119.md) (14 calls: `CurrentColumnTemplateOnAfterValidate → CopyColumnsToTemp`, `CurrentLineTemplateOnAfterValidate → SetAnalysisLineTemplName`, `CurrentReportNameOnAfterValidate → CopyColumnsToTemp`, …)
- [Page 9201 "Inventory Analysis Matrix"](../page/9201.md) (6 calls: `FieldDrillDown → CalcCell`, `FindError → GetCyclicError`, `FindError → GetDivisionError`, …)
- [Page 9205 "Purchase Analysis Matrix"](../page/9205.md) (6 calls: `FieldDrillDown → CalcCell`, `FindError → GetCyclicError`, `FindError → GetDivisionError`, …)
- [Page 9207 "Sales Analysis Matrix"](../page/9207.md) (6 calls: `FieldDrillDown → CalcCell`, `FindError → GetCyclicError`, `FindError → GetDivisionError`, …)
- [Page 7114 "Analysis Columns"](../page/7114.md) (4 calls: `CurrentColumnNameOnAfterValida → SetColumnName`, `ItemLedgerEntryTypeFilterOnFor → ValidateFilter`, `OnOpenPage → OpenColumns`, …)
- [Report 7112 "Analysis Report"](../report/7112.md) (4 calls: `CalcColumns → CalcCell`, `CalcColumns → GetDivisionError`, `CalcColumns → GetPeriodError`, …)
- [Codeunit 770 "Analysis Report Chart Mgt."](../codeunit/770.md) (2 calls: `DrillDown → CalcCell`, `UpdateData → CalcCell`)
- [Page 7110 "Analysis Types"](../page/7110.md) (2 calls: `ItemLedgerEntryTypeFilterOnFor → ValidateFilter`, `ValueEntryTypeFilterOnFormat → ValidateFilter`)
- [Page 7115 "Inventory Analysis Lines"](../page/7115.md) (2 calls: `CurrentAnalysisLineTemplOnAfte → SetAnalysisLineTemplName`, `OnOpenPage → OpenAnalysisLines`)
- [Page 7120 "Sales Analysis Lines"](../page/7120.md) (2 calls: `CurrentAnalysisLineTemplOnAfte → SetAnalysisLineTemplName`, `OnOpenPage → OpenAnalysisLines`)
- [Page 7121 "Purchase Analysis Lines"](../page/7121.md) (2 calls: `CurrentAnalysisLineTemplOnAfte → SetAnalysisLineTemplName`, `OnOpenPage → OpenAnalysisLines`)
- [Report 7151 "Item Dimensions - Total"](../report/7151.md) (2 calls: `CalcColumns → CalcCell`, `OnPreReport → SetAnalysisLineTemplate`)
- [Codeunit 7112 "Analysis BarChart DrillDown"](../codeunit/7112.md) (1 call: `OnRun → CalcCell`)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-25, BC27

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: "Analysis Report Management")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
