Fabric ProgressiveDataSet

The ProgressiveDataSet is PSI’s “Golden Set” semantic model in Microsoft Fabric / Power BI. It consolidates 32 AFTEC data exports into a single refreshable dataset used by the majority of Power BI reports.


Overview

PropertyValue
WorkspaceJohn Tymes (Personal)
Workspace ID4879a6ff-c0c4-4f1a-87b5-638a21e04f5f
Dataset ID51d7822c-8d17-4fb5-b28f-50a4c6fdd19e
Capacitypsfabric1 (F2, North Central US)
Capacity ID147074f2-0635-43c7-9f50-31863a24dcba
Gateway085039b5-9fba-412f-b325-571c72fa336a
RefreshDaily at 5:00 AM ET (all 7 days)
Data Source32 CSV files on \\ad.ptihome.com\DFS\DATA\unixshare\dgwreportfiles\
Configured ByJTymes@progressivesurface.com

Fabric Workspace Inventory

PSI has four workspaces in Microsoft Fabric:

WorkspaceTypeCapacityPurpose
John TymesPersonalpsfabric1 (F2)Main BI content — reports, golden dataset
My workspace (ADevereaux)Personalpsfabric1 (F2)Dev/test — ProcServ24, TestLakeHouse
PS Machine DBWorkspacepsfabric1 (F2)Staging lakehouse & warehouse
Argo_AnalyticsWorkspacepsfabric1 (F2)InspectionData lakehouse, Argo pipelines
PSI AnalyticsWorkspacepsfabric1 (F2)Company workspace — cloned reports

Capacities

CapacitySKURegionState
psfabric1F2North Central USActive
Premium Per UserPP3North Central USActive

Querying via Azure CLI (DAX)

The dataset can be queried programmatically using DAX through the Power BI REST API. This is how Claude Code and other tools can access the data.

Prerequisites

# Must be logged in to Azure CLI
az login
 
# Verify access
az account show

Execute a DAX Query

az rest --method POST \
  --url "https://api.powerbi.com/v1.0/myorg/groups/4879a6ff-c0c4-4f1a-87b5-638a21e04f5f/datasets/51d7822c-8d17-4fb5-b28f-50a4c6fdd19e/executeQueries" \
  --resource "https://analysis.windows.net/powerbi/api" \
  --body '{
    "queries": [{"query": "EVALUATE TOPN(10, customer)"}],
    "serializerSettings": {"includeNulls": true}
  }'

Common Query Patterns

Count rows in a table:

EVALUATE ROW("count", COUNTROWS(customer))

Filter with conditions:

EVALUATE
FILTER(salesorder, salesorder[Order Amount] > 100000)

Aggregate data:

EVALUATE
SUMMARIZECOLUMNS(
    customer[State/Region],
    "Total Invoice LYR", SUM(customer[Invoice LYR]),
    "Count", COUNTROWS(customer)
)

Top N with sorting:

EVALUATE
TOPN(20, partmaster, partmaster[Last Cost], DESC)

Tables with special characters (hyphens, numbers) must be quoted:

EVALUATE TOPN(5, '100heparts')
EVALUATE TOPN(5, 'wc-capacity')
EVALUATE TOPN(5, 'part-service-goals')

Response Format

Results come back as JSON with column names prefixed by tablename[column]:

{
  "results": [{
    "tables": [{
      "rows": [
        {
          "customer[Customer No]": "101168",
          "customer[Customer Name]": "AAR ACS-NY",
          "customer[City]": "GARDEN CITY",
          "customer[State/Region]": "NY"
        }
      ]
    }]
  }]
}

Tables

The dataset contains 33 tables sourced from CSV exports on the on-prem file server via the data gateway. All files are at \\ad.ptihome.com\DFS\DATA\unixshare\dgwreportfiles\.

Table Summary

TableRowsSource FileDomain
inventoryhistory4,145,691inventoryhistory.csvInventory
tslabor22,773,043tslabor2.csvLabor/Timesheets
wiprouteline927,343wiprouteline.csvManufacturing
openwo519,285openwo.csvWork Orders
partmaster420,950partmaster.csvParts
aphistory272,246aphistory.csvAccounts Payable
pohist268,238pohist.csvPurchase History
wiplabor253,395wiplabor.csvWIP Labor
jobparts203,277jobparts.csvJob-to-Parts
invoiceline163,833invoiceline.csvInvoicing
purchaseorders108,768purchaseorders.csvPurchasing
wipledger99,461wipledger.csvWIP Ledger
prdprice64,161prdprice.csvPricing
spquoteline54,970spquoteline.csvQuote Lines
redbook50,057redbook.csvQuality/Redbooks
ecn28,413ecn.csvEngineering Changes
capacity23,834capacity.csvCapacity Planning
spquote22,573spquote.csvSpare Parts Quotes
inventory17,389inventory.csvCurrent Inventory
ganttwo7,775ganttwo.csvGantt (Work Orders)
service5,194service.csvService Tickets
employee1,921employee.csvEmployees
salesorderline1,578salesorderline.csvSales Order Lines
budgetjob1,058budgetjob.csvJob Budgets
ganttjob891ganttjob.csvGantt (Jobs)
fixedpriceparts356fixedpriceparts.csvFixed Price Parts
salesorder351salesorder.csvSales Orders
customer277customer.csvCustomers
100heparts159100heparts.csv100-Hour Parts
inflationparts60inflationparts.csvInflation Tracking
jobshop-repair-orders38jobshop-repair-orders.csvJobshop Repairs
part-service-goals36part-service-goals.csvService Goals
wc-capacity31wc-capacity.csvWork Center Capacity

