Every column of the eleven reporting files in a Parquet snapshot — the derived, denormalised reporting view — with its physical type, whether it can be empty, and what it holds. It is a lookup table for data engineers and report developers who are already reading the export and need to know what a column means; for how snapshots are laid out and how to tell a finished one from a partial write, see Parquet export.
Contents
- reportActivity.parquet
- reportActivityPeriodized.parquet
- reportResource.parquet
- reportCalendar.parquet
- reportProfile.parquet
- reportStructure.parquet
- reportStructureElement.parquet
- reportActivityStructureElement.parquet
- reportResourceAssignment.parquet
- reportSuccessor.parquet
- reportSchedule.parquet
How to read these tables
Each section lists the fixed columns of one file: the columns every snapshot of that file has, on every deployment. Metadata columns are extra, differ per customer, and are covered separately below.
Every column is physically nullable. The writer emits an optional Parquet field for all of them, so the file's schema marks nothing as required. The Empty? column therefore describes the data rather than the schema:
never— the value is a non-optional part of the entity and every row carries one.possible— the value is genuinely optional, and a consumer has to handle null.
A consumer that tries to read a non-null constraint out of the schema will not find one.
Column order is not a contract. Columns are discovered by reflection over the domain model, most-derived declarations first and inherited ones last — which is why Id and Created sit at the end of almost every table rather than the start. These tables list them in the order the file actually stores them, but that order can shift when the model changes. Address columns by name.
Enum columns carry names, not numbers. Where a column is an enum its permitted values are listed under the table. This is worth checking if you are moving a query over from the REST export, which serves the same values as integers alongside a separate …Text field: compare a Parquet enum column against a number and you get an empty result with no error to tell you why.
Revisions are columns, and the two big files name them differently. Both denormalise the revision comparison into columns, so comparing Live against a baseline at one cut-off is a comparison between columns of one file — no join, no filter. But the naming is not consistent between them:
| Live | Baseline | Original baseline | Current | Revised | |
|---|---|---|---|---|---|
reportActivity.parquet suffixes |
Start |
StartBaseline |
StartBaselineOriginal |
StartCurrent |
StartRevised |
reportActivityPeriodized.parquet prefixes |
PlannedHours |
BaselinePlannedHours |
OriginalBaselinePlannedHours |
CurrentPlannedHours |
RevisedPlannedHours |
In both, the bare form is Live. Authoring a measure against the wrong convention is the most common way to get a plausible number out of the wrong column.
BaseLine is capitalised inconsistently, and it is not a typo in this page. Most reporting files carry a column pointing back at the planning row of each revision, and the baseline one is spelled with a capital L in five files and a lowercase l in four:
| Spelling | Files |
|---|---|
BaseLine…Id |
reportResource, reportCalendar, reportProfile, reportResourceAssignment, reportSuccessor |
Baseline…Id |
reportActivity, reportStructure, reportStructureElement, reportSchedule |
OriginalBaseline…Id is lowercase l everywhere. Code that builds a column name by concatenating a revision name onto an entity name will silently miss half of these, so read the spelling off the table in each section rather than deriving it.
Obsolete columns
Progress is only ever reported against Live scope. An actual — earned hours, expended hours, current progress — attached to any other revision therefore carries no meaning, even though the column is still written and still holds a number. Eight columns are affected, and each is marked Obsolete. where it appears below:
| File | Obsolete | Use instead |
|---|---|---|
reportActivity.parquet |
EarnedWorkHoursAtCutoffPeriodicBaseline |
EarnedWorkHoursAtCutoffPeriodic |
reportActivity.parquet |
EarnedWorkHoursAtCutoffCumulativeBaseline |
EarnedWorkHoursAtCutoffCumulative |
reportActivity.parquet |
CurrentProgressBaseline |
CurrentProgress |
reportActivityPeriodized.parquet |
BaselineEarnedHours |
EarnedHours |
reportActivityPeriodized.parquet |
OriginalBaselineTotalMinusActualHours |
TotalMinusActualHours |
reportActivityPeriodized.parquet |
BaselineTotalMinusActualHours |
TotalMinusActualHours |
reportActivityPeriodized.parquet |
CurrentTotalMinusActualHours |
TotalMinusActualHours |
reportActivityPeriodized.parquet |
RevisedTotalMinusActualHours |
TotalMinusActualHours |
The rule is about actuals, not about the word "earned". It reaches a column two ways — the column may be an actual, as the earned-hours and progress ones are, or it may be derived from one. The four TotalMinusActualHours variants are the derived case: each subtracts hours expended from that revision's planned total, but the hours expended are always Live, so a non-Live variant silently mixes one revision's estimate with another's actuals. The bare TotalMinusActualHours is Live on both sides and is the only one that holds together.
Two edges worth knowing, so the rule is not over-applied:
- Estimates keep every revision variant.
PlannedProgressBaselineandTotalFloatHoursBaselinesit immediately besideCurrentProgressBaselineand are perfectly valid — planned progress and float are estimates, and estimates are comparable across all five revisions. Dates and planned hours likewise, including theTotalPlannedHours,PlannedHours,PlannedLoad,CalendarHoursandRemainingHoursfamilies that sit beside the retiredTotalMinusActualHoursvariants. ActualWorkHoursAtCutoffPeriodicandActualWorkHoursAtCutoffCumulativehave no non-Live variants at all, so there is nothing there to avoid.
Metadata columns
Alongside the fixed columns above, a file can carry one column per metadata field. Only two reporting files do: reportActivity.parquet and reportSchedule.parquet. Every other reporting file has fixed columns only, and each section below says so.
The asymmetry with the planning dataset is deliberate, not an oversight: resource.parquet and resourceAssignment.parquet carry metadata columns, but reportResource.parquet and reportResourceAssignment.parquet carry none. If you are looking for a resource metadata field in the reporting dataset, it is in the planning files.
For reportActivity.parquet, the set is not driven by your schedule type configuration. It is driven by the values that are actually there: the export collects the distinct metadata fields that have a value on the rows in scope, so a field configured for your deployment but never populated produces no column at all. Three consequences worth planning for:
- The column set differs between customers, between two schedules of one customer, and between two cut-offs of the same schedule. A field populated for the first time appears as a new column in the next snapshot only, and earlier snapshots are not rewritten to gain it.
- The scope is the report schedule and the revision being exported —
reportActivity.parquetcarries the fields with values on the report activities of this report schedule, for that revision. A non-active revision is exported planning-only, so it has no reporting file to carry them at all. - Numeric types collapse. A metadata field's numeric value is stored in a single numeric column whatever its declared type, so integer, decimal and floating-point fields all arrive as
double. Boolean fields arrive asboolean, date fields astimestamp, and everything else asstring.
reportSchedule.parquet is the exception: it is driven by configuration as well. It carries one column for every schedule-level metadata field configured on the report schedule's type, whether or not the report schedule has a value for it — a configured field with no value is a column of nulls, not a missing column — plus a column for any other schedule-level field the report schedule does carry a value for. Report schedule metadata can be edited in Analytics, so the values are the ones held when the snapshot's reporting files were written.
A metadata column's name is not its identity. Names are sanitised and de-duplicated against the names already taken, so a metadata field can arrive under a suffixed name — a field called Description becomes Description_2, because the fixed Description column claimed the name first. No two fixed columns collide anywhere in the export, so a _2 or _3 suffix is always a metadata field that lost a name race, either against a fixed column or against a metadata field resolved before it. The suffixes are handed out in order, so adding a field upstream can move an existing column from _2 to _3.
Resolve metadata columns through _manifest.json, which maps each physical column back to its IlapId, before combining snapshots or comparing deployments. Parquet export covers the manifest in full.
reportActivity.parquet
One row per activity, with the dates, work-hour totals and progress, and each reference revision carried as its own column. Date drift is measured here and nowhere else.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| Description | string | possible | Free-text description of the activity. |
| IsCancelled | boolean | possible | Whether the activity has been cancelled. |
| CancelledDate | timestamp | possible | When the activity was cancelled. Empty unless it was. |
| IsDeleted | boolean | never | Whether the activity is marked deleted in the reporting view. |
| DeletedDate | timestamp | possible | When the activity was marked deleted. Empty unless it was. |
| ActualFinish | timestamp | possible | When the activity actually finished. Empty until it has. |
| ActualStart | timestamp | possible | When the activity actually started. Empty until it has. |
| Updated | timestamp | possible | When the reporting row was last updated. |
| Start | timestamp | possible | Live start date. |
| Finish | timestamp | possible | Live finish date. |
| StartBaseline | timestamp | possible | Start date in the baseline revision. |
| FinishBaseline | timestamp | possible | Finish date in the baseline revision. |
| StartBaselineOriginal | timestamp | possible | Start date in the original baseline revision. |
| FinishBaselineOriginal | timestamp | possible | Finish date in the original baseline revision. |
| StartCurrent | timestamp | possible | Start date in the current revision. |
| FinishCurrent | timestamp | possible | Finish date in the current revision. |
| StartRevised | timestamp | possible | Start date in the revised revision. |
| FinishRevised | timestamp | possible | Finish date in the revised revision. |
| TotalWorkHours | double | never | Total work hours for the activity, Live. |
| TotalWorkHoursBaseline | double | never | Total work hours in the baseline revision. |
| TotalWorkHoursBaselineOriginal | double | never | Total work hours in the original baseline revision. |
| TotalWorkHoursCurrent | double | never | Total work hours in the current revision. |
| TotalWorkHoursRevised | double | never | Total work hours in the revised revision. |
| PlannedWorkHoursAtCutoffPeriodic | double | never | Work hours planned within the cut-off period, Live. |
| PlannedWorkHoursAtCutoffCumulative | double | never | Work hours planned up to the cut-off, Live. |
| EarnedWorkHoursAtCutoffPeriodic | double | never | Work hours earned within the cut-off period. |
| EarnedWorkHoursAtCutoffPeriodicBaseline | double | never | Obsolete. Earned hours against the baseline for the cut-off period. Progress is only reported against Live, so this carries no meaning; use EarnedWorkHoursAtCutoffPeriodic. |
| EarnedWorkHoursAtCutoffCumulative | double | never | Work hours earned up to the cut-off. |
| EarnedWorkHoursAtCutoffCumulativeBaseline | double | never | Obsolete. Earned hours against the baseline up to the cut-off. Progress is only reported against Live, so this carries no meaning; use EarnedWorkHoursAtCutoffCumulative. |
| ActualWorkHoursAtCutoffPeriodic | double | never | Work hours expended within the cut-off period. |
| ActualWorkHoursAtCutoffCumulative | double | never | Work hours expended up to the cut-off. |
| PlannedWorkHoursAtCutoffPeriodicBaseline | double | never | Work hours planned within the cut-off period, baseline revision. |
| PlannedWorkHoursAtCutoffCumulativeBaseline | double | never | Work hours planned up to the cut-off, baseline revision. |
| PlannedWorkHoursAtCutoffPeriodicBaselineOriginal | double | never | Work hours planned within the cut-off period, original baseline revision. |
| PlannedWorkHoursAtCutoffCumulativeBaselineOriginal | double | never | Work hours planned up to the cut-off, original baseline revision. |
| PlannedWorkHoursAtCutoffPeriodicCurrent | double | never | Work hours planned within the cut-off period, current revision. |
| PlannedWorkHoursAtCutoffCumulativeCurrent | double | never | Work hours planned up to the cut-off, current revision. |
| PlannedWorkHoursAtCutoffPeriodicRevised | double | never | Work hours planned within the cut-off period, revised revision. |
| PlannedWorkHoursAtCutoffCumulativeRevised | double | never | Work hours planned up to the cut-off, revised revision. |
| PlannedProgress | double | never | Progress the activity was planned to have reached, as a percentage — 20 means 20%. |
| CurrentProgress | double | never | Progress reported on the activity, as a percentage — 20 means 20%. |
| TotalFloatHours | double | never | Hours the activity can slip before it delays the end of the schedule, Live. |
| PlannedProgressBaseline | double | never | Planned progress in the baseline revision, as a percentage. An estimate, so this one is valid. |
| CurrentProgressBaseline | double | never | Obsolete. Current progress against the baseline, as a percentage. Progress is only reported against Live, so this carries no meaning; use CurrentProgress. |
| TotalFloatHoursBaseline | double | never | Total float in the baseline revision. An estimate, so this one is valid. |
| ActivityType | string | never | What kind of activity this is, Live — see the values below the table. |
| ReportScheduleId | int32 | never | The report schedule this row belongs to. |
| OriginalBaselineActivityId | int32 | possible | The original baseline planning activity this row draws on, into activity.parquet of that revision's snapshot. |
| BaselineActivityId | int32 | possible | The baseline planning activity this row draws on, into activity.parquet of that revision's snapshot. |
| CurrentActivityId | int32 | possible | The current-revision planning activity this row draws on. |
| RevisedActivityId | int32 | possible | The revised-revision planning activity this row draws on. |
| ActivityId | int32 | possible | The Live planning activity this row draws on, into activity.parquet. |
| ActivityTypeBaseline | string | possible | Activity type in the baseline revision — same values as ActivityType. |
| Label | string | possible | Human-readable name of the activity. |
| LocalSystemId | string | possible | Identifier of the activity in the planning system it was imported from. |
| GlobalSystemId | string | possible | Identifier of the activity in the system of record it originates from. |
| Code | string | possible | Short code identifying the activity in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the activity, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the activity was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
ActivityType and ActivityTypeBaseline are one of: NotSet, RegularActivity, MilestoneStart, MilestoneFinish, Hammock, TaskDependent, ResourceDependent, LevelofEffort, WBSSummary.
Note the two hour families. AtCutoffPeriodic is the amount falling within the cut-off period; AtCutoffCumulative is the amount up to and including the cut-off. Adding one to the other double-counts.
This file carries metadata columns. See Metadata columns.
reportActivityPeriodized.parquet
One row per activity per point in time: the time-phased hours series. It holds no activity dates at all — what it shows of a date movement is the consequence, the planned-hours curve shifting along the time axis, never the dates themselves.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ActivityId | int32 | never | The report activity this series belongs to — into reportActivity.parquet, not activity.parquet, despite the name. |
| PointInTime | timestamp | never | The point on the time axis this row reports. |
| ActualHours | double | possible | Hours expended at this point in time. |
| EarnedHours | double | possible | Hours earned at this point in time. |
| TotalPlannedHours | double | possible | Total planned hours for the activity, Live. |
| PlannedHours | double | possible | Hours planned at this point in time, Live. |
| PlannedLoad | double | possible | Planned load at this point in time, Live. |
| CalendarHours | double | possible | Working hours the calendar makes available at this point, Live. |
| RemainingHours | double | possible | Hours still to be expended at this point, Live. |
| TotalMinusActualHours | double | possible | Total planned hours less hours expended, Live. The only variant of this that carries meaning. |
| OriginalBaselineTotalPlannedHours | double | possible | Total planned hours, original baseline revision. |
| OriginalBaselinePlannedHours | double | possible | Hours planned at this point, original baseline revision. |
| OriginalBaselinePlannedLoad | double | possible | Planned load at this point, original baseline revision. |
| OriginalBaselineCalendarHours | double | possible | Calendar hours at this point, original baseline revision. |
| OriginalBaselineRemainingHours | double | possible | Remaining hours at this point, original baseline revision. |
| OriginalBaselineTotalMinusActualHours | double | possible | Obsolete. Original baseline planned hours less hours expended. The hours expended are Live, so this mixes a baseline estimate with Live actuals; use TotalMinusActualHours. |
| BaselineTotalPlannedHours | double | possible | Total planned hours, baseline revision. |
| BaselinePlannedHours | double | possible | Hours planned at this point, baseline revision. |
| BaselinePlannedLoad | double | possible | Planned load at this point, baseline revision. |
| BaselineCalendarHours | double | possible | Calendar hours at this point, baseline revision. |
| BaselineEarnedHours | double | possible | Obsolete. Earned hours against the baseline at this point in time. Progress is only reported against Live, so this carries no meaning; use EarnedHours. |
| BaselineRemainingHours | double | possible | Remaining hours at this point, baseline revision. |
| BaselineTotalMinusActualHours | double | possible | Obsolete. Baseline planned hours less hours expended. The hours expended are Live, so this mixes a baseline estimate with Live actuals; use TotalMinusActualHours. |
| CurrentTotalPlannedHours | double | possible | Total planned hours, current revision. |
| CurrentPlannedHours | double | possible | Hours planned at this point, current revision. |
| CurrentPlannedLoad | double | possible | Planned load at this point, current revision. |
| CurrentCalendarHours | double | possible | Calendar hours at this point, current revision. |
| CurrentRemainingHours | double | possible | Remaining hours at this point, current revision. |
| CurrentTotalMinusActualHours | double | possible | Obsolete. Current-revision planned hours less hours expended. The hours expended are Live, so this mixes a current-revision estimate with Live actuals; use TotalMinusActualHours. |
| RevisedTotalPlannedHours | double | possible | Total planned hours, revised revision. |
| RevisedPlannedHours | double | possible | Hours planned at this point, revised revision. |
| RevisedPlannedLoad | double | possible | Planned load at this point, revised revision. |
| RevisedCalendarHours | double | possible | Calendar hours at this point, revised revision. |
| RevisedRemainingHours | double | possible | Remaining hours at this point, revised revision. |
| RevisedTotalMinusActualHours | double | possible | Obsolete. Revised-revision planned hours less hours expended. The hours expended are Live, so this mixes a revised-revision estimate with Live actuals; use TotalMinusActualHours. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
The unprefixed columns are Live; OriginalBaseline, Baseline, Current and Revised prefix their revision. ActualHours has no revision variants at all, because it is an actual. EarnedHours and TotalMinusActualHours are the two that do carry variants they should not — BaselineEarnedHours because earned hours are only reported against Live, and the four TotalMinusActualHours variants because they subtract Live actuals from a non-Live estimate. All five are marked obsolete above.
This file carries no metadata columns.
reportResource.parquet
Resources in reporting form, with the planning resource of each revision carried as its own column. One row per resource per report schedule.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportScheduleId | int32 | never | The report schedule this row belongs to. |
| ResourceId | int32 | possible | The Live planning resource this row draws on, into resource.parquet. |
| BaseLineResourceId | int32 | possible | The baseline planning resource this row draws on. Note the capital L. |
| OriginalBaselineResourceId | int32 | possible | The original baseline planning resource this row draws on. |
| CurrentResourceId | int32 | possible | The current-revision planning resource this row draws on. |
| RevisedResourceId | int32 | possible | The revised-revision planning resource this row draws on. |
| Code | string | possible | Short code identifying the resource in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the resource, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the resource was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
This file carries no metadata columns. Its planning counterpart resource.parquet does — if you are looking for a resource metadata field, it is there.
reportCalendar.parquet
Calendars in reporting form, with the planning calendar of each revision carried as its own column. One row per calendar per report schedule.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportScheduleId | int32 | never | The report schedule this row belongs to. |
| CalendarId | int32 | possible | The Live planning calendar this row draws on, into calendar.parquet. |
| BaseLineCalendarId | int32 | possible | The baseline planning calendar this row draws on. Note the capital L. |
| OriginalBaselineCalendarId | int32 | possible | The original baseline planning calendar this row draws on. |
| CurrentCalendarId | int32 | possible | The current-revision planning calendar this row draws on. |
| RevisedCalendarId | int32 | possible | The revised-revision planning calendar this row draws on. |
| Code | string | possible | Short code identifying the calendar in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the calendar, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the calendar was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
This file carries no metadata columns.
reportProfile.parquet
Distribution profiles in reporting form, with the planning profile of each revision carried as its own column. One row per profile per report schedule; the curve itself stays in profilePoint.parquet.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| IlapId | string | possible | Stable ILAP identifier for the profile, carried across imports and deployments. |
| ReportScheduleId | int32 | never | The report schedule this row belongs to. |
| ProfileId | int32 | possible | The Live planning profile this row draws on, into profile.parquet. |
| BaseLineProfileId | int32 | possible | The baseline planning profile this row draws on. Note the capital L. |
| OriginalBaselineProfileId | int32 | possible | The original baseline planning profile this row draws on. |
| CurrentProfileId | int32 | possible | The current-revision planning profile this row draws on. |
| RevisedProfileId | int32 | possible | The revised-revision planning profile this row draws on. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
This file carries no metadata columns.
reportStructure.parquet
Breakdown structures in reporting form, with the planning structure of each revision carried as its own column. One row per structure per report schedule.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportScheduleId | int32 | never | The report schedule this row belongs to. |
| StructureId | int32 | possible | The Live planning structure this row draws on, into structure.parquet. |
| BaselineStructureId | int32 | possible | The baseline planning structure this row draws on. |
| CurrentStructureId | int32 | possible | The current-revision planning structure this row draws on. |
| RevisedStructureId | int32 | possible | The revised-revision planning structure this row draws on. |
| OriginalBaselineStructureId | int32 | possible | The original baseline planning structure this row draws on. |
| Label | string | possible | Human-readable name of the structure. |
| LocalSystemId | string | possible | Identifier of the structure in the planning system it was imported from. |
| GlobalSystemId | string | possible | Identifier of the structure in the system of record it originates from. |
| Code | string | possible | Short code identifying the structure in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the structure, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the structure was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
This file carries no metadata columns.
reportStructureElement.parquet
Structure nodes in reporting form, with the planning node of each revision carried as its own column. One row per node.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportStructureId | int32 | never | The reporting structure this node belongs to, into reportStructure.parquet. |
| StructureElementId | int32 | possible | The Live planning node this row draws on, into structureElement.parquet. |
| BaselineStructureElementId | int32 | possible | The baseline planning node this row draws on. |
| CurrentStructureElementId | int32 | possible | The current-revision planning node this row draws on. |
| RevisedStructureElementId | int32 | possible | The revised-revision planning node this row draws on. |
| OriginalBaselineStructureElementId | int32 | possible | The original baseline planning node this row draws on. |
| Label | string | possible | Human-readable name of the node. |
| LocalSystemId | string | possible | Identifier of the node in the planning system it was imported from. |
| GlobalSystemId | string | possible | Identifier of the node in the system of record it originates from. |
| Code | string | possible | Short code identifying the node in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the node, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the node was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
Unlike structureElement.parquet, this file carries no parent column — the hierarchy is held on the planning side.
This file carries no metadata columns.
reportActivityStructureElement.parquet
Which reporting activities hang off which structure nodes. One row per membership.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportActivityId | int32 | never | The reporting activity, into reportActivity.parquet. |
| StructureElementId | int32 | never | The structure node it hangs off. |
Like its planning counterpart, this file carries no Id and no Created.
This file carries no metadata columns.
reportResourceAssignment.parquet
Resource assignments in reporting form, with the planning assignment of each revision carried as its own column. One row per assignment.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportActivityId | int32 | never | The reporting activity the resource is assigned to, into reportActivity.parquet. |
| ReportResourceId | int32 | never | The reporting resource assigned, into reportResource.parquet. |
| ReportProfileId | int32 | possible | The reporting profile spreading the quantity over time, into reportProfile.parquet. |
| ResourceAssignmentId | int32 | possible | The Live planning assignment this row draws on, into resourceAssignment.parquet. |
| BaseLineResourceAssignmentId | int32 | possible | The baseline planning assignment this row draws on. Note the capital L. |
| OriginalBaselineResourceAssignmentId | int32 | possible | The original baseline planning assignment this row draws on. |
| CurrentResourceAssignmentId | int32 | possible | The current-revision planning assignment this row draws on. |
| RevisedResourceAssignmentId | int32 | possible | The revised-revision planning assignment this row draws on. |
| Code | string | possible | Short code identifying the assignment in the source planning system. |
| IlapId | string | possible | Stable ILAP identifier for the assignment, carried across imports and deployments. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier when the assignment was imported. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
This file carries no hours or progress at all — those live on reportActivity.parquet and reportActivityPeriodized.parquet. It also carries no metadata columns, though its planning counterpart resourceAssignment.parquet does.
reportSuccessor.parquet
Activity links in reporting form, with the planning link of each revision carried as its own column. One row per link.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| IlapId | string | possible | Stable ILAP identifier for the link, carried across imports and deployments. |
| ReportActivityId | int32 | never | The predecessor reporting activity the link runs from, into reportActivity.parquet. |
| SuccessorReportActivityId | int32 | possible | The successor reporting activity the link runs to. |
| SuccessorId | int32 | possible | The Live planning link this row draws on, into successor.parquet. |
| BaseLineSuccessorId | int32 | possible | The baseline planning link this row draws on. Note the capital L. |
| OriginalBaselineSuccessorId | int32 | possible | The original baseline planning link this row draws on. |
| CurrentSuccessorId | int32 | possible | The current-revision planning link this row draws on. |
| RevisedSuccessorId | int32 | possible | The revised-revision planning link this row draws on. |
| Type | string | never | Which ends of the two activities the link joins — see the values below the table. |
| ReportCalendarId | int32 | possible | The reporting calendar the lag is measured against, into reportCalendar.parquet. |
| Id | int32 | never | Identifier of the row, unique within this snapshot only. |
| Created | timestamp | never | When the row was created in Analytics. |
Type is one of: StartToStart, StartToFinish, FinishToStart, FinishToFinish.
The lag itself is not carried here — it stays on successor.parquet.
This file carries no metadata columns.
reportSchedule.parquet
The report schedule itself, as it was when the snapshot's reporting files were written: its settings, its schedule-level totals at the cut-off, and the planning schedule behind each revision. Exactly one row. Present only in snapshots exported from the release that introduced it onward; earlier snapshots are not re-exported to gain it.
| Column | Type | Empty? | Meaning |
|---|---|---|---|
| ReportScheduleTypeId | int32 | never | The schedule type the report schedule uses — the type that defines its metadata fields. |
| Description | string | possible | Free-text description of the report schedule. |
| LastSubmitted | timestamp | possible | When a schedule was last imported into the report schedule. |
| Status | string | never | The report schedule's state — see the values below the table. |
| Updated | timestamp | possible | When the report schedule's reporting data last changed — an import or recalculation that changed its totals or any of its report activities. |
| CutoffDate | timestamp | possible | The report schedule's cut-off — the cut-off of its Live revision. |
| ActivitiesCount | int32 | never | Number of activities in the Live revision. |
| ActivitiesCountBaseline | int32 | never | Number of activities in the baseline revision. |
| Start | timestamp | possible | Live start date of the schedule as a whole — the earliest Start across its report activities. |
| Finish | timestamp | possible | Live finish date of the schedule as a whole — the latest Finish across its report activities. |
| StartBaseline | timestamp | possible | Start date of the schedule as a whole in the baseline revision. |
| FinishBaseline | timestamp | possible | Finish date of the schedule as a whole in the baseline revision. |
| TotalWorkHours | double | never | Total work hours for the schedule, Live. |
| TotalWorkHoursBaseline | double | never | Total work hours for the schedule in the baseline revision. |
| PlannedWorkHoursAtCutoffPeriodic | double | never | Work hours planned within the cut-off period, Live, summed over the report activities. |
| PlannedWorkHoursAtCutoffCumulative | double | never | Work hours planned up to the cut-off, Live, summed over the report activities. |
| EarnedWorkHoursAtCutoffPeriodic | double | never | Work hours earned within the cut-off period, summed over the report activities. |
| EarnedWorkHoursAtCutoffCumulative | double | never | Work hours earned up to the cut-off, summed over the report activities. |
| ActualWorkHoursAtCutoffPeriodic | double | never | Work hours expended within the cut-off period, summed over the report activities. |
| ActualWorkHoursAtCutoffCumulative | double | never | Work hours expended up to the cut-off, summed over the report activities. |
| PlannedWorkHoursAtCutoffPeriodicBaseline | double | never | Work hours planned within the cut-off period, baseline revision, summed over the report activities. |
| PlannedWorkHoursAtCutoffCumulativeBaseline | double | never | Work hours planned up to the cut-off, baseline revision, summed over the report activities. |
| ProductivityPeriodic | double | never | Hours expended per hour earned within the cut-off period — ActualWorkHoursAtCutoffPeriodic ÷ EarnedWorkHoursAtCutoffPeriodic. 0 when nothing was earned. |
| ProductivityCumulative | double | never | Hours expended per hour earned up to the cut-off — ActualWorkHoursAtCutoffCumulative ÷ EarnedWorkHoursAtCutoffCumulative. 0 when nothing was earned. |
| PerformancePeriodic | double | never | Hours planned per hour earned within the cut-off period — PlannedWorkHoursAtCutoffPeriodic ÷ EarnedWorkHoursAtCutoffPeriodic. 0 when nothing was earned. |
| PerformanceCumulative | double | never | Hours planned per hour earned up to the cut-off — PlannedWorkHoursAtCutoffCumulative ÷ EarnedWorkHoursAtCutoffCumulative. 0 when nothing was earned. |
| PlannedProgressAtCutoffPeriodic | double | never | Share of the Live total planned within the cut-off period — PlannedWorkHoursAtCutoffPeriodic ÷ TotalWorkHours, as a fraction. |
| PlannedProgressAtCutoffCumulative | double | never | Share of the Live total planned up to the cut-off — PlannedWorkHoursAtCutoffCumulative ÷ TotalWorkHours, as a fraction. |
| ActualProgressAtCutoffPeriodic | double | never | Share of the Live total earned within the cut-off period — EarnedWorkHoursAtCutoffPeriodic ÷ TotalWorkHours, as a fraction. |
| ActualProgressAtCutoffCumulative | double | never | Share of the Live total earned up to the cut-off — EarnedWorkHoursAtCutoffCumulative ÷ TotalWorkHours, as a fraction. |
| OriginalBaselineScheduleId | int32 | possible | The planning schedule behind the original baseline revision — the Id in schedule.parquet of that revision's planning snapshot. |
| BaselineScheduleId | int32 | possible | The planning schedule behind the baseline revision — the Id in schedule.parquet of that revision's planning snapshot. |
| CurrentScheduleId | int32 | possible | The planning schedule behind the current revision — the Id in schedule.parquet of that revision's planning snapshot. |
| RevisedScheduleId | int32 | possible | The planning schedule behind the revised revision — the Id in schedule.parquet of that revision's planning snapshot. |
| ScheduleId | int32 | possible | The planning schedule behind the Live revision — the Id in schedule.parquet of the Live planning snapshot. |
| PointsInTimeType | string | never | The interval the time-phased series in reportActivityPeriodized.parquet is divided into — see the values below the table. |
| LastModified | timestamp | possible | When the report schedule was last edited by a user in Analytics. |
| Label | string | possible | Human-readable name of the report schedule. |
| LocalSystemId | string | possible | Identifier of the report schedule in the planning system it was imported from. |
| GlobalSystemId | string | possible | Identifier of the report schedule in the system of record it originates from. |
| Code | string | possible | Short code identifying the report schedule. |
| IlapId | string | possible | Stable ILAP identifier for the report schedule. |
| BaseUri | string | possible | Base URI recorded alongside the ILAP identifier. |
| Id | int32 | never | The report schedule's id — the ReportScheduleId on every row of reportActivity.parquet, and the <reportScheduleId> in the rs= folder. |
| Created | timestamp | never | When the report schedule was created in Analytics. |
Status is one of: Open, Closed, PendingArchive, Archived, RestoringFromArchive, FailedToArchive, FailedToRestoreFromArchive, PendingDeletion.
PointsInTimeType is one of: WeeklySunday, MonthlyLastSunday, Quarter, Daily.
The five …ScheduleId columns are how a reporting snapshot links to planning snapshots. The one for the snapshot's own revision — ScheduleId in a Live_… folder — equals the Id in the schedule.parquet of the planning folder beside it. The others point at the planning snapshot of each reference revision as it stood when this row was written, so match them on Id across the planning folders of the same rs=. A column is empty when the report schedule had no schedule imported for that revision. An id that matches no schedule.parquet usually means that revision has since been re-imported for the same cut-off — the correction replaced its planning snapshot, and with it the schedule Id — or that its planning snapshot predates the schedule files.
The …Progress… columns here are fractions, not percentages — 0.2 means 20%, and 0 when TotalWorkHours is zero. That is unlike PlannedProgress and CurrentProgress on reportActivity.parquet, where 20 means 20%.
The …AtCutoff… hour columns are sums over the report activities of the snapshot, leaving out activities marked deleted. Actuals — earned and expended hours, productivity, performance and actual progress — are Live only, as everywhere in the reporting dataset; the baseline columns here are all estimates.
This file carries metadata columns. See Metadata columns.
See also
- Parquet export — snapshot layout, the completion marker, and the manifest
- Parquet planning columns — every column of the fifteen planning files
- Reading Parquet from Fabric — shortcutting the export into a Lakehouse
- Why the export is plain Parquet
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article