Workspace commands
Start
Workspace
File, clipboard & history
More commands
▦Cells & sheet
Cells
Worksheet
▤Insert & data
Tables & comments
Charts & formatting
Validation
ƒxFormulas & review
Defined names
▾
Formula auditing
Edit & data
Python Lab
Markdown notes
Note actions
Data explorer
Export & transform
General analytics
Relationships & models
Regression models
Analysis tools
Diagnostics & transforms
Project Studio
Build & run
AI research
Research outputs
Administration
Analysis context

ANALYST STUDIO

What are you trying to figure out?

Ask a question, find the right data, run a transparent analysis, and keep the result with your project.

Ready to exploreOntario macro sampleA sample dataset is loaded for you.

START WITH AN OUTCOME

Choose a common task

First project checklist

You can come back to this anytime.

1 of 3 ready
✓
Choose your starting dataOntario macro sample is ready.

KEEP YOUR BEARINGS

Everything stays connected

Datasets, transformations, models, code, reports, and runs live in the same project. Use the project explorer when you need the full detail.

ANALYTICAL OBJECT

No object selected

Open a dataset, series, document, or run from the project explorer.

No object selected.

PYTHON ANALYSIS

Python Lab

Create a Python analysis with shared Python state, Markdown notes, and saved outputs.

Start a model workflow with an explicit sample, import calculated workbook values, or export a replayed DataFrame as a new project sheet.

Declared inputs: none

Exports use legacy saved-prefix replay.

Live runs use selected editor text. Clean runs execute selected code cells in order with fresh state. Publish DataFrame and Export report sheet replay saved cells using the legacy export workflow.

Saved
Create a Python analysis to start working with Python.

MARKDOWN NOTES

Notes