Total: ~9.6 million rows across 33 tables


Key Table Schemas

customer

ColumnDescription
Customer NoCustomer number
Customer NameCompany name
CityCity
State/RegionState or region code
ZipPostal code
CountryCountry code
Invoice LYRInvoice total last year
Invoice MTDInvoice total month-to-date
Invoice YTDInvoice total year-to-date

openwo (Work Orders)

ColumnDescription
WOWork order number
JobJob/project number
PartPart number
CCCost center
QtyQuantity
WO StatusWork order status
WO TypeWork order type
Fin StatusFinancial status
Make DateMake date
Start DateStart date
Due DateDue date
Release DateRelease date
Close DateClose date
Labor HoursLabor hours
WODurationDuration in days
WODuration (Hours)Duration in hours
WODaysLateDays past due

partmaster

ColumnDescription
Part NoPart number
DescriptionPart description
MClassManufacturing class
CAClassCost accounting class
ABCABC classification
UMUnit of measure
Last CostLast cost
Last Cost OHLast cost with overhead
On HandQuantity on hand
On OrderQuantity on order
Gross ReqGross requirements
Mfg LTManufacturing lead time
Pur LTPurchase lead time
Cum LTCumulative lead time
Min QtyMinimum quantity
Max QtyMaximum quantity
EOQ QtyEconomic order quantity
Saf QtySafety stock quantity
Mul QtyMultiple quantity
MRPMRP flag
MTSMake to stock flag
ManfManufacturer
PaintPaint specification
Issue24Issues in last 24 months
Sales24Sales in last 24 months

purchaseorders

ColumnDescription
PO NOPurchase order number
PO LinePO line number
LineLine number
Part NoPart number
Part DescriptionPart description
Vendor NoVendor number
Vendor NameVendor name
BuyerBuyer code
PO DatePO date
Promise DatePromise date
Schedule DateScheduled date
Confirm DateConfirmation date
Confirm DaysDays to confirm
Lead TimeLead time
Orig QtyOriginal quantity
Open QtyOpen quantity
Unit CostUnit cost
Ext CostExtended cost
UMUnit of measure
Job/WO NoJob or work order number
IsOpenOpen status flag
MRPMRP flag
ExemptExempt flag

redbook (Quality Issues)

ColumnDescription
IDRedbook ticket number
Ent ByEmployee ID who entered
Ent DateEntry date
Comp DateCompletion date
First ActionDate of first action
Days OpenDays currently open
Days To CloseDays from open to close
Days To FirstActionDays to first action
ProjectProject/job number
DrawingDrawing number
Drawing DescriptionDrawing description
Prob TypeProblem type (Standard, etc.)
Audit TypeAudit classification
PriorityPriority level (e.g. “4-None”)
ProblemProblem description
CauseActivity log
SolutionSolution/resolution text
RunoffRunoff indicator
No of DeptsNumber of departments assigned
A102-A170Department assignment flags
C102-C170Department completion flags

wiplabor (WIP Labor Tracking)

ColumnDescription
Job NoJob number
WO NoWork order number
Line NoLine number
Part NoPart number
Part DescriptionPart description
OperOperation code
Oper DescOperation description
CCenCost center
QuantityQuantity
LaborLabor hours
SetupSetup hours
Act LaborActual labor
Act SetupActual setup
Date CompDate completed
Total ActualTotal actual hours
Total RoutedTotal routed hours
Act - RoutedActual minus routed variance
102/104/106/108 ActualActual hours by department
102/104/106/108 RoutedRouted hours by department
102/104/106/108 Act-RteVariance by department

employee

ColumnDescription
Emp NoEmployee number
Emp NameFull name
First NameFirst name
Last NameLast name
DepartmentDepartment code
InitalsInitials (note: misspelling is in source)
ActiveActive status
F/PFull/Part time
H/SHourly/Salary
P/CProduction/Clerical

service (Service Tickets)

ColumnDescription
TicketTicket number
ProjectProject/job number
CompanyCustomer company
TypeTicket type
PriorityPriority level
StatusCurrent status
DescriptionTicket description
Enter DateEntry date
Complete DateCompletion date
Days OpenDays open
Days To CloseDays to close
CountCount

ecn (Engineering Change Notices)

ColumnDescription
IDECN number
ProjectProject/job number
DrawingDrawing number
DescriptionChange description
Ent ByEntered by (employee ID)
Ent DateEntry date
Chg DeptChange department
CodeECN code
Rcrd OnlyRecord only flag
D102-D160Department flags

salesorder

