> AI agents: this is one page from Mammoth Analytics documentation. The index of all pages as Markdown is https://docs.mammoth.io/llms.txt. Append `.md` to any docs URL, or send `Accept: text/markdown`, to get Markdown.

# Financial reporting

> Automate month-end close, consolidate financial data, and create board-ready dashboards in Mammoth.

Month-end reporting involves mechanical work: pulling GL exports, matching formats across entities, calculating year-over-year and month-over-month variances, and formatting the results. This guide is for controllers and FP&A analysts. It shows how to automate that work in Mammoth.

**What you will build:** A recurring financial reporting pipeline that consolidates multi-entity GL data, computes period-over-period comparisons, and produces ready-to-share P&L and variance reports.

![Mock P&L dashboard comparing March and February 2026: revenue, costs, net income, with dollar and percent variances.](https://docs.mammoth.io/api/v1/images/20260805_054450_financial-reporting-pl-dashboard1.jpg)

## The challenge of multi-entity month-end close

A typical monthly close workflow for a multi-entity company:

1. Finance team pulls GL exports from an ERP (SAP, NetSuite, QuickBooks, and others), one per entity
2. Each entity uses slightly different account code formats and naming conventions
3. An analyst spends hours in Excel: vlookups, format fixes, manual variance calculations
4. The final P&L goes to leadership days after the period closes

In Mammoth, steps 2 to 4 are automated. The only manual step is uploading the GL export, which a connector to your ERP or database can also automate.

## Requirements

- GL export files per entity (CSV or Excel), or a connector to your ERP or database
- A chart of accounts mapping file (maps account codes to standardized names)
- Mammoth workspace with at least one project

---

## Step 1: Set up your data structure

### Upload GL exports

1. In your project's Data Library, click **+ New Dataset** and upload a file
2. Upload your GL export for the current period
3. Repeat for each entity, naming datasets consistently: `GL_EntityA_2026_03`, `GL_EntityB_2026_03`

> Tip: Append monthly files\
If you do this monthly, use **Add or Replace Data** with **Combine with older data** to append new period files to the same dataset. See [Batch management](https://docs.mammoth.io/learn/data-sources/batch-management).

### Upload the chart of accounts

1. Click **+ New Dataset** and upload your chart of accounts mapping file as a separate dataset
2. This file should have at minimum: `AccountCode`, `AccountName`, `Category` (Revenue, COGS, OpEx, etc.), `SubCategory`

---

## Step 2: Standardize account codes

Different ERP systems and entities export account codes in different formats. Normalize them before joining.

1. Open your GL dataset in the Data Editor
2. If account codes have inconsistent padding (e.g., "1000" vs "01000"), type in the **Describe your transformation** bar (the AI Prompt bar)
3. Type: "Standardize AccountCode to 6-digit zero-padded format"
4. Review the suggested task and apply
5. Repeat for each entity dataset

**Handle entity-specific naming:**

1. Add a **Bulk Replace** task on the `AccountName` column
2. Map entity-specific names to the canonical names from your chart of accounts

---

## Step 3: Consolidate entities

Join all entity GL files into a single consolidated dataset.

1. In each entity dataset, add a **Conditional Filter** to scope to the current period
2. Add an `Entity` column to each (**Add column**, then **Label & Insert Values** with the entity name). This preserves which rows belong to which entity after consolidation
3. Create the consolidated dataset from Entity A, then for each other entity open **Add or Replace Data** on it, choose **Select existing**, pick the entity's dataset, and use **Combine with older data**

---

## Step 4: Join chart of accounts

1. Add a **Lookup** task
2. Join on `AccountCode` (your GL dataset) → `AccountCode` (chart of accounts)
3. Pull in: `AccountName`, `Category`, `SubCategory`, `ReportingOrder`

This gives every GL row a standardized category label, which you need for grouping in the P&L.

---

## Step 5: Calculate period-over-period comparisons

To show current versus prior period variance, you need both periods in the same dataset.

**Option A: Aggregated comparison (two Views joined)**

1. Add a **Group & Pivot** task: group by `AccountCode`, `Category`, `SubCategory`; sum `Amount` for current period
2. Add a second aggregation task scoped to prior period using **Conditional Filter** + **Group & Pivot**
3. Join the two aggregation outputs on `AccountCode` using **Lookup**
4. Add a **Math Function** task to calculate:
   - `Variance_Abs = "CurrentAmount" - "PriorAmount"`
   - `Variance_Pct = ("CurrentAmount" - "PriorAmount") / ABS("PriorAmount") * 100`

**Option B: Use Window function for rolling comparisons**

For rolling 12-month or YTD comparisons:

1. Use **Window function** with the **Lag** function to pull prior-period values within the same dataset
2. Set **Group by** to `AccountCode` and **Add Sort** on `PeriodDate`

---

## Step 6: Build the P&L view

1. Add a **Group & Pivot** task: group by `Category` and `SubCategory`, enable pivot to reshape from long format (one row per period) to wide format (columns = months)
2. In the **Group & Pivot** configuration, set the column to pivot on as `PeriodDate` and order the output columns chronologically

The resulting View is your automated P&L—ready for a dashboard or export.

---

## Step 7: Build and share the dashboard

1. Click **+ Create Dashboard** from your P&L View
2. Prompt: "Show a P&L table with current month, prior month, variance $, and variance %, and highlight negative variances in red"
3. Add filters: entity, department, date range
4. Click **Publish & Share** → set **Access Type** to **Authenticated** for internal finance team, or **Public** if you need to share with external auditors who do not have Mammoth accounts

**Export options:**

- **Download** as Excel or CSV for auditors or leadership who prefer spreadsheets
- **Live Link**: an auto-updating URL that reflects the latest data every time the pipeline runs
- **Export** → a database or file destination: push to BigQuery, PostgreSQL, SQL Server, Redshift, or SFTP for use in Tableau or Power BI (see [Send to destinations](https://docs.mammoth.io/learn/export-share/send-to-destinations))

---

## Step 8: Automate monthly close

1. Open **Automations** in the project sidebar → **New Automation** → **Dataset Refresh** (if the GL comes from a connector)
2. Or set up a **Messaging** automation to email the P&L View as a CSV attachment to your CFO and controller on a fixed day each month
3. Configure: repeat every 1 **Month** on the 3rd at 7:00 AM (schedules run on a fixed day of the month, not on business days)
4. Attach: the P&L View

---

## Results to expect

Once the pipeline is in place:

- Close prep is the review of the output, not the manual cleanup
- The consolidated, multi-entity view updates as soon as new GL data is loaded
- Leadership can open the published dashboard themselves instead of waiting on one analyst
- The transformation tasks are recorded in the pipeline, so the same logic runs every period

---

## Variations for budget, EBITDA and currency

**Budget versus actuals**\
Upload your budget file as a separate dataset and join it to actuals on `AccountCode` + `Period`. Add `Budget`, `Actual`, and `Variance` columns.

**EBITDA calculation**\
After consolidation, add a **Math function** task:\
`EBITDA = Net Income + Interest + Taxes + Depreciation + Amortization`\
Map your chart of accounts `SubCategory` values to the EBITDA components.

**Multi-currency**\
Add a currency conversion lookup table and a **Math function** task to normalize all amounts to your reporting currency before aggregation.

---
Source: https://docs.mammoth.io/guides/use-cases/financial-reporting.md · Updated: 2026-10-13