Dashboard
Four year-scoped tiles — saved reports, runs today, average time, success rate — with trends, the ten most recent runs and quick actions into every other screen.
An admin reporting workbench over the tables the platform has already published — eight data domains, a visual builder with joins and filter trees, a plain-language mode that writes one read-only statement you can inspect, and a library where every saved report keeps both its definition and its last result.
BR Ad Hoc never offers a table that has not been catalogued with labels and field metadata, runs nothing but reads, and stores a saved report as normalized rows — tables, joins, columns, filters, group-by, order-by — rather than a blob. It reports on SuccessFactors-fed records and on records that arrived from Workday, UKG, ADP, Dayforce or Paycom through HRIS Sync, in the same builder, with the same rules.
An administrator chooses one or more published data domains and the tables inside them, then either assembles columns, joins and filters by hand or asks a question in English. The platform runs a read-only select against those tables. A save stores the definition as normalized rows and the result as a run with every cell — while a plain-language run stays in the browser until someone decides it is worth keeping. That is the whole app, and everything on this page is one of those steps looked at closely.
The whole app in ten steps, exactly as it runs: one dashboard, one wizard, two ways to build, one read-only run, one library. The right-hand column is the rule the platform enforces at that step.
| # | Who · where | What happens | The rule at this step |
|---|---|---|---|
| 1 | Admin opens BR Ad Hoc Dashboard | KPI tiles for the year — saved reports, runs today, average time, success rate — plus the ten most recent runs and quick actions into the builder, AI mode, the library and templates | Trends compare to the prior year to date; runs today compare to yesterday |
| 2 | Starts a new report Setup wizard · step 1 | Picks one or more data domains and at least one published table inside them | Only tables in the metadata catalog are offered — never a raw database table |
| 3 | Chooses how to build Setup wizard · step 2 | Visual builder or plain-language AI; the choice can still be switched here | Opening a library or template item skips the wizard entirely |
| 4 | Builds it by hand Visual builder | Select · Join · Where · Group by · Order by · Advanced tabs; per-tab suggestions are rule-built from field metadata and test-executed before they are offered | A join must start from a table already in the chain and add a new one; aggregation forces every other selected column into the group list |
| 5 | Runs it Result panel | The definition is compiled into one read-only select; the run is stored with every result cell; the first 50 rows come back inline, the rest page from the run | Row limit is validated up to 100,000 on the header and clamped to 5,000 at execution |
| 6 | Or asks it AI query | Types a question; a relevance check runs first; the schema is built from field metadata; a commercially available language model writes one SELECT limited to 100 rows; a security check rejects anything that is not a read; the rows stay in the browser | Nothing is written to the run history until the admin saves — the save turns the executed statement into the same structured definition the visual builder uses |
| 7 | Saves it Library | The definition is validated against the catalog, stored as normalized rows — tables, joins, columns, filter tree, IN-lists, group-by, order-by — then run once and page 1 loads into the grid | If that first run fails, the report stays saved and the message says so; AI-built reports carry an AI-generated flag |
| 8 | Reads the result Table · Charts · Insights · Export | Six chart types built server-side from the stored cells; an Insights tab with average, min, max, outliers and empty-cell counts on the rows shown; CSV or JSON export of a stored successful run | Charts need two columns and at least one numeric; export is for stored runs, so an unsaved AI run is saved first |
| 9 | Comes back to it Report Library | Run, edit in builder, duplicate, favourite, delete, edit metadata, preview the presentation SQL; tabs All · Visual Builder · AI Generated · Favorites; search by name, description, tags, category and source table | Metadata edits change the header only and never re-run the report; delete cascades runs, cells and every child row |
| 10 | Starts from a template Report Templates | Run a template in place, or Customize — a duplicate that becomes a new library report on its next save; categories follow the first table's domain | A template is a saved report with a template flag; there is no second data model |
Follow a benefits administrator answering “which employees waived medical this year, by location?” — from the dashboard, through the wizard, built by hand and then asked in plain language, into the library — and the same report over an entity that runs Paycom.
The home screen opens on four tiles computed for the calendar year: saved reports created this year, runs started today, the average execution time of successful runs, and the success rate. Trends compare to the prior year to date, and runs today to yesterday; for time, lower is better and the arrow says so. Beneath them sit the ten most recent runs, newest first, and four quick actions — the visual builder, the plain-language mode, the library and the templates — plus the shared application launcher and the Essential Insights strip every admin app carries.
An administrator sees whether the reporting estate is healthy before opening a single report.
Deeper dashboard charts — run trends, status mix, top tables, execution-time buckets — are computed by the service and not yet placed on this home screen; they are a roadmap item, not a claim.
A new report starts with two questions. First: which data domains, and which published tables inside them — Benefits, Intelligent Services Delivery, Payroll Core, Integrations & Payroll Reconciliation, HRIS Master Data, ACA Reporting, Finance & Controlling, BR Configuration. The table list comes from the catalog for that domain, each with its label, description and category, and the builder never sees a table the catalog does not hold. Second: build it visually or ask it in plain language. The visual and AI entry points pre-select a mode, and the administrator can still switch here.
Scope is decided before the first column is chosen, so a report cannot wander into tables it was never meant to read.
Metadata administrators publish tables and fields in configuration — labelling, activating and assigning a domain — before this app can offer them.
Select picks columns from the field catalog with an aggregation — none, sum, count, average, min, max. Join chains tables with inner, left, right or full joins on one field pair; each join must start from a table already in the chain and add a new one. Where builds a filter tree of AND/OR groups and typed conditions. Group by is enforced the moment an aggregation appears. Order by sorts; Advanced holds distinct and the row limit. On every tab a suggestion panel offers candidates built from field metadata and test-executed first — a suggestion that fails is never shown. Run compiles the definition into one select; Save validates it, stores it as rows and runs it.
A report built here is always a valid, read-only statement — the builder will not let an invalid one exist.
Employee code fields — department, location, company and the rest — are joined to their text automatically, so the grid shows names; under a group-by the text is aggregated correctly.
The administrator types the question. A relevance check runs first: a question the selected tables cannot answer comes back with an explanation and no database read at all. Otherwise the platform builds a schema description from the field catalog — long text and binary columns omitted — adds an effective-date hint and, if display columns were chosen, requires them in the select. A commercially available language model writes one statement limited to the first 100 rows. A security check rejects anything that does not begin with SELECT. The statement runs, the rows come back to the browser, and the executed statement is shown. If it fails, a second model call explains whether the question can be answered. A best-effort pass turns the statement into the same structured definition the visual builder uses — and only then does Save appear.
You can read the statement that answered you, and nothing is kept until you choose to keep it.
Question suggestions in the side panel are templates built from amount fields, key fields and categories, then test-run — this is a query mode, not the employee Athena chatbot, and it is deliberately isolated from it.
A run opens in three tabs. Table pages the stored cells — the first 50 rows arrive with the run, the rest are fetched as you page. Charts builds column, bar, line, pie, scatter or area from the stored cells on the server, first column as the category, later numeric columns as series. Insights shows quick statistics on the rows on screen — average, minimum, maximum, a count of outliers beyond two-and-a-half times the average, and empty cells; it is arithmetic, not the BR Insights explanation engine. Export writes CSV or JSON from a stored successful run. The library lists every active saved report with run, edit, duplicate, favourite, delete, metadata and SQL preview; templates are saved reports with a template flag that Customize duplicates into a new report.
A report is something a colleague can open next quarter and get the same definition and the last kept result — not a spreadsheet on a laptop.
The SQL preview in the library is a readable presentation of the saved definition; the run log itself stores a summary of what ran, not a statement to paste elsewhere.
The tables in the catalog are the platform's own — elections, dependants, deductions, invoices, employee-months, employees and organizational units — filled from SAP SuccessFactors in real time through OData and Intelligent Services Center, and from Workday, UKG, ADP, Dayforce or Paycom through HRIS Sync with the same fields and provenance. An administrator reporting on a mixed estate picks the same domains, joins the same tables and asks the same questions; the entity is a column and a filter, not a different tool. Employee code fields resolve to text from the same master whichever HRIS supplied the code.
A group that runs three HRIS platforms builds one report, not three.
Rows from a feed that has not confirmed yet carry their sync state, so a report can show — or exclude — what HRIS Sync has not yet reconciled.
Ad-hoc does not mean unguarded. Every report, visual or plain-language, passes the same set of rules before a single row is read.
| Rule | How it works | Why it is there |
|---|---|---|
| Which tables can be queried | Only rows in the published table catalog, each with a friendly label, technical name, schema and domain; fields come from the field catalog with type, key and required flags | The builder cannot reach a table nobody has labelled and assigned to a domain |
| Joins | Inner, left, right or full; each join starts from a table already in the chain and must add a new table — reusing one is rejected | No accidental self-joins or loops; every chain is a path |
| Filters | A tree: groups combine with AND or OR; conditions use =, ≠, <, >, ≤, ≥, LIKE, BETWEEN, IN, IS NULL, IS NOT NULL; IN-list values are stored one per row | A filter is data, not a string — it can be edited, previewed and audited |
| Group by | If any selected column is aggregated (SUM, COUNT, AVG, MIN, MAX), every non-aggregated selected column must be in the group list | A visual report never compiles into an invalid statement |
| Row limit | Header limit validated from 1 to 100,000; execution clamps to 1–5,000; the AI path is prompted for the first 100 rows | A report is a working set, not a bulk extract |
| Reads only | The visual path compiles a select; the AI path must begin with SELECT — a leading UPDATE, DELETE, DROP, INSERT, ALTER, CREATE, TRUNCATE, EXEC, MERGE, GRANT or REVOKE is rejected before anything runs | Nothing in this app can change a benefits record |
| Employee codes as text | Department, location, company and the other employee code fields are joined to the code-to-text master automatically and shown as text when it exists | A report reads as words, not codes — and groups by the text correctly |
| Effective dates in AI mode | Words like history, past, prior, last year, expired or archive ask for expired rows; every other question asks for current rows — only on tables that carry begin and end dates | A plain-language question about “current” enrollments does not silently return history |
| Save and re-save | A definition is validated against the catalog before it is stored; on update every child row is replaced and the header keeps its id; saving never deletes previous runs | History survives edits; an unresolvable definition is refused, not half-saved |
| Run history | Runs of a saved report accumulate; an unsaved visual run replaces the previous unsaved run for that person; an AI run is browser-only until saved | The run log holds what people chose to keep, not every experiment |
One admin app, six screens, one read-only engine underneath — described exactly as they run.
Four year-scoped tiles — saved reports, runs today, average time, success rate — with trends, the ten most recent runs and quick actions into every other screen.
Domains and published tables first, visual or plain-language second; skipped when a saved report or template is opened.
Select, Join, Where, Group by, Order by and Advanced with rule-built, test-executed suggestions; compiles to one read; Save validates, stores and runs.
Relevance check, schema from the catalog, one SELECT limited to 100 rows, a security check, the statement shown; browser-only until saved.
Table paging from stored cells, six server-built chart types, an on-screen statistics tab, CSV and JSON export of stored successful runs.
Run, edit, duplicate, favourite, delete, metadata and SQL preview; tabs by mode and favourites; templates by domain category that customize into new reports.
Most benefits reporting still means an export, a pivot table and a file nobody can reproduce. Here is what changes when the report lives on the platform.
| The moment | Export and spreadsheet | BR Ad Hoc |
|---|---|---|
| “Which tables can I use?” | Whatever the export happened to contain. | The published catalog — eight domains, labelled tables and fields, nothing raw. |
| Joining enrollment to payroll | VLOOKUP, and hope the keys match. | A typed join from a table already in the chain, one field pair, validated before it runs. |
| “Can I just ask?” | No. | One plain-language question → one read-only statement you can read, first 100 rows, saved only if you say so. |
| A filter on department | Codes, copied by hand. | Codes shown as text from the master, and grouped correctly. |
| Someone edits the sheet | The number changes and nobody knows. | The definition is rows; the run keeps every cell; a save never deletes history. |
| “Send me last quarter's version” | A file on a laptop. | The library — last result stored, run again on request, duplicate to customize. |
| An entity on another HRIS | A second export from a second system. | The same tables, with entity and source as columns, through HRIS Sync. |
The plain-language mode is a query engine with a language model in one step of it. It checks relevance, builds the schema from the catalog, writes one read-only statement, refuses anything else, runs it and shows you the statement beside the rows. It does not remember your last employee conversation, it does not act, and it is deliberately isolated from the employee Athena assistant.
Only published, labelled tables and fields — eight domains an administrator can actually read.
Joins, filter trees, grouping and sorting that the builder keeps valid, with suggestions that were tested before they were offered.
One plain-language question, one read-only statement shown beside the rows, saved only when you choose.
The visual path compiles a select; the AI path is refused unless it is one — nothing here can change a record.
A saved report is rows you can edit and audit; a run keeps every cell; history survives every re-save.
SuccessFactors records and Workday, UKG, ADP, Dayforce or Paycom records in the same tables, with entity as a column.
The screens are one path. A report starts on the dashboard, is scoped in the wizard, built or asked, run and read, then kept in the library where it can be re-run, edited, duplicated or turned into a template for the next person. Four stories show the path in use.
Tell us which export you pivot every month — waivers, deductions, invoices, ACA months. We'll pick the domains in the wizard, build it visually on your tables, ask the same question in plain language, show you the statement, save both, and export the result — in your tenant.
Published tables, a builder that stays valid, a question mode that shows its statement, and a library that keeps both the definition and the result — over SAP SuccessFactors records and every record from another HRIS.