@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,267 @@
|
|
|
1
|
+
# Finance Reporting - Data Model
|
|
2
|
+
|
|
3
|
+
Complete table definitions for the financial reporting star schema.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Fact Table
|
|
8
|
+
|
|
9
|
+
### FactFinancials
|
|
10
|
+
|
|
11
|
+
| Column | Data Type | Description |
|
|
12
|
+
|--------|-----------|-------------|
|
|
13
|
+
| FinancialKey | Integer | Surrogate primary key |
|
|
14
|
+
| DateKey | Text | FK to DimDate (YYYYMMDD) |
|
|
15
|
+
| AccountKey | Integer | FK to DimAccount |
|
|
16
|
+
| CostCenterKey | Integer | FK to DimCostCenter |
|
|
17
|
+
| ScenarioKey | Integer | FK to DimScenario |
|
|
18
|
+
| Amount | Currency | Transaction amount (natural sign) |
|
|
19
|
+
|
|
20
|
+
**Grain:** One row per Account, Cost Center, Scenario, Period combination.
|
|
21
|
+
|
|
22
|
+
**Note:** Amount is stored in natural sign (positive for debits, negative for credits as recorded). Use DimAccount[NaturalSign] to flip for reporting.
|
|
23
|
+
|
|
24
|
+
**Relationships:**
|
|
25
|
+
- FactFinancials[DateKey] → DimDate[DateKey] (Many:1)
|
|
26
|
+
- FactFinancials[AccountKey] → DimAccount[AccountKey] (Many:1)
|
|
27
|
+
- FactFinancials[CostCenterKey] → DimCostCenter[CostCenterKey] (Many:1)
|
|
28
|
+
- FactFinancials[ScenarioKey] → DimScenario[ScenarioKey] (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) | "20240131" |
|
|
39
|
+
| Date | Date | Full date | 2024-01-31 |
|
|
40
|
+
| Year | Integer | Calendar year | 2024 |
|
|
41
|
+
| Month | Integer | Calendar month | 1 |
|
|
42
|
+
| MonthName | Text | Month name | "January" |
|
|
43
|
+
| Quarter | Text | Calendar quarter | "Q1" |
|
|
44
|
+
| FiscalYear | Integer | Fiscal year | 2024 |
|
|
45
|
+
| FiscalPeriod | Integer | Fiscal period (1-12) | 7 |
|
|
46
|
+
| FiscalPeriodName | Text | Fiscal period label | "FY24-P07" |
|
|
47
|
+
| FiscalQuarter | Text | Fiscal quarter | "FY24-Q3" |
|
|
48
|
+
| FiscalYearStart | Date | First day of fiscal year | 2023-07-01 |
|
|
49
|
+
| FiscalYearEnd | Date | Last day of fiscal year | 2024-06-30 |
|
|
50
|
+
| IsCurrentPeriod | Boolean | Current reporting period | TRUE |
|
|
51
|
+
| IsYTD | Boolean | Within current YTD | TRUE |
|
|
52
|
+
| DaysInMonth | Integer | Days in month | 31 |
|
|
53
|
+
| IsMonthEnd | Boolean | Last day of month | TRUE |
|
|
54
|
+
|
|
55
|
+
**Notes:**
|
|
56
|
+
- Assumes July fiscal year start (adjust for your organization)
|
|
57
|
+
- Mark as Date Table in Power BI
|
|
58
|
+
- Sort MonthName by Month
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### DimAccount
|
|
63
|
+
|
|
64
|
+
| Column | Data Type | Description | Example |
|
|
65
|
+
|--------|-----------|-------------|---------|
|
|
66
|
+
| AccountKey | Integer | Surrogate PK | 1001 |
|
|
67
|
+
| AccountCode | Text | GL account code | "4010" |
|
|
68
|
+
| AccountName | Text | Account name | "Product Revenue" |
|
|
69
|
+
| AccountType | Text | Account classification | "Revenue" |
|
|
70
|
+
| AccountGroup | Text | Grouping level | "Net Revenue" |
|
|
71
|
+
| AccountSubGroup | Text | Sub-grouping | "Product Sales" |
|
|
72
|
+
| FinancialStmt | Text | Statement type | "Income Statement" |
|
|
73
|
+
| NaturalSign | Integer | Sign multiplier | 1 or -1 |
|
|
74
|
+
| SortOrder | Integer | Display order | 100 |
|
|
75
|
+
| Level | Integer | Hierarchy level | 3 |
|
|
76
|
+
| IsDetail | Boolean | Lowest level | TRUE |
|
|
77
|
+
| ParentAccountKey | Integer | Parent for hierarchy | 1000 |
|
|
78
|
+
|
|
79
|
+
**Account Types:**
|
|
80
|
+
|
|
81
|
+
| AccountType | FinancialStmt | NaturalSign | SortOrder Range |
|
|
82
|
+
|-------------|---------------|-------------|-----------------|
|
|
83
|
+
| Revenue | Income Statement | -1 | 100-199 |
|
|
84
|
+
| COGS | Income Statement | 1 | 200-299 |
|
|
85
|
+
| OpEx | Income Statement | 1 | 300-499 |
|
|
86
|
+
| OtherIncome | Income Statement | -1 | 500-549 |
|
|
87
|
+
| OtherExpense | Income Statement | 1 | 550-599 |
|
|
88
|
+
| Tax | Income Statement | 1 | 600-699 |
|
|
89
|
+
| Asset | Balance Sheet | 1 | 700-799 |
|
|
90
|
+
| Liability | Balance Sheet | -1 | 800-849 |
|
|
91
|
+
| Equity | Balance Sheet | -1 | 850-899 |
|
|
92
|
+
|
|
93
|
+
**NaturalSign Logic:**
|
|
94
|
+
- Revenue/Income: Stored as negative (credit), display as positive → NaturalSign = -1
|
|
95
|
+
- Expenses: Stored as positive (debit), display as positive → NaturalSign = 1
|
|
96
|
+
- Assets: Stored as positive (debit), display as positive → NaturalSign = 1
|
|
97
|
+
- Liabilities/Equity: Stored as negative (credit), display as positive → NaturalSign = -1
|
|
98
|
+
|
|
99
|
+
**Hierarchies:**
|
|
100
|
+
- AccountType > AccountGroup > AccountSubGroup > AccountName
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### DimCostCenter
|
|
105
|
+
|
|
106
|
+
| Column | Data Type | Description | Example |
|
|
107
|
+
|--------|-----------|-------------|---------|
|
|
108
|
+
| CostCenterKey | Integer | Surrogate PK | 501 |
|
|
109
|
+
| CostCenterCode | Text | Business key | "CC-MKTG-001" |
|
|
110
|
+
| CostCenterName | Text | Name | "Marketing - Digital" |
|
|
111
|
+
| Department | Text | Department | "Marketing" |
|
|
112
|
+
| Division | Text | Division | "Commercial" |
|
|
113
|
+
| Region | Text | Geographic region | "North America" |
|
|
114
|
+
| Manager | Text | Responsible manager | "Jane Smith" |
|
|
115
|
+
| IsActive | Boolean | Currently active | TRUE |
|
|
116
|
+
|
|
117
|
+
**Hierarchies:**
|
|
118
|
+
- Division > Department > CostCenterName
|
|
119
|
+
- Region > CostCenterName
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### DimScenario
|
|
124
|
+
|
|
125
|
+
| Column | Data Type | Description | Example |
|
|
126
|
+
|--------|-----------|-------------|---------|
|
|
127
|
+
| ScenarioKey | Integer | Surrogate PK | 1 |
|
|
128
|
+
| ScenarioName | Text | Scenario name | "Actual" |
|
|
129
|
+
| ScenarioType | Text | Type classification | "Actual" |
|
|
130
|
+
| ScenarioYear | Integer | Applicable year | 2024 |
|
|
131
|
+
| Version | Text | Version identifier | "v1.0" |
|
|
132
|
+
| IsActual | Boolean | Actual data flag | TRUE |
|
|
133
|
+
| IsBudget | Boolean | Budget data flag | FALSE |
|
|
134
|
+
| IsForecast | Boolean | Forecast data flag | FALSE |
|
|
135
|
+
| IsActive | Boolean | Currently active | TRUE |
|
|
136
|
+
| EffectiveDate | Date | When scenario applies | 2024-01-01 |
|
|
137
|
+
| Description | Text | Scenario notes | "FY24 Actual Results" |
|
|
138
|
+
|
|
139
|
+
**Standard Scenarios:**
|
|
140
|
+
|
|
141
|
+
| ScenarioName | ScenarioType | IsActual | IsBudget | IsForecast |
|
|
142
|
+
|--------------|--------------|----------|----------|------------|
|
|
143
|
+
| Actual | Actual | TRUE | FALSE | FALSE |
|
|
144
|
+
| Budget | Budget | FALSE | TRUE | FALSE |
|
|
145
|
+
| Forecast Q1 | Forecast | FALSE | FALSE | TRUE |
|
|
146
|
+
| Forecast Q2 | Forecast | FALSE | FALSE | TRUE |
|
|
147
|
+
| Prior Year Actual | Actual | TRUE | FALSE | FALSE |
|
|
148
|
+
| Stretch Target | Budget | FALSE | TRUE | FALSE |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Sample Data
|
|
153
|
+
|
|
154
|
+
### DimAccount (Selected Rows)
|
|
155
|
+
|
|
156
|
+
| AccountKey | AccountCode | AccountName | AccountType | AccountGroup | NaturalSign | SortOrder |
|
|
157
|
+
|------------|-------------|-------------|-------------|--------------|-------------|-----------|
|
|
158
|
+
| 100 | 4000 | Net Revenue | Revenue | Net Revenue | -1 | 100 |
|
|
159
|
+
| 101 | 4010 | Product Revenue | Revenue | Net Revenue | -1 | 110 |
|
|
160
|
+
| 102 | 4020 | Service Revenue | Revenue | Net Revenue | -1 | 120 |
|
|
161
|
+
| 200 | 5000 | Cost of Goods Sold | COGS | COGS | 1 | 200 |
|
|
162
|
+
| 201 | 5010 | Materials | COGS | COGS | 1 | 210 |
|
|
163
|
+
| 202 | 5020 | Direct Labor | COGS | COGS | 1 | 220 |
|
|
164
|
+
| 300 | 6000 | Operating Expenses | OpEx | SG&A | 1 | 300 |
|
|
165
|
+
| 301 | 6100 | Salaries & Wages | OpEx | Personnel | 1 | 310 |
|
|
166
|
+
| 302 | 6200 | Rent & Facilities | OpEx | Occupancy | 1 | 320 |
|
|
167
|
+
| 303 | 6300 | Marketing | OpEx | Marketing | 1 | 330 |
|
|
168
|
+
|
|
169
|
+
### FactFinancials (Sample)
|
|
170
|
+
|
|
171
|
+
| FinancialKey | DateKey | AccountKey | CostCenterKey | ScenarioKey | Amount |
|
|
172
|
+
|--------------|---------|------------|---------------|-------------|--------|
|
|
173
|
+
| 1 | 20240131 | 101 | 501 | 1 | -150000 |
|
|
174
|
+
| 2 | 20240131 | 101 | 501 | 2 | -145000 |
|
|
175
|
+
| 3 | 20240131 | 201 | 501 | 1 | 45000 |
|
|
176
|
+
| 4 | 20240131 | 301 | 502 | 1 | 25000 |
|
|
177
|
+
| 5 | 20240131 | 303 | 503 | 1 | 18000 |
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Calculated Columns
|
|
182
|
+
|
|
183
|
+
### Display Amount (with sign correction)
|
|
184
|
+
|
|
185
|
+
```dax
|
|
186
|
+
// Add to FactFinancials or use in measures
|
|
187
|
+
Display Amount =
|
|
188
|
+
FactFinancials[Amount] * RELATED(DimAccount[NaturalSign])
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Account Path (for hierarchy)
|
|
192
|
+
|
|
193
|
+
```dax
|
|
194
|
+
// Add to DimAccount
|
|
195
|
+
Account Path =
|
|
196
|
+
VAR _Path =
|
|
197
|
+
PATH(DimAccount[AccountKey], DimAccount[ParentAccountKey])
|
|
198
|
+
RETURN
|
|
199
|
+
_Path
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Relationship Diagram
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
DimDate[DateKey] ─────────────────────────────────┐
|
|
208
|
+
│
|
|
209
|
+
DimAccount[AccountKey] ────────────────────────┐ │
|
|
210
|
+
│ │
|
|
211
|
+
DimCostCenter[CostCenterKey] ────────────────┐ │ │
|
|
212
|
+
│ │ │
|
|
213
|
+
DimScenario[ScenarioKey] ──────────────────┐ │ │ │
|
|
214
|
+
│ │ │ │
|
|
215
|
+
▼ ▼ ▼ ▼
|
|
216
|
+
┌────────────┐
|
|
217
|
+
│FactFinance │
|
|
218
|
+
└────────────┘
|
|
219
|
+
|
|
220
|
+
All relationships: Many-to-One, Single direction
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Power Query Notes
|
|
226
|
+
|
|
227
|
+
### Loading GL Data
|
|
228
|
+
|
|
229
|
+
```m
|
|
230
|
+
let
|
|
231
|
+
Source = Sql.Database("server", "FinanceDB"),
|
|
232
|
+
GL = Source{[Schema="dbo", Item="GeneralLedger"]}[Data],
|
|
233
|
+
|
|
234
|
+
// Filter to relevant periods
|
|
235
|
+
Filtered = Table.SelectRows(GL, each
|
|
236
|
+
[PostingDate] >= #date(2022, 1, 1)
|
|
237
|
+
),
|
|
238
|
+
|
|
239
|
+
// Map to dimension keys
|
|
240
|
+
WithKeys = Table.AddColumn(
|
|
241
|
+
Table.AddColumn(
|
|
242
|
+
Table.AddColumn(Filtered,
|
|
243
|
+
"DateKey", each Date.ToText([PostingDate], "yyyyMMdd")
|
|
244
|
+
),
|
|
245
|
+
"AccountKey", each [GLAccountID]
|
|
246
|
+
),
|
|
247
|
+
"CostCenterKey", each [CostCenterID]
|
|
248
|
+
),
|
|
249
|
+
|
|
250
|
+
// Aggregate to grain
|
|
251
|
+
Grouped = Table.Group(WithKeys,
|
|
252
|
+
{"DateKey", "AccountKey", "CostCenterKey", "ScenarioKey"},
|
|
253
|
+
{{"Amount", each List.Sum([Amount]), Currency.Type}}
|
|
254
|
+
)
|
|
255
|
+
in
|
|
256
|
+
Grouped
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Performance Tips
|
|
262
|
+
|
|
263
|
+
1. **Pre-aggregate** - Financial data should be at period/account grain, not transaction detail
|
|
264
|
+
2. **Use integer keys** - Faster joins than text account codes
|
|
265
|
+
3. **Filter early** - Apply date filters in Power Query
|
|
266
|
+
4. **Partition by year** - For large datasets, enable incremental refresh
|
|
267
|
+
5. **Avoid calculated columns** - Use measures with NaturalSign instead
|