Domain 5 β€” Module 1 of 4 25%
17 of 28 overall
Domain 5: Implement Reporting Free ⏱ ~14 min read

The Reporting Landscape: Choosing the Right Tool

Understand the F&O reporting toolkit β€” SSRS, Power BI, Excel, Electronic Reporting, and analytical workspaces β€” and learn when to use each one.

Why are there so many reporting tools?

Simple explanation

Think of a kitchen.

You wouldn’t use a blender to slice bread or a toaster to make soup. Each appliance does one thing really well. F&O reporting works the same way β€” SSRS prints pixel-perfect documents (invoices, packing slips), Power BI builds interactive dashboards for analysis, Excel lets business users play with data in a familiar tool, and Electronic Reporting generates regulatory documents (tax filings, payment formats) that governments require.

Pick the right appliance for the dish you’re making.

The five reporting tools at a glance

F&O reporting tools β€” each has a distinct sweet spot
FeatureSSRSPower BIExcelElectronic ReportingAnalytical Workspaces
Primary purposePixel-perfect operational documentsInteractive dashboards & analyticsAd-hoc data editing & exportRegulatory / business document generationEmbedded KPIs & visuals in workspaces
Data sourceRDP classes, queries, data entitiesEntity store (star schema)OData entitiesER data model (mapped to tables/entities)Aggregate measurements & entity store
Output formatPDF, Word, Excel, HTMLInteractive visuals (browser)Excel workbookXML, Excel, Word, PDF, textCharts, KPI tiles, drill-through
Requires code?Yes (RDP class or query in AOT)Minimal (Power BI Desktop)No codeNo code (config-driven)Minimal (workspace form extensions)
User interactionParameter dialog β†’ rendered docFilter, slice, drill throughEdit cells, push back to F&OGenerate on demand or batchView in workspace, drill to details
Best forInvoices, picking lists, chequesExecutive dashboards, trend analysisQuick exports, data correctionsTax reports, payment files, e-invoicesRole-based operational summaries
Scenario: Elena maps PacificForge's reporting needs

Elena Vasquez sits down with CTO Gregor to inventory PacificForge Manufacturing’s reporting requirements:

RequirementToolReasoning
Print customer invoices with exact layoutSSRSPixel-perfect, batch-printable
CFO wants a live production KPI dashboardPower BIInteractive, aggregated analytics
Warehouse team needs to bulk-update item weightsExcelEdit-in-Excel with OData push-back
New Zealand IRD requires GST return in specific XMLElectronic ReportingRegulatory format, config-driven
Production manager wants daily yield at a glanceAnalytical workspaceEmbedded KPIs in production workspace

Gregor nods: β€œSo we’re not picking one tool β€” we’re picking the right tool per scenario.”

Report Data Provider (RDP) classes

Most SSRS reports in F&O get their data from an RDP class β€” an X++ class that runs queries, processes business logic, and populates a temporary table that the report reads.

How RDP classes work

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Report      │────▢│  RDP Class   │────▢│  Tmp Table    β”‚
β”‚  (SSRS .rdl) β”‚     β”‚  (X++ logic) β”‚     β”‚  (data rows)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                    β”‚                      β”‚
  Renders output     Runs processReport()     Report reads
  from tmp table     populates temp table     from this table
ConceptDetail
[SRSReportParameterAttribute]Decorates the RDP class to link it with a report contract (parameters)
Contract classDefines user-facing parameters (date range, customer group) β€” decorated with [DataContractAttribute]
processReport()The main method β€” queries data, applies logic, inserts into the temp table
Temp tableMust be InMemory or TempDB type. The report binds to this table’s fields
Vik's RDP class skeleton

Vik Kapoor at Axion Dynamics shows how a basic RDP class is structured:

[SRSReportParameterAttribute(classStr(SalesInvoiceContract))]
class SalesInvoiceRDP extends SRSReportDataProviderBase
{
    SalesInvoiceTmp salesInvoiceTmp;

    [SRSReportDataSetAttribute(tableStr(SalesInvoiceTmp))]
    public SalesInvoiceTmp getSalesInvoiceTmp()
    {
        select salesInvoiceTmp;
        return salesInvoiceTmp;
    }

    public void processReport()
    {
        SalesInvoiceContract contract = this.parmDataContract();
        // Query logic, business rules
        // Insert rows into salesInvoiceTmp
    }
}

Key points:

  • The [SRSReportDataSetAttribute] links the getter method to the temp table the report reads
  • processReport() is where all the heavy lifting happens
  • The contract class provides parameter values entered by the user

Report queries (the simpler alternative)

Not every report needs an RDP class. Simple reports can use an AOT query directly β€” the report binds to the query’s data sources without any X++ code.

ApproachWhen to use
AOT QueryStraightforward data retrieval, no business logic needed
RDP ClassComplex calculations, multiple data sources, conditional logic

Reporting datastores

Entity store

The entity store is a read-optimised, star-schema database that mirrors F&O transactional data into a format designed for analytics. Power BI reports and analytical workspaces read from the entity store β€” never directly from the transactional database.

