@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,533 @@
|
|
|
1
|
+
# Data Entry Form Template
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
A structured Excel workbook for standardized data collection with validation, error prevention, and automated data processing. Ideal for surveys, inventory tracking, order entry, or any repetitive data input scenario.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Target Audience
|
|
10
|
+
|
|
11
|
+
- Data Entry Operators
|
|
12
|
+
- Field Researchers
|
|
13
|
+
- Inventory Managers
|
|
14
|
+
- Sales Representatives
|
|
15
|
+
- HR Administrators
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Workbook Structure
|
|
20
|
+
|
|
21
|
+
### Sheet 1: Data Entry Form
|
|
22
|
+
|
|
23
|
+
**Purpose:** User-friendly input interface
|
|
24
|
+
|
|
25
|
+
| Section | Position | Content |
|
|
26
|
+
|---------|----------|---------|
|
|
27
|
+
| Header | A1:F3 | Form title, instructions, required fields indicator |
|
|
28
|
+
| Entry ID | A5:B5 | Auto-generated unique identifier |
|
|
29
|
+
| Date/Time | A6:B6 | Auto-populated current date/time |
|
|
30
|
+
| User | A7:B7 | Dropdown of authorized users |
|
|
31
|
+
| Form Fields | A9:F30 | Input fields with labels and validation |
|
|
32
|
+
| Submit Button | D32 | Macro button to process entry |
|
|
33
|
+
| Clear Button | E32 | Reset form to blank |
|
|
34
|
+
| Status | F32 | Submission confirmation |
|
|
35
|
+
|
|
36
|
+
### Sheet 2: Data Table
|
|
37
|
+
|
|
38
|
+
**Purpose:** Structured storage of all entries
|
|
39
|
+
|
|
40
|
+
| Column | Header | Source |
|
|
41
|
+
|--------|--------|--------|
|
|
42
|
+
| A | EntryID | Auto-generated |
|
|
43
|
+
| B | SubmitDate | Timestamp |
|
|
44
|
+
| C | SubmittedBy | User selection |
|
|
45
|
+
| D+ | Field columns | Each form field has a column |
|
|
46
|
+
| Last | ValidationStatus | Pass/Fail indicator |
|
|
47
|
+
|
|
48
|
+
### Sheet 3: Lookups
|
|
49
|
+
|
|
50
|
+
**Purpose:** Reference data for dropdowns and validation
|
|
51
|
+
|
|
52
|
+
| Table | Content |
|
|
53
|
+
|-------|---------|
|
|
54
|
+
| Users | Authorized user list |
|
|
55
|
+
| Categories | Product/service categories |
|
|
56
|
+
| Regions | Geographic regions |
|
|
57
|
+
| Status Options | Available status values |
|
|
58
|
+
| Custom Lists | Any other dropdown sources |
|
|
59
|
+
|
|
60
|
+
### Sheet 4: Validation Rules
|
|
61
|
+
|
|
62
|
+
**Purpose:** Define business rules
|
|
63
|
+
|
|
64
|
+
| Column | Header | Example |
|
|
65
|
+
|--------|--------|---------|
|
|
66
|
+
| A | Field Name | "Email" |
|
|
67
|
+
| B | Validation Type | "Format" |
|
|
68
|
+
| C | Rule | "Contains @" |
|
|
69
|
+
| D | Error Message | "Please enter a valid email" |
|
|
70
|
+
|
|
71
|
+
### Sheet 5: Settings
|
|
72
|
+
|
|
73
|
+
**Purpose:** Form configuration
|
|
74
|
+
|
|
75
|
+
| Setting | Value |
|
|
76
|
+
|---------|-------|
|
|
77
|
+
| Form Title | "Customer Intake Form" |
|
|
78
|
+
| Required Fields | List of mandatory fields |
|
|
79
|
+
| Auto-increment prefix | "ENT-" |
|
|
80
|
+
| Date format | "YYYY-MM-DD" |
|
|
81
|
+
| Email notifications | On/Off |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Form Field Types
|
|
86
|
+
|
|
87
|
+
### Text Input
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Label: [Customer Name]
|
|
91
|
+
Input Cell: Merged cells B10:D10
|
|
92
|
+
Validation: Text length > 0
|
|
93
|
+
Format: Proper case on exit
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Number Input
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Label: [Quantity]
|
|
100
|
+
Input Cell: B12
|
|
101
|
+
Validation: Whole number, >= 0
|
|
102
|
+
Format: #,##0
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Date Input
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Label: [Order Date]
|
|
109
|
+
Input Cell: B14
|
|
110
|
+
Validation: Date between StartDate and TODAY()
|
|
111
|
+
Format: YYYY-MM-DD
|
|
112
|
+
Default: =TODAY()
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Dropdown Selection
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Label: [Category]
|
|
119
|
+
Input Cell: B16
|
|
120
|
+
Validation: List from Lookups!Categories
|
|
121
|
+
Allow blank: No
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Dependent Dropdown
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Label: [Subcategory]
|
|
128
|
+
Input Cell: B18
|
|
129
|
+
Validation: List = INDIRECT(B16 & "_List")
|
|
130
|
+
Dependent on: Category selection
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Email Input
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
Label: [Email Address]
|
|
137
|
+
Input Cell: B20
|
|
138
|
+
Validation: Custom formula checking for @ and .
|
|
139
|
+
Error: "Enter valid email format"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Phone Input
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Label: [Phone Number]
|
|
146
|
+
Input Cell: B22
|
|
147
|
+
Validation: Text length = 10 or format XXX-XXX-XXXX
|
|
148
|
+
Format: Apply phone format on exit
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Multi-line Text
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Label: [Comments]
|
|
155
|
+
Input Cell: B24:D26 (merged)
|
|
156
|
+
Validation: Text length <= 500
|
|
157
|
+
Wrap text: Yes
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Checkbox (Yes/No)
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Label: [Opt-in for Newsletter]
|
|
164
|
+
Input Cell: B28
|
|
165
|
+
Validation: List "Yes,No"
|
|
166
|
+
Default: "No"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Key Formulas
|
|
172
|
+
|
|
173
|
+
### Auto-Generate Entry ID
|
|
174
|
+
|
|
175
|
+
```excel
|
|
176
|
+
// In Entry ID cell
|
|
177
|
+
=Settings!Prefix & TEXT(COUNTA(DataTable[EntryID])+1, "00000")
|
|
178
|
+
|
|
179
|
+
// Example result: ENT-00042
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Auto-Populate Timestamp
|
|
183
|
+
|
|
184
|
+
```excel
|
|
185
|
+
// In Date/Time cell (static on submit via macro)
|
|
186
|
+
=NOW()
|
|
187
|
+
|
|
188
|
+
// For display only (updates)
|
|
189
|
+
=TEXT(NOW(), "YYYY-MM-DD HH:MM:SS")
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Validation Check Formula
|
|
193
|
+
|
|
194
|
+
```excel
|
|
195
|
+
// Check if all required fields are filled
|
|
196
|
+
=AND(
|
|
197
|
+
LEN(CustomerName) > 0,
|
|
198
|
+
LEN(Email) > 0,
|
|
199
|
+
ISNUMBER(Quantity),
|
|
200
|
+
Category <> ""
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
// Named as "AllFieldsValid"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Email Validation
|
|
207
|
+
|
|
208
|
+
```excel
|
|
209
|
+
=AND(
|
|
210
|
+
ISNUMBER(SEARCH("@", Email)),
|
|
211
|
+
ISNUMBER(SEARCH(".", Email, SEARCH("@", Email))),
|
|
212
|
+
LEN(Email) - LEN(SUBSTITUTE(Email, "@", "")) = 1
|
|
213
|
+
)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Phone Validation
|
|
217
|
+
|
|
218
|
+
```excel
|
|
219
|
+
// For 10-digit number
|
|
220
|
+
=AND(
|
|
221
|
+
LEN(SUBSTITUTE(SUBSTITUTE(Phone, "-", ""), " ", "")) = 10,
|
|
222
|
+
ISNUMBER(SUBSTITUTE(SUBSTITUTE(Phone, "-", ""), " ", "") + 0)
|
|
223
|
+
)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Dependent Dropdown Source
|
|
227
|
+
|
|
228
|
+
```excel
|
|
229
|
+
// INDIRECT for dependent list
|
|
230
|
+
=INDIRECT(CategoryCell & "SubList")
|
|
231
|
+
|
|
232
|
+
// Or using FILTER (365)
|
|
233
|
+
=FILTER(Lookups[Subcategory], Lookups[Category] = CategoryCell)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Duplicate Check
|
|
237
|
+
|
|
238
|
+
```excel
|
|
239
|
+
// Check if value already exists in data table
|
|
240
|
+
=IF(
|
|
241
|
+
COUNTIF(DataTable[Email], EmailInput) > 0,
|
|
242
|
+
"Duplicate entry detected",
|
|
243
|
+
"OK"
|
|
244
|
+
)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Data Validation Rules
|
|
250
|
+
|
|
251
|
+
### Required Field Indicator
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
Cell format: Bold label with asterisk (*)
|
|
255
|
+
Conditional format: Red border if empty on submit attempt
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Validation Settings by Type
|
|
259
|
+
|
|
260
|
+
| Field Type | Validation | Settings |
|
|
261
|
+
|------------|------------|----------|
|
|
262
|
+
| Text | Text length | Min: 1, Max: 100 |
|
|
263
|
+
| Number | Whole number | Between 0 and 999999 |
|
|
264
|
+
| Currency | Decimal | >= 0 |
|
|
265
|
+
| Date | Date | Between StartDate and EndDate |
|
|
266
|
+
| Dropdown | List | Source: named range |
|
|
267
|
+
| Email | Custom | =EmailValidationFormula |
|
|
268
|
+
| Phone | Custom | =PhoneValidationFormula |
|
|
269
|
+
|
|
270
|
+
### Error Alert Configuration
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
Style: Stop (prevents invalid entry)
|
|
274
|
+
Title: "Invalid Input"
|
|
275
|
+
Message: Field-specific error message
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Input Message Configuration
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
Show input message: Yes
|
|
282
|
+
Title: Field name
|
|
283
|
+
Message: "Enter [description]. Format: [example]"
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Conditional Formatting
|
|
289
|
+
|
|
290
|
+
### Required Fields
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
Apply to: All required input cells
|
|
294
|
+
Rule: =LEN(CellRef) = 0
|
|
295
|
+
Format: Light red fill
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Valid Entry Indicator
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
Apply to: Entry validation cell
|
|
302
|
+
Rule: =AllFieldsValid = TRUE
|
|
303
|
+
Format: Green checkmark icon
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Error Highlighting
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
Apply to: Field with error
|
|
310
|
+
Rule: Custom formula based on validation
|
|
311
|
+
Format: Red border, light red fill
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Submitted Entries
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
Apply to: Data table rows
|
|
318
|
+
Rule: =SubmitDate <> ""
|
|
319
|
+
Format: Light gray fill (indicates processed)
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## VBA Macros (Optional)
|
|
325
|
+
|
|
326
|
+
### Submit Entry Macro
|
|
327
|
+
|
|
328
|
+
```vba
|
|
329
|
+
Sub SubmitEntry()
|
|
330
|
+
' Validate all fields
|
|
331
|
+
If Not Range("AllFieldsValid").Value Then
|
|
332
|
+
MsgBox "Please complete all required fields.", vbExclamation
|
|
333
|
+
Exit Sub
|
|
334
|
+
End If
|
|
335
|
+
|
|
336
|
+
' Find next empty row in data table
|
|
337
|
+
Dim nextRow As Long
|
|
338
|
+
nextRow = Sheets("DataTable").Cells(Rows.Count, 1).End(xlUp).Row + 1
|
|
339
|
+
|
|
340
|
+
' Copy values to data table
|
|
341
|
+
With Sheets("DataTable")
|
|
342
|
+
.Cells(nextRow, 1).Value = Range("EntryID").Value
|
|
343
|
+
.Cells(nextRow, 2).Value = Now()
|
|
344
|
+
.Cells(nextRow, 3).Value = Range("UserName").Value
|
|
345
|
+
' ... copy all form fields
|
|
346
|
+
End With
|
|
347
|
+
|
|
348
|
+
' Clear form
|
|
349
|
+
Call ClearForm
|
|
350
|
+
|
|
351
|
+
' Confirmation
|
|
352
|
+
Range("Status").Value = "Entry submitted successfully!"
|
|
353
|
+
End Sub
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Clear Form Macro
|
|
357
|
+
|
|
358
|
+
```vba
|
|
359
|
+
Sub ClearForm()
|
|
360
|
+
' Clear all input cells
|
|
361
|
+
Range("CustomerName").ClearContents
|
|
362
|
+
Range("Email").ClearContents
|
|
363
|
+
Range("Phone").ClearContents
|
|
364
|
+
Range("Category").ClearContents
|
|
365
|
+
' ... clear all fields
|
|
366
|
+
|
|
367
|
+
' Reset Entry ID
|
|
368
|
+
Range("EntryID").Calculate
|
|
369
|
+
|
|
370
|
+
' Clear status
|
|
371
|
+
Range("Status").ClearContents
|
|
372
|
+
|
|
373
|
+
' Set focus to first field
|
|
374
|
+
Range("CustomerName").Select
|
|
375
|
+
End Sub
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Auto-format on Entry
|
|
379
|
+
|
|
380
|
+
```vba
|
|
381
|
+
Private Sub Worksheet_Change(ByVal Target As Range)
|
|
382
|
+
' Proper case for name fields
|
|
383
|
+
If Not Intersect(Target, Range("CustomerName")) Is Nothing Then
|
|
384
|
+
Application.EnableEvents = False
|
|
385
|
+
Target.Value = WorksheetFunction.Proper(Target.Value)
|
|
386
|
+
Application.EnableEvents = True
|
|
387
|
+
End If
|
|
388
|
+
|
|
389
|
+
' Format phone number
|
|
390
|
+
If Not Intersect(Target, Range("Phone")) Is Nothing Then
|
|
391
|
+
Application.EnableEvents = False
|
|
392
|
+
Dim phone As String
|
|
393
|
+
phone = Replace(Replace(Target.Value, "-", ""), " ", "")
|
|
394
|
+
If Len(phone) = 10 Then
|
|
395
|
+
Target.Value = Left(phone, 3) & "-" & Mid(phone, 4, 3) & "-" & Right(phone, 4)
|
|
396
|
+
End If
|
|
397
|
+
Application.EnableEvents = True
|
|
398
|
+
End If
|
|
399
|
+
End Sub
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## Form Layout Best Practices
|
|
405
|
+
|
|
406
|
+
### Visual Hierarchy
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
+------------------------------------------+
|
|
410
|
+
| FORM TITLE [Logo] |
|
|
411
|
+
| Instructions and required fields note |
|
|
412
|
+
+------------------------------------------+
|
|
413
|
+
| Entry ID: ENT-00042 Date: 2024-01-15 |
|
|
414
|
+
+------------------------------------------+
|
|
415
|
+
| |
|
|
416
|
+
| * Customer Name: [___________________] |
|
|
417
|
+
| |
|
|
418
|
+
| * Email: [___________________] |
|
|
419
|
+
| |
|
|
420
|
+
| Phone: [___________________] |
|
|
421
|
+
| |
|
|
422
|
+
| * Category: [Dropdown_______v] |
|
|
423
|
+
| |
|
|
424
|
+
| Subcategory: [Dependent_____v] |
|
|
425
|
+
| |
|
|
426
|
+
| Comments: |
|
|
427
|
+
| [________________________________] |
|
|
428
|
+
| [________________________________] |
|
|
429
|
+
| |
|
|
430
|
+
| [Clear] [Submit] |
|
|
431
|
+
| |
|
|
432
|
+
| Status: Ready for entry |
|
|
433
|
+
+------------------------------------------+
|
|
434
|
+
* Required fields
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Cell Formatting
|
|
438
|
+
|
|
439
|
+
| Element | Format |
|
|
440
|
+
|---------|--------|
|
|
441
|
+
| Labels | Bold, right-aligned, gray background |
|
|
442
|
+
| Input cells | White background, border |
|
|
443
|
+
| Required indicator (*) | Red color |
|
|
444
|
+
| Buttons | Centered, button formatting |
|
|
445
|
+
| Status | Italic, color-coded by result |
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Protection and Security
|
|
450
|
+
|
|
451
|
+
### Sheet Protection Settings
|
|
452
|
+
|
|
453
|
+
```
|
|
454
|
+
Protected elements:
|
|
455
|
+
- Labels and headers
|
|
456
|
+
- Formulas
|
|
457
|
+
- Structure (rows/columns)
|
|
458
|
+
- Objects (buttons, shapes)
|
|
459
|
+
|
|
460
|
+
Unprotected:
|
|
461
|
+
- Input cells only
|
|
462
|
+
- Allow cell selection
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Workbook Protection
|
|
466
|
+
|
|
467
|
+
```
|
|
468
|
+
- Protect workbook structure
|
|
469
|
+
- Prevent sheet deletion/addition
|
|
470
|
+
- Password protect VBA code
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Data Protection
|
|
474
|
+
|
|
475
|
+
```
|
|
476
|
+
- Regular backup to secondary location
|
|
477
|
+
- Version control for template changes
|
|
478
|
+
- Audit trail of submissions (timestamp + user)
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## Error Prevention
|
|
484
|
+
|
|
485
|
+
### Input Masks
|
|
486
|
+
|
|
487
|
+
Use custom number formats:
|
|
488
|
+
```
|
|
489
|
+
Phone: @@@-@@@-@@@@
|
|
490
|
+
Date: YYYY-MM-DD
|
|
491
|
+
Currency: $#,##0.00
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### Helper Text
|
|
495
|
+
|
|
496
|
+
Show in adjacent cell or as comment:
|
|
497
|
+
```
|
|
498
|
+
"Format: FirstName LastName"
|
|
499
|
+
"Example: john.doe@company.com"
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### Real-time Feedback
|
|
503
|
+
|
|
504
|
+
Adjacent cell with IFERROR validation:
|
|
505
|
+
```excel
|
|
506
|
+
=IF(EmailValidation, UNICHAR(10004), UNICHAR(10006))
|
|
507
|
+
// Shows checkmark or X
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## Implementation Checklist
|
|
513
|
+
|
|
514
|
+
- [ ] Define all form fields and data types
|
|
515
|
+
- [ ] Create Lookups sheet with reference data
|
|
516
|
+
- [ ] Build form layout with proper formatting
|
|
517
|
+
- [ ] Configure data validation for each field
|
|
518
|
+
- [ ] Set up conditional formatting for errors
|
|
519
|
+
- [ ] Create Data Table with headers matching form
|
|
520
|
+
- [ ] Build validation formulas
|
|
521
|
+
- [ ] (Optional) Write VBA macros for Submit/Clear
|
|
522
|
+
- [ ] Apply sheet and workbook protection
|
|
523
|
+
- [ ] Test with sample data including edge cases
|
|
524
|
+
- [ ] Document instructions for users
|
|
525
|
+
- [ ] Create user training materials
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## Related Resources
|
|
530
|
+
|
|
531
|
+
- [Text Functions](../../snippets/excel-formulas/text-functions.md)
|
|
532
|
+
- [Data Validation Best Practices](../../snippets/excel-formulas/lookups.md)
|
|
533
|
+
- [Dynamic Arrays for Dependent Dropdowns](../../snippets/excel-formulas/dynamic-arrays.md)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Power BI Templates
|
|
2
|
+
|
|
3
|
+
Comprehensive dashboard specifications and implementation guides for common Power BI use cases.
|
|
4
|
+
|
|
5
|
+
## Available Templates
|
|
6
|
+
|
|
7
|
+
| Template | Description | Complexity |
|
|
8
|
+
|----------|-------------|------------|
|
|
9
|
+
| [Sales Dashboard](./sales-dashboard.md) | Revenue tracking, product analysis, customer insights | Medium |
|
|
10
|
+
| [Finance Report](./finance-report.md) | P&L, budget variance, financial KPIs | High |
|
|
11
|
+
| [KPI Scorecard](./kpi-scorecard.md) | Balanced scorecard, strategic metrics tracking | Medium |
|
|
12
|
+
|
|
13
|
+
## What's Included
|
|
14
|
+
|
|
15
|
+
Each template specification includes:
|
|
16
|
+
|
|
17
|
+
- **Data Requirements** - Required and optional tables, columns, relationships
|
|
18
|
+
- **Recommended Measures** - Pre-built DAX formulas ready to copy
|
|
19
|
+
- **Page Structure** - Visual layout and content recommendations
|
|
20
|
+
- **Visual Specifications** - Colors, formatting, conditional formatting rules
|
|
21
|
+
- **Interactivity** - Cross-filtering, drillthrough, bookmarks
|
|
22
|
+
- **Implementation Checklist** - Step-by-step verification
|
|
23
|
+
|
|
24
|
+
## How to Use
|
|
25
|
+
|
|
26
|
+
1. **Review the specification** - Understand data requirements and measures needed
|
|
27
|
+
2. **Prepare your data model** - Ensure tables and relationships match the template
|
|
28
|
+
3. **Copy DAX measures** - Implement recommended measures in your model
|
|
29
|
+
4. **Build pages** - Follow the visual layout specifications
|
|
30
|
+
5. **Apply formatting** - Use colors and conditional formatting as specified
|
|
31
|
+
6. **Test interactions** - Verify cross-filtering and drillthrough work correctly
|
|
32
|
+
|
|
33
|
+
## Template Categories
|
|
34
|
+
|
|
35
|
+
### Operational
|
|
36
|
+
- Sales Dashboard - Day-to-day sales operations
|
|
37
|
+
|
|
38
|
+
### Financial
|
|
39
|
+
- Finance Report - Month-end financial reporting
|
|
40
|
+
- KPI Scorecard - Strategic performance monitoring
|
|
41
|
+
|
|
42
|
+
### Coming Soon
|
|
43
|
+
- HR Analytics - Workforce metrics and retention
|
|
44
|
+
- Supply Chain - Inventory and logistics
|
|
45
|
+
- Marketing Analytics - Campaign performance
|
|
46
|
+
|
|
47
|
+
## Customization
|
|
48
|
+
|
|
49
|
+
These templates are starting points. Customize based on:
|
|
50
|
+
|
|
51
|
+
- Your specific KPIs and metrics
|
|
52
|
+
- Industry terminology
|
|
53
|
+
- Corporate branding and colors
|
|
54
|
+
- Data availability
|
|
55
|
+
- User preferences
|
|
56
|
+
|
|
57
|
+
## Related Resources
|
|
58
|
+
|
|
59
|
+
- [Power BI Themes](../../styles/power-bi/) - Ready-to-use JSON themes
|
|
60
|
+
- [DAX Snippets](../../snippets/dax/) - Formula patterns
|
|
61
|
+
- [Data Models](../data-models/) - Star schema templates
|
|
62
|
+
- [Project Kickoff Skill](../../skills/project-kickoff/) - Interactive project planning
|
|
63
|
+
|
|
64
|
+
## Contributing
|
|
65
|
+
|
|
66
|
+
To contribute a new template:
|
|
67
|
+
|
|
68
|
+
1. Use an existing template as a reference for structure
|
|
69
|
+
2. Include all required sections (Data, Measures, Pages, Visuals)
|
|
70
|
+
3. Provide working DAX code examples
|
|
71
|
+
4. Test with sample data before submitting
|
|
72
|
+
5. Submit a PR with the template markdown file
|