@luquimbo/bi-superpowers 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +8 -0
- package/.mcp.json +25 -0
- package/AGENTS.md +244 -0
- package/CHANGELOG.md +265 -0
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bin/build-plugin.js +30 -0
- package/bin/cli.js +1064 -0
- package/bin/commands/add.js +533 -0
- package/bin/commands/add.test.js +77 -0
- package/bin/commands/build-desktop.js +166 -0
- package/bin/commands/changelog.js +443 -0
- package/bin/commands/diff.js +325 -0
- package/bin/commands/lint.js +419 -0
- package/bin/commands/lint.test.js +103 -0
- package/bin/commands/mcp-setup.js +246 -0
- package/bin/commands/pull.js +287 -0
- package/bin/commands/pull.test.js +36 -0
- package/bin/commands/push.js +231 -0
- package/bin/commands/push.test.js +14 -0
- package/bin/commands/search.js +344 -0
- package/bin/commands/search.test.js +115 -0
- package/bin/commands/setup.js +545 -0
- package/bin/commands/setup.test.js +46 -0
- package/bin/commands/sync-profile.js +405 -0
- package/bin/commands/sync-profile.test.js +14 -0
- package/bin/commands/sync-source.js +418 -0
- package/bin/commands/sync-source.test.js +14 -0
- package/bin/commands/watch.js +206 -0
- package/bin/lib/generators/claude-plugin.js +266 -0
- package/bin/lib/generators/claude-plugin.test.js +110 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +282 -0
- package/bin/lib/licensing/index.js +35 -0
- package/bin/lib/licensing/storage.js +364 -0
- package/bin/lib/licensing/storage.test.js +55 -0
- package/bin/lib/licensing/validator.js +213 -0
- package/bin/lib/licensing/validator.test.js +137 -0
- package/bin/lib/microsoft-mcp.js +176 -0
- package/bin/lib/microsoft-mcp.test.js +106 -0
- package/bin/lib/skills.js +84 -0
- package/bin/mcp/powerbi-modeling-launcher.js +38 -0
- package/bin/postinstall.js +44 -0
- package/bin/utils/errors.js +159 -0
- package/bin/utils/git.js +298 -0
- package/bin/utils/logger.js +142 -0
- package/bin/utils/mcp-detect.js +274 -0
- package/bin/utils/mcp-detect.test.js +105 -0
- package/bin/utils/pbix.js +305 -0
- package/bin/utils/pbix.test.js +37 -0
- package/bin/utils/profiles.js +312 -0
- package/bin/utils/projects.js +168 -0
- package/bin/utils/readline.js +206 -0
- package/bin/utils/readline.test.js +47 -0
- package/bin/utils/tui.js +314 -0
- package/bin/utils/tui.test.js +127 -0
- package/commands/contributions.md +265 -0
- package/commands/data-model-design.md +468 -0
- package/commands/dax-doctor.md +248 -0
- package/commands/fabric-scripts.md +452 -0
- package/commands/migration-assistant.md +290 -0
- package/commands/model-documenter.md +242 -0
- package/commands/pbi-connect.md +239 -0
- package/commands/project-kickoff.md +905 -0
- package/commands/report-layout.md +296 -0
- package/commands/rls-design.md +533 -0
- package/commands/theme-tweaker.md +624 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +37 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +95 -0
- package/docs/openrouter-free-models.md +92 -0
- package/library/examples/README.md +151 -0
- package/library/examples/finance-reporting/README.md +351 -0
- package/library/examples/finance-reporting/data-model.md +267 -0
- package/library/examples/finance-reporting/measures.dax +557 -0
- package/library/examples/hr-analytics/README.md +371 -0
- package/library/examples/hr-analytics/data-model.md +315 -0
- package/library/examples/hr-analytics/measures.dax +460 -0
- package/library/examples/marketing-analytics/README.md +37 -0
- package/library/examples/marketing-analytics/data-model.md +62 -0
- package/library/examples/marketing-analytics/measures.dax +110 -0
- package/library/examples/retail-analytics/README.md +439 -0
- package/library/examples/retail-analytics/data-model.md +288 -0
- package/library/examples/retail-analytics/measures.dax +481 -0
- package/library/examples/supply-chain/README.md +37 -0
- package/library/examples/supply-chain/data-model.md +69 -0
- package/library/examples/supply-chain/measures.dax +77 -0
- package/library/examples/udf-library/README.md +228 -0
- package/library/examples/udf-library/functions.dax +571 -0
- package/library/snippets/dax/README.md +292 -0
- package/library/snippets/dax/business-domains.md +576 -0
- package/library/snippets/dax/calculate-patterns.md +276 -0
- package/library/snippets/dax/calculation-groups.md +489 -0
- package/library/snippets/dax/error-handling.md +495 -0
- package/library/snippets/dax/iterators-and-aggregations.md +474 -0
- package/library/snippets/dax/kpis-and-metrics.md +293 -0
- package/library/snippets/dax/rankings-and-topn.md +235 -0
- package/library/snippets/dax/security-patterns.md +413 -0
- package/library/snippets/dax/text-and-formatting.md +316 -0
- package/library/snippets/dax/time-intelligence.md +196 -0
- package/library/snippets/dax/user-defined-functions.md +477 -0
- package/library/snippets/dax/virtual-tables.md +546 -0
- package/library/snippets/excel-formulas/README.md +84 -0
- package/library/snippets/excel-formulas/aggregations.md +330 -0
- package/library/snippets/excel-formulas/dates-and-times.md +361 -0
- package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
- package/library/snippets/excel-formulas/lookups.md +169 -0
- package/library/snippets/excel-formulas/text-functions.md +363 -0
- package/library/snippets/governance/naming-conventions.md +97 -0
- package/library/snippets/governance/review-checklists.md +107 -0
- package/library/snippets/power-query/README.md +389 -0
- package/library/snippets/power-query/api-integration.md +707 -0
- package/library/snippets/power-query/connections.md +434 -0
- package/library/snippets/power-query/data-cleaning.md +298 -0
- package/library/snippets/power-query/error-handling.md +526 -0
- package/library/snippets/power-query/parameters.md +350 -0
- package/library/snippets/power-query/performance.md +506 -0
- package/library/snippets/power-query/transformations.md +330 -0
- package/library/snippets/report-design/accessibility.md +78 -0
- package/library/snippets/report-design/chart-selection.md +54 -0
- package/library/snippets/report-design/layout-patterns.md +87 -0
- package/library/templates/data-models/README.md +93 -0
- package/library/templates/data-models/finance-model.md +627 -0
- package/library/templates/data-models/retail-star-schema.md +473 -0
- package/library/templates/excel/README.md +83 -0
- package/library/templates/excel/budget-tracker.md +432 -0
- package/library/templates/excel/data-entry-form.md +533 -0
- package/library/templates/power-bi/README.md +72 -0
- package/library/templates/power-bi/finance-report.md +449 -0
- package/library/templates/power-bi/kpi-scorecard.md +461 -0
- package/library/templates/power-bi/sales-dashboard.md +281 -0
- package/library/themes/excel/README.md +436 -0
- package/library/themes/power-bi/README.md +271 -0
- package/library/themes/power-bi/accessible.json +307 -0
- package/library/themes/power-bi/bi-superpowers-default.json +858 -0
- package/library/themes/power-bi/corporate-blue.json +291 -0
- package/library/themes/power-bi/dark-mode.json +291 -0
- package/library/themes/power-bi/minimal.json +292 -0
- package/library/themes/power-bi/print-friendly.json +309 -0
- package/package.json +93 -0
- package/skills/contributions/SKILL.md +267 -0
- package/skills/data-model-design/SKILL.md +470 -0
- package/skills/data-modeling/SKILL.md +254 -0
- package/skills/data-quality/SKILL.md +664 -0
- package/skills/dax/SKILL.md +708 -0
- package/skills/dax-doctor/SKILL.md +250 -0
- package/skills/dax-udf/SKILL.md +489 -0
- package/skills/deployment/SKILL.md +320 -0
- package/skills/excel-formulas/SKILL.md +463 -0
- package/skills/fabric-scripts/SKILL.md +454 -0
- package/skills/fast-standard/SKILL.md +509 -0
- package/skills/governance/SKILL.md +205 -0
- package/skills/migration-assistant/SKILL.md +292 -0
- package/skills/model-documenter/SKILL.md +244 -0
- package/skills/pbi-connect/SKILL.md +241 -0
- package/skills/power-query/SKILL.md +406 -0
- package/skills/project-kickoff/SKILL.md +907 -0
- package/skills/query-performance/SKILL.md +480 -0
- package/skills/report-design/SKILL.md +207 -0
- package/skills/report-layout/SKILL.md +298 -0
- package/skills/rls-design/SKILL.md +535 -0
- package/skills/semantic-model/SKILL.md +237 -0
- package/skills/testing-validation/SKILL.md +643 -0
- package/skills/theme-tweaker/SKILL.md +626 -0
- package/src/content/base.md +237 -0
- package/src/content/mcp-requirements.json +69 -0
- package/src/content/routing.md +203 -0
- package/src/content/skills/contributions.md +259 -0
- package/src/content/skills/data-model-design.md +462 -0
- package/src/content/skills/data-modeling.md +246 -0
- package/src/content/skills/data-quality.md +656 -0
- package/src/content/skills/dax-doctor.md +242 -0
- package/src/content/skills/dax-udf.md +481 -0
- package/src/content/skills/dax.md +700 -0
- package/src/content/skills/deployment.md +312 -0
- package/src/content/skills/excel-formulas.md +455 -0
- package/src/content/skills/fabric-scripts.md +446 -0
- package/src/content/skills/fast-standard.md +501 -0
- package/src/content/skills/governance.md +197 -0
- package/src/content/skills/migration-assistant.md +284 -0
- package/src/content/skills/model-documenter.md +236 -0
- package/src/content/skills/pbi-connect.md +233 -0
- package/src/content/skills/power-query.md +398 -0
- package/src/content/skills/project-kickoff.md +899 -0
- package/src/content/skills/query-performance.md +472 -0
- package/src/content/skills/report-design.md +199 -0
- package/src/content/skills/report-layout.md +290 -0
- package/src/content/skills/rls-design.md +527 -0
- package/src/content/skills/semantic-model.md +229 -0
- package/src/content/skills/testing-validation.md +635 -0
- package/src/content/skills/theme-tweaker.md +618 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Retail Analytics - Data Model
|
|
2
|
+
|
|
3
|
+
Complete table definitions for the retail analytics star schema.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Fact Table
|
|
8
|
+
|
|
9
|
+
### FactSales
|
|
10
|
+
|
|
11
|
+
| Column | Data Type | Description |
|
|
12
|
+
|--------|-----------|-------------|
|
|
13
|
+
| SalesKey | Text | Surrogate primary key |
|
|
14
|
+
| DateKey | Text | FK to DimDate (YYYYMMDD format) |
|
|
15
|
+
| ProductKey | Integer | FK to DimProduct |
|
|
16
|
+
| CustomerKey | Integer | FK to DimCustomer |
|
|
17
|
+
| StoreKey | Integer | FK to DimStore |
|
|
18
|
+
| Quantity | Integer | Units sold |
|
|
19
|
+
| UnitPrice | Currency | Sale price per unit |
|
|
20
|
+
| Discount | Currency | Discount amount applied |
|
|
21
|
+
| Amount | Currency | Net sale amount (Qty × Price - Discount) |
|
|
22
|
+
| Cost | Currency | Total cost (Qty × UnitCost) |
|
|
23
|
+
|
|
24
|
+
**Relationships:**
|
|
25
|
+
- FactSales[DateKey] → DimDate[DateKey] (Many:1)
|
|
26
|
+
- FactSales[ProductKey] → DimProduct[ProductKey] (Many:1)
|
|
27
|
+
- FactSales[CustomerKey] → DimCustomer[CustomerKey] (Many:1)
|
|
28
|
+
- FactSales[StoreKey] → DimStore[StoreKey] (Many:1)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Dimension Tables
|
|
33
|
+
|
|
34
|
+
### DimDate
|
|
35
|
+
|
|
36
|
+
| Column | Data Type | Description | Example |
|
|
37
|
+
|--------|-----------|-------------|---------|
|
|
38
|
+
| DateKey | Text | Primary key (YYYYMMDD) | "20240115" |
|
|
39
|
+
| Date | Date | Full date | 2024-01-15 |
|
|
40
|
+
| Year | Integer | Calendar year | 2024 |
|
|
41
|
+
| Quarter | Text | Quarter label | "Q1" |
|
|
42
|
+
| QuarterNumber | Integer | Quarter number | 1 |
|
|
43
|
+
| Month | Integer | Month number | 1 |
|
|
44
|
+
| MonthName | Text | Full month name | "January" |
|
|
45
|
+
| MonthShort | Text | 3-letter month | "Jan" |
|
|
46
|
+
| YearMonth | Text | Year-Month label | "2024-01" |
|
|
47
|
+
| Week | Integer | Week of year | 3 |
|
|
48
|
+
| WeekOfMonth | Integer | Week of month | 3 |
|
|
49
|
+
| Day | Integer | Day of month | 15 |
|
|
50
|
+
| DayOfWeek | Integer | Day of week (1=Mon) | 1 |
|
|
51
|
+
| DayOfWeekName | Text | Day name | "Monday" |
|
|
52
|
+
| IsWeekend | Boolean | Weekend flag | FALSE |
|
|
53
|
+
| IsHoliday | Boolean | Holiday flag | FALSE |
|
|
54
|
+
| FiscalYear | Integer | Fiscal year | 2024 |
|
|
55
|
+
| FiscalQuarter | Text | Fiscal quarter | "FQ1" |
|
|
56
|
+
| FiscalMonth | Integer | Fiscal month | 7 |
|
|
57
|
+
|
|
58
|
+
**Settings:**
|
|
59
|
+
- Mark as Date Table using Date column
|
|
60
|
+
- Sort MonthName by Month
|
|
61
|
+
- Sort DayOfWeekName by DayOfWeek
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### DimProduct
|
|
66
|
+
|
|
67
|
+
| Column | Data Type | Description | Example |
|
|
68
|
+
|--------|-----------|-------------|---------|
|
|
69
|
+
| ProductKey | Integer | Surrogate PK | 1001 |
|
|
70
|
+
| ProductID | Text | Business key | "SKU-12345" |
|
|
71
|
+
| ProductName | Text | Product name | "Wireless Mouse" |
|
|
72
|
+
| Category | Text | Top-level category | "Electronics" |
|
|
73
|
+
| SubCategory | Text | Sub-category | "Accessories" |
|
|
74
|
+
| Brand | Text | Brand name | "TechBrand" |
|
|
75
|
+
| UnitCost | Currency | Cost to company | 12.50 |
|
|
76
|
+
| UnitPrice | Currency | List price | 24.99 |
|
|
77
|
+
| Margin | Decimal | Calculated margin | 0.50 |
|
|
78
|
+
| IsActive | Boolean | Currently sold | TRUE |
|
|
79
|
+
| LaunchDate | Date | Product launch | 2023-06-01 |
|
|
80
|
+
|
|
81
|
+
**Hierarchies:**
|
|
82
|
+
- Category > SubCategory > ProductName
|
|
83
|
+
- Brand > ProductName
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### DimCustomer
|
|
88
|
+
|
|
89
|
+
| Column | Data Type | Description | Example |
|
|
90
|
+
|--------|-----------|-------------|---------|
|
|
91
|
+
| CustomerKey | Integer | Surrogate PK | 5001 |
|
|
92
|
+
| CustomerID | Text | Business key | "CUST-12345" |
|
|
93
|
+
| CustomerName | Text | Full name | "John Smith" |
|
|
94
|
+
| Email | Text | Email address | "john@example.com" |
|
|
95
|
+
| Phone | Text | Phone number | "555-0100" |
|
|
96
|
+
| Address | Text | Street address | "123 Main St" |
|
|
97
|
+
| City | Text | City | "Seattle" |
|
|
98
|
+
| State | Text | State code | "WA" |
|
|
99
|
+
| PostalCode | Text | ZIP code | "98101" |
|
|
100
|
+
| Region | Text | Sales region | "West" |
|
|
101
|
+
| Country | Text | Country | "USA" |
|
|
102
|
+
| JoinDate | Date | Customer since | 2022-03-15 |
|
|
103
|
+
| Tier | Text | Customer tier | "Gold" |
|
|
104
|
+
| IsActive | Boolean | Active customer | TRUE |
|
|
105
|
+
|
|
106
|
+
**Hierarchies:**
|
|
107
|
+
- Region > State > City
|
|
108
|
+
- Tier > CustomerName
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### DimStore
|
|
113
|
+
|
|
114
|
+
| Column | Data Type | Description | Example |
|
|
115
|
+
|--------|-----------|-------------|---------|
|
|
116
|
+
| StoreKey | Integer | Surrogate PK | 101 |
|
|
117
|
+
| StoreID | Text | Business key | "STORE-001" |
|
|
118
|
+
| StoreName | Text | Store name | "Downtown Seattle" |
|
|
119
|
+
| StoreType | Text | Store type | "Flagship" |
|
|
120
|
+
| Address | Text | Street address | "100 Pike St" |
|
|
121
|
+
| City | Text | City | "Seattle" |
|
|
122
|
+
| State | Text | State code | "WA" |
|
|
123
|
+
| PostalCode | Text | ZIP code | "98101" |
|
|
124
|
+
| Region | Text | Sales region | "West" |
|
|
125
|
+
| Country | Text | Country | "USA" |
|
|
126
|
+
| Latitude | Decimal | Latitude | 47.6062 |
|
|
127
|
+
| Longitude | Decimal | Longitude | -122.3321 |
|
|
128
|
+
| OpenDate | Date | Store opened | 2020-01-15 |
|
|
129
|
+
| SquareFeet | Integer | Floor space | 25000 |
|
|
130
|
+
| EmployeeCount | Integer | Staff count | 45 |
|
|
131
|
+
| Manager | Text | Manager name | "Jane Doe" |
|
|
132
|
+
| IsActive | Boolean | Currently open | TRUE |
|
|
133
|
+
|
|
134
|
+
**Hierarchies:**
|
|
135
|
+
- Region > State > City > StoreName
|
|
136
|
+
- StoreType > StoreName
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Calculated Columns
|
|
141
|
+
|
|
142
|
+
### DimDate - Date Table Generation
|
|
143
|
+
|
|
144
|
+
```m
|
|
145
|
+
// Power Query for DimDate
|
|
146
|
+
let
|
|
147
|
+
StartDate = #date(2020, 1, 1),
|
|
148
|
+
EndDate = #date(2026, 12, 31),
|
|
149
|
+
DateList = List.Dates(StartDate, Duration.Days(EndDate - StartDate) + 1, #duration(1, 0, 0, 0)),
|
|
150
|
+
DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
|
|
151
|
+
|
|
152
|
+
// Add columns
|
|
153
|
+
WithColumns = Table.AddColumn(
|
|
154
|
+
Table.AddColumn(
|
|
155
|
+
Table.AddColumn(
|
|
156
|
+
Table.AddColumn(
|
|
157
|
+
Table.AddColumn(
|
|
158
|
+
Table.AddColumn(
|
|
159
|
+
Table.TransformColumnTypes(DateTable, {{"Date", type date}}),
|
|
160
|
+
"DateKey", each Date.ToText([Date], "yyyyMMdd"), type text
|
|
161
|
+
),
|
|
162
|
+
"Year", each Date.Year([Date]), Int64.Type
|
|
163
|
+
),
|
|
164
|
+
"Month", each Date.Month([Date]), Int64.Type
|
|
165
|
+
),
|
|
166
|
+
"MonthName", each Date.MonthName([Date]), type text
|
|
167
|
+
),
|
|
168
|
+
"Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text
|
|
169
|
+
),
|
|
170
|
+
"DayOfWeek", each Date.DayOfWeek([Date], Day.Monday) + 1, Int64.Type
|
|
171
|
+
),
|
|
172
|
+
|
|
173
|
+
// Add more columns
|
|
174
|
+
WithMoreColumns = Table.AddColumn(
|
|
175
|
+
Table.AddColumn(
|
|
176
|
+
Table.AddColumn(WithColumns,
|
|
177
|
+
"IsWeekend", each Date.DayOfWeek([Date], Day.Monday) >= 5, type logical
|
|
178
|
+
),
|
|
179
|
+
"YearMonth", each Date.ToText([Date], "yyyy-MM"), type text
|
|
180
|
+
),
|
|
181
|
+
"Week", each Date.WeekOfYear([Date]), Int64.Type
|
|
182
|
+
)
|
|
183
|
+
in
|
|
184
|
+
WithMoreColumns
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### DimProduct - Margin Calculation
|
|
188
|
+
|
|
189
|
+
```dax
|
|
190
|
+
// DAX Calculated Column
|
|
191
|
+
Margin =
|
|
192
|
+
DIVIDE(
|
|
193
|
+
DimProduct[UnitPrice] - DimProduct[UnitCost],
|
|
194
|
+
DimProduct[UnitPrice]
|
|
195
|
+
)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Relationship Diagram
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
DimDate[DateKey] ─────────────────────────────┐
|
|
204
|
+
│
|
|
205
|
+
DimProduct[ProductKey] ────────────────────┐ │
|
|
206
|
+
│ │
|
|
207
|
+
DimCustomer[CustomerKey] ────────────────┐ │ │
|
|
208
|
+
│ │ │
|
|
209
|
+
DimStore[StoreKey] ────────────────────┐ │ │ │
|
|
210
|
+
│ │ │ │
|
|
211
|
+
▼ ▼ ▼ ▼
|
|
212
|
+
┌───────────┐
|
|
213
|
+
│ FactSales │
|
|
214
|
+
└───────────┘
|
|
215
|
+
|
|
216
|
+
All relationships: Many-to-One, Single direction (Dimension → Fact)
|
|
217
|
+
Cross-filter direction: Single (except DimDate which may be Both for some scenarios)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Model Settings
|
|
223
|
+
|
|
224
|
+
### Table Properties
|
|
225
|
+
|
|
226
|
+
| Table | Load to Report | Include in Refresh |
|
|
227
|
+
|-------|----------------|-------------------|
|
|
228
|
+
| FactSales | Yes | Yes |
|
|
229
|
+
| DimDate | Yes | Yes (or No if static) |
|
|
230
|
+
| DimProduct | Yes | Yes |
|
|
231
|
+
| DimCustomer | Yes | Yes |
|
|
232
|
+
| DimStore | Yes | Yes |
|
|
233
|
+
|
|
234
|
+
### Hidden Columns
|
|
235
|
+
|
|
236
|
+
Hide these columns from report view (they're for relationships only):
|
|
237
|
+
|
|
238
|
+
- FactSales[DateKey]
|
|
239
|
+
- FactSales[ProductKey]
|
|
240
|
+
- FactSales[CustomerKey]
|
|
241
|
+
- FactSales[StoreKey]
|
|
242
|
+
- All surrogate key columns (except for debugging)
|
|
243
|
+
|
|
244
|
+
### Data Categories
|
|
245
|
+
|
|
246
|
+
| Column | Data Category |
|
|
247
|
+
|--------|---------------|
|
|
248
|
+
| DimCustomer[City] | City |
|
|
249
|
+
| DimCustomer[State] | State or Province |
|
|
250
|
+
| DimCustomer[PostalCode] | Postal Code |
|
|
251
|
+
| DimCustomer[Country] | Country |
|
|
252
|
+
| DimStore[City] | City |
|
|
253
|
+
| DimStore[State] | State or Province |
|
|
254
|
+
| DimStore[Latitude] | Latitude |
|
|
255
|
+
| DimStore[Longitude] | Longitude |
|
|
256
|
+
| DimProduct[ProductName] | Uncategorized |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Sample Data
|
|
261
|
+
|
|
262
|
+
### FactSales (5 rows)
|
|
263
|
+
|
|
264
|
+
| SalesKey | DateKey | ProductKey | CustomerKey | StoreKey | Quantity | UnitPrice | Discount | Amount |
|
|
265
|
+
|----------|---------|------------|-------------|----------|----------|-----------|----------|--------|
|
|
266
|
+
| S001 | 20240115 | 1001 | 5001 | 101 | 2 | 24.99 | 0.00 | 49.98 |
|
|
267
|
+
| S002 | 20240115 | 1002 | 5002 | 101 | 1 | 149.99 | 15.00 | 134.99 |
|
|
268
|
+
| S003 | 20240116 | 1001 | 5003 | 102 | 3 | 24.99 | 5.00 | 69.97 |
|
|
269
|
+
| S004 | 20240116 | 1003 | 5001 | 101 | 1 | 599.99 | 0.00 | 599.99 |
|
|
270
|
+
| S005 | 20240117 | 1002 | 5004 | 103 | 2 | 149.99 | 20.00 | 279.98 |
|
|
271
|
+
|
|
272
|
+
### DimProduct (3 rows)
|
|
273
|
+
|
|
274
|
+
| ProductKey | ProductID | ProductName | Category | SubCategory | Brand | UnitCost | UnitPrice |
|
|
275
|
+
|------------|-----------|-------------|----------|-------------|-------|----------|-----------|
|
|
276
|
+
| 1001 | SKU-001 | Wireless Mouse | Electronics | Accessories | TechBrand | 12.50 | 24.99 |
|
|
277
|
+
| 1002 | SKU-002 | Bluetooth Headphones | Electronics | Audio | SoundMax | 45.00 | 149.99 |
|
|
278
|
+
| 1003 | SKU-003 | Gaming Monitor | Electronics | Displays | ViewPro | 280.00 | 599.99 |
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Performance Tips
|
|
283
|
+
|
|
284
|
+
1. **Use surrogate keys** - Integer keys are faster for joins
|
|
285
|
+
2. **Avoid high-cardinality columns** in slicers
|
|
286
|
+
3. **Use aggregations** for large fact tables (1M+ rows)
|
|
287
|
+
4. **Partition** by date for incremental refresh
|
|
288
|
+
5. **Set data types** correctly - don't use text for numbers
|