@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,292 @@
|
|
|
1
|
+
# DAX Snippets
|
|
2
|
+
|
|
3
|
+
Production-ready DAX patterns and measures for Power BI development.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Available Snippets
|
|
8
|
+
|
|
9
|
+
| File | Description | Level |
|
|
10
|
+
|------|-------------|-------|
|
|
11
|
+
| [time-intelligence.md](./time-intelligence.md) | YTD, MTD, QTD, rolling periods, period comparisons | Beginner |
|
|
12
|
+
| [calculate-patterns.md](./calculate-patterns.md) | CALCULATE, ALL, FILTER, context modification | Intermediate |
|
|
13
|
+
| [rankings-and-topn.md](./rankings-and-topn.md) | RANKX, Top N, ABC analysis, percentiles | Intermediate |
|
|
14
|
+
| [kpis-and-metrics.md](./kpis-and-metrics.md) | Variance, growth, ratios, conditional formatting | Intermediate |
|
|
15
|
+
| [text-and-formatting.md](./text-and-formatting.md) | Text manipulation, dynamic titles, FORMAT | Beginner |
|
|
16
|
+
| [iterators-and-aggregations.md](./iterators-and-aggregations.md) | SUMX, AVERAGEX, RANKX, CONCATENATEX patterns | Advanced |
|
|
17
|
+
| [virtual-tables.md](./virtual-tables.md) | SUMMARIZE, ADDCOLUMNS, GENERATE, table functions | Advanced |
|
|
18
|
+
| [error-handling.md](./error-handling.md) | DIVIDE, IFERROR, BLANK handling, defensive DAX | Intermediate |
|
|
19
|
+
| [security-patterns.md](./security-patterns.md) | RLS, OLS, dynamic security, user-based filtering | Advanced |
|
|
20
|
+
| [calculation-groups.md](./calculation-groups.md) | Time intelligence groups, currency conversion, formatting | Advanced |
|
|
21
|
+
| [user-defined-functions.md](./user-defined-functions.md) | UDFs with typed parameters, VAL/EXPR modes, type checking | Advanced |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Quick Reference
|
|
26
|
+
|
|
27
|
+
### Time Intelligence
|
|
28
|
+
```dax
|
|
29
|
+
-- Year-to-Date
|
|
30
|
+
TOTALYTD(SUM(Sales[Amount]), 'Date'[Date])
|
|
31
|
+
|
|
32
|
+
-- Prior Year
|
|
33
|
+
CALCULATE([Sales], SAMEPERIODLASTYEAR('Date'[Date]))
|
|
34
|
+
|
|
35
|
+
-- Rolling 12 Months
|
|
36
|
+
CALCULATE([Sales], DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH))
|
|
37
|
+
|
|
38
|
+
-- Month-over-Month Growth
|
|
39
|
+
VAR _Current = SUM(Sales[Amount])
|
|
40
|
+
VAR _Prior = CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH('Date'[Date]))
|
|
41
|
+
RETURN DIVIDE(_Current - _Prior, _Prior)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Context Modification
|
|
45
|
+
```dax
|
|
46
|
+
-- Remove all filters
|
|
47
|
+
CALCULATE([Sales], ALL(Products))
|
|
48
|
+
|
|
49
|
+
-- Keep only category filter
|
|
50
|
+
CALCULATE([Sales], ALLEXCEPT(Products, Products[Category]))
|
|
51
|
+
|
|
52
|
+
-- Filter on measure
|
|
53
|
+
CALCULATE([Sales], FILTER(ALL(Products), [Margin] > 0.2))
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Percentages & Ratios
|
|
57
|
+
```dax
|
|
58
|
+
-- % of Total
|
|
59
|
+
DIVIDE([Sales], CALCULATE([Sales], ALL(Products)))
|
|
60
|
+
|
|
61
|
+
-- % of Category
|
|
62
|
+
DIVIDE([Sales], CALCULATE([Sales], ALLEXCEPT(Products, Products[Category])))
|
|
63
|
+
|
|
64
|
+
-- Safe margin calculation
|
|
65
|
+
DIVIDE(SUM(Sales[Profit]), SUM(Sales[Revenue]))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Rankings
|
|
69
|
+
```dax
|
|
70
|
+
-- Simple Rank
|
|
71
|
+
RANKX(ALL(Products[ProductName]), [Sales], , DESC, DENSE)
|
|
72
|
+
|
|
73
|
+
-- Top 5 Sales
|
|
74
|
+
CALCULATE([Sales], TOPN(5, ALL(Products[ProductName]), [Sales], DESC))
|
|
75
|
+
|
|
76
|
+
-- Rank within Category
|
|
77
|
+
RANKX(ALLEXCEPT(Products, Products[Category]), [Sales], , DESC, DENSE)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Iterators
|
|
81
|
+
```dax
|
|
82
|
+
-- Extended price calculation
|
|
83
|
+
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])
|
|
84
|
+
|
|
85
|
+
-- Average order value
|
|
86
|
+
AVERAGEX(VALUES(Sales[OrderID]), CALCULATE(SUM(Sales[Amount])))
|
|
87
|
+
|
|
88
|
+
-- Concatenate product list
|
|
89
|
+
CONCATENATEX(VALUES(Products[Name]), Products[Name], ", ")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Virtual Tables
|
|
93
|
+
```dax
|
|
94
|
+
-- Add calculated columns
|
|
95
|
+
ADDCOLUMNS(
|
|
96
|
+
VALUES(Products[ProductName]),
|
|
97
|
+
"@Sales", CALCULATE(SUM(Sales[Amount])),
|
|
98
|
+
"@Rank", [Product_Rank]
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
-- Cross-join with calculation
|
|
102
|
+
GENERATE(
|
|
103
|
+
VALUES(Customers[CustomerID]),
|
|
104
|
+
ROW("@Sales", CALCULATE(SUM(Sales[Amount])))
|
|
105
|
+
)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Pattern Categories
|
|
111
|
+
|
|
112
|
+
### By Function Area
|
|
113
|
+
|
|
114
|
+
| Category | Key Functions | Use Case |
|
|
115
|
+
|----------|--------------|----------|
|
|
116
|
+
| **Time Intelligence** | TOTALYTD, SAMEPERIODLASTYEAR, DATESINPERIOD | Period calculations |
|
|
117
|
+
| **Filter Modification** | CALCULATE, ALL, ALLEXCEPT, REMOVEFILTERS | Context control |
|
|
118
|
+
| **Iterators** | SUMX, AVERAGEX, COUNTX, RANKX | Row-by-row calculations |
|
|
119
|
+
| **Virtual Tables** | SUMMARIZE, ADDCOLUMNS, GENERATE | Table manipulation |
|
|
120
|
+
| **Error Handling** | DIVIDE, IFERROR, ISBLANK, COALESCE | Defensive measures |
|
|
121
|
+
| **Text** | FORMAT, CONCATENATEX, TEXT | Display formatting |
|
|
122
|
+
| **User Defined Functions** | DEFINE FUNCTION, typed parameters | Reusable logic |
|
|
123
|
+
|
|
124
|
+
### By Difficulty
|
|
125
|
+
|
|
126
|
+
| Level | Patterns |
|
|
127
|
+
|-------|----------|
|
|
128
|
+
| **Beginner** | Basic aggregations, simple time intelligence, FORMAT |
|
|
129
|
+
| **Intermediate** | CALCULATE with filters, rankings, KPI variance |
|
|
130
|
+
| **Advanced** | Nested iterators, virtual tables, context transition, UDFs |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Best Practices
|
|
135
|
+
|
|
136
|
+
### 1. Always Use DIVIDE
|
|
137
|
+
|
|
138
|
+
```dax
|
|
139
|
+
-- Bad
|
|
140
|
+
[Sales] / [Customers]
|
|
141
|
+
|
|
142
|
+
-- Good
|
|
143
|
+
DIVIDE([Sales], [Customers])
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 2. Use Variables (VAR/RETURN)
|
|
147
|
+
|
|
148
|
+
```dax
|
|
149
|
+
-- Better readability and performance
|
|
150
|
+
Growth_Rate =
|
|
151
|
+
VAR _Current = SUM(Sales[Amount])
|
|
152
|
+
VAR _Prior = [Sales_PY]
|
|
153
|
+
VAR _Change = _Current - _Prior
|
|
154
|
+
RETURN
|
|
155
|
+
DIVIDE(_Change, _Prior)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 3. Prefer Simple Filters Over FILTER
|
|
159
|
+
|
|
160
|
+
```dax
|
|
161
|
+
-- Good: Simple column filter (engine optimized)
|
|
162
|
+
CALCULATE([Sales], Products[Category] = "Electronics")
|
|
163
|
+
|
|
164
|
+
-- Use FILTER only when needed (measure-based conditions)
|
|
165
|
+
CALCULATE([Sales], FILTER(ALL(Products), [Margin] > 0.2))
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 4. Always Specify Sort Order in RANKX
|
|
169
|
+
|
|
170
|
+
```dax
|
|
171
|
+
-- Explicit is better
|
|
172
|
+
RANKX(ALL(Products), [Sales], , DESC, DENSE)
|
|
173
|
+
-- ^--- always specify
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 5. Handle Edge Cases
|
|
177
|
+
|
|
178
|
+
```dax
|
|
179
|
+
-- Check for single selection
|
|
180
|
+
IF(
|
|
181
|
+
HASONEVALUE(Products[ProductName]),
|
|
182
|
+
[DetailedCalculation],
|
|
183
|
+
BLANK()
|
|
184
|
+
)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 6. Test Measures in Different Contexts
|
|
188
|
+
|
|
189
|
+
Before deploying:
|
|
190
|
+
- Test in matrix (row/column context)
|
|
191
|
+
- Test in card (total context)
|
|
192
|
+
- Test with slicers (filtered context)
|
|
193
|
+
- Test with no data (blank handling)
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Performance Guidelines
|
|
198
|
+
|
|
199
|
+
| Pattern | Performance | Notes |
|
|
200
|
+
|---------|-------------|-------|
|
|
201
|
+
| Simple aggregations (SUM, COUNT) | Fastest | Engine optimized |
|
|
202
|
+
| CALCULATE with column filters | Fast | Foldable |
|
|
203
|
+
| CALCULATE with FILTER on columns | Medium | Less optimized |
|
|
204
|
+
| CALCULATE with FILTER on measures | Slow | Row-by-row |
|
|
205
|
+
| Nested iterators | Slowest | Use sparingly |
|
|
206
|
+
|
|
207
|
+
### Optimization Tips
|
|
208
|
+
|
|
209
|
+
1. **Materialize once**: Store calculated values in variables
|
|
210
|
+
2. **Reduce iterations**: Pre-filter tables before SUMX
|
|
211
|
+
3. **Avoid context transition**: Don't use CALCULATE inside iterators unless needed
|
|
212
|
+
4. **Use INT over FLOAT**: For counting and simple math
|
|
213
|
+
5. **Limit DISTINCTCOUNT**: Use COUNTROWS(VALUES()) for small sets
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Naming Conventions
|
|
218
|
+
|
|
219
|
+
| Type | Convention | Example |
|
|
220
|
+
|------|------------|---------|
|
|
221
|
+
| Base measure | Descriptive noun | `Sales Amount` |
|
|
222
|
+
| Time intelligence | Suffix with period | `Sales YTD`, `Sales PY` |
|
|
223
|
+
| Variance | Suffix with "Var" or "%" | `Sales Var`, `Sales YoY %` |
|
|
224
|
+
| Ranking | Prefix with "Rank" | `Rank by Sales` |
|
|
225
|
+
| Helper/Hidden | Prefix with underscore | `_Sales Base` |
|
|
226
|
+
| Formatting | Suffix with format | `Revenue $`, `Growth %` |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Debugging Tips
|
|
231
|
+
|
|
232
|
+
### Show Current Context
|
|
233
|
+
```dax
|
|
234
|
+
Debug_Context =
|
|
235
|
+
"Rows: " & COUNTROWS(Products) &
|
|
236
|
+
" | Filtered: " & IF(ISFILTERED(Products), "Yes", "No") &
|
|
237
|
+
" | Value: " & [YourMeasure]
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Step-by-Step Calculation
|
|
241
|
+
```dax
|
|
242
|
+
Debug_Steps =
|
|
243
|
+
VAR _Step1 = SUM(Sales[Amount])
|
|
244
|
+
VAR _Step2 = CALCULATE(_Step1, ALL(Products))
|
|
245
|
+
VAR _Step3 = DIVIDE(_Step1, _Step2)
|
|
246
|
+
RETURN
|
|
247
|
+
"Sales: " & _Step1 &
|
|
248
|
+
" | Total: " & _Step2 &
|
|
249
|
+
" | Pct: " & FORMAT(_Step3, "0.0%")
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Contributing
|
|
255
|
+
|
|
256
|
+
Add new snippets as `.md` files with:
|
|
257
|
+
|
|
258
|
+
1. **Clear title** - Descriptive name
|
|
259
|
+
2. **Pattern category** - Time, Filter, Iterator, etc.
|
|
260
|
+
3. **Working examples** - Tested DAX code
|
|
261
|
+
4. **Parameter explanations** - What to replace
|
|
262
|
+
5. **Usage notes** - When to use, limitations
|
|
263
|
+
6. **Performance notes** - If relevant
|
|
264
|
+
|
|
265
|
+
### File Template
|
|
266
|
+
|
|
267
|
+
```markdown
|
|
268
|
+
# Pattern Name
|
|
269
|
+
|
|
270
|
+
Description of what this pattern does.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Basic Pattern
|
|
275
|
+
|
|
276
|
+
\`\`\`dax
|
|
277
|
+
PatternName =
|
|
278
|
+
VAR _Value = SUM(Table[Column])
|
|
279
|
+
RETURN
|
|
280
|
+
_Value
|
|
281
|
+
\`\`\`
|
|
282
|
+
|
|
283
|
+
## Variations
|
|
284
|
+
|
|
285
|
+
### Variation 1
|
|
286
|
+
...
|
|
287
|
+
|
|
288
|
+
## Usage Notes
|
|
289
|
+
|
|
290
|
+
- Note 1
|
|
291
|
+
- Note 2
|
|
292
|
+
```
|