Write plain-text Markdown notes alongside your sheets, datasets, and models. Use [[path#selector]] references or analyst-viz fences to keep research outputs and charts in one note.

Markdown source

Use headings, lists, links, tables, code fences, task checkboxes, and embedded AnalystViz charts.

Saved locally

Preview

Rendered Markdown

LIVE

DATASET WORKBENCH

Select a dataset

Import a file or use the included Ontario macro sample.

Prepare workbook view

The imported dataset stays complete. Choose dimensions here before opening a view in the workbook.

Select a dataset to configure filters, rows, and columns.
No workbook view selected; opening the workbook uses the full table.

Data preview

First 100 observations

No dataset selected.

Series chart

Choose one or more numeric columns

Variable profile

Summary statistics and missing values

Run the profile to inspect variables.

VISUALIZATION STUDIO

Build a reusable AnalystViz chart

Use D3-backed native views and Billboard.js standard charts from the same renderer-neutral specification. Save the design as a versioned .viz.json project document.

Chart design

Selections become an AnalystViz v1 contract.

D3 + BILLBOARD
Y fields
Select a dataset and fields, then preview or ask for a recommendation.

Preview

The chart will appear here after a preview.

READY
AnalystViz specification
No specification built yet.

Saved visualizations

Versioned project documents

Select an analytical project to see saved charts.

GENERAL ANALYTICS

Summary, growth, variance and relationships

Calculate reusable descriptive statistics, CAGRs, actual-versus-baseline variances, correlations, and regression models.

Descriptive summary

Numeric and categorical statistics, missingness and percentiles.

SUMMARY
No summary run.

Growth & CAGR

Period growth, annualized growth and endpoint compound annual growth.

GROWTH
No growth analysis run.

Variance analysis

Compare actuals with a budget, forecast, plan or prior-period baseline.

VARIANCE
No variance analysis run.

Relationships

Pairwise correlation matrix with sample counts.

CORRELATION
No correlation analysis run.

Regression lab

Choose a model family, describe the outcome and predictors, then inspect the returned diagnostics.

REGRESSION
Estimates the average relationship between a numeric outcome and its predictors. Dependent variable: a continuous numeric outcome.
Advanced settings
No regression run.
Enter ↓  ·  Tab →  ·  Ctrl/⌘ + Arrow jump
Clipboard
History
Reporting
Format
Number & alignment
Cells
What-If Analysis
Visibility
Private display
Data
Columns
Rows
Tables
Visuals
Validation
Options
Formula authoring
Function library
▾
Formula auditing
Defined names
No native Data Tables
Calculation & Actions
F2 EditEsc Cancel⇧ Extend
Editing
Comments
A1⌄
ReadyUnsaved · Not linked

Find all

SheetCellValueFormula

Find by Format

Matches normal cell/table formatting and workbook font defaults, not conditional colours, icons, or data bars.

Borders
Ready
100%

Run regression from this sheet

Use row 1 as column names; the shared regression engine aligns observations and returns coefficient diagnostics.

REGRESSION
Estimates the average relationship between a numeric outcome and its predictors. Dependent variable: a continuous numeric outcome.
Advanced settings
Select a sheet with a header row, then run regression.

COMMON EXPRESSION LANGUAGE

Transform economic series

Write one expression, execute it safely, or translate it to Python, R, and SQL.

Functions: log, diff, pct_change, annualized_growth, yoy_growth, lag, lead, moving_average, zscore, index_to, seasonally_adjust, hp_trend, hp_gap.

Result

Execution output or generated code

Ready.

TIME-SERIES TESTING

Diagnostics and cointegration

Test stationarity, serial correlation, and long-run relationships.

Unit-root diagnostics

No test run.

Cointegration

No test run.

ECONOMETRIC MODELS

Forecast and dynamic systems

Estimate ARIMA and VAR models, compare specifications, and inspect fan charts and impulse responses.

ARIMA forecast

VAR system

Model output

Metrics, forecasts, fan chart, impulse responses and decomposition

No model estimated.

FORECAST SCENARIOS

Apply shocks and alternative paths

Change levels or growth rates, then save a complete scenario dataset.

Scenario result

Impact summary and preview

No scenario run.

ACCOUNTING FRAMEWORK

Identities and growth contributions

Validate balancing equations or decompose aggregate growth into component contributions.

Identity check

No identity checked.

Contributions to growth

No decomposition run.

VERSIONED ANALYTICAL PROJECT

Project Studio

Explore project files, edit multiple documents, and run reproducible model or program revisions.

No file open

Choose a file from the explorer.

Saved
Formal language services activate for PRG and model files.
No analysis or run output.

ADVANCED WORKSPACE

SQL and Python

Query every dataset by name or run trusted local Python in a separate process.

SQL

Read-only SQLite-compatible queries

Python

pandas and NumPy are preloaded

Code output

Up to 500 result rows

No code run.

AI RESEARCH WORKSPACE

Conversation with Luna

Ask a question, let the agent search and analyze, then keep the source data and result tables beside the conversation.

Research agent

Internet search, Import Data providers, deterministic analytics, and Workbook-ready outputs.

Luna · web search ready Tools run automatically within limits

New research conversation

Ask Luna to gather sources, import data, run analysis, and leave Workbook-ready outputs.

No research run selected.
Start a research conversation to see the dialogue and tool trace here.
Research agent
Agent settings
Luna can search, import, calculate, save tables, and add graphable research outputs to AnalystViz.
Approval workflows and editable plans
Use the conversation above for autonomous research. Open this area when you need the older step-by-step approval editor.

Ask the analyst

The active dataset and metadata are included automatically

Local planner
Nothing runs until you approve it.

No workflow selected

Create or select a workflow.

Idle
The workflow conversation will appear here.

Approval-gated plan

Edit JSON parameters before approval

No plan created.

ADMINISTRATION

Keep your workspace healthy

Choose an admin area below. Everyday analysis stays in Home, Data, Analyze, Build, and Automate.

Identity and permissions

Current organization membership

Loading identity.

Members

Owner/admin controls

No members loaded.

Versioned projects

Immutable commits, branches, optimistic locking, and three-way merges

No repositories.
No merge preview.
Select a repository.

Project access

Repository-specific roles override organization-wide visibility

Select a repository.

Economic data catalog

Search, preview, normalize, save, and schedule official international datasets

Loading connector registry.
Search one provider or the unified catalog.
Preview a connector query before registering it.

Dataset vintages and revisions

Compare connector snapshots to identify revised periods, added observations, and changed values

Select a connector dataset with at least two recorded vintages.

Refreshable sources

Connector, local, and HTTP source subscriptions

No sources.
Select connector history to inspect refresh runs.

SAVED DATA SOURCE

Source properties

Edit the saved connection settings. Saving does not refresh the source data or start a job.

Source identity and dataset are read-only.

Credentials stay encrypted and are never shown here. Your current saved credential will be kept unless you have permission to choose another.

Advanced request and cleanup settings

These saved options affect a future refresh. They are not sent to the connection test.

Integrated analytical pipelines

Refresh data, execute project documents, compare scenarios, and generate a reproducible report

No pipelines.
Run a pipeline to inspect its integrated execution record.

Schedules

Recurring workflow runs and dataset refreshes

No schedules.

Encrypted secrets

Credentials are encrypted at rest and never displayed again

No secrets.

Backups

Checksummed archives with safe staged restore

No backups.

Operations and audit

Readiness, storage, sandbox, worker, and hash-chain status

Operations status not loaded.

Large-file storage

Review workspace files over the warning threshold. Protected system files cannot be deleted here.

Storage audit not loaded.
No large files loaded.

Background jobs

Persistent worker queue

No jobs.

Live activity

Server-sent organization events

Polling
No activity yet.

AUDIT TRAIL

Operation history

Imports, transformations, tests, models, scenarios, code runs, and AI plans.

No history loaded.

DATA INGESTION

Import data

Browse official catalogs, preview observations, and add a refreshable dataset to this workspace.

Catalog resultsSearch a provider to browse available datasets.
Choose a provider and search to browse its catalog.
SELECTED SOURCENothing selectedSelect a catalog result or enter provider IDs manually.
Full table importImport preserves every row. Configure filters, rows, and columns later in the Dataset Workbench before opening the data in Workbook.
Preview the selected data before importing.
No preview yet.
PRG console ready
Analyst Studio PRG console. Enter commands such as show dataset or run a model file.
No console output.
No problems.
No jobs loaded.
No variables created.

EXCEL WORKBOOK

Import Excel workbook

Inspect formulas, workbook-format intent, and native package features before converting this XML Excel workbook.

Choose an .xlsx, .xltx, .xlsm, or .xltm file to inspect.

Rows hidden by filters

EVIEWS TEXT

Import EViews text

Inspect compatibility before adding this EViews program or model to the selected project.

Choose an EViews text file to inspect.
Use a project-relative path ending in .prg, .model, or .mdl. Existing files are never overwritten.

SHARED WORKBOOK

Shared editing baseline

Start a new baseline only after confirming the saved version. This retires retained shared-edit history; older sessions must reload or review unsent edits. Saved file versions remain. Live editing is not enabled by this dialog.

Saved versionNot checked
Retained shared editsNot checked
BaselineNot checked
Check the saved workbook before starting a new baseline.

SHARED WORKBOOK

Shared cell edit

Review, retry, or load one saved cell edit, paste, formatting change, or row or column change. Your open workbook is not changed until you explicitly load the saved result. This is not live editing; there is no local undo entry for this server operation.

TargetNo cell selected
Joined historyNot checked
Saved resultNone
Review the saved workbook before sending one shared cell edit.

SHARED WORKBOOK PREVIEW

Shared typing and comment threads

When enabled, each ordinary grid or formula entry, supported rectangular paste, selected cell-formatting change, and confirmed row or column insertion or deletion is saved as a separate shared change before this window updates. This idle window also receives other users’ verified saved changes automatically when the complete shared history and current workbook can be checked safely. Formatting changes only presentation; they do not replace cell values, formulas, or generated ownership. The existing Undo and Redo controls use server-verified personal shared history when an action is available. Shared comments support create, reply, resolve, reopen, editing your own text, and deleting your own comments after confirmation. Deleting a root removes all replies, including other people’s replies. The existing Undo and Redo controls can restore eligible shared comment changes when server history confirms they are available; later changes may affect eligibility. Imported comments without account authorship cannot be edited or deleted here. This is not live co-editing. If an edit is uncertain or rejected, use Shared cell edit to review or retry it; do not re-enter it locally.

Shared typing is off.

Editing sessions

Shared presence is off.

    WHAT-IF ANALYSIS

    Goal Seek

    Preview one numeric input that makes a formula reach a target. Nothing changes until you explicitly apply a converged result.

    Preview limits and tolerances

    Goal Seek opens a detached full calculation, then uses bounded incremental trials when supported. The deadline is cooperative and cannot interrupt an evaluation already in progress. This is not Solver, the full What-If Analysis surface, or Excel-oracle-verified behavior.

    Choose a numeric input and preview the detached calculation.

    FORMULA REVIEW

    Evaluate Formula

    Walk this fresh evaluation's precomputed trace and Step In to captured formula references. Volatile formulas can differ from the saved or cached cell value; navigation reuses this detached calculation.

    Current trace

    Entered formula

    WORKSHEET STRUCTURE

    Row and column outlines

    Group selected rows or columns, then collapse details from the grid gutter or choose a visible outline level.

      PERSONAL DISPLAY

      Personal filter views

      Saved filter criteria are private to your account and linked worksheet. They do not change shared filters or workbook history. Visible totals continue to use Default filters.

      Personal views are private to your account and affect this display only.

      Private display order

      Sort reorders displayed worksheet rows only; addresses and source rows stay in place. Formula keys require current or published results. Bulk range edits are unavailable while a private sort is active.

      Advanced Filter must be cleared in Default before a personal view can be activated.

      IN-CELL VISUALS

      Manage sparklines

      Create compact charts in selected cells from live worksheet values. Sparkline metadata never replaces cell values, formulas, or formatting.

      Create a group from ranges

      Groups on this worksheet

        WHAT-IF ANALYSIS

        Data Table preview

        Evaluate formula targets over one or two bounded numeric input axes in a detached calculation. This preview never changes the workbook.

        Formula targets

        Use stable worksheet selections and one-cell A1 addresses. Two-variable previews support one target.

        Row input axis

        Preview limit

        Axes accept finite decimal numbers separated by commas or new lines. A preview is limited to 1,000 trials and 1,000 output cells. The deadline is cooperative and cannot interrupt an evaluation already in progress.

        Scope: detached preview only. This does not apply changes, persist native Excel Data Tables, implement the full What-If/Solver surface, or claim Excel-oracle verification.

        Choose numeric inputs and formula targets, then preview the detached result.

        WHAT-IF ANALYSIS

        Manage native Data Tables

        Create or update persisted generated ownership from an existing formula-and-axis worksheet layout, or delete a definition without deleting its physical source cells and formatting.

        Choose one or two local input cells. The server derives the orientation and generated output range.

        The full footprint includes headers. Column input: axes down the left, formulas across the top. Row input: axes across the top, formulas down the left. Two inputs: top-left formula, axes above and left. Outputs are generated and cannot be overwritten as ordinary values.

        Choose an existing definition or create a new native Data Table.

        NATIVE TEXT / CSV

        Connections

        Connect one imported native text table to an existing registered app source. This adds an app-specific dataset mapping only; the original connection remains unchanged for export.

        Original native source file: Unavailable. File paths are metadata only: this app never opens, fetches, or executes the original file. Native refresh and on-load settings are not executed.

        Exact header mapping

        Every native table header must exactly match one current registered-dataset column. Review this mapping and the key column before Link.

        Linking or unlinking changes only workbook metadata and supports Undo/Redo. It does not refresh a provider, create a source, or write dataset rows. Refresh All can later use the registered dataset through the workbook’s normal dataset binding.

        Choose a native table and registered source.

        WHAT-IF ANALYSIS

        Scenario Manager

        Save typed worksheet inputs, show a selected scenario through the authoritative calculation service, or create a static Scenario Summary or PivotTable report.

        Definition

        Changing cells

        Up to 32 local cells with explicit number, text, boolean, blank, or preserved native values.

        Each changing-cell row accepts one local cell or a static defined name for one cell. Add range/name expands local rectangles, static names, or comma/space-separated groups into individual rows, each initialized from its own currently available typed value; existing rows keep their edited values. Up to 32 total changing cells include preserved native cells. Summary results also accept local rectangular ranges and defined names, up to 32 distinct cells. Names must use absolute local references; workbook names must identify the worksheet. Name lookup is limited to 500 workbook/owner-worksheet names in this application. Names resolve to fixed addresses when adding rows, saving, or creating a report; later name edits do not change saved addresses. Capture does not calculate: unavailable, stale formula results and errors must be corrected before capture. A PivotTable report uses a static snapshot and does not update when scenarios change. Refreshing it uses only the saved snapshot data. Imported native lexical values are preservation-only. Convert each active native value to an explicit type before Show or Summary. Bounded local structural and range moves translate supported scenario references; unsupported move contexts remain blocked.

        Scenario Manager is ready.

        SCENARIO MANAGER

        Merge scenarios

        Copy saved scenario definitions from another worksheet or a saved versioned workbook. Source cells and workbooks are never changed.

        Review each source definition and edit its destination ID/name before preview. Names must be unique throughout the destination workbook. Native lexical values are preserved as metadata only; merge does not show scenarios or write cells.

        Choose a source worksheet.

        WHAT-IF ANALYSIS

        Solver

        Define a constrained worksheet model, preview a server-verified solution, then explicitly keep it. Nonlinear uses SLSQP, not Excel GRG.

        Definition

        Limits Report holds other decision cells fixed and is available for optimal continuous Linear models. Sensitivity Report gives one-at-a-time coefficient and right-hand-side ranges that preserve the verified basis; it is not a simultaneous-change guarantee and requires an optimal continuous Linear max/min model. Unsupported models remain available for ordinary Keep and Answer Report.

        Variable cells

        Up to 200 numeric inputs with explicit type and optional bounds. Enter a cell or a static named range owned by this worksheet.

        Constraints

        Use local cells/ranges or static names owned by this worksheet. Names may point through bounded static aliases; dynamic, cross-sheet, external, and constant names are not supported. All Different requires bounded integer Evolutionary variables.

        Solver options
        Solver is ready.

        NATIVE WORKBOOK AUTOMATION

        Workbook Actions

        Save typed cell edits, formatting, clears, and assertions as reusable workbook steps. These are application-native actions, not VBA; native Excel cannot execute them. Definitions persist in this app’s private workbook metadata and are retained by .sheet files.

        Macro recorderRecording is off.
        Workbook Actions is ready.

        Step debugger

        Replay a saved action from the original workbook snapshot. Debugging is detached and never changes cells or creates undo history.

        Debugger idle. Debugging replays a saved action without changing the workbook.

        Saved steps and breakpoints

          No debugger diagnostic.

          Debugger trace

            Watch values

              Scheduled runs

              Saved workbook schedule

              Schedules bind to the selected saved action and versioned .sheet document. Parameter edits require a new schedule.

              Scheduled runs may write to the saved workbook unattended and create new versions. They do not save or reload this live grid.

              Save the workbook and selected action before scheduling.

              Trace

                Cell changes

                  Validation

                    DATA TRANSFORM

                    Saved Queries

                    Build an ordered typed transformation, preview it without writing data, then explicitly apply it to a separate dataset.

                    Query editor
                    Query guide

                    Showing all guide references.

                    Parameters

                    Named typed defaults can be referenced by filters, derived columns, and error replacements.

                    Visual steps

                    • Select and rename columns default to strict handling: a missing requested column stops with an error. Skip missing columns ignores absent names; Fill with blanks adds null-valued blank columns (not the literal text “null”). Visual rename mappings remain simultaneous; they are not ordered Power Query M renames. Use Convert to assign a useful type to a newly added blank column.
                    • Duplicate column copies values and type into an independent new column appended at the end. The source must exist, and an existing destination is a collision; no column is overwritten.
                    • Conditional column adds a guided Derive expression with rules evaluated from top to bottom; the first match wins and Otherwise is used when none match. Contains, Starts with, and Ends with match literal text case-sensitively; wildcard characters have no special meaning. Blank differs from empty text, and text, numbers, and Booleans are distinct. It creates or replaces the output column; use Convert for the desired type.
                    • The listed order fills the positions occupied by the requested existing columns while unlisted columns keep their original positions and values (for example, D and B on A, B, C, D gives A, D, C, B). An empty list is identity; list every column for a full reorder. Fill with blanks first appends missing requested fields as null-valued blank columns in the requested order, then applies the same requested-slot rule. Use Convert to give a new blank column a useful type. This is the app’s bounded visual rule, not a claim of full Power Query M equivalence; see the official Table.ReorderColumns reference.
                    • Fill Down and Fill Up replace null values only in current row order; empty text, zero, and false are values, not missing data.
                    • Transform text applies Trim, Trim start/end, Clean, Uppercase, or Lowercase in place on exact selected columns. Null stays null, nontext becomes an unresolved typed error, Clean removes Cc controls, and case conversion is locale-independent.
                    • Transform numbers applies bounded decimal-facing rounding or absolute value in place on exact selected columns. Null and existing errors are preserved; nonnumeric values become unresolved errors. Round up/down affect every fractional value, while the selected midpoint rule applies only to Round nearest.
                    • Date parts append a nullable numeric column and preserve the source. Typed dates, naive datetimes, and explicit fixed-offset datetimezones are accepted; convert text first. Zone parts use the stored local calendar, not UTC; convert to UTC first for UTC parts. Null stays null. Weekday values are 0–6 from the selected first day. No machine or IANA daylight-saving rules are applied.
                    • Shift dates appends a date, datetime, or fixed-offset datetimezone column without overwriting the source. Convert text first. Zones shift by their local Gregorian calendar and retain the explicit offset, clock fields, and 100-nanosecond ticks; this is not an elapsed-time or UTC shift and applies no machine or IANA daylight-saving rules. Nulls are preserved. Month, quarter, and year shifts clamp to the target month’s last valid day; invalid or out-of-range values remain typed errors that block Apply.
                    • Start of period appends the beginning of a selected day, week, month, quarter, or year while preserving the source. Zones use their local date and retain the offset; day, week, quarter, and year starts reset clock fields and 100-nanosecond ticks to midnight. Month start follows Date.StartOfMonth’s date/datetime-only contract and refuses datetimezone; use DateTimeZone.RemoveZone explicitly for that operation. Convert text first. Null stays null. Weeks default to Sunday and can use another first day.
                    • End of period appends the end of a selected day, week, month, quarter, or year and preserves the source. Zones use their local calendar, retain the offset, and end at 23:59:59.9999999, the last 100-nanosecond tick; convert to UTC first for UTC periods. Convert text first. Null stays null. Weeks default to Sunday and can use another first day. No machine or IANA daylight-saving rules are applied.
                    • Extract text selects first/last characters, a zero-based code-point range, or text before/after/between exact literal delimiters. Delimiter occurrences can be counted from either edge; Between searches its end delimiter only after the selected start. Missing matches and nontext values are unresolved errors.
                    • Time and duration parts append a nullable numeric column while preserving the source. Clock parts accept only typed times or timezone-naive datetimes; duration parts accept only typed durations. Convert text first. Components return signed day/hour/minute/second fields; totals measure the complete duration (26 hours has hour component 2 and total hours 26). Fractional seconds are supported; timezone coercion is not performed.
                    • Convert supports date, datetime, datetimezone, time, and duration targets. A datetimezone target accepts ISO date-time text only with an explicit Z or ±HH:MM fixed offset; naive text, date-only text, numbers, and booleans are not inferred as zoned values. A duration target accepts strict signed [-]d.hh:mm:ss[.fraction] text, finite numeric day counts, or an existing typed duration; date, time, and Boolean source values are rejected for that target. Nulls and existing errors follow the selected error policy.
                    • Remove duplicates compares selected values case-sensitively; null differs from empty text and Boolean values differ from numbers. It keeps the first or last matching row in its original position.
                    • Group aggregates: Sum, mean, and median ignore nulls and accept homogeneous numeric or duration inputs; mixed numeric/duration inputs are rejected. Duration medians use ties-to-even at 100-nanosecond tick precision. Standard deviations remain numeric-only. All-null inputs return blank. Sample standard deviation needs at least two numbers; population returns 0 for one. Count counts non-null values, Count distinct ignores null, and Count rows counts all rows.
                    • Keep / remove rows uses a nonnegative whole-number count on the preceding step’s full result; it keeps or removes a contiguous prefix or suffix and preserves retained row order.
                    • Add index column follows current row order and regenerates on refresh, so it is not an immutable primary key. Start and increment are bounded to the safe ±(2^53−1) number range.

                    Power Query M

                    #datetimezone(year, month, day, hour, minute, second, offsetHours, offsetMinutes) constructs an exact Gregorian datetime with an explicit fixed offset. Local calendar fields must form a valid year 1–9999 datetime; offsets must resolve to whole minutes from −14:00 through +14:00. Z input is accepted and canonicalized to +00:00; visual Convert and Table.TransformColumnTypes text conversions require an ISO date-time with explicit Z or ±HH:MM. Naive text, date-only text, numbers, booleans, and null are not inferred as zoned values. Use DateTime.AddZone when assigning an offset to an existing naive datetime. This bounded fixed-offset subset does not apply local-machine or IANA daylight-saving rules.

                    DateTime.AddZone(datetime, offsetHours[, offsetMinutes]) keeps the wall-clock fields and assigns a fixed offset. DateTimeZone.SwitchZone(datetimezone, offsetHours[, offsetMinutes]) keeps the instant and changes its displayed offset; DateTimeZone.ToUtc keeps the instant at +00:00. DateTimeZone.RemoveZone returns the same local calendar and clock fields as a naive datetime. DateTimeZone.ZoneHours and DateTimeZone.ZoneMinutes return the signed offset components. DateTimeZone.ToRecord exposes Year, Month, Day, Hour, Minute, Second, ZoneHours, and ZoneMinutes; DateTimeZone.Type and type datetimezone identify the zoned value kind. Equality, ordering, and subtraction compare UTC instants; arithmetic by a duration preserves the offset and exact 100-nanosecond ticks. Canonical text uses up to seven fractional digits and an explicit ±HH:MM offset. Raw datetimezone values remain literal canonical ISO text with text (@) formatting in linked worksheets and XLSX, and exact strings in CSV, JSON, and Parquet exports; they are not numeric Excel dates. For a numeric UTC worksheet datetime, derive DateTimeZone.RemoveZone(DateTimeZone.ToUtc([Stamp])); numeric Excel serial precision is separate from the exact zone text. Local fields are bounded to years 1–9999, and a UTC conversion that leaves that range is a typed error.

                    The optional format argument to Duration.ToText(duration[, format]) must be null; Duration.From has no culture argument. Applying a duration to a date preserves the date for whole-day offsets and promotes fractional-day offsets to a timezone-naive datetime. Date and datetime offsets use exact 100-nanosecond ticks; results remain bounded to years 1–9999.

                    #time(hour, minute, second) creates an immutable local time. Hour and minute must be finite whole numbers in 0–24 and 0–59; second must be finite and in [0, 60), with fractional digits beyond seven truncated. Hour 24 is valid only when minute and second are exactly zero. Time.From explicitly converts a time, timezone-naive datetime, finite day fraction in [0, 1), or clock text under en-US, en-GB, fr-FR, or de-DE. Strict ISO clock text is HH:MM:SS[.fraction] with up to seven fractional digits; the query value retains exact 100-nanosecond ticks. 24:00:00 is a distinct end-of-day value, not midnight. Time.Hour, Time.Minute, and Time.Second read typed time values or timezone-naive datetimes; null remains null. Number.From(time) returns a day fraction and Text.From(time) returns clock text. Worksheet storage uses a floating numeric day fraction, so arbitrary 100-nanosecond ticks may be approximated. The endpoint is exactly serial 1; ordinary clock formats display it wrapped to midnight, while elapsed [h]:mm:ss displays 24:00:00. Timezone-aware values, date-only values, and unsupported cultures are rejected. This is a bounded local subset without timezone support or full Mashup parity.

                    #duration(days, hours, minutes, seconds) sums signed components before normalization; days, hours, and minutes must be whole finite numbers, while seconds is finite and truncated toward zero to 100-nanosecond ticks. For example, #duration(0, 24, 0, 0) is 1.00:00:00; mixed signs are summed, then normalized. Duration values are immutable signed 64-bit tick counts. Duration.From accepts a duration, bounded duration text, or finite numeric day count; Duration.FromText parses bounded signed day/clock forms, and Duration.ToText emits canonical [-]d.hh:mm:ss[.fraction] text with up to seven fractional digits. Duration.Days, Duration.Hours, Duration.Minutes, and Duration.Seconds return signed components; Duration.TotalDays, Duration.TotalHours, Duration.TotalMinutes, and Duration.TotalSeconds return signed totals. Number.From(duration) returns day fractions and Text.From(duration) returns canonical text. Duration arithmetic uses exact ticks for bounded duration addition, subtraction, scaling, and division; adding/subtracting a duration to/from time wraps at 24 hours. Date/datetime offsets have bounded precision and range rules, not full host parity. Worksheet storage uses floating day fractions and may approximate 100-nanosecond ticks. Negative duration values are preserved by the model, but native display in Excel's 1900 date system has compatibility limits; elapsed [h]:mm:ss is the intended display. Timezone arithmetic and full Mashup parity are unsupported.

                    Text.Trim(text[, characters]), Text.TrimStart, and Text.TrimEnd remove selected edge characters; Text.Clean removes control characters; Text.Upper and Text.Lower change case. The visual Transform text step is in-place, preserves null and existing errors, and reports nontext values as unresolved errors. Text cleanup and case behavior here are bounded local rules, not full Power Query parity.

                    Number.Round(number[, digits[, roundingMode]]) rounds to the nearest value; omitted or null digits means zero, and the default midpoint mode is RoundingMode.ToEven. The mode constants are RoundingMode.Up (0), RoundingMode.Down (1), RoundingMode.AwayFromZero (2), RoundingMode.TowardZero (3), and RoundingMode.ToEven (4). Number.RoundUp, Number.RoundDown, Number.RoundTowardZero, and Number.RoundAwayFromZero accept an optional digits argument; Number.Abs returns absolute value. The visual Transform numbers step preserves nulls and existing errors, while nonnumeric selected values remain unresolved errors. Its decimal-facing policy is bounded and is not full Power Query or binary floating-point parity.

                    Text.Start, Text.End, Text.Middle, Text.BeforeDelimiter, Text.AfterDelimiter, and Text.BetweenDelimiters extract text by character count or literal delimiters. The visual Extract text step indexes Unicode code points (not grapheme clusters), supports occurrences from either edge, and searches a Between end delimiter only in the suffix after the selected start. Its missing-match and nontext behavior is a bounded local rule, not full Power Query parity.

                    List.IsEmpty(list) tests whether a list has no items. List.RemoveMatchingItems(list1, list2[, equationCriteria]) removes matching items; the default or explicit null comparer uses typed scalar equality, while non-null comparers and structured compared values are unsupported here. For rows without forced errors, an equivalent expression for removing rows whose cells are all null or exact empty text is Table.SelectRows(Input, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))). Actual errors forced while reading fields follow existing M error propagation, so equivalence is not promised on error rows.

                    List.Combine(lists) flattens one list level in order; deeper nested members remain intact. Table.ExpandListColumn(table, column) emits one row per list member and duplicates other fields; an empty list removes its row, while null locally emits one null row. Table.ExpandRecordColumn(table, column, fields[, newNames]) replaces a record column with selected fields, defaulting output names to field names. Null records yield null fields; missing selected fields are typed errors. New names must be unique and cannot collide with existing columns; unselected fields remain lazy. For a nested table column, Table.ExpandListColumn emits its rows as records; these records can then be projected with Table.ExpandRecordColumn. These functions have aliases/callbacks. Lists, records, and nested tables are bounded private cells and cannot be returned unexpanded as final query output. Unsupported values or operations fail rather than silently dropping data. Shared work, row, cell, byte, and retained-graph budgets apply. This is a bounded local subset, not full Power Query parity.

                    Text.Combine(list[, separator]) joins text values; an omitted or null separator means empty text. Null members are ignored, empty text members remain, and nontext members fail with m_type_error rather than being stringified. Table.TransformColumns can reduce private lists/records to scalars or consistently transform their private kind. An explicit scalar output type clears the old private kind, including empty/all-null results; without a hint, ambiguous null/empty results retain the old kind. Mixed structured kinds and conflicting hints fail. Shared list, work, and retained-graph budgets apply. These are bounded local rules, not full Power Query parity.

                    Text.Start(text, count) and Text.End(text, count) return up to count code points; zero returns empty text. Text.Middle(text, start[, count]) and Text.Range(text, offset[, count]) take text from a zero-based position. All six functions return nullable text. Positions count Unicode code points, as Text.Length does, not grapheme clusters. Counts, starts, and offsets must be finite, nonnegative whole numbers; booleans and fractions are invalid. For Middle and Range, an omitted or null count means the rest of the text. Middle clamps an overlong count and returns empty when its start is past the end. Range requires the requested range to fit; an offset past the end or a requested range past the end raises m_invalid_text_range. An offset exactly at the end is valid with zero, omitted, or null count and returns empty. Text.PadStart(text, count[, character]) and Text.PadEnd(text, count[, character]) add characters to reach a length and never truncate text; the omitted or null padding character is a space, and an explicit character must be one Unicode code point. A null source returns null after its options are validated. Existing cell errors pass through. try expression returns a record with HasError and either Value or Error; try expression otherwise fallback and try expression catch () => fallback provide fallback values, while catch (e) => ... can inspect fields such as e[Reason]. Author an error with error "message", error [Reason="BusinessRule", Message="...", Detail=[...], ErrorCode="B42"], or error Error.Record(reason[, message[, detail[, parameters[, errorCode]]]]). A successful try does not force deferred list or record members; put the member read inside try when it should be caught. Resource, security, and unsupported-feature errors cannot be recovered. Inputs and results share a 65,536-byte UTF-8 limit and work limits. Values are not silently converted to text; use Text.From explicitly. Examples: preserve leading zeroes with Text.PadStart([ID], 6, "0"), or use Start/End for prefixes and suffixes and Middle/Range for category extraction. These are bounded local rules, not full Power Query or Excel parity.

                    Text.BeforeDelimiter(text, delimiter[, index]) and Text.AfterDelimiter(text, delimiter[, index]) return nullable text. Text.BetweenDelimiters(text, startDelimiter, endDelimiter[, startIndex[, endIndex]]) also returns nullable text; indices default to zero and accept a nonnegative whole-number occurrence or {index, RelativePosition.FromStart|RelativePosition.FromEnd}. BetweenDelimiters counts its end occurrence only in the suffix after the selected start. Text.Split(text, delimiter) uses a full delimiter; Text.SplitAny(text, delimiters) uses each delimiter character. Both retain empty fields. Local policy: missing/out-of-range occurrences raise m_delimiter_not_found; empty delimiters raise m_invalid_delimiter, except empty SplitAny delimiters return the original value as one field. Unicode indexing follows code points; shared item, work, and retained-graph budgets apply. These are bounded local rules, not full Power Query parity.

                    List.Accumulate(list, seed, (state, item) => expression) folds items in order and returns the seed for an empty list. It supports scalar, list, record, table, and function states. List.Generate(() => initial, each condition, each next[, each selector]) lazily emits states while the condition is true; a null or omitted selector returns each state. Counting evaluates generation but does not force selector outputs. This bounded runtime requires logical conditions and enforces item, work, and retained-graph limits. List & is lazy concatenation; record & keeps left field order, lets right fields win, and leaves merged fields lazy. Text & remains concatenation. Deeply deferred record/function states can hit evaluation or retained-graph limits. Example running totals: List.Accumulate(Input[Amount], {}, (state, item) => state & {List.Last(state, 0) + item}). Example record state: List.Accumulate(Input[Amount], [Total = 0, Count = 0], (state, item) => [Total = state[Total] + item, Count = state[Count] + 1]). List.Transform maps list items; List.Select keeps items whose predicate is true. List.Reverse lazily reverses member order; List.Sort stably sorts compatible values, with optional order, unary key selector, selector/order pair, or binary comparator. Navigation also includes List.First/List.Last with optional defaults, List.FirstN/List.LastN and List.Skip with counts or unary predicates, List.Range, and List.RemoveNulls. Counts and offsets are nonnegative whole numbers; Skip defaults to one, a null Range count keeps the remainder, and LastN requires its second argument. Predicates stop at false or null, while LastN preserves source order. Example: let Clean = List.RemoveNulls(Input[Amount]), Head = List.FirstN(Clean, Parameters[Count]), Tail = List.LastN(Clean, 2), Window = List.Range(List.Skip(Clean, 1), 0, 2) in Table.FromColumns({Head, Tail, Window}, {"Head", "Tail", "Window"}).

                    Power Query M uses the bounded server interpreter with Input and Parameters. Supported functions include Table.SelectRows, Table.SelectRowsWithErrors, Table.RemoveRowsWithErrors, Table.AddColumn, Table.AddIndexColumn, Table.TransformColumnTypes, Table.TransformColumns, Table.ReplaceValue, Table.ReplaceErrorValues, Table.Unpivot, Table.UnpivotOtherColumns, Table.Pivot, Table.SelectColumns, Table.RemoveColumns, Table.RenameColumns, Table.DuplicateColumn, Table.Sort, Table.FirstN, Table.LastN, Table.RemoveFirstN, Table.RemoveLastN, Table.ReverseRows, Table.AlternateRows, Table.FillDown, Table.FillUp, Table.Distinct, Table.Group, Table.Combine, Table.RowCount, Table.ColumnNames, Table.HasColumns, Table.Column, Table.ToColumns, Table.ToRows, List.Generate, List.Sort, List.Reverse, List.Distinct, List.Sum, List.Average, List.Min, List.Max, List.Count, and List.NonNullCount.

                    Amounts{0} returns the first list item; Input{0} returns the first table row as a record. A key selector such as Input{[ID="row-001"]} must match exactly one row; duplicate matches are errors. Follow a selected row with [Field], as in Input{0}[Amount]. A trailing ? makes only a missing selection return null, as in Amounts{99}? or Input{[ID="absent"]}?; without it, a missing item or row is an error. Optional access does not hide invalid indices, duplicate matches, field-access errors, or source errors. Indices must be finite, nonnegative whole numbers; booleans and fractions are invalid. Key fields must be scalar values and are compared without text coercion. Row access is lazy, so unselected fields are not forced. These are bounded local rules, not full Power Query parity.

                    Record field access uses brackets: row[Amount] reads one field, and row[Amount]? returns null only when that field is absent. Record projection uses an ordered field list, for example row[[ID],[Note]]; a trailing ? permits missing projected fields, as in row[[ID],[Region]]?. Table projection uses the same ordered form: Input[[Note],[ID],[Amount]]? keeps that output order and locally fills an absent field with null. The implicit row form each [Region]? reads the current row without forcing unrelated fields. Record projections leave unselected fields lazy; table projections read selected columns after source admission. Optional access does not swallow a null target, a source error, or an error while reading a selected field. A selected field is callable only when it holds an admitted builtin or lambda; host functions and general dynamic evaluation remain unavailable. These are bounded local rules, not full Power Query parity.

                    For schema drift and optional columns, Table.SelectColumns and Table.RemoveColumns accept one column name or an ordered list of names. Table.RenameColumns accepts one old/new name pair or an ordered list of pairs. Their optional third missingField argument defaults to MissingField.Error (also 0): an absent requested name still fails unless you explicitly choose MissingField.Ignore (1) or MissingField.UseNull (2). SelectColumns with UseNull inserts a null-filled field at its requested position; Ignore skips absent names. RemoveColumns with Ignore or UseNull skips absent names and never creates a result column. RenameColumns processes pairs left to right: Ignore skips a pair whose source is absent before checking its target, while UseNull appends a null-filled target for an absent source. Renaming onto a real existing column is still a typed collision error. Existing column types and nested values follow retained or renamed fields; UseNull does not infer a useful type for an all-null new column, so explicitly use Table.TransformColumnTypes (for example, type nullable text) when a downstream query needs a typed blank field. These bounded local rules retain the existing query, row, cell, byte, work, and evaluation guards; they are not full Power Query or Mashup compatibility.

                    Record navigation helpers operate on admitted interpreter records. Field names are exact, case-sensitive text; they can be supplied dynamically, as in Record.Field(_, Parameters[Field]). Record.Field requires the named field and errors when it is absent. Record.FieldOrDefault(_, "Region", "unknown") uses its default only for an absent field; an existing null, false, zero, or empty text value is preserved. Its default is an ordinary eager function argument, not lazy like ?? and not an error handler. Record.HasFields(_, {"ID", "Amount"}), Record.FieldCount(_), and Record.FieldNames(_) inspect names or presence without forcing field values; for example, Text.Combine(Record.FieldNames(_), ","). Record.FieldValues([First=0, Later=error "unused"]){0} and Record.ToList([First=false, Later=error "unused"]){0} preserve record order and force only the selected member. Existing query, work, and retained-graph bounds apply. These functions inspect interpreter records only; host-object inspection and dynamic evaluation remain unavailable. This is a bounded local subset, not full M or Mashup compatibility.

                    The Power Query M null-coalescing operator ?? returns its left operand unless it is null, then evaluates the right operand: [Amount] ?? 0, [Region]? ?? "unknown", or Input{99}? ?? [ID="missing"]. Fallbacks can be chained, as in [Primary] ?? [Backup] ?? 0. Zero, false, and empty text are values, not missing data. The right operand is lazy and is evaluated only when the left operand is null. This is null-only fallback, not error handling; use try expression otherwise fallback for recoverable errors. Coalescing has lower precedence than logical or, so use parentheses to clarify compound conditions. Both operands are still parsed and admitted, so a skipped fallback cannot hide unsupported or unsafe code. Existing query bounds and budgets still apply; this is a bounded local subset, not full Power Query or native Mashup parity.

                    The M type operators is and as test or assert types; they do not convert values. For example, [Amount] is number returns a logical value, false for a nonmatching admitted kind, while [Amount] as nullable number preserves a compatible original value or errors. Numeric text stays text, and booleans are not numbers. Use try ([Amount] as number) otherwise 0 to recover from a catchable cast error; ?? handles null only, not errors. Parentheses matter when casting before arithmetic: ( [Amount] as number ) + 1. Supported primitive type targets are any, anynonnull, none, null, logical, number, text, binary, date, datetime, datetimezone, duration, time, list, record, table, function, and type. These primitive type keywords are legal targets; arbitrary dynamic, custom, or alias target expressions and unsupported value constructors remain unavailable. A nullable modifier applies to primitive targets and permits null, as in [Amount] as nullable number and ([Region]? as nullable text) ?? "unknown". List, record, table, and function values are classified shallowly without forcing members. Existing query bounds and budgets apply; this is a bounded local subset, not full M or Mashup compatibility.

                    Table.ColumnNames(table) returns exact column names in source order without reading rows. Table.HasColumns(table, columns) checks exact, case-sensitive names; an empty requested list is true. Table.Column(table, column) returns values in row order. Table.ToColumns(table) returns lists in column order, and Table.ToRows(table) returns rows as ordered lists. Table.FromColumns(columns[, names]) and Table.FromRows(rows[, names]) rebuild a table with those names and order. These bounded local operations preserve nulls, booleans, and literal text without coercion; zero-column Table.ToRows retains one empty row per source row. They are a local subset, not full Power Query parity.

                    Table.FirstN(table, countOrCondition) and Table.LastN(table, countOrCondition) require a count or supported unary row condition; conditions stop at the first false or null row. Table.RemoveFirstN(table[, countOrCondition]) and Table.RemoveLastN(table[, countOrCondition]) remove contiguous prefixes or suffixes and default to one row when omitted; a supported unary condition scans from that edge through the first false or null row. Retained rows stay in source order. These are bounded local rules, not full Power Query parity.

                    Table.ReverseRows(table) reverses the full input table. Table.AlternateRows(table, offset, skip, take) keeps the initial offset rows, then repeatedly skips skip rows and keeps take rows; kept rows retain original order and the final cycle is clamped to the input. Offset, skip, and take are nonnegative safe whole numbers; skip and take cannot both be zero. These are bounded local rules, not full Power Query parity.

                    Table.SelectRowsWithErrors(Input, {"Amount"}) keeps rows with typed errors in the listed columns; Table.RemoveRowsWithErrors(Input) removes rows with typed errors across all columns. Omitted or null columns means all columns; an explicit list checks only those fields. Literal text that resembles an error is not a typed error. Unresolved typed errors still prevent Apply until repaired with Table.ReplaceErrorValues.

                    Table.Combine({Sources[Jan], Sources[Feb]}) consolidates up to eight tables in authored row order, keeps first-seen column order, and pads missing fields with null. An optional unique column-name list or scalar-field table type projects ordered fields; type hints do not cast values. Consistent nested table columns remain available for expansion.

                    Table.SplitColumn(Input, "Details", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv, CsvStyle.QuoteAfterDelimiter), {"Name", "Amount"}, null, ExtraValues.Ignore) replaces a text column with ordered fields. CSV quoting supports quoted delimiters, doubled quotes and embedded newlines; QuoteStyle.None and CsvStyle.QuoteAlways are also supported. Missing fields use the default; overflow can be ignored or reported with ExtraValues.Error. ExtraValues.List is unsupported because list-valued table cells are not admitted. Local policies: omitted/null quote options use None and QuoteAfterDelimiter; omitted/null output names infer the maximum successful row width, minimum one. Numeric output counts must be positive; zero is locally unsupported. A bounded unary M lambda returning a list can also supply fields.

                    Table.TransformColumns applies a callback to selected columns and can include an output type, a default callback for other columns, and a MissingField policy. Table.ReplaceValue supports exact Replacer.ReplaceValue, literal Replacer.ReplaceText, and row-aware custom replacers; Table.ReplaceErrorValues replaces typed cell errors only. Callback helpers include Number.FromText, Text.From, Text.Length, and Text.Repeat. For example: Table.TransformColumns(Input, {{"Amount", each Number.FromText(Text.Trim(_), "en-US"), type number}}, null, MissingField.Ignore). Supported callbacks and scalar conversions are bounded local behavior, not full Power Query parity.

                    Table.Unpivot follows its selected-column list; Table.UnpivotOtherColumns keeps the listed columns as keys and unpivots the remaining columns. Both skip null values. Table.Pivot accepts a list of text headings and an optional null or unary aggregation function. It keeps key columns in source order, groups in first-seen order, emits headings in requested order, and fills missing headings with null. Without an aggregation function, duplicate key/heading values become typed cell errors. List.Distinct takes a list and optional unary selector, keeping first-seen typed scalar values. Admitted aggregates are List.Sum, List.Average, List.Median, List.Min, List.Max, List.Count, and List.NonNullCount. For example: let Long = Table.UnpivotOtherColumns(Input, {"Customer Ω", "Region"}, "Month", "Amount"), Wide = Table.Pivot(Long, List.Distinct(Long[Month]), "Month", "Amount", List.Sum) in Wide. These reshape and list rules are bounded local policies, not full Power Query parity.

                    For example: Table.TransformColumnTypes(Input, {{"Amount", type number}, {"When", type nullable datetime}}, "fr-FR"). A single pair is also accepted; a list can contain up to 256 unique column/type pairs, and an empty list leaves the input unchanged. Supported types are number, Int64.Type, text, logical, date, and datetime, optionally nullable; Number.Type, Text.Type, Logical.Type, Date.Type, and DateTime.Type aliases are also accepted.

                    The optional third argument is a culture or [Culture="fr-FR", MissingField=MissingField.UseNull]. Cultures are en-US (default), en-GB, fr-FR, and de-DE. MissingField.Error is the default; MissingField.Ignore skips absent columns and MissingField.UseNull adds them with null values. Numeric text uses strict locale separators; dates accept ISO or locale numeric forms, and timezone-bearing datetimes are rejected. Date serials use the OLE base date, not the worksheet date epoch. Parsing and formatting are bounded local policies, not full Power Query or Excel parity.

                    #date(year, month, day) creates a Gregorian date from year 1 through 9999; it has no fictitious Excel 1900-02-29. Date.From(value[, culture]) explicitly converts a date, naive datetime, number using the OLE base 1899-12-30, or date text using en-US by default (also en-GB, fr-FR, and de-DE). It returns null for null; unsupported cultures, values, and timezone-aware datetimes fail closed. Date extractors accept typed dates, naive datetimes, and explicit fixed-offset datetimezones; zone extraction uses local calendar fields, so convert to UTC first when UTC parts are intended. Extractors do not coerce untyped text or numbers; use Date.From for supported explicit conversions. Date.Year, Date.Month, Date.Day, Date.DayOfYear, Date.DaysInMonth, and Date.QuarterOfYear return numeric parts; Date.DayOfWeek(date[, firstDay]) returns Sunday 0 through Saturday 6 when Day.Sunday is used as the first day. These are bounded local calendar rules, not full Power Query parity.

                    #datetime(year, month, day, hour, minute, second) creates a timezone-naive Gregorian datetime from year 1 through 9999. Year, month, day, hour, and minute must be finite numeric whole numbers (year 1–9999, month 1–12, day valid for that month, hour 0–23, minute 0–59); seconds must be a finite number with 0 ≤ second < 60. Booleans, text, and null are not coerced. Fractional seconds are truncated to seven decimal places (100-nanosecond ticks), so 59.9999999 remains 59.9999999. The value preserves exact bounded 100-nanosecond ticks; this does not add timezone behavior or full Power Query parity. Arguments must form a valid calendar date and time; invalid values remain typed errors. #date and #datetime are safe first-class aliases: let MakeDate = #date in MakeDate(2024, 2, 29) and let Make = #datetime in Table.AddColumn(Input, "Made", each Make(2024, 2, 29, 12, 30, 0), type datetime). For example, Date.EndOfMonth(#datetime(2024, 2, 29, 23, 59, 59.9999999)) returns a naive datetime ending at 23:59:59.9999999, the last 100-nanosecond tick of that day. These constructors work in ordinary saved M queries under existing work, size, and error guards; other constructors such as #table are not enabled as aliases.

                    Date.AddDays(date, days), Date.AddWeeks(date, weeks), Date.AddMonths(date, months), Date.AddQuarters(date, quarters), and Date.AddYears(date, years) each require exactly two arguments and accept a nullable typed date, timezone-naive datetime, or explicit fixed-offset datetimezone plus a signed whole finite offset (an integer or integral number). Day and week offsets count local calendar days and weeks; month, quarter, and year shifts clamp to the target month’s last day while preserving clock fields, the explicit zone offset, and exact 100-nanosecond ticks. Results use real Gregorian years 1–9999; an out-of-range result is a typed error. For example, Date.AddMonths(#date(2024,1,31), 1) is 2024-02-29 and Date.AddQuarters(#date(2024,1,31), 1) is 2024-04-30. Convert text or numeric inputs explicitly with Date.From; create typed datetimes with Table.TransformColumnTypes and type nullable datetime. Null source values return null only after the offset is validated. Null, boolean, fractional, or non-finite offsets produce typed errors. For datetimezones, results use the source local calendar and fixed offset, without machine/IANA daylight-saving rules. These are bounded local whole-offset rules, not complete Power Query or fractional-offset semantics.

                    Date.StartOfDay(date), Date.StartOfWeek(date, firstDayOfWeek), Date.StartOfMonth(date), Date.StartOfQuarter(date), and Date.StartOfYear(date) start the containing calendar period. A date stays a date; naive datetimes stay datetimes, and datetimezones use their local date while retaining the fixed offset. Day, week, quarter, and year starts reset clock fields and 100-nanosecond ticks to midnight. The week option is optional; omitted or null means Sunday, and Day.Sunday is 0 through Day.Saturday at 6 (for example, Day.Monday is 1). Null source values return null after the week option is validated. Date.StartOfMonth follows its date/datetime-only contract and refuses datetimezone; use DateTimeZone.RemoveZone explicitly for month starts. Other listed starts accept fixed-offset datetimezones and use local calendar fields. Inputs must be typed dates, datetimes, or (where supported) datetimezones: convert supported text or numbers with Date.From, or type datetime columns with Table.TransformColumnTypes and type nullable datetime. Supported years are 1–9999; a week start before year 1 produces a typed error. These are bounded local rules, not full Power Query or timezone semantics; no machine or IANA daylight-saving rules are applied.

                    Date.EndOfDay(date), Date.EndOfWeek(date[, firstDayOfWeek]), Date.EndOfMonth(date), Date.EndOfQuarter(date), and Date.EndOfYear(date) end the containing Gregorian period for typed dates, naive datetimes, or explicit fixed-offset datetimezones. Zones use their local date, retain the fixed offset, and end at the local period’s 23:59:59.9999999, the last 100-nanosecond tick; use UTC conversion first for UTC periods. Dates stay dates; datetimes end at 23:59:59.9999999. The week option is optional; omitted or null means Sunday, with Day.Sunday as 0 through Day.Saturday as 6. Null source values return null after any explicit weekday is validated; existing query error/work guards still apply. Convert text or numeric inputs explicitly with Date.From; invalid values and out-of-range results remain typed errors. No machine or IANA daylight-saving rules are applied. These are bounded local rules, not full Power Query parity.

                    Table.AddIndexColumn defaults to start 0 and increment 1; null uses those defaults, and Number.Type or Int64.Type may be supplied as the column type. Numeric conversion and rounding are local bounded policies, not full Power Query or Excel parity.

                    For Table.Distinct, omitted/null columns select all columns and a single string or string list selects columns; deterministic first-row retention is local policy, not a general Power Query guarantee.

                    Table.Group(Input, keys, aggregations) requires scalar keys; private list/record keys fail with m_type_error, and nested-table keys are unsupported. Nonkey list, record, and nested-table columns remain available intact inside each subgroup. Aggregates may return lists, records, or tables; use matching List.Type or Record.Type hints where needed. Reduce or expand private results before final query output. GroupKind.Global uses first-seen groups and GroupKind.Local groups consecutive runs as application ordering policy; Power Query does not guarantee output row order. A null comparer keeps default behavior; non-null comparers are unsupported. Shared work, row, cell, byte, and retained-graph budgets apply.

                    List.Count counts every item, including nulls; List.NonNullCount counts non-null items; and Table.RowCount counts physical rows. These structure/count operations need not inspect or propagate typed-error payloads in unreferenced values, unlike value aggregates such as Sum or Min.

                    List.Sum, List.Average, List.Median, List.Min, and List.Max accept bounded materialized scalar lists. Sum, Average, and Median ignore nulls and accept homogeneous numeric or duration values; mixed numeric/duration inputs are rejected. Duration averages truncate toward zero at tick precision; even-count duration medians use ties-to-even. Min and Max compare one compatible scalar family and include null by default, where null sorts below non-null values. Standard deviation remains numeric-only and rejects nulls. Typed cell errors remain errors, rather than being converted to text or skipped. List scans are capped at 250,000 items, each UTF-8 text value/output at 64 KiB, and total list text at 16 MiB. Numeric aggregates use exact binary-ratio accumulation with one final float conversion as a local stability policy, not general M double-rounding equivalence; a nonzero result that underflows to zero is rejected. Unsupported values, mixed comparison families, timezone-aware datetimes, and Decimal-precision aggregation are not admitted. These are deterministic local subset rules, not full Power Query parity.

                    Data model

                    Data model steps use repeatable rows for registered table aliases, one-to-many relationships, and report groupings, plus reusable DAX measures. Advanced report filters use typed JSON. Relationships require unique one-side keys and matched, nonblank many-side keys.

                    Model limits: 7 additional tables, 24 relationships, 128 measures, 32 group-by fields, 256 filters, and 32,767 characters per DAX expression.

                    Parameters

                    Ordered steps

                    No query preview yet.

                    Saved Queries is ready.

                    DATA TRANSFORM

                    Refresh Queries

                    Replay each materialized output's last-applied recipe snapshot in dependency order. Dataset writes are transactional and are not part of Workbook Undo.

                    Materialized query outputs

                    Select up to 16 root outputs. Dependencies are included automatically from their last successful applied snapshots.

                    Loading refreshable query outputs…

                    Dependency-ordered preview

                    Preview is read-only. Apply remains unavailable until the complete selected graph is current and successful.

                    Choose outputs and preview the refresh plan.

                    Refresh Queries is ready.

                    REFRESH ALL

                    Review workbook connections

                    This read-only review finds registered external connections that feed workbook-bound tables and Model/DAX reports. No source data is fetched until you choose Start refresh.

                    Registered connections in scope

                    Only registered raw-source leaves used by this workbook are listed. Unregistered raw data remains stored-only; unrelated connections are not refreshed.

                    Reviewing the current workbook scope…

                      Reviewing the current workbook scope…

                      Sign in

                      Use an Analyst Studio team account

                      SCENARIO BUILDER

                      New scenario

                      Create a saved assumption path for the selected model.

                      Policy actions

                      Adjust an exogenous input or add an endogenous equation shock over a quarter range.

                      Finding model variables…