ColumnDescription
Order NoSales order number
Customer NoCustomer number
Order DateOrder date
Order AmountOrder amount
Order TypeOrder type
PO NoCustomer PO number
Quote NoQuote number
Ship CityShip-to city
Ship StateShip-to state
Ship CountryShip-to country
Ship ZipShip-to zip

inventory

ColumnDescription
Part NoPart number
Bin NoBin number
LocationStorage location
Bin QtyQuantity in bin
Bin ValueValue in bin
Unit CostUnit cost
Vendor NoVendor number
Lot NoLot number
Lot DateLot date
Last DateLast transaction date

Reports Using This Dataset

The ProgressiveDataSet is the backbone of most Power BI reports:

ReportDatasetDescription
ExecutiveProgressiveDataSetExecutive overview dashboards
ProductionProgressiveDataSetProduction metrics and tracking
PurchasingProgressiveDataSetPurchasing analytics
Spare PartsProgressiveDataSetSpare parts analysis
ProcessServicesProgressiveDataSetProcess services metrics
Progressive IQProgressiveDataSetBusiness intelligence overview
ProgressiveDataSetProgressiveDataSetGeneral data exploration
Capacity2ProgressiveDataSetCapacity planning
CapacityCapacity (standalone)Detailed capacity scheduling
AccountingAccounting (standalone)Financial reporting
TSLaborTSLabor (standalone)Timesheet labor analysis
ServiceTicketsServiceTickets (standalone)Service ticket tracking
ProjectDashBoardProjectDashBoard (standalone)Project budget vs actual, Gantt

All reports have been cloned to the PSI Analytics company workspace (5acabe18-9e94-4144-816f-32bbdde02f07) with cross-workspace dataset binding back to the originals.


Data Pipeline

Current: CSV via On-Premises Gateway

AFTEC (UniData/ERP)
        │
        ▼
Scheduled Export Jobs
        │
        ▼
\\ad.ptihome.com\DFS\DATA\unixshare\dgwreportfiles\*.csv   (32 CSV files)
        │
        ▼
On-Premises Data Gateway (085039b5-...)
        │
        ▼
Power BI Service — ProgressiveDataSet (Import Mode)
        │  Scheduled Refresh: Daily 5:00 AM ET
        ▼
Power BI Reports / DAX API Queries

Migration Target: Azure SQL (PSI_Analytics)

Status: Complete (Phase 6). All 33 raw AFTEC tables are loaded nightly into the PSI_Analytics Azure SQL database by build_analytics_db.py. Column names match the CSV headers exactly, making this a drop-in replacement for the gateway/CSV data source. Reports can now be migrated from the on-premises gateway to Azure SQL at any time.

AFTEC (UniData/ERP)
        │
        ▼
Scheduled Export Jobs (CSV files on DFS)
        │
        ├─── (legacy) ──→ On-Premises Gateway → Power BI Import
        │
        └─── (new) ────→ build_analytics_db.py Phase 6
                                │
                                ▼
                        Azure SQL PSI_Analytics
                        (procserv-proddata.database.windows.net)
                                │
                                ▼
                        Power BI DirectQuery or Import
                        (no gateway required)

To migrate a report: See the full step-by-step guide: Re-Pointing Power BI Reports to Azure SQL. In short: open Power Query Editor, change each table’s source from Csv.Document(File.Contents(...)) to Sql.Database("procserv-proddata.database.windows.net", "PSI_Analytics") and select the matching table. Column names are identical, so DAX measures and visuals continue working.

Benefits: Eliminates on-premises gateway dependency. Enables DirectQuery mode (real-time data). Also gives Power BI access to enriched analytics tables (AI-classified redbooks, workforce features, machine DNA) alongside the raw data.

Data Freshness

  • CSV files on \\ad.ptihome.com\DFS\DATA\ are updated by AFTEC export jobs
  • Azure SQL raw tables refresh nightly at ~1 AM ET (same CSVs, loaded by pipeline)
  • The Power BI dataset refreshes daily at 5:00 AM ET
  • Data is typically 1 day old at most
  • Refresh takes approximately 5-9 minutes (gateway) or seconds (DirectQuery from SQL)

Standalone Datasets

Besides the golden ProgressiveDataSet, John’s workspace has standalone datasets for specialized reports:

DatasetGatewayDescription
CapacityYesHours-to-go, planned start/end dates, labor/machine load
AccountingYesFinancial data
TSLaborYesTimesheet labor records
ServiceTicketsYesService ticket tracking
ProjectDashBoardYesProject budget vs actual, Gantt charts

Access & Permissions

Current Setup

Querying from Claude Code

Claude Code can query the dataset using the Azure CLI when the user is logged in:

# Verify login
az account show
 
# Run a DAX query
az rest --method POST \
  --url "https://api.powerbi.com/v1.0/myorg/groups/4879a6ff-c0c4-4f1a-87b5-638a21e04f5f/datasets/51d7822c-8d17-4fb5-b28f-50a4c6fdd19e/executeQueries" \
  --resource "https://analysis.windows.net/powerbi/api" \
  --body '{"queries": [{"query": "YOUR_DAX_QUERY_HERE"}], "serializerSettings": {"includeNulls": true}}'


Last updated: March 2026