Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Python | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Python | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA | Python |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA | Python
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Databricks | Power Apps | Power Automate |
Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables | Power Apps | Power Automate
Power BI | Power Apps | Power Automate | SQL | VBA | Python | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables
Power BI | Power Apps | Power Automate | SQL | VBA | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Most Chicago teams already have a few Power BI reports: a sales dashboard, an operations scorecard, maybe something for finance. The pain usually starts when those reports need to combine local data sources (ERP on-prem, city open data, logistics feeds) and still refresh reliably for a distributed team across downtown, the suburbs, and remote workers.
This article walks through a realistic scenario of a Chicago business tightening up its Power BI setup: data sources, refresh, security, and performance tuned for a mix of on-prem and cloud systems.
Imagine a regional operations team based in the Loop supporting:
They’ve built a Power BI report that tracks:
Symptoms:
We’ll keep this scenario in view while walking through design decisions that matter for Power BI for businesses in Chicago, Illinois.
The first decision that affects everything else is how the Chicago operations dataset connects to source systems.
For the POS and ERP data in SQL Server on-prem, you typically have two options:
Import mode
DirectQuery mode
For our Chicago operations team:
A practical pattern:
This avoids:
If you do need near-real-time metrics (e.g., same-hour delivery SLA monitoring), consider:
Both options have constraints on modeling and visuals compared to standard Import datasets, so keep the real-time surface small and targeted.
If your Chicago business already has:
then a live connection or thin report pattern is usually better than building separate models in each department.
For our scenario, that might mean:
This reduces:
Local data is where Chicago businesses can differentiate. Common sources:
Power BI’s standard map visuals can work well if you model geography carefully.
Key points:
Use separate columns for:
ZipCode (text, 5 characters — don’t store as whole number to avoid leading zero issues)City (e.g., Chicago) when neededCounty or Region for broader groupingFor Chicago neighborhood analysis, you usually need a custom boundary file:
Once loaded, you can:
Most city datasets expose:
For Power BI:
Example Power Query snippet for a CSV endpoint (simplified):
let
Source = Csv.Document(
Web.Contents("https://data.cityofchicago.org/resource/xxxx.csv", [
Query = [
"$select" = "permit_number,issue_date,work_description,zip_code",
"$where" = "issue_date >= '2024-01-01'"
]
]),
[Delimiter = ",", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
),
PromoteHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars = true]),
ChangeTypes = Table.TransformColumnTypes(
PromoteHeaders,
{
{"permit_number", type text},
{"issue_date", type datetime},
{"work_description", type text},
{"zip_code", type text}
}
)
in
ChangeTypes
This approach:
For production use with city data:
Our operations team’s biggest pain is failed refreshes on busy days. The triggers usually are:
For on-prem SQL Server and ERP:
Install the standard on-premises data gateway on a server with:
Register it in the Power BI service and configure data source connections:
Operational practices that help:
For hourly or multi-daily refreshes:
For our scenario, a pattern might be:
This reduces contention on the gateway and the Power BI service capacity, especially if you’re on shared capacity rather than a dedicated capacity.
If you’re using Power BI Premium or Fabric capacities:
The Chicago operations team needs store managers to see only their own locations, while regional leaders and HQ see broader views.
Power BI supports row-level security (RLS) on Import and DirectQuery datasets.
Use a model like:
Stores dimension with columns:
StoreID (unique key)StoreNameRegionZipCodeUserStoreAccess bridge table with:
UserPrincipalName (UPN, e.g., user@company.com)StoreIDRelate:
UserStoreAccess[StoreID] to Stores[StoreID] (many-to-one).Stores to fact tables via StoreID.In Power BI Desktop, define a role such as StoreManager with a DAX filter on UserStoreAccess:
[UserPrincipalName] = USERPRINCIPALNAME()
This role:
UserStoreAccess to rows where UserPrincipalName matches the current user.Stores and then to fact tables via relationships.For regional leaders, you might use a role that filters by region:
Stores[Region] IN {"North", "Central"}
In the Power BI service:
If you move to Power BI Premium and use object-level security (OLS) on the semantic model, you can hide sensitive columns (e.g., margin percentages) for certain roles while still exposing aggregated measures. But OLS is more advanced and requires careful testing; don’t mix it in unless you have a clear need.
The Chicago operations report has filters on store, neighborhood, ZIP, and time. Users complain about slow visuals when slicing by multiple dimensions.
Performance fixes usually come from:
For Import mode datasets:
Keep a star schema:
Avoid:
For example:
Date table marked as a date table.Common performance pitfalls:
CALCULATE with complex filters when a simpler measure would work.SUMX over large tables when a simple aggregation is enough.Example of a straightforward measure for daily sales per store:
Total Sales = SUM('FactSales'[SalesAmount])
Sales Last 30 Days =
CALCULATE(
[Total Sales],
DATESINPERIOD(
'Date'[Date],
MAX('Date'[Date]),
-30,
DAY
)
)
This measure:
Date dimension.If performance is still an issue:
For dense operational dashboards:
Prefer:
Avoid:
For our scenario, a pattern might be:
As the Chicago business grows, different teams will want their own reports. Without structure, you end up with duplicated datasets and conflicting metrics.
A workable pattern:
Core Data workspace
Department workspaces (Operations, Finance, Marketing)
For our operations team:
RetailOperations semantic model in the Core Data workspace.Benefits:
If you’re on Power BI Premium or Fabric capacities, you can also:
For Power BI for businesses in Chicago, Illinois, the main win comes from a clean split: central semantic models and gateway configuration handled once, with local reports layering Chicago-specific geography, city data, and operational views on top. If your team is fighting refresh failures or inconsistent numbers, start by tightening that core model and gateway setup before you add new visuals — most of the pain goes away when the foundation is stable.
This article reflects how Chicago-based teams are standardizing Power BI models and refresh architecture while layering local geography and city data on top, a pattern that matters most in mixed on-prem and cloud environments with multiple departments sharing the same metrics.
Professionals who want to apply these patterns to their own data can explore Excelgoodies' Power BI Training in Chicago, Illinois programme - taught live by instructors, with certification awarded once a real project is running at work.
Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.
Power BI
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering