1:1 relationships (data models), 2
active relationships
CALCULATETABLE function, 451–453
USERELATIONSHIP function, 450–451
ADDCOLUMNS function, 223–224, 366–369, 371–372
ADDMISSINGITEMS function
authoring queries, 419–420, 432–433
auto-exists feature (queries), 432–433
aggregation functions, xmSQL queries, 625–627
in data models, 587–588, 647–648
SE, 548
VertiPaq aggregations, managing, 604–607
aggregators, 42, 43, 44, 45–46
AVERAGEX function, 44
COUNT function, 46
COUNTA function, 46
COUNTBLANK function, 46
COUNTROWS function, 46
DISTINCTCOUNT function, 46
DISTINCTCOUNTNOBLANK function, 46
MAX function, 43
MIN function, 43
SUMX function, 45
ALLEXCEPT function versus, 326–328
CALCULATE function and, 125–132, 164, 169–172
calculated physical relationships, circular dependencies, 478
computing percentages, 125–132
context transitions, avoiding, 328–330
filter contexts, 324–326, 327–330
nonworking days between two dates, computing, 523–525
syntax of, 63
top categories/subcategories example, 66–67
VALUES function and, 67, 327–328
ALLCROSSFILTERED function, 464, 465
ALLEXCEPT function, 65–66, 464, 465
computing percentages, 135
VALUES function versus, 326–328
ALLNOBLANKROW function, 464, 465, 478
ALLSELECTED function, 74–75, 76, 455–457, 464, 465
CALCULATE function and, 171–172
iterated rows, returning, 460–462
shadow filter contexts, 459–462
alternate/primary keys column (tables), 599, 600
ambiguity in relationships, 512–513
non-active relationships, 515–517
Analysis Services 2012/2014 and CallbackDataID function, 644
annual totals (moving), computing, 243–244
arbitrarily shaped filters, 336
best practices, 343
column filters versus, 336
simple filters versus, 337
uses of, 343
arithmetic operators, 23
error-handling
xmSQL queries, 627
arrows (cross filter direction), 3
attributes, data model optimization
disabling attribute hierarchies, 604
optimizing drill-through attributes, 604
authoring queries, 395
ADDMISSINGITEMS function, 419–420, 432–433
DAX Studio, 395
DEFINE sections
MEASURE keyword in, 399
EVALUATE statements
ADDMISSINGITEMS function, 419–420, 432–433
example of, 396
expression variables and, 398
GENERATEALL function, 417
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
query variables and, 398
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function, 401–403, 433–434
SUMMARIZECOLUMNS function, 403–409, 429–434
TOPNSKIP function, 420
GENERATEALL function, 417
MEASURE in DEFINE sections, 399
measures
query measures, 399
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
ROW function, testing measures, 400–401
shadow filter contexts, 457–462
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function, 401–403, 433–434
SUMMARIZECOLUMNS function, 403–409, 429–434
TOPNSKIP function, 420
VAR in DEFINE sections, 397–399
Auto Date/Time (Power BI), 218–219
auto-exists feature (queries), 428–434
automatic date columns (Power Pivot for Excel), 219
AVERAGEA function, returning averages, 199
averages (means)
computing averages, AVERAGEX function, 199–201
returning averages
AVERAGE function, 199
AVERAGEA function, 199
AVERAGEX function, 44
AVERAGEX iterators, 188
batch events (xmSQL queries), 630–632
bidirectional cross-filter direction (physical relationships), 490, 491–493, 507
bidirectional filtering (relationships), 3–4
bidirectional relationships, 106, 109
Binary data type, 23
BLANK function, 36
blank rows, invalid relationships, 68–71
Boolean calculated columns, data model optimization, 597–598
Boolean conditions, CALCULATE function, 119–120, 123–124
Boolean data type, 22
Boolean logic, 23
bottlenecks, DAX optimization, 667–668
identifying SE/FE bottlenecks, 667–668
optimizing bottlenecks, 668
bridge tables, MMR (Many-Many Relationships), 494–499
budget/sales information (calculations), showing together, 527–530
CALCULATE function, 115
ALL function, 125–132, 164, 169–172
Boolean conditions, 119–120, 123–124
calculated physical relationships, circular dependencies, 478–480
calculation items, applying to expressions, 291–299
circular dependencies, 161–164
computing percentages, 124, 135
ALLEXCEPT function, 135
context transitions, 148, 151–154
CROSSFILTER function, 168
evaluation contexts, 79
filter arguments, 118–119, 122, 123, 445–447
filtering
KEEPFILTERS function, 135–138, 139–143, 164, 168–169
filtering multiple columns, 142–143
numbering sequences of events (calculations), 537–538
overwriting filters, 120–122, 136
Precedence calculation group, 299–304
range-based relationships (calculated physical relationships), 474–476
table filters, 382–384, 445–447
time intelligence calculations, 228–232
transferring filters, 482–483, 484–485
USERELATIONSHIP function, 164–168
Boolean calculated columns, data model optimization, 597–598
data model optimization, 595–599
DISTINCT function, 68
expressions, 29
measures, 42
choosing between calculated columns and measures, 29–30
differences between calculated columns and measures, 29
using measures in calculated columns, 30
processing, 599
SUM function, evaluation contexts, 88–89
table functions, 59
VALUES function, 68
calculated physical relationships, 471
circular dependencies, 476–480
multiple-column relationships, 471–473
range-based relationships, 474–476
calculated tables, 59
DISTINCT function, 68
SELECTCOLUMNS function, 390–391
VALUES function, 68
CALCULATETABLE function, 115, 363
FILTER function versus, 363–365
time intelligence functions, 259, 260–261
calculation granularity and iterators, 211–214
calculation items and, 288
defined, 288
Name calculation group, 288
Precedence calculation group, 288, 299–304
calculation items
applying to expressions, 291
YTD calculations, 294
best practices, 311
calculation groups and, 288
Expression calculation item, 289
including/excluding measures from calculation items, 304–306
Name calculation item, 288
Ordinal values, 289
YOY% calculation item, 289–290
calculations
budget/sales information (calculations), showing together, 527–530
nonworking days between two dates, computing, 523–525
precomputing values (calculations), computing work days between two dates, 525–527
sales
computing previous year sales up to last day sales (calculations), 539–544
computing same-store sales, 530–536
showing budget/sales information together, 527–530
work days between two dates, computing, 519–523
precomputing values (calculations), 525–527
CALENDAR function, building date tables, 222
CALENDARAUTO function, building date tables, 222–224
calendars (custom), time intelligence calculations, 272
CallbackDataID function
Analysis Services 2012/2014 and, 644
parallelism and, 641
capturing DAX queries, 609–611
cardinality
columns (tables)
data model optimization, 591–592
optimizing high-cardinality columns, 603
relationships (data models), 489–490, 586–587, 590–591
Cardinality column (VertiPaq Analyzer), 581, 583
categories/subcategories example, ALL function and, 66–67
cells (Excel), 5
chains (relationships), 3
circular dependencies
CALCULATE function and, 161–164
calculated physical relationships, 476–480
code documentation, variables, 183–184
code maintenance/readability, FILTER function, 62–63
column filters
arbitrarily shaped filters versus, 336
defined, 336
ADDCOLUMNS function, 223–224, 366–369, 371–372
automatic date columns (Power Pivot for Excel), 219
Boolean calculated columns, data model optimization, 597–598
calculated columns, 25–26, 42, 443–444
Boolean calculated columns, 597–598
choosing between calculated columns and measures, 29–30
data model optimization, 595–599
differences between calculated columns and measures, 29
DISTINCT function, 68
expressions, 29
processing, 599
table functions, 59
using measures in calculated columns, 30
VALUES function, 68
cardinality
data model optimization, 591–592
optimizing high-cardinality columns, 603
Date column, data model optimization, 592–595
defined, 2
descriptive attributes column (tables), 600, 601–602
filtering
measures, evaluation contexts, 89–90
multiple columns
DISTINCT function and, 71
VALUES function and, 71
primary/alternate keys column (tables), 599, 600
qualitative attributes column (tables), 599, 600
quantitative attributes column (tables), 599, 600–601
relationships, 3
row contexts, 87
SELECTCOLUMNS function, 390–391, 393–394
SELECTCOLUMNS iterators, 196, 197–199
storage optimization, 602
column split optimization, 602–603
high-cardinality columns, 603
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function and, 401
SUMMARIZECOLUMNS function, 403–409, 429–434
technical attributes column (tables), 600, 602
Time column, data model optimization, 592–595
Columns # column (VertiPaq Analyzer), 582
Columns Hierarchies Size column (VertiPaq Analyzer), 582
Columns Total Size column (VertiPaq Analyzer), 581
COMBINEVALUES function, multiple-column relationships (calculated physical relationships), 472–473
comments
at the end of expressions, 18
expressions, comment placement in expressions, 18
multi-line comments, 18
single-line comments, 18
comparison operators, 23
composite data models, 646–647
DirectQuery mode, 488
VertiPaq mode, 488
compression (VertiPaq), 553–554
re-encoding, 559
CONCATENATEX function
tables as scalar values, 74
conditional statements, 24–25, 708–709
conditions
DAX, 11
SQL, 11
CONTAINS function
transferring filters, 481–482, 484–485
CONTAINSROW function and tables, 387–388
context transitions, 148
CALCULATE function and, 151–154
iterators, leveraging context transitions, 190–194
time intelligence functions, 260
conversion functions, 51
CURRENCY function, 51
DATEVALUE function, 51
FORMAT function, 51
INT function, 51
VALUE function, 51
conversions, error-handling, 31–32
cores (number of), VertiPaq hardware selection, 574, 576
COUNT function, 46
COUNTA function, 46
COUNTBLANK function, 46
COUNTROWS function, 46
filter contexts and relationships, 109
nested row contexts on the same table, 92–95
tables as scalar values, 73
CPU model, VertiPaq hardware selection, 574–575
cross-filter directions (physical relationships), 3, 490
bidirectional cross-filter direction, 490, 491–493, 507
single cross-filter direction, 490
cross-filtering, data model optimization, 590
cross-island relationships, 489
CROSSFILTER function
bidirectional relationships, 109
CALCULATE function and, 168
CROSSJOIN function and tables, 372–374, 383–384
Currency data type, 21
CURRENCY function, 51
custom calendars, time intelligence calculations, 272
Daily AVG
calculation group precedence, 299–303
calculation items, including/excluding measures, 304–306
data lineage, 332–336, 465–468
data models
composite data models, 646–647
DirectQuery mode, 488
VertiPaq mode, 488
optimizing with VertiPaq, 579
aggregations, 587–588, 604–607
choosing columns for storage, 599–602
cross-filtering, 590
disabling attribute hierarchies, 604
gathering data model information, 579–584
optimizing column storage, 602–603
optimizing drill-through attributes, 604
relationship cardinality, 586–587, 590–591
relationships, 2
1:1 relationships, 2
chains, 3
columns, 3
cross filter direction, 3
DAX and SQL, 9
many-sided relationships, 2, 3
Relationship reports (VertiPaq Analyzer), 584
unidirectional filtering, 4
weak relationships, 2
single data models
DirectQuery mode, 488
VertiPaq mode, 488
tables, defined, 2
weak relationships, 439
data refreshes, SSAS (SQL Server Analysis Services), 549–550
Data Size column (VertiPaq Analyzer), 581
data types, 19
Binary data type, 23
Boolean data type, 22
Currency data type, 21
Decimal data type, 21
Integer data type, 21
operators, 23
arithmetic operators, 23
comparison operators, 23
logical operators, 23
parenthesis operators, 23
text concatenation operators, 23
string/number conversions, 19–21
strings, 22
Variant data type, 22
Database Size % column (VertiPaq Analyzer), 582
datacaches
FE, 547
SE, 547
DATATABLE function, creating static tables, 392–393
Date column, data model optimization, 592–595
date table templates (Power Pivot for Excel), 220
date tables
CALENDAR function, 222
CALENDARAUTO function, 222–224
date templates, 224
duplicating, 227
loading from other data sources, 221
multiple dates, managing, 224
multiple relationships to date tables, 224–226
naming, 221
date templates, 224
date/time-related calculations, 217
Auto Date/Time (Power BI), 218–219
automatic date columns (Power Pivot for Excel), 219
CALCULATETABLE function, 259, 260–261
context transitions, 260
custom calendars, 272
date tables
CALENDAR function, 222
CALENDARAUTO function, 222–224
date table templates (Power Pivot for Excel), 220
date templates, 224
duplicating, 227
loading from other data sources, 221
managing multiple dates, 224–228
multiple relationships to date tables, 224–226
naming, 221
DATEADD function, 237–238, 262–269
DATESINPERIOD function, 243–244
DATESMTD function, 259, 276–277
DATESQTD function, 259, 276–277
DATESYTD function, 259, 260, 261–262, 276–277
differences over previous periods, computing, 241–243
drillthrough operations, 271
FIRSTNONBLANK function, 256–257, 270–271
LASTDATE function, 248–249, 254, 255, 269–270
LASTNONBLANK function, 250–254, 255, 270–271
moving annual totals, computing, 243–244
MTD calculations, 235–236, 259–262, 276–277
nested functions, call order of, 245–246
nonworking days between two dates, computing, 523–525
opening/closing balances, 254–258
PARALLELPERIOD function, 238–239
PREVIOUSMONTH function, 239
QTD calculations, 235–236, 259–262, 276–277
SAMEPERIODLASTYEAR function, 237, 245–246
semi-additive calculations, 246–248
STARTOFQUARTER function, 256–257
time periods, computing from prior periods, 237–239
work days between two dates, computing, 519–523
precomputing values (calculations), 525–527
YTD calculations, 235–236, 259–262, 276–277
DATEADD function, time intelligence calculations, 237–238, 262–269
DATESINPERIOD function, computing moving annual totals, 243–244
DATESMTD function, time intelligence calculations, 259, 276–277
DATESQTD function, time intelligence calculations, 259, 276–277
DATESYTD function
calculation items, applying to expressions, 293–296
time intelligence calculations, 259, 260, 261–262, 276–277
DATEVALUE function, 51
DAX (Data Analysis eXpressions), 1
conditions, 11
data models
tables, 2
date templates, 224
DAX and, cells and tables, 5–7
Excel and
functional languages, 7
expressions
identifying a single DAX expression for optimization, 658–661
optimizing bottlenecks, 668
as functional language, 10
iterators, 8
MDX, 12
leaf-level calculations, 14
multidimensional versus tabular space, 12
as programming language, 12–13
queries, 613
optimizing, 657
bottlenecks, 668
CallbackDataID function, 690–693
change implementation, 668
conditional statements, 708–709
creating reproduction queries, 661–664
DISTINCTCOUNT function, 699–704
to-do list, 658
identifying a single DAX expression for optimization, 658–661
identifying SE/FE bottlenecks, 667–668
multiple evaluations, avoiding with variables, 704–708
rerunning test queries, 668
as programming language, 10–11
queries
creating reproduction queries, 661–662
DISTINCTCOUNT function, 634–635
executing, 546
physical query plans, 612–613, 614–616
SQL and, 9
subqueries, 11
DAX engines
datacaches, 547
operators of, 547
single-threaded implementation, 547
SE, 546
aggregations, 548
datacaches, 547
operators of, 547
parallel implementations, 548
VertiPaq, 546, 547–548, 550. See also data models, optimizing with VertiPaq
datacaches, 549
multithreaded implementations, 548
processing tables, 550
re-encoding, 559
relationships (data models), 561–562, 565–568
scan operations, 549
DAX Studio, 395
capturing DAX queries, 609–611
query measures, creating, 662–663
query plans, capturing profiling information, 617–620
DAXFormatter.com, 41
Decimal data type, 21
DEFINE MEASURE clauses in EVALUATE statements, 59
DEFINE sections (authoring queries)
MEASURE keyword in, 399
denormalizing data and data model optimization, 584–591
descriptive attributes column (tables), 600, 601–602
DETAILROWS function, reusing table expressions, 388–389
dictionary encoding. See hash encoding
Dictionary Size column (VertiPaq Analyzer), 581
DirectQuery, 488–489, 546, 548, 549, 617
composite data models, 488
End events (SQL Server Profiler), 621
SE, 549
composite data models, 646–647
single data models, 488
Disk I/O performance, VertiPaq hardware selection, 574, 576–577
DISTINCT function, 71
blank rows and invalid relataionships, 68, 70–71
calculated columns, 68
calculated physical relationships
circular dependencies, 477–478
range-based relationships, 476
multiple columns, 71
VALUES function versus, 68
DISTINCTCOUNT function, 46
same-store sales (calculations), computing, 535–536
table filters, avoiding, 699–704
DISTINCTCOUNTNOBLANK function, 46
DIVIDE function, DAX optimization, 684–687
division by zero, arithmetic operators, 32–33
DMV (Dynamic Management Views) and SSAS, 563–565
documenting code, variables, 183–184
drill-through attributes, optimizing, 604
drillthrough operations, time intelligence calculations, 271
duplicating, date tables, 227
duration of an order example, 26
EARLIER function, evaluation contexts, 97–98
editing text, formatting DAX code, 42
empty/missing values, error-handling, 33–35
Encoding column (VertiPaq Analyzer), 582, 583
error-handling
BLANK function, 36
Excel, empty/missing values, 35
expressions, 31
arithmetic operator errors, 32–35
IFERROR function, 35–36, 37–38
ISBLANK function, 36
SQRT function, 36
variables, 37
EVALUATE statements
ADDMISSINGITEMS function, 419–420, 432–433
DEFINE MEASURE clauses, 59
example of, 396
expression variables and, 398
GENERATEALL function, 417
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
ORDER BY clauses, 60
query variables and, 398
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function, 401–403, 433–434
SUMMARIZECOLUMNS function, 403–409, 429–434
TOPNSKIP function, 420
evaluation contexts, 79
AVERAGEX function, filter contexts, 111–112
CALCULATE function, 79
COUNTROWS function, filter contexts and relationships, 107–108
defined, 80
DISTINCT function, filter contexts, 111–112
CALCULATE function and, 148–151
row contexts versus, 85
SUMMARIZE function, 112
FILTER function, 92–93, 94–95, 98–101
multiple tables, working with, 101–102
filter contexts and relationships, 106–109
row contexts and relationships, 102–105
RELATED function
filter contexts and relationships, 109
nested row contexts on different tables, 92
row contexts and relationships, 103–105
RELATEDTABLE function
filter contexts and relationships, 109
nested row contexts on different tables, 91–92
row contexts and relationships, 103–105
row contexts, 80
CALCULATE function and, 148–151
column references, 87
filter contexts versus, 85
nested row contexts on different tables, 91–92
nested row contexts on the same table, 92–97
SUM function, in calculated columns, 88–89
SUMMARIZE function, filter contexts, 112
evaluations (multiple), avoiding with variables, 704–708
events (calculations), numbering sequences of, 536–539
Excel
calculations, 8
cells, 5
DAX and
functional languages, 7
error-handling, empty/missing values, 35
formulas, 6
Power Pivot for Excel
automatic date columns, 219
date table templates, 220
EXCEPT function, tables and, 379–381
expanded tables
column filters versus table filters, 444–447
active relationships and, 450–453
differences between table filters and expanded tables, 453–454
table filters
column filters versus, 444–447
Expression calculation item, 289
Expression Trees, 612
expressions
calculated columns, 29
calculation items, applying to expressions, 291
YTD calculations, 294
comments, placement in expressions, 18
DAX optimization, 658–661, 668
error-handling, 31
arithmetic operator errors, 32–35
MDX
queries, 546, 604, 613, 663–664
query measures, 399
table expressions
FE (Formula Engines), 546, 547
bottlenecks, identifying, 667–668
datacaches, 547
operators of, 547
query plans, reading, 652–653, 654–655
single-threaded implementation, 547, 642
filter arguments
CALCULATE function, 118–119, 122, 123, 445–447
defined, 120
multiple column references, 140
SUMMARIZECOLUMNS function, 406–409
filter contexts, 80, 109–110, 313, 343–344
ALL function, 324–326, 327–330
arbitrarily shaped filters, 336
best practices, 343
column filters versus, 336
simple filters versus, 337
uses of, 343
column filters
arbitrarily shaped filters versus, 336
defined, 336
ISCROSSFILTERED function, 319–322
ISFILTERED function, 319, 320–322
row contexts versus, 85
SELECTEDVALUE function, 318–319
simple filters
arbitrarily shaped filters versus, 337
defined, 337
SUMMARIZE function, 112
VALUES function, 322–324, 327–328
CALCULATETABLE function versus, 363–365
code maintenance/readability, 62–63
nested row contexts on the same table, 92–93, 94–95
range-based relationships (calculated physical relationships), 474–476
syntax of, 60
time intelligence calculations, 228–232
transferring filters, 481–482, 484–485
filter operations, xmSQL queries, 628–630
filtering
ALLCROSSFILTERED function, 464, 465
columns (tables) versus table filters, 444–447
DAX optimization, filter conditions, 668–672
expanded tables
differences between table filters and expanded tables, 453–454
table filters and active relationships, 450–453
FILTER function
range-based relationships (calculated physical relationships), 474–476
KEEPFILTERS function, 461–462, 482–483, 484
relationships
unidirectional filtering, 4
shadow filter contexts, 457–462
tables, 381
CALCULATE function and, 445–447
column filters versus, 444–447
differences between table filters and expanded tables, 453–454
DISTINCTCOUNT function, 699–704
table filters and active relationships, 450–453
CALCULATE function, 482
FILTER function, 481–482, 484–485
TREATAS function, 482–483, 484
FILTERS function
VALUES function versus, 322–324
FIRSTDATE function, time intelligence calculations, 269, 270
FIRSTNONBLANK function, time intelligence calculations, 256–257, 270–271
FORMAT function, 51
format strings
calculation items and, 289–291
defined, 291
SELECTEDMEASUREFORMATSTRING function, 291
formatting DAX code, 39, 41–42
DAXFormatter.com, 41
editing text, 42
formulas, 42
help, 42
formulas
Excel, 6
formatting, 42
IN function, tables and, 387–388
functions
ADDCOLUMNS function, 223–224, 366–369, 371–372
ADDMISSINGITEMS function
authoring queries, 419–420, 432–433
auto-exists feature (queries), 432–433
aggregation functions, xmSQL queries, 625–627
AVERAGEX function, 44
COUNT function, 46
COUNTA function, 46
COUNTBLANK function, 46
COUNTROWS function, 46
DISTINCTCOUNT function, 46
DISTINCTCOUNTNOBLANK function, 46
MAX function, 43
MIN function, 43
SUMX function, 45
ALLEXCEPT function versus, 326–328
CALCULATE function and, 164, 169–172
calculated physical relationships and circular dependencies, 478
computing nonworking days between two dates, 523–525
computing percentages, 125–132
filter contexts, 324–326, 327–330
ALLCROSSFILTERED function, 464, 465
computing percentages, 135
VALUES function versus, 326–328
ALLNOBLANKROW function, 464, 465, 478
ALLSELECTED function, 455–457, 464, 465
CALCULATE function and, 171–172
returning iterated rows, 460–462
shadow filter contexts, 459–462
AVERAGE function, returning averages, 199
AVERAGEA function, returning averages, 199
AVERAGEX function
CALCULATE function, 115
ALL function, 125–132, 164, 169–172
calculated physical relationships and circular dependencies, 478–480
calculation items, applying to expressions, 291–299
circular dependencies, 161–164
computing percentages, 124–135
context transitions, 148, 151–160
CROSSFILTER function, 168
evaluation contexts, 79
filter arguments, 118–119, 122, 123, 445–447
filtering a single column, 138–140
filtering multiple columns, 140–143
KEEPFILTERS function, 135–138, 139–143, 164, 168–169
KEEPFILTERS function and, 146–148
numbering sequences of events (calculations), 537–538
Precedence calculation group, 299–304
range-based relationships (calculated physical relationships), 474–476
time intelligence calculations, 228–232
transferring filters, 482–483, 484–485
USERELATIONSHIP function, 164–168
CALCULATETABLE function, 115, 363
FILTER function versus, 363–365
time intelligence functions, 259, 260–261
CALENDAR function, date tables, 222
CALENDARAUTO function, date tables, 222–224
CallbackDataID function
Analysis Services 2012/2014 and, 644
parallelism and, 641
COMBINEVALUES function, multiple-column relationships (calculated physical relationships), 472–473
CONCATENATEX function
tables as scalar values, 74
CONTAINS function
transferring filters, 481–482, 484–485
CONTAINSROW function, tables and, 387–388
conversion functions, 51
COUNTROWS function
filter contexts and relationships, 107–108
nested row contexts on the same table, 92–95
tables as scalar values, 73
CROSSFILTER function
bidirectional relationships, 109
CALCULATE function and, 168
CROSSJOIN function, tables and, 372–374, 383–384
CURRENCY function, 51
DATATABLE function, creating static tables, 392–393
DATEADD function, time intelligence calculations, 237–238, 262–269
DATESINPERIOD function, moving annual totals, 243–244
DATESMTD function, time intelligence calculations, 259, 276–277
DATESQTD function, time intelligence calculations, 259, 276–277
DATESYTD function
calculation items, applying to expressions, 293–296
time intelligence calculations, 259, 260, 261–262, 276–277
DATEVALUE function, 51
DETAILROWS function, reusing table expressions, 388–389
DISTINCT function
calculated physical relationships and circular dependencies, 477–478
range-based relationships (calculated physical relationships), 476
DISTINCTCOUNT function
avoiding table filters, 699–704
computing same-store sales, 535–536
DIVIDE function, DAX optimization, 684–687
EARLIER function, evaluation contexts, 97–98
EXCEPT function, tables and, 379–381
FILTER function
CALCULATETABLE function versus, 363–365
nested row contexts on the same table, 92–93, 94–95
range-based relationships (calculated physical relationships), 474–476
time intelligence calculations, 228–232
transferring filters, 481–482, 484–485
FILTERS function
VALUES function versus, 322–324
FIRSTDATE function, time intelligence calculations, 269, 270
FIRSTNONBLANK function, time intelligence calculations, 256–257, 270–271
FORMAT function, 51
IN function, tables and, 387–388
GENERATE function, authoring queries, 414–417
GENERATEALL function, authoring queries, 417
GENERATESERIES function, tables and, 393–394
GROUPBY function
SUMMARIZE function and, 420–423
HASONEVALUE function
tables as scalar values, 73
INT function, 51
INTERSECT function
ISCROSSFILTERED function, filter contexts, 319–322
ISEMPTY function, filter contexts, 330–332
ISFILTERED function
time intelligence calculations, 268–269
ISONORAFTER function
ISSELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
ISSUBTOTAL function and SUMMARIZE function, 402–403
CALCULATE function and, 135–138, 142–143, 146–148, 164, 168–169
transferring filters, 482–483, 484
LASTDATE function, time intelligence calculations, 248–249, 254, 255, 269–270
LASTNONBLANK function, 250–254, 255, 270–271
logical functions
IFERROR function, 47
LOOKUPVALUE function, 444, 473
mathematical functions, 49
NATURALINNERJOIN function, authoring queries, 423–425
NATURALLEFTOUTERJOIN function, authoring queries, 423–425
nested functions, call order of time intelligence functions, 245–246
NEXTDAY function, call order of nested time intelligence functions, 245–246
PARALLELPERIOD function, time intelligence calculations, 238–239
PREVIOUSMONTH function, time intelligence calculations, 239
RANK.EQ function, 210
RANKX function, numbering sequences of events (calculations), 538–539
RELATED function
CALCULATE function and, 443–444
context transitions in expanded tables, 455
filter contexts and relationships, 109
nested row contexts on different tables, 92
row contexts and relationships, 103–105
table filters and expanded tables, 454
RELATEDTABLE function
filter contexts and relationships, 109
nested row contexts on different tables, 91–92
row contexts and relationships, 103–105
ROW function
creating static tables, 391–392
SAMEPERIODLASTYEAR function
call order of nested time intelligence functions, 245–246
computing previous year sales up to last day sales (calculations), 540–544
time intelligence calculations, 237
SAMPLE function, authoring queries, 427–428
SELECTCOLUMNS function, 390–391, 393–394
SELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
SELECTEDMEASUREFORMATSTRING function, 291
SELECTEDVALUE function
calculated physical relationships and circular dependencies, 479–480
computing same-store sales, 533–534
context transitions in expanded tables, 454–455
tables as scalar values, 73–74
STARTOFQUARTER function, time intelligence calculations, 256–257
SUBSTITUTEWITHINDEX function, authoring queries, 425–427
SUM function in calculated columns, 88–89
SUMMARIZE function
authoring queries, 401–403, 433–434
auto-exists feature (queries), 433–434
columns (tables) and, 401
filter contexts, 112
ISSUBTOTAL function and, 402–403
ROLLUP function and, 401–402, 403
table filters and expanded tables, 453–454
tables and, 369–372, 373–374, 383–384
SUMMARIZECOLUMNS function
authoring queries, 403–409, 429–434
auto-exists feature (queries), 429–434
ROLLUPADDISSUBTOTAL modifier, 404–406
ROLLUPGROUP modifier, 406
table functions, 57
calculated columns and, 59
calculated tables, 59
measures and, 59
time intelligence functions (nested), call order of, 245–246
TOPN function
ISONORAFTER function and, 417–419
sort order, 410
TOPNSKIP function, authoring queries, 420
TREATAS function, 378
filter contexts and data lineage, 334–336
SUMMARIZECOLUMNS function and, 407–408
transferring filters, 482–483, 484
trigonometric functions, 50
UNION function
CALCULATE function and, 376–378
DISTINCT function and, 375–378
USERELATIONSHIP function
CALCULATE function and, 164–168
non-active relationships and ambiguity, 516–517
VALUE function, 51
VALUES function
ALLEXCEPT function versus, 326–328
calculated physical relationships and circular dependencies, 477–480
computing percentages, 133–134
filter contexts, 322–324, 327–328
FILTERS function versus, 322–324
range-based relationships (calculated physical relationships), 474–476
GENERATE function, authoring queries, 414–417
GENERATEALL function, authoring queries, 417
GENERATESERIES function, tables and, 393–394
generating errors (error-handling), 38–39
granularity
calculations and iterators, 211–214
relationships (data models), 507–512
GROUPBY function
hash encoding (VertiPaq compression), 555–556
HASONEVALUE function
tables as scalar values, 73
help, formatting DAX code, 42
attribute hierarchies (data model optimization), disabling, 604
Columns Hierarchies Size column (VertiPaq Analyzer), 582
P/C (Parent/Child) hierarchies, 350–361, 362
percentages, computing, 345
IF conditions, 349
PercOnCategory measures, 348
PercOnParent measures, 346–349
ratio to parent calculations, 345
Use Hierarchies Size column (VertiPaq Analyzer), 582
IF conditions
computing percentages over hierarchies, 349
IFERROR function, 35–36, 37–38, 47
IGNORE modifier, SUMMARIZECOLUMNS function, 403–404
INT function, 51
Integer data type, 21
INTERSECT function
intra-island relationships, 489
invalid relationships, blank rows and, 68–71
ISBLANK function, 36
ISCROSSFILTERED function, filter contexts, 319–322
ISEMPTY function, filter contexts, 330–332
ISFILTERED function
time intelligence calculations, 268–269
ISONORAFTER function
ISSELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
averages (means)
computing with AVERAGEX function, 199–201
returning with AVERAGE function, 199
returning with AVERAGEA function, 199
AVERAGEX iterators, 188
behavior of, 91
calculation granularity, 211–214
CONCATENATEX function and, 194–196
context transitions, leveraging, 190–194
DAX optimization
nested iterators
leveraging context transitions, 190–194
RANK.EQ function, 210
ROW CONTEXT iterators, 187–188
CALCULATE function and, 135–138, 139–143, 164, 168–169
last day sales (calculations), computing previous year sales up to, 539–544
LASTDATE function, time intelligence calculations, 248–249, 254, 255, 269–270
LASTNONBLANK function, time intelligence calculations, 250–254, 255, 270–271
lazy evaluations, variables, 181–183
leaf-level calculations
DAX, 14
MDX, 14
leap year bug, 22
list of values. See filter arguments
logical functions
IFERROR function, 47
logical operators, 23
maintenance (code), FILTER function, 62–63
many-sided relationships (data models), 2, 3
many-to-many relationships. See MMR
materialization (queries), 568–571
mathematical functions, 49
MAX function, 43
MDX (Multidimensional Expressions)
DAX and, 12
leaf-level calculations, 14
multidimensional versus tabular space, 12
as programming language, 12–13
queries, 546
attribute hierarchies (data model optimization), disabling, 604
DAX and, 613
executing, 546
reproduction queries, creating, 663–664
means (averages)
computing averages, AVERAGEX function, 199–201
returning averages
AVERAGE function, 199
AVERAGEA function, 199
MEASURE keyword, DEFINE sections (authoring queries), 399
calculated columns, 42
choosing between calculated columns and measures, 29–30
differences between calculated columns and measures, 29
using measures in calculated columns, 30
calculation items, including/excluding measures from, 304–306
columns in, evaluation contexts, 89–90
DEFINE MEASURE clauses in EVALUATE statements, 59
defining in tables, 29
expressions, 29
IF conditions, DAX optimization, 679–683
ISSELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
PercOnCategory measures, computing percentages over hierarchies, 348
PercOnParent measures, computing percentages over hierarchies, 346–349
SELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
table functions, 59
memory size, VertiPaq hardware selection, 574, 576
memory speed, VertiPaq hardware selection, 574, 575–576
MIN function, 43
MMR (Many-Many Relationships), 489, 490, 494, 507
common dimensionality, 500–504
moving annual totals, computing, 243–244
moving averages, CALCULATE function, 201–202
MTD (Month-to-Date) calculations, time intelligence calculations, 235–236, 259–262, 276–277
multi-line comments, 18
multiple columns
DISTINCT function and, 71
multiple-column relationships (calculated physical relationships), 471–473
VALUES function and, 71
MultipleItemSales variable, 58
Name calculation group, 288
Name calculation item, 288
naming variables, 182
narrowing table computations, 384–386
NATURALINNERJOIN function, authoring queries, 423–425
NATURALLEFTOUTERJOIN function, authoring queries, 424–425
nested functions, call order of time intelligence functions, 245–246
nested iterators
leveraging context transitions, 190–194
nesting
filter contexts, in variables, 184–185
multiple rows, in variables, 184
row contexts
VAR/RETURN statements, 179–180
new customers, computing (tables), 380–381, 386–387
NEXTDAY function, call order of nested time intelligence functions, 245–246
non-active relationships, ambiguity, 515–517
nonworking days between two dates, computing, 523–525
one-sided relationships (data models), 2, 3
one-to-many relationships. See SMR
one-to-one relationships. See SSR
opening/closing balances (time intelligence calculations), 254–258
operators, 23
arithmetic operators, 23
comparison operators, 23
logical operators, 23
parenthesis operators, 23
text concatenation operators, 23
optimizing
columns
high-cardinality columns, 603
data models with VertiPac, 579
cross-filtering, 590
gathering data model information, 579–584
relationship cardinality, 586–587
DAX, 657
bottlenecks, 668
CallbackDataID function, 690–693
change implementation, 668
conditional statements, 708–709
DISTINCTCOUNT function, 699–704
expressions, identifying a single DAX expression for optimization, 658–661
IF conditions, 678–683, 684–690
multiple evaluations, avoiding with variables, 704–708
reproduction queries, creating, 661–664
SE/FE bottlenecks, identifying, 667–668
test queries, rerunning, 668
to-do list, 658
OR conditions, tables as filters, 381–384
ORDER BY clauses in EVALUATE statements, 60
orders (example), computing duration of, 26
Ordinal values, calculated items, 289
P/C (Parent/Child) hierarchies, 350–361, 362
paging, VertiPaq hardware selection, 576–577
parallelism
CallbackDataID function, 641
VertiPaq SE queries, 641
PARALLELPERIOD function, time intelligence calculations, 238–239
parenthesis operators, 23
partitioning and SSAS, 562–563
Partitions # column (VertiPaq Analyzer), 582
percentages, computing, 135
CALCULATE function, 124
ALLEXCEPT function, 135
hierarchies, 345
IF conditions, 349
PercOnCategory measures, 348
PercOnParent measures, 346–349
ratio to parent calculations, 345
PercOnCategory measures, computing percentages over hierarchies, 348
PercOnParent measures, computing percentages over hierarchies, 346, 348–349
PercOnSubcategory measures, computing percentages over hierarchies, 346–348
physical query plans, 612–613, 614–616, 651–652
physical relationships
calculated physical relationships, 471–473
circular dependencies, 476–480
range-based relationships, 474–476
cross-filter directions, 490
bidirectional cross-filter direction, 490, 491–493, 507
single cross-filter direction, 490
cross-island relationships, 489
intra-island relationships, 489
common dimensionality, 500–504
strong relationships, 488
virtual relationships versus, 506–507
weak relationships, 488, 489, 504–506
Power BI
Power BI reports and DAX queries, 609–610
Power Pivot for Excel
automatic date columns, 219
date table templates, 220
Precedence calculation group, 288, 299–304
precomputing values (calculations), computing work days between two dates, 525–527
previous year sales up to last day sales (calculations), computing, 539–544
PREVIOUSMONTH function, time intelligence calculations, 239
Primary/Alternate Keys column (tables), 599
primary/alternate keys column (tables), 600
processing tables, 550
PYTD (Previous Year-To-Date) calculations, calculation items and sideways recursion, 307–308
QTD (Quarter-to-Date) calculations, time intelligence calculations, 235–236, 259–262, 276–277
qualitative attributes column (tables), 599, 600
quantitative attributes column (tables), 599, 600–601
queries
DAX queries
DISTINCTCOUNT function, 634–635
executing, 546
DirectQuery, 546, 548, 549, 617
DirectQuery SE queries
composite data models, 646–647
Expression Trees, 612
datacaches, 547
operators of, 547
single-threaded implementation, 547
MDX queries, 546
DAX and, 613
disabling attribute hierarchies (data model optimization), 604
executing, 546
query measures, creating with DAX Studio, 662–663
reproduction queries, creating
creating query measures with DAX Studio, 662–663
aggregations, 548
datacaches, 547
DirectQuery, 548
operators of, 547
parallel implementations, 548
test queries, rerunning (DAX optimization), 668
VertiPaq, 546, 547–548, 550. See also data models, optimizing with VertiPaq
datacaches, 549
multithreaded implementations, 548
processing tables, 550
re-encoding, 559
relationships (data models), 561–562, 565–568
scan operations, 549
VertiPaq SE queries, 624
composite data models, 646–647
datacaches and parallelism, 635–637
DISTINCTCOUNT function, 634–635
xmSQL queries, 624
aggregation functions, 625–627
arithmetical operations, 627
join operators, 630
queries, authoring, 395
ADDMISSINGITEMS function, 419–420, 432–433
DAX Studio, 395
DEFINE sections
MEASURE keyword in, 399
EVALUATE statements
ADDMISSINGITEMS function, 419–420, 432–433
example of, 396
expression variables and, 398
GENERATEALL function, 417
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
query variables and, 398
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function, 401–403, 433–434
SUMMARIZECOLUMNS function, 403–409, 429–434
TOPNSKIP function, 420
GENERATEALL function, 417
MEASURE in DEFINE sections, 399
measures
query measures, 399
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
ROW function, testing measures, 400–401
shadow filter contexts, 457–462
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function, 401–403, 433–434
SUMMARIZECOLUMNS function, 403–409, 429–434
TOPNSKIP function, 420
VAR in DEFINE sections, 397–399
Query End events (SQL Server Profiler), 621
query plans
capturing queries
logical query plans, 612, -614, 650–651
range-based relationships (calculated physical relationships), 474–476
RANK.EQ function, 210
RANKX function, numbering sequences of events (calculations), 538–539
ratio to parent calculations, computing percentages over hierarchies, 345
readability (code), FILTER function, 62–63
recursion (sideways), calculation items, 306–311
re-encoding
SSAS and, 559
VertiPaq, 559
referencing columns in tables, 17–18
refreshing data, SSAS (SQL Server Analysis Services), 549–550
RELATED function
CALCULATE function and, 443–444
context transitions in expanded tables, 455
filter contexts, relationships and, 109
nested row contexts on different tables, 92
row contexts and relationships, 103–105
table filters and expanded tables, 454
filter contexts, relationships and, 109
nested row contexts on different tables, 91–92
row contexts and relationships, 103–105
relationships (data models), 2
1:1 relationships, 2
active relationships
CALCULATETABLE function, 451–453
USERELATIONSHIP function, 450–451
non-active relationships, 515–517
bidirectional relationships, 106, 109
calculated physical relationships, 471
circular dependencies, 476–480
multiple-column relationships, 471–473
range-based relationships, 474–476
cardinality, 489–490, 586–587, 590–591
chains, 3
columns, 3
cross-filter directions, 3, 490
bidirectional cross-filter direction, 490, 491–493, 507
single cross-filter direction, 490
cross-island relationships, 489
DAX and SQL, 9
evaluation contexts and, 101–102
intra-island relationships, 489
invalid relationships and blank rows, 68–71
many-sided relationships, 2, 3
common dimensionality, 500–504
non-active relationships, ambiguity, 515–517
performance, 507
physical relationships
calculated physical relationships, 471–480
cross-filter directions, 490–493
cross-island relationships, 489
intra-island relationships, 489
strong relationships, 488
virtual relationships versus, 506–507
weak relationships, 488, 489, 504–506
Relationship reports (VertiPaq Analyzer), 584
Relationship Size column (VertiPaq Analyzer), 582
relationships, expanded tables, 437–441
shallow relationships in batch events (xmSQL queries), 630–632
strong relationships, 488
CALCULATE function, 482
FILTER function, 481–482, 484–485
TREATAS function, 482–483, 484
unidirectional filtering, 4
USERELATIONSHIP function, non-active relationships and ambiguity, 516–517
virtual relationships, 480, 507
physical relationships versus, 506–507
weak relationships, 2, 439, 488, 489, 504–506
reproduction queries, creating
query measures, creating with DAX Studio, 662–663
reusing table expressions, 388–389
RLE (Run Length Encoding), VertiPaq, 556–559
ROLLUPADDISSUBTOTAL modifier, SUMMARIZECOLUMNS function, 404–406
ROLLUPGROUP modifier, SUMMARIZECOLUMNS function, 406
ROW CONTEXT iterators, 187–188
row contexts, 80
CALCULATE function and, 148–151
column references, 87
filter contexts versus, 85
nested row contexts
ROW function
static tables, creating, 391–392
rows (tables)
ALLNOBLANKROW function, 464, 465
blank rows, invalid relationships, 68–71
nesting in variables, 184
sales
budget/sales information (calculations), showing together, 527–530
previous year sales up to last day sales (calculations), computing, 539–544
same-store sales (calculations), computing, 530–536
same-store sales (calculations), computing, 530–536
SAMEPERIODLASTYEAR function
computing previous year sales up to last day sales (calculations), 540–544
nested time intelligence functions, call order of, 245–246
time intelligence calculations, 237
SAMPLE function, authoring queries, 427–428
scalar values
storing in variables, 176, 181
SE (Storage Engines), 546
aggregations, 548
bottlenecks, identifying, 667–668
datacaches, 547
operators of, 547
parallel implementations, 548
SE queries, copy VertiPaq SE queries entries
VertiPaq, 547–548, 550. See also data models, optimizing with VertiPaq
datacaches, 549
multithreaded implementations, 548
processing tables, 550
re-encoding, 559
relationships (data models), 561–562, 565–568
scan operations, 549
segmentation
dynamic segmentation and virtual relationships, 485–488
Segments # column (VertiPaq Analyzer), 582
SELECTCOLUMNS function, 390–391, 393–394
SELECTCOLUMNS iterators, 196, 197–199
SELECTEDMEASURE function, including/excluding measures from calculation items, 304–306
SELECTEDMEASUREFORMATSTRING function, 291
SELECTEDVALUE function
calculated physical relationships, circular dependencies, 479–480
context transitions in expanded tables, 454–455
same-store sales (calculations), computing, 533–534
tables as scalar values, 73–74
semi-additive calculations, time intelligence calculations, 246–248
sequences of events (calculations), numbering, 536–539
server timings, DAX optimization, 664–667
shadow filter contexts, 457–462
shallow relationships in batch events (xmSQL queries), 630–632
sideways recursion, calculation items, 306–311
simple filters
arbitrarily shaped filters versus, 337
defined, 337
single cross-filter direction (physical relationships), 490
single data models
DirectQuery mode, 488
VertiPaq mode, 488
single-line comments, 18
SMR (Single-Many Relationships), 489, 490, 493, 507
sort order, determining, ORDER BY clauses, 60
sort orders
SQL (Structured Query Language)
conditions, 11
DAX and, 9
as declarative language, 10
error-handling, empty/missing values, 35
subqueries, 11
SQL Server Profiler
DirectQuery End events, 621
Query End events, 621
query plans, capturing profiling information, 620–623
VertiPaq SE Query Cache Match events, 621
VertiPaq SE Query End events, 621
SQRT function, 36
SSAS (SQL Server Analysis Services)
processing tables, 550
re-encoding, 559
relationships (data models), 561–562
SSR (Single-Single Relationships), 489, 490, 493–494
star schemas, denormalizing data and data model optimization, 586
STARTOFQUARTER function, time intelligence calculations, 256–257
static tables, creating
storing
blockz, in variables, 176, 181
partial results of calculations, in variables, 176–177
scalar values, in variables, 176, 181
tables, in variables, 58
strong relationships, 488
subcategories/categories example, ALL function and, 66–67
subqueries
DAX, 11
SQL, 11
SUBSTITUTEWITHINDEX function, authoring queries, 425–427
SUM function, 42–43, 44–45, 88–89
SUMMARIZE function
authoring queries, 401–403, 433–434
auto-exists feature (queries), 433–434
columns (tables) and, 401
filter contexts, 112
ISSUBTOTAL function and, 402–403
ROLLUP function and, 401–402, 403
table filters and expanded tables, 453–454
tables and, 369–372, 373–374, 383–384
SUMMARIZECOLUMNS function
authoring queries, 403–409, 429–434
auto-exists feature (queries), 429–434
ROLLUPADDISSUBTOTAL modifier, 404–406
ROLLUPGROUP modifier, 406
SUMX function, 45
table constructors, 24
table expressions, EVALUATE statements, 59–60
table filters, DISTINCTCOUNT function, 699–704
table functions, 57
ALL function
syntax of, 63
top categories/subcategories example, 66–67
VALUES function versus, 67
calculated columns and, 59
calculated tables, 59
DISTINCT function, 71
blank rows and invalid relationships, 68, 70–71
calculated columns, 68
multiple columns, 71
VALUES function versus, 68
code maintenance/readability, 62–63
syntax of, 60
measures and, 59
VALUES function, 71
ALL function versus, 67
blank rows and invalid relationships, 68–71
calculated columns, 68
calculated tables, 68
DISTINCT function versus, 68
multiple columns, 71
tables as scalar values, 71–74
Table Size % column (VertiPaq Analyzer), 582
Table Size column (VertiPaq Analyzer), 581
tables, 363
ADDCOLUMNS function, 366–369, 371–372
blank rows, invalid relationships, 68–71
CALCULATE function, tables as filters, 382–384
choosing between calculated columns and measures, 29–30
differences between calculated columns and measures, 29
expressions, 29
using measures in calculated columns, 30
calculated tables, 59
DISTINCT function, 68
SELECTCOLUMNS function, 390–391
VALUES function, 68
CALCULATETABLE function, 363–365
columns
ADDCOLUMNS function, 366–369, 371–372
Boolean calculated columns, 597–598
calculated columns and data model optimization, 595–599
calculated columns, RELATED function, 443–444
cardinality, 603
cardinality and data model optimization, 591–592
defined, 2
descriptive attributes column (tables), 600, 601–602
optimizing high-cardinality columns, 603
Primary/Alternate Keys column (tables), 599
primary/alternate keys column (tables), 600
qualitative attributes column (tables), 599, 600
quantitative attributes column (tables), 599, 600–601
relationships, 3
SELECTCOLUMNS function, 390–391, 393–394
SUBSTITUTEWITHINDEX function, 425–427
SUMMARIZE function and, 401
SUMMARIZECOLUMNS function, 403–409, 429–434
technical attributes column (tables), 600, 602
computing new customers, 380–381, 386–387
CROSSJOIN function, 372–374, 383–384
date tables
CALENDAR function, 222
CALENDARAUTO function, 222–224
date table templates (Power Pivot for Excel), 220
date templates, 224
duplicating, 227
loading from other data sources, 221
managing multiple dates, 224–228
multiple relationships to date tables, 224–226
naming, 221
defined, 2
expanded tables
column filters versus table filters, 444–447
differences between table filters and expanded tables, 453–454
table filters in measures, 447–450
table filters versus column filters, 444–447
FILTER function versus CALCULATETABLE function, 363–365
filtering
CALCULATE function and, 445–447
column filters versus, 444–447
GENERATESERIES function, 393–394
iterators, returning tables with, 196–199
measures, defining in tables, 29
narrowing computations, 384–386
NATURALINNERJOIN function, 423–425
NATURALLEFTOUTERJOIN function, 423–425
processing, 550
records, 2
rows
ALLNOBLANKROW function, 464, 465
SELECTCOLUMNS function, 390–391, 393–394
static tables
creating with DATATABLE function, 392–393
creating with ROW function, 391–392
storing in variables, 176, 181
SUMMARIZE function, 369–372, 373–374, 383–384
temporary tables in batch events (xmSQL queries), 630–632
variables, storing tables in, 58
Tabular model
calculation groups, creating, 281–288
DAX queries, executing, 546
DirectQuery, 546
MDX queries, executing, 546
VertiPaq, 546
technical attributes column (tables), 600, 602
templates
date table templates (Power Pivot for Excel), 220
date templates, 224
temporary tables in batch events (xmSQL queries), 630–632
test queries, rerunning (DAX optimization), 668
text
concatenation operators, 23
editing, formatting DAX code, 42
Time column, data model optimization, 592–595
time intelligence calculations, 217
Auto Date/Time (Power BI), 218–219
automatic date columns (Power Pivot for Excel), 219
CALCULATETABLE function, 259, 260–261
context transitions, 260
custom calendars, 272
date tables
CALENDAR function, 222
CALENDARAUTO function, 222–224
date table templates (Power Pivot for Excel), 220
date templates, 224
duplicating, 227
loading from other data sources, 221
managing multiple dates, 224–228
multiple relationships to date tables, 224–226
naming, 221
DATEADD function, 237–238, 262–269
DATESINPERIOD function, 243–244
DATESMTD function, 259, 276–277
DATESQTD function, 259, 276–277
DATESYTD function, 259, 260, 261–262, 276–277
differences over previous periods, computing, 241–243
drillthrough operations, 271
FIRSTNONBLANK function, 256–257, 270–271
LASTDATE function, 248–249, 254, 255, 269–270
LASTNONBLANK function, 250–254, 255, 270–271
moving annual totals, computing, 243–244
MTD calculations, 235–236, 259–262, 276–277
nested functions, call order of, 245–246
opening/closing balances, 254–258
PARALLELPERIOD function, 238–239
PREVIOUSMONTH function, 239
QTD calculations, 235–236, 259–262, 276–277
SAMEPERIODLASTYEAR function, 237, 245–246
semi-additive calculations, 246–248
STARTOFQUARTER function, 256–257
time periods, computing from prior periods, 237–239
YTD calculations, 235–236, 259–262, 276–277
time periods, computing from prior periods, 237–239
top categories/subcategories example, ALL function and, 66–67
TOPN function
ISONORAFTER function and, 417–419
sort order, 410
TOPNSKIP function, authoring queries, 420
CALCULATE function, 482
FILTER function, 481–482, 484–485
TREATAS function, 482–483, 484
TREATAS function, 378
filter contexts and data lineage, 334–336
SUMMARIZECOLUMNS function and, 407–408
transferring filters, 482–483, 484
trigonometric functions, 50
unary operators, P/C (Parent/Child) hierarchies, 362
unidirectional filtering (relationships), 4
UNION function
CALCULATE function and, 376–378
DISTINCT function and, 375–378
Use Hierarchies Size column (VertiPaq Analyzer), 582
USERELATIONSHIP function
value encoding (VertiPaq compression), 554–555
VALUE function, 51
values, list of. See filter arguments
VALUES function, 71
ALL function versus, 67
ALLEXCEPT function versus, 326–328
blank rows and invalid relataionships, 68–71
calculated columns, 68
calculated physical relationships
circular dependencies, 477–480
range-based relationships, 474–476
calculated tables, 68
computing percentages, 133–134
DISTINCT function versus, 68
filter contexts, 322–324, 327–328
FILTERS function versus, 322–324
multiple columns, 71
tables as scalar values, 71–74
VAR keyword, DEFINE sections (authoring queries), 397–399
error-handling, 37
multiple evaluations, avoiding with variables, 704–708
MultipleItemSales variable, 58
names, 182
nesting
multiple rows, 184
scalar values, 58
storing
partial results of calculations, 176–177
tables, storing, 58
VAR/RETURN blocks, 175–177, 180
VAR/RETURN statements, nesting, 179–180
Variant data type, 22
aggregations, 571–573, 604–607
CallbackDataID function, 640–644
re-encoding, 559
data model optimization, 579
aggregations, 587–588, 604–607
choosing columns for storage, 599–602
cross-filtering, 590
disabling attribute hierarchies, 604
gathering data model information, 579–584
optimizing column storage, 602–603
optimizing drill-through attributes, 604
relationship cardinality, 586–587, 590–591
datacaches, 549
hardware selection, 573
best practices, 577
Disk I/O performance, 574, 576–577
multithreaded implementations, 548
processing tables, 550
relationships (data models), 561–562, 565–568
row-level security, 639
scan operations, 549
VertiPaq Analyzer
gathering data model information, 579–584
VertiPaq Analyzer, Relationship reports, 584
composite data models, 488
single data models, 488
VertiPaq SE queries, 624
composite data models, 646–647
datacaches, parallelism and, 635–637
DISTINCTCOUNT function, 634–635
xmSQL queries and, 624
aggregation functions, 625–627
arithmetical operations, 627
join operators, 630
VertiPaq SE Query Cache Match events (SQL Server Profiler), 621
VertiPaq SE Query End events (SQL Server Profiler), 621
virtual relationships, 480, 507
physical relationships versus, 506–507
CALCULATE function, 482
weak relationships, 2, 439, 488, 489, 504–506
weeks (custom calendars), time intelligence calculations, 272–275
xmSQL
CallbackDataID function
parallelism and, 641
VertiPaq queries, 548
xmSQL queries, 624
aggregation functions, 625–627
arithmetic operations, 627
join operators, 630
YOY (Year-Over-Year) calculation item, 289–290
YOY% (Year-Over-Year Percentage) calculation item, 289–290
YTD (Year-to-Date) calculations
calculation group precedence, 299–303
calculation items
applying to expressions, 294
sideways recursion, 307
18.191.21.86