ConceptDetail
Aggregate measurementsPre-defined measures (sum, count, average) over entity store data β€” like β€œTotal Revenue by Region”
Aggregate dimensionsThe grouping axes β€” customer, date, product, region
RefreshScheduled (e.g. every 4 hours) or on-demand β€” not real-time
Star schemaFact tables (transactions) surrounded by dimension tables (lookups) β€” optimised for slicing and dicing
Why not query the live database?

Running heavy analytical queries against the live OLTP database would:

  1. Slow down transactional operations β€” users creating sales orders would see degraded performance
  2. Produce poor query plans β€” OLTP tables are normalised for writes, not analytical reads
  3. Risk locks and contention β€” long-running reports could block data entry

The entity store solves all three: it’s a separate read replica with a denormalised star schema optimised for aggregation.

Aggregate measurements

Aggregate measurements are the building blocks for analytical workspaces and KPI tiles. They define:

  • What to measure β€” revenue, order count, defect rate
  • How to aggregate β€” SUM, COUNT, AVERAGE, MIN, MAX
  • What dimensions to group by β€” customer, date, product category
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚ Aggregate          β”‚
                    β”‚ Measurement        β”‚
                    β”‚ "TotalRevenue"     β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β–Ό                β–Ό                β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚ Dimension:   β”‚  β”‚ Dimension:   β”‚  β”‚ Dimension:   β”‚
    β”‚ Customer     β”‚  β”‚ Date         β”‚  β”‚ Region       β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Reporting security

F&O reporting inherits the standard security model β€” but there are report-specific considerations.

LayerHow it applies to reporting
Role-based securityUsers only see menu items (and therefore reports) that their role grants access to
Duty/privilegeReports are exposed through privileges β†’ duties β†’ roles. A custom report needs its own privilege and menu item
Data security (XDS)Row-level filtering applies to report queries too β€” a regional manager only sees their region’s data
Report parametersContract classes can enforce restrictions (e.g. limit date range to current fiscal year)
Entity store securityPower BI workspaces inherit workspace-level security. Aggregate data may be less sensitive than row-level
Exam tip: Report visibility = menu item security

If a user cannot see a report, the first thing to check is whether their security role includes the privilege that grants access to the report’s menu item. Reports aren’t secured directly β€” they’re secured through the menu item β†’ privilege β†’ duty β†’ role chain.

When to use each tool: decision flowchart

Elena's decision tree for PacificForge

Elena creates a decision flowchart for her team:

  1. Is it a printed document (invoice, packing slip, cheque)? β†’ SSRS
  2. Is it an interactive dashboard for analysis? β†’ Power BI
  3. Does the user need to edit data in a familiar tool? β†’ Excel (Edit in Excel)
  4. Is it a regulatory/compliance document with a specific format? β†’ Electronic Reporting
  5. Is it a quick operational KPI embedded in a workspace? β†’ Analytical workspace

β€œIf the answer is β€˜we need a printed document with a specific layout,’ it’s always SSRS,” Elena tells Sophie Chen, who’s been defaulting to Power BI for everything.


Question

What is the entity store in F&O?

Click or press Enter to reveal answer

Answer

A read-optimised, star-schema database that mirrors transactional data for analytics. Power BI reports and analytical workspaces read from the entity store β€” never directly from the live OLTP database. It's refreshed on a schedule, not in real-time.

Click to flip back

Question

What does an RDP class do in SSRS reporting?

Click or press Enter to reveal answer

Answer

A Report Data Provider (RDP) class runs X++ logic (queries, calculations) in processReport() and populates a temporary table. The SSRS report then reads from that temp table to render output. It's decorated with [SRSReportParameterAttribute] and linked to a contract class for parameters.

Click to flip back

Question

How is report security enforced in F&O?

Click or press Enter to reveal answer

Answer

Through the standard security chain: Role β†’ Duty β†’ Privilege β†’ Menu Item. A report is exposed via a menu item output. If a user's role doesn't include the privilege that grants access to that menu item, they can't see or run the report. XDS policies also filter data at the query level.

Click to flip back

Question

What are aggregate measurements?

Click or press Enter to reveal answer

Answer

Pre-defined calculations (SUM, COUNT, AVG) over entity store data, grouped by dimensions (customer, date, region). They power KPI tiles and analytical workspaces. Example: 'Total Revenue by Region' = SUM(Revenue) grouped by Region dimension.

Click to flip back


Knowledge Check

PacificForge needs to generate a GST return file in a government-mandated XML format. Which reporting tool should Elena use?

Knowledge Check

A user reports they cannot see the 'Production Efficiency' report in the menu. What should Elena check first?

Knowledge Check

Why does F&O use an entity store instead of querying the live transactional database for Power BI reports?

Knowledge Check

Which data source would you use for an SSRS report that requires complex business logic to calculate weighted average costs across multiple warehouses?

Next up: SSRS Reports: Precision Design β€” deep dive into building, designing, and deploying SSRS reports in F&O.