├── Ch1
├── Chapter01.pbix
└── Readme.md
├── Ch10
├── Ch10R03Data.xlsx
├── Ch10R08Data.xlsx
├── Chapter10.pbix
└── Readme.md
├── Ch11
├── Ch11R09Data.xlsx
├── Ch11R11Data.xlsx
├── Chapter11.pbix
├── R03_RK4.txt
└── Readme.md
├── Ch12
├── Ch12R01Data.xlsc.xlsx
├── Ch12R01Data.xlsx
├── Chapter12.pbix
└── Readme.md
├── Ch13
├── Chapter13.pbix
├── Chapter13R10Step1.pbix
├── Chapter13R10Step2.pbix
├── Chapter13R10Step3.pbix
├── Chapter13R10Step4.pbix
└── Readme.md
├── Ch2
├── Chapter02.pbix
├── R08_SequentialWeek2.txt
├── R09_RollingWeekAverage2.txt
├── Readme.md
└── Sales.csv
├── Ch3
├── Chapter03.pbix
├── Readme.md
└── Timezones.csv
├── Ch4
├── Chapter04.pbix
├── R01_DynamicSlicerTitle1.txt
└── Readme.md
├── Ch5
├── Chapter05.pbix
└── Readme.md
├── Ch6
├── Chapter06.pbix
├── R03_RecoveredCustomers.txt
└── Readme.md
├── Ch7
├── Chapter07.pbix
├── R04_EmploymentCosts.txt
├── R04_FTE.txt
└── Readme.md
├── Ch8
├── Ch08R01Data.xlsx
├── Chapter08.pbix
└── Readme.md
├── Ch9
├── Ch09R02Data.xlsx
├── Ch09R03Data.xlsx
├── Ch09R04Data.xlsx
├── Ch09R05Data.xlsx
├── Ch09R06Data.xlsx
├── Chapter09.pbix
└── Readme.md
├── README.md
└── images
├── DAXCookbook.jpg
├── DAXCookbook2.png
└── DAXCookbookSmall.jpg
/Ch1/Chapter01.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch1/Chapter01.pbix
--------------------------------------------------------------------------------
/Ch1/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch10/Ch10R03Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch10/Ch10R03Data.xlsx
--------------------------------------------------------------------------------
/Ch10/Ch10R08Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch10/Ch10R08Data.xlsx
--------------------------------------------------------------------------------
/Ch10/Chapter10.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch10/Chapter10.pbix
--------------------------------------------------------------------------------
/Ch10/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch11/Ch11R09Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch11/Ch11R09Data.xlsx
--------------------------------------------------------------------------------
/Ch11/Ch11R11Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch11/Ch11R11Data.xlsx
--------------------------------------------------------------------------------
/Ch11/Chapter11.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch11/Chapter11.pbix
--------------------------------------------------------------------------------
/Ch11/R03_RK4.txt:
--------------------------------------------------------------------------------
1 | RK4 =
2 | VAR tCurrent = MAX('R03_Table'[t])
3 | VAR t=0
4 | VAR w = 0.5
5 | VAR h = 0.5
6 | VAR step1 =
7 | IF(
8 | tCurrent=0,
9 | w,
10 | VAR k1t = t
11 | VAR t = t+h
12 | VAR k1w = w
13 | VAR k1 = h*(k1w - k1t^2 + 1)
14 | VAR k2t = k1t + h/2
15 | VAR k2w = k1w + k1/2
16 | VAR k2 = h*(k2w - k2t^2 + 1)
17 | VAR k3t = k1t + h/2
18 | VAR k3w = k1w + k2/2
19 | VAR k3 = h*(k3w - k3t^2 + 1)
20 | VAR k4t = k1t + h
21 | VAR k4w = k1w + k3
22 | VAR k4 = h*(k4w - k4t^2 + 1)
23 | VAR w = k1w + (k1 + 2*k2 + 2*k3 + k4)/6
24 |
25 | VAR step2 =
26 | IF(
27 | tCurrent=h,
28 | w,
29 | VAR k1t = t
30 | VAR t = t+h
31 | VAR k1w = w
32 | VAR k1 = h*(k1w - k1t^2 + 1)
33 | VAR k2t = k1t + h/2
34 | VAR k2w = k1w + k1/2
35 | VAR k2 = h*(k2w - k2t^2 + 1)
36 | VAR k3t = k1t + h/2
37 | VAR k3w = k1w + k2/2
38 | VAR k3 = h*(k3w - k3t^2 + 1)
39 | VAR k4t = k1t + h
40 | VAR k4w = k1w + k3
41 | VAR k4 = h*(k4w - k4t^2 + 1)
42 | VAR w = k1w + (k1 + 2*k2 + 2*k3 + k4)/6
43 |
44 | VAR step3 =
45 | IF(
46 | tCurrent=2*h,
47 | w,
48 | VAR k1t = t
49 | VAR t = t+h
50 | VAR k1w = w
51 | VAR k1 = h*(k1w - k1t^2 + 1)
52 | VAR k2t = k1t + h/2
53 | VAR k2w = k1w + k1/2
54 | VAR k2 = h*(k2w - k2t^2 + 1)
55 | VAR k3t = k1t + h/2
56 | VAR k3w = k1w + k2/2
57 | VAR k3 = h*(k3w - k3t^2 + 1)
58 | VAR k4t = k1t + h
59 | VAR k4w = k1w + k3
60 | VAR k4 = h*(k4w - k4t^2 + 1)
61 | VAR w = k1w + (k1 + 2*k2 + 2*k3 + k4)/6
62 |
63 | VAR step4 =
64 | IF(
65 | tCurrent=3*h,
66 | w,
67 | VAR k1t = t
68 | VAR t = t+h
69 | VAR k1w = w
70 | VAR k1 = h*(k1w - k1t^2 + 1)
71 | VAR k2t = k1t + h/2
72 | VAR k2w = k1w + k1/2
73 | VAR k2 = h*(k2w - k2t^2 + 1)
74 | VAR k3t = k1t + h/2
75 | VAR k3w = k1w + k2/2
76 | VAR k3 = h*(k3w - k3t^2 + 1)
77 | VAR k4t = k1t + h
78 | VAR k4w = k1w + k3
79 | VAR k4 = h*(k4w - k4t^2 + 1)
80 | VAR w = k1w + (k1 + 2*k2 + 2*k3 + k4)/6
81 | RETURN w
82 | )
83 | RETURN step4
84 | )
85 | RETURN step3
86 | )
87 | RETURN step2
88 | )
89 | RETURN step1
--------------------------------------------------------------------------------
/Ch11/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch12/Ch12R01Data.xlsc.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch12/Ch12R01Data.xlsc.xlsx
--------------------------------------------------------------------------------
/Ch12/Ch12R01Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch12/Ch12R01Data.xlsx
--------------------------------------------------------------------------------
/Ch12/Chapter12.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch12/Chapter12.pbix
--------------------------------------------------------------------------------
/Ch12/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch13/Chapter13.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch13/Chapter13.pbix
--------------------------------------------------------------------------------
/Ch13/Chapter13R10Step1.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch13/Chapter13R10Step1.pbix
--------------------------------------------------------------------------------
/Ch13/Chapter13R10Step2.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch13/Chapter13R10Step2.pbix
--------------------------------------------------------------------------------
/Ch13/Chapter13R10Step3.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch13/Chapter13R10Step3.pbix
--------------------------------------------------------------------------------
/Ch13/Chapter13R10Step4.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch13/Chapter13R10Step4.pbix
--------------------------------------------------------------------------------
/Ch13/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch2/Chapter02.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch2/Chapter02.pbix
--------------------------------------------------------------------------------
/Ch2/R08_SequentialWeek2.txt:
--------------------------------------------------------------------------------
1 | SequentialWeek2 =
2 | VAR __Date = 'R08_Calendar'[Date] // The working date, edit if column is not Date
3 | VAR __Year = YEAR(__Date) // Get the working date
4 | VAR __Calendar = // Create calendar table with year and weeknum
5 | ADDCOLUMNS(
6 | ALL('R08_Calendar'), // Edit table name to match
7 | "__Year",
8 | YEAR('R08_Calendar'[Date]), // Edit table and column to match
9 | "__WeekNum",
10 | WEEKNUM('R08_Calendar'[Date]) // Edit table and column to match
11 | )
12 | VAR __FirstYear = MINX(__Calendar,[__Year]) // Determine the first year in our table
13 | VAR __WeekNum = // Get the current working week number
14 | MAXX(
15 | FILTER(
16 | __Calendar,
17 | [Date] = __Date
18 | ),
19 | [__WeekNum]
20 | )
21 | VAR __MaxWeeks = // Create a table of years and their max week numbers
22 | GROUPBY(
23 | __Calendar,
24 | [__Year],
25 | "__MaxWeek",
26 | MAXX(
27 | CURRENTGROUP(),
28 | [__WeekNum]
29 | )
30 | )
31 | VAR __Start = // Use __MaxWeeks table to get starting point for week number
32 | SUMX(
33 | FILTER(
34 | __MaxWeeks,
35 | [__Year]<__Year
36 | ),
37 | [__MaxWeek]
38 | )
39 | VAR __Calendar1 = // Add maximum weeknum column for each year
40 | ADDCOLUMNS(
41 | __Calendar,
42 | "__MaxWeek",
43 | MAXX(
44 | FILTER(
45 | __Calendar,
46 | [__Year] = EARLIER([__Year])
47 | ),
48 | [__WeekNum]
49 | )
50 | )
51 | VAR __SubtractTable = // Create table of number of days in last week of years
52 | GROUPBY(
53 | FILTER(
54 | __Calendar1,
55 | [__Year] < __Year &&
56 | [__WeekNum] = [__MaxWeek]
57 | ),
58 | [__Year],
59 | "__NumWeekDays",
60 | COUNTX(CURRENTGROUP(),[Date])
61 | )
62 | VAR __Subtract = // Get the number of years without 7 days in their last week
63 | COUNTROWS(
64 | FILTER(
65 | __SubtractTable,
66 | [__NumWeekDays]<7
67 | )
68 | )
69 | VAR __Sequential =
70 | IF(
71 | __Year=__FirstYear,
72 | __WeekNum, // If first year, then just the week number
73 | __Start + __WeekNum - __Subtract // Otherwise, __Start + current week number - __Subtract
74 | )
75 | RETURN __Sequential
--------------------------------------------------------------------------------
/Ch2/R09_RollingWeekAverage2.txt:
--------------------------------------------------------------------------------
1 | Rolling Week Average 2 =
2 | VAR __Date = MAX('R09_Sales'[Date])
3 | VAR __Sales = ALL('R09_Sales')
4 | VAR __WeeksBack = 4
5 | VAR __WeeksForward = -1
6 | VAR __Calendar =
7 | ADDCOLUMNS(
8 | CALENDAR(
9 | __Date - 7 * __WeeksBack,
10 | __Date + 7 * __WeeksForward
11 | ),
12 | "__WeekStarting",
13 | VAR __WeekStarting =
14 | VAR __WeekDay = 1
15 | VAR __Date = [Date]
16 | VAR __WeekNum = WEEKNUM(__Date)
17 | VAR __Year = YEAR(__Date)
18 | VAR __Calendar =
19 | ADDCOLUMNS(
20 | CALENDAR(
21 | DATE(__Year - 1 ,1 , 1),
22 | DATE(__Year ,12 , 31)
23 | ),
24 | "__WeekNum",WEEKNUM([Date]),
25 | "__WeekDay",WEEKDAY([Date])
26 | )
27 | VAR __WeekDate =
28 | MINX(
29 | FILTER(
30 | __Calendar,
31 | YEAR([Date]) = __Year &&
32 | [__WeekNum]=__WeekNum &&
33 | [__WeekDay] = __WeekDay
34 | ),
35 | [Date]
36 | )
37 | VAR __WeekDate1 =
38 | IF(
39 | ISBLANK(__WeekDate),
40 | MINX(
41 | FILTER(
42 | __Calendar,
43 | YEAR([Date]) = __Year - 1 &&
44 | [__WeekNum] = MAXX(__Calendar,[__WeekNum]) &&
45 | [__WeekDay] = __WeekDay
46 | ),
47 | [Date]
48 | ),
49 | __WeekDate
50 | )
51 | RETURN
52 | __WeekDate1
53 | RETURN __WeekStarting,
54 | "__WeekEnding",
55 | VAR __WeekEnding =
56 | VAR __WeekDay = 7
57 | VAR __Date = [Date]
58 | VAR __WeekNum = WEEKNUM(__Date)
59 | VAR __Year = YEAR(__Date)
60 | VAR __Calendar =
61 | ADDCOLUMNS(
62 | CALENDAR(
63 | DATE(__Year ,1 , 1),
64 | DATE(__Year + 1 ,12 , 31)
65 | ),
66 | "__WeekNum",WEEKNUM([Date]),
67 | "__WeekDay",WEEKDAY([Date])
68 | )
69 | VAR __WeekDate =
70 | MINX(
71 | FILTER(
72 | __Calendar,
73 | YEAR([Date]) = __Year &&
74 | [__WeekNum]=__WeekNum &&
75 | [__WeekDay] = __WeekDay
76 | ),
77 | [Date]
78 | )
79 | VAR __WeekDate1 =
80 | IF(
81 | ISBLANK(__WeekDate),
82 | MINX(
83 | FILTER(
84 | __Calendar,
85 | YEAR([Date]) = __Year + 1 &&
86 | [__WeekNum] = MINX(__Calendar,[__WeekNum]) &&
87 | [__WeekDay] = __WeekDay
88 | ),
89 | [Date]
90 | ),
91 | __WeekDate
92 | )
93 | RETURN
94 | __WeekDate1
95 | RETURN
96 | __WeekEnding
97 | )
98 | VAR __LookupDateStart = __Date - 7 * __WeeksBack
99 | VAR __LookupDateEnd = __Date + 7 * __WeeksForward
100 | VAR __RollingWeekStartDate =
101 | MINX(
102 | FILTER(__Calendar,[Date] = __LookupDateStart),
103 | [__WeekStarting]
104 | )
105 | VAR __RollingWeekEndDate =
106 | MAXX(
107 | FILTER(__Calendar,[Date] = __LookupDateEnd),
108 | [__WeekEnding]
109 | )
110 | RETURN
111 | AVERAGEX(
112 | FILTER(
113 | __Sales,
114 | [Date] >= __RollingWeekStartDate &&
115 | [Date] <= __RollingWeekEndDate
116 | ),
117 | [Value]
118 | )
--------------------------------------------------------------------------------
/Ch2/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch2/Sales.csv:
--------------------------------------------------------------------------------
1 | Date,Value
2 | 1/1/2017,1
3 | 1/2/2017,2
4 | 1/3/2017,3
5 | 1/4/2017,4
6 | 1/5/2017,5
7 | 1/6/2017,6
8 | 1/7/2017,7
9 | 1/8/2017,16
10 | 1/9/2017,18
11 | 1/10/2017,20
12 | 1/11/2017,22
13 | 1/12/2017,24
14 | 1/13/2017,26
15 | 1/14/2017,28
16 | 1/15/2017,45
17 | 1/16/2017,48
18 | 1/17/2017,51
19 | 1/18/2017,54
20 | 1/19/2017,57
21 | 1/20/2017,60
22 | 1/21/2017,63
23 | 1/22/2017,88
24 | 1/23/2017,92
25 | 1/24/2017,96
26 | 1/25/2017,100
27 | 1/26/2017,104
28 | 1/27/2017,108
29 | 1/28/2017,112
30 | 1/29/2017,145
31 | 1/30/2017,150
32 | 1/31/2017,155
33 | 2/1/2017,2.5
34 | 2/2/2017,5
35 | 2/3/2017,7.5
36 | 2/4/2017,10
37 | 2/5/2017,15
38 | 2/6/2017,18
39 | 2/7/2017,21
40 | 2/8/2017,24
41 | 2/9/2017,27
42 | 2/10/2017,30
43 | 2/11/2017,33
44 | 2/12/2017,42
45 | 2/13/2017,45.5
46 | 2/14/2017,49
47 | 2/15/2017,52.5
48 | 2/16/2017,56
49 | 2/17/2017,59.5
50 | 2/18/2017,63
51 | 2/19/2017,76
52 | 2/20/2017,80
53 | 2/21/2017,84
54 | 2/22/2017,88
55 | 2/23/2017,92
56 | 2/24/2017,96
57 | 2/25/2017,100
58 | 2/26/2017,117
59 | 2/27/2017,121.5
60 | 2/28/2017,126
61 | 3/1/2017,3
62 | 3/2/2017,6
63 | 3/3/2017,9
64 | 3/4/2017,12
65 | 3/5/2017,16.66666667
66 | 3/6/2017,20
67 | 3/7/2017,23.33333333
68 | 3/8/2017,26.66666667
69 | 3/9/2017,30
70 | 3/10/2017,33.33333333
71 | 3/11/2017,36.66666667
72 | 3/12/2017,44
73 | 3/13/2017,47.66666667
74 | 3/14/2017,51.33333333
75 | 3/15/2017,55
76 | 3/16/2017,58.66666667
77 | 3/17/2017,62.33333333
78 | 3/18/2017,66
79 | 3/19/2017,76
80 | 3/20/2017,80
81 | 3/21/2017,84
82 | 3/22/2017,88
83 | 3/23/2017,92
84 | 3/24/2017,96
85 | 3/25/2017,100
86 | 3/26/2017,112.6666667
87 | 3/27/2017,117
88 | 3/28/2017,121.3333333
89 | 3/29/2017,125.6666667
90 | 3/30/2017,130
91 | 3/31/2017,134.3333333
92 | 4/1/2017,3.25
93 | 4/2/2017,7
94 | 4/3/2017,10.5
95 | 4/4/2017,14
96 | 4/5/2017,17.5
97 | 4/6/2017,21
98 | 4/7/2017,24.5
99 | 4/8/2017,28
100 | 4/9/2017,33.75
101 | 4/10/2017,37.5
102 | 4/11/2017,41.25
103 | 4/12/2017,45
104 | 4/13/2017,48.75
105 | 4/14/2017,52.5
106 | 4/15/2017,56.25
107 | 4/16/2017,64
108 | 4/17/2017,68
109 | 4/18/2017,72
110 | 4/19/2017,76
111 | 4/20/2017,80
112 | 4/21/2017,84
113 | 4/22/2017,88
114 | 4/23/2017,97.75
115 | 4/24/2017,102
116 | 4/25/2017,106.25
117 | 4/26/2017,110.5
118 | 4/27/2017,114.75
119 | 4/28/2017,119
120 | 4/29/2017,123.25
121 | 4/30/2017,135
122 | 5/1/2017,3.6
123 | 5/2/2017,7.2
124 | 5/3/2017,10.8
125 | 5/4/2017,14.4
126 | 5/5/2017,18
127 | 5/6/2017,21.6
128 | 5/7/2017,26.6
129 | 5/8/2017,30.4
130 | 5/9/2017,34.2
131 | 5/10/2017,38
132 | 5/11/2017,41.8
133 | 5/12/2017,45.6
134 | 5/13/2017,49.4
135 | 5/14/2017,56
136 | 5/15/2017,60
137 | 5/16/2017,64
138 | 5/17/2017,68
139 | 5/18/2017,72
140 | 5/19/2017,76
141 | 5/20/2017,80
142 | 5/21/2017,88.2
143 | 5/22/2017,92.4
144 | 5/23/2017,96.6
145 | 5/24/2017,100.8
146 | 5/25/2017,105
147 | 5/26/2017,109.2
148 | 5/27/2017,113.4
149 | 5/28/2017,123.2
150 | 5/29/2017,127.6
151 | 5/30/2017,132
152 | 5/31/2017,136.4
153 | 6/1/2017,3.666666667
154 | 6/2/2017,7.333333333
155 | 6/3/2017,11
156 | 6/4/2017,15.33333333
157 | 6/5/2017,19.16666667
158 | 6/6/2017,23
159 | 6/7/2017,26.83333333
160 | 6/8/2017,30.66666667
161 | 6/9/2017,34.5
162 | 6/10/2017,38.33333333
163 | 6/11/2017,44
164 | 6/12/2017,48
165 | 6/13/2017,52
166 | 6/14/2017,56
167 | 6/15/2017,60
168 | 6/16/2017,64
169 | 6/17/2017,68
170 | 6/18/2017,75
171 | 6/19/2017,79.16666667
172 | 6/20/2017,83.33333333
173 | 6/21/2017,87.5
174 | 6/22/2017,91.66666667
175 | 6/23/2017,95.83333333
176 | 6/24/2017,100
177 | 6/25/2017,108.3333333
178 | 6/26/2017,112.6666667
179 | 6/27/2017,117
180 | 6/28/2017,121.3333333
181 | 6/29/2017,125.6666667
182 | 6/30/2017,130
183 | 7/1/2017,3.714285714
184 | 7/2/2017,7.714285714
185 | 7/3/2017,11.57142857
186 | 7/4/2017,15.42857143
187 | 7/5/2017,19.28571429
188 | 7/6/2017,23.14285714
189 | 7/7/2017,27
190 | 7/8/2017,30.85714286
191 | 7/9/2017,36
192 | 7/10/2017,40
193 | 7/11/2017,44
194 | 7/12/2017,48
195 | 7/13/2017,52
196 | 7/14/2017,56
197 | 7/15/2017,60
198 | 7/16/2017,66.28571429
199 | 7/17/2017,70.42857143
200 | 7/18/2017,74.57142857
201 | 7/19/2017,78.71428571
202 | 7/20/2017,82.85714286
203 | 7/21/2017,87
204 | 7/22/2017,91.14285714
205 | 7/23/2017,98.57142857
206 | 7/24/2017,102.8571429
207 | 7/25/2017,107.1428571
208 | 7/26/2017,111.4285714
209 | 7/27/2017,115.7142857
210 | 7/28/2017,120
211 | 7/29/2017,124.2857143
212 | 7/30/2017,132.8571429
213 | 7/31/2017,137.2857143
214 | 8/1/2017,3.875
215 | 8/2/2017,7.75
216 | 8/3/2017,11.625
217 | 8/4/2017,15.5
218 | 8/5/2017,19.375
219 | 8/6/2017,24
220 | 8/7/2017,28
221 | 8/8/2017,32
222 | 8/9/2017,36
223 | 8/10/2017,40
224 | 8/11/2017,44
225 | 8/12/2017,48
226 | 8/13/2017,53.625
227 | 8/14/2017,57.75
228 | 8/15/2017,61.875
229 | 8/16/2017,66
230 | 8/17/2017,70.125
231 | 8/18/2017,74.25
232 | 8/19/2017,78.375
233 | 8/20/2017,85
234 | 8/21/2017,89.25
235 | 8/22/2017,93.5
236 | 8/23/2017,97.75
237 | 8/24/2017,102
238 | 8/25/2017,106.25
239 | 8/26/2017,110.5
240 | 8/27/2017,118.125
241 | 8/28/2017,122.5
242 | 8/29/2017,126.875
243 | 8/30/2017,131.25
244 | 8/31/2017,135.625
245 | 9/1/2017,3.888888889
246 | 9/2/2017,7.777777778
247 | 9/3/2017,12
248 | 9/4/2017,16
249 | 9/5/2017,20
250 | 9/6/2017,24
251 | 9/7/2017,28
252 | 9/8/2017,32
253 | 9/9/2017,36
254 | 9/10/2017,41.11111111
255 | 9/11/2017,45.22222222
256 | 9/12/2017,49.33333333
257 | 9/13/2017,53.44444444
258 | 9/14/2017,57.55555556
259 | 9/15/2017,61.66666667
260 | 9/16/2017,65.77777778
261 | 9/17/2017,71.77777778
262 | 9/18/2017,76
263 | 9/19/2017,80.22222222
264 | 9/20/2017,84.44444444
265 | 9/21/2017,88.66666667
266 | 9/22/2017,92.88888889
267 | 9/23/2017,97.11111111
268 | 9/24/2017,104
269 | 9/25/2017,108.3333333
270 | 9/26/2017,112.6666667
271 | 9/27/2017,117
272 | 9/28/2017,121.3333333
273 | 9/29/2017,125.6666667
274 | 9/30/2017,130
275 | 10/1/2017,4
276 | 10/2/2017,8
277 | 10/3/2017,12
278 | 10/4/2017,16
279 | 10/5/2017,20
280 | 10/6/2017,24
281 | 10/7/2017,28
282 | 10/8/2017,32.8
283 | 10/9/2017,36.9
284 | 10/10/2017,41
285 | 10/11/2017,45.1
286 | 10/12/2017,49.2
287 | 10/13/2017,53.3
288 | 10/14/2017,57.4
289 | 10/15/2017,63
290 | 10/16/2017,67.2
291 | 10/17/2017,71.4
292 | 10/18/2017,75.6
293 | 10/19/2017,79.8
294 | 10/20/2017,84
295 | 10/21/2017,88.2
296 | 10/22/2017,94.6
297 | 10/23/2017,98.9
298 | 10/24/2017,103.2
299 | 10/25/2017,107.5
300 | 10/26/2017,111.8
301 | 10/27/2017,116.1
302 | 10/28/2017,120.4
303 | 10/29/2017,127.6
304 | 10/30/2017,132
305 | 10/31/2017,136.4
306 | 11/1/2017,4
307 | 11/2/2017,8
308 | 11/3/2017,12
309 | 11/4/2017,16
310 | 11/5/2017,20.45454545
311 | 11/6/2017,24.54545455
312 | 11/7/2017,28.63636364
313 | 11/8/2017,32.72727273
314 | 11/9/2017,36.81818182
315 | 11/10/2017,40.90909091
316 | 11/11/2017,45
317 | 11/12/2017,50.18181818
318 | 11/13/2017,54.36363636
319 | 11/14/2017,58.54545455
320 | 11/15/2017,62.72727273
321 | 11/16/2017,66.90909091
322 | 11/17/2017,71.09090909
323 | 11/18/2017,75.27272727
324 | 11/19/2017,81.18181818
325 | 11/20/2017,85.45454545
326 | 11/21/2017,89.72727273
327 | 11/22/2017,94
328 | 11/23/2017,98.27272727
329 | 11/24/2017,102.5454545
330 | 11/25/2017,106.8181818
331 | 11/26/2017,113.4545455
332 | 11/27/2017,117.8181818
333 | 11/28/2017,122.1818182
334 | 11/29/2017,126.5454545
335 | 11/30/2017,130.9090909
336 | 12/1/2017,4
337 | 12/2/2017,8
338 | 12/3/2017,12.25
339 | 12/4/2017,16.33333333
340 | 12/5/2017,20.41666667
341 | 12/6/2017,24.5
342 | 12/7/2017,28.58333333
343 | 12/8/2017,32.66666667
344 | 12/9/2017,36.75
345 | 12/10/2017,41.66666667
346 | 12/11/2017,45.83333333
347 | 12/12/2017,50
348 | 12/13/2017,54.16666667
349 | 12/14/2017,58.33333333
350 | 12/15/2017,62.5
351 | 12/16/2017,66.66666667
352 | 12/17/2017,72.25
353 | 12/18/2017,76.5
354 | 12/19/2017,80.75
355 | 12/20/2017,85
356 | 12/21/2017,89.25
357 | 12/22/2017,93.5
358 | 12/23/2017,97.75
359 | 12/24/2017,104
360 | 12/25/2017,108.3333333
361 | 12/26/2017,112.6666667
362 | 12/27/2017,117
363 | 12/28/2017,121.3333333
364 | 12/29/2017,125.6666667
365 | 12/30/2017,130
366 | 12/31/2017,136.9166667
367 | 1/1/2018,1
368 | 1/2/2018,2
369 | 1/3/2018,3
370 | 1/4/2018,4
371 | 1/5/2018,5
372 | 1/6/2018,6
373 | 1/7/2018,14
374 | 1/8/2018,16
375 | 1/9/2018,18
376 | 1/10/2018,20
377 | 1/11/2018,22
378 | 1/12/2018,24
379 | 1/13/2018,26
380 | 1/14/2018,42
381 | 1/15/2018,45
382 | 1/16/2018,48
383 | 1/17/2018,51
384 | 1/18/2018,54
385 | 1/19/2018,57
386 | 1/20/2018,60
387 | 1/21/2018,84
388 | 1/22/2018,88
389 | 1/23/2018,92
390 | 1/24/2018,96
391 | 1/25/2018,100
392 | 1/26/2018,104
393 | 1/27/2018,108
394 | 1/28/2018,140
395 | 1/29/2018,145
396 | 1/30/2018,150
397 | 1/31/2018,155
398 | 2/1/2018,2.5
399 | 2/2/2018,5
400 | 2/3/2018,7.5
401 | 2/4/2018,12
402 | 2/5/2018,15
403 | 2/6/2018,18
404 | 2/7/2018,21
405 | 2/8/2018,24
406 | 2/9/2018,27
407 | 2/10/2018,30
408 | 2/11/2018,38.5
409 | 2/12/2018,42
410 | 2/13/2018,45.5
411 | 2/14/2018,49
412 | 2/15/2018,52.5
413 | 2/16/2018,56
414 | 2/17/2018,59.5
415 | 2/18/2018,72
416 | 2/19/2018,76
417 | 2/20/2018,80
418 | 2/21/2018,84
419 | 2/22/2018,88
420 | 2/23/2018,92
421 | 2/24/2018,96
422 | 2/25/2018,112.5
423 | 2/26/2018,117
424 | 2/27/2018,121.5
425 | 2/28/2018,126
426 | 3/1/2018,3
427 | 3/2/2018,6
428 | 3/3/2018,9
429 | 3/4/2018,13.33333333
430 | 3/5/2018,16.66666667
431 | 3/6/2018,20
432 | 3/7/2018,23.33333333
433 | 3/8/2018,26.66666667
434 | 3/9/2018,30
435 | 3/10/2018,33.33333333
436 | 3/11/2018,40.33333333
437 | 3/12/2018,44
438 | 3/13/2018,47.66666667
439 | 3/14/2018,51.33333333
440 | 3/15/2018,55
441 | 3/16/2018,58.66666667
442 | 3/17/2018,62.33333333
443 | 3/18/2018,72
444 | 3/19/2018,76
445 | 3/20/2018,80
446 | 3/21/2018,84
447 | 3/22/2018,88
448 | 3/23/2018,92
449 | 3/24/2018,96
450 | 3/25/2018,108.3333333
451 | 3/26/2018,112.6666667
452 | 3/27/2018,117
453 | 3/28/2018,121.3333333
454 | 3/29/2018,125.6666667
455 | 3/30/2018,130
456 | 3/31/2018,134.3333333
457 | 4/1/2018,3.5
458 | 4/2/2018,7
459 | 4/3/2018,10.5
460 | 4/4/2018,14
461 | 4/5/2018,17.5
462 | 4/6/2018,21
463 | 4/7/2018,24.5
464 | 4/8/2018,30
465 | 4/9/2018,33.75
466 | 4/10/2018,37.5
467 | 4/11/2018,41.25
468 | 4/12/2018,45
469 | 4/13/2018,48.75
470 | 4/14/2018,52.5
471 | 4/15/2018,60
472 | 4/16/2018,64
473 | 4/17/2018,68
474 | 4/18/2018,72
475 | 4/19/2018,76
476 | 4/20/2018,80
477 | 4/21/2018,84
478 | 4/22/2018,93.5
479 | 4/23/2018,97.75
480 | 4/24/2018,102
481 | 4/25/2018,106.25
482 | 4/26/2018,110.5
483 | 4/27/2018,114.75
484 | 4/28/2018,119
485 | 4/29/2018,130.5
486 | 4/30/2018,135
487 | 5/1/2018,3.6
488 | 5/2/2018,7.2
489 | 5/3/2018,10.8
490 | 5/4/2018,14.4
491 | 5/5/2018,18
492 | 5/6/2018,22.8
493 | 5/7/2018,26.6
494 | 5/8/2018,30.4
495 | 5/9/2018,34.2
496 | 5/10/2018,38
497 | 5/11/2018,41.8
498 | 5/12/2018,45.6
499 | 5/13/2018,52
500 | 5/14/2018,56
501 | 5/15/2018,60
502 | 5/16/2018,64
503 | 5/17/2018,68
504 | 5/18/2018,72
505 | 5/19/2018,76
506 | 5/20/2018,84
507 | 5/21/2018,88.2
508 | 5/22/2018,92.4
509 | 5/23/2018,96.6
510 | 5/24/2018,100.8
511 | 5/25/2018,105
512 | 5/26/2018,109.2
513 | 5/27/2018,118.8
514 | 5/28/2018,123.2
515 | 5/29/2018,127.6
516 | 5/30/2018,132
517 | 5/31/2018,136.4
518 | 6/1/2018,3.666666667
519 | 6/2/2018,7.333333333
520 | 6/3/2018,11.5
521 | 6/4/2018,15.33333333
522 | 6/5/2018,19.16666667
523 | 6/6/2018,23
524 | 6/7/2018,26.83333333
525 | 6/8/2018,30.66666667
526 | 6/9/2018,34.5
527 | 6/10/2018,40
528 | 6/11/2018,44
529 | 6/12/2018,48
530 | 6/13/2018,52
531 | 6/14/2018,56
532 | 6/15/2018,60
533 | 6/16/2018,64
534 | 6/17/2018,70.83333333
535 | 6/18/2018,75
536 | 6/19/2018,79.16666667
537 | 6/20/2018,83.33333333
538 | 6/21/2018,87.5
539 | 6/22/2018,91.66666667
540 | 6/23/2018,95.83333333
541 | 6/24/2018,104
542 | 6/25/2018,108.3333333
543 | 6/26/2018,112.6666667
544 | 6/27/2018,117
545 | 6/28/2018,121.3333333
546 | 6/29/2018,125.6666667
547 | 6/30/2018,130
548 | 7/1/2018,3.857142857
549 | 7/2/2018,7.714285714
550 | 7/3/2018,11.57142857
551 | 7/4/2018,15.42857143
552 | 7/5/2018,19.28571429
553 | 7/6/2018,23.14285714
554 | 7/7/2018,27
555 | 7/8/2018,32
556 | 7/9/2018,36
557 | 7/10/2018,40
558 | 7/11/2018,44
559 | 7/12/2018,48
560 | 7/13/2018,52
561 | 7/14/2018,56
562 | 7/15/2018,62.14285714
563 | 7/16/2018,66.28571429
564 | 7/17/2018,70.42857143
565 | 7/18/2018,74.57142857
566 | 7/19/2018,78.71428571
567 | 7/20/2018,82.85714286
568 | 7/21/2018,87
569 | 7/22/2018,94.28571429
570 | 7/23/2018,98.57142857
571 | 7/24/2018,102.8571429
572 | 7/25/2018,107.1428571
573 | 7/26/2018,111.4285714
574 | 7/27/2018,115.7142857
575 | 7/28/2018,120
576 | 7/29/2018,128.4285714
577 | 7/30/2018,132.8571429
578 | 7/31/2018,137.2857143
579 | 8/1/2018,3.875
580 | 8/2/2018,7.75
581 | 8/3/2018,11.625
582 | 8/4/2018,15.5
583 | 8/5/2018,20
584 | 8/6/2018,24
585 | 8/7/2018,28
586 | 8/8/2018,32
587 | 8/9/2018,36
588 | 8/10/2018,40
589 | 8/11/2018,44
590 | 8/12/2018,49.5
591 | 8/13/2018,53.625
592 | 8/14/2018,57.75
593 | 8/15/2018,61.875
594 | 8/16/2018,66
595 | 8/17/2018,70.125
596 | 8/18/2018,74.25
597 | 8/19/2018,80.75
598 | 8/20/2018,85
599 | 8/21/2018,89.25
600 | 8/22/2018,93.5
601 | 8/23/2018,97.75
602 | 8/24/2018,102
603 | 8/25/2018,106.25
604 | 8/26/2018,113.75
605 | 8/27/2018,118.125
606 | 8/28/2018,122.5
607 | 8/29/2018,126.875
608 | 8/30/2018,131.25
609 | 8/31/2018,135.625
610 | 9/1/2018,3.888888889
611 | 9/2/2018,8
612 | 9/3/2018,12
613 | 9/4/2018,16
614 | 9/5/2018,20
615 | 9/6/2018,24
616 | 9/7/2018,28
617 | 9/8/2018,32
618 | 9/9/2018,37
619 | 9/10/2018,41.11111111
620 | 9/11/2018,45.22222222
621 | 9/12/2018,49.33333333
622 | 9/13/2018,53.44444444
623 | 9/14/2018,57.55555556
624 | 9/15/2018,61.66666667
625 | 9/16/2018,67.55555556
626 | 9/17/2018,71.77777778
627 | 9/18/2018,76
628 | 9/19/2018,80.22222222
629 | 9/20/2018,84.44444444
630 | 9/21/2018,88.66666667
631 | 9/22/2018,92.88888889
632 | 9/23/2018,99.66666667
633 | 9/24/2018,104
634 | 9/25/2018,108.3333333
635 | 9/26/2018,112.6666667
636 | 9/27/2018,117
637 | 9/28/2018,121.3333333
638 | 9/29/2018,125.6666667
639 | 9/30/2018,133.3333333
640 | 10/1/2018,4
641 | 10/2/2018,8
642 | 10/3/2018,12
643 | 10/4/2018,16
644 | 10/5/2018,20
645 | 10/6/2018,24
646 | 10/7/2018,28.7
647 | 10/8/2018,32.8
648 | 10/9/2018,36.9
649 | 10/10/2018,41
650 | 10/11/2018,45.1
651 | 10/12/2018,49.2
652 | 10/13/2018,53.3
653 | 10/14/2018,58.8
654 | 10/15/2018,63
655 | 10/16/2018,67.2
656 | 10/17/2018,71.4
657 | 10/18/2018,75.6
658 | 10/19/2018,79.8
659 | 10/20/2018,84
660 | 10/21/2018,90.3
661 | 10/22/2018,94.6
662 | 10/23/2018,98.9
663 | 10/24/2018,103.2
664 | 10/25/2018,107.5
665 | 10/26/2018,111.8
666 | 10/27/2018,116.1
667 | 10/28/2018,123.2
668 | 10/29/2018,127.6
669 | 10/30/2018,132
670 | 10/31/2018,136.4
671 | 11/1/2018,4
672 | 11/2/2018,8
673 | 11/3/2018,12
674 | 11/4/2018,16.36363636
675 | 11/5/2018,20.45454545
676 | 11/6/2018,24.54545455
677 | 11/7/2018,28.63636364
678 | 11/8/2018,32.72727273
679 | 11/9/2018,36.81818182
680 | 11/10/2018,40.90909091
681 | 11/11/2018,46
682 | 11/12/2018,50.18181818
683 | 11/13/2018,54.36363636
684 | 11/14/2018,58.54545455
685 | 11/15/2018,62.72727273
686 | 11/16/2018,66.90909091
687 | 11/17/2018,71.09090909
688 | 11/18/2018,76.90909091
689 | 11/19/2018,81.18181818
690 | 11/20/2018,85.45454545
691 | 11/21/2018,89.72727273
692 | 11/22/2018,94
693 | 11/23/2018,98.27272727
694 | 11/24/2018,102.5454545
695 | 11/25/2018,109.0909091
696 | 11/26/2018,113.4545455
697 | 11/27/2018,117.8181818
698 | 11/28/2018,122.1818182
699 | 11/29/2018,126.5454545
700 | 11/30/2018,130.9090909
701 | 12/1/2018,4
702 | 12/2/2018,8.166666667
703 | 12/3/2018,12.25
704 | 12/4/2018,16.33333333
705 | 12/5/2018,20.41666667
706 | 12/6/2018,24.5
707 | 12/7/2018,28.58333333
708 | 12/8/2018,32.66666667
709 | 12/9/2018,37.5
710 | 12/10/2018,41.66666667
711 | 12/11/2018,45.83333333
712 | 12/12/2018,50
713 | 12/13/2018,54.16666667
714 | 12/14/2018,58.33333333
715 | 12/15/2018,62.5
716 | 12/16/2018,68
717 | 12/17/2018,72.25
718 | 12/18/2018,76.5
719 | 12/19/2018,80.75
720 | 12/20/2018,85
721 | 12/21/2018,89.25
722 | 12/22/2018,93.5
723 | 12/23/2018,99.66666667
724 | 12/24/2018,104
725 | 12/25/2018,108.3333333
726 | 12/26/2018,112.6666667
727 | 12/27/2018,117
728 | 12/28/2018,121.3333333
729 | 12/29/2018,125.6666667
730 | 12/30/2018,132.5
731 | 12/31/2018,136.9166667
732 | 1/1/2019,3
733 | 1/2/2019,6
734 | 1/3/2019,9
735 | 1/4/2019,12
736 | 1/5/2019,16.66666667
737 | 1/6/2019,20
738 | 1/7/2019,23.33333333
739 | 1/8/2019,26.66666667
740 | 1/9/2019,30
741 | 1/10/2019,33.33333333
742 | 1/11/2019,36.66666667
743 | 1/12/2019,44
744 | 1/13/2019,47.66666667
745 | 1/14/2019,51.33333333
746 | 1/15/2019,55
747 | 1/16/2019,58.66666667
748 | 1/17/2019,62.33333333
749 | 1/18/2019,66
750 | 1/19/2019,76
751 | 1/20/2019,80
752 | 1/21/2019,84
753 | 1/22/2019,88
754 | 1/23/2019,92
755 | 1/24/2019,96
756 | 1/25/2019,100
757 | 1/26/2019,112.6666667
758 | 1/27/2019,117
759 | 1/28/2019,121.3333333
760 | 1/29/2019,125.6666667
761 | 1/30/2019,130
762 | 1/31/2019,134.3333333
763 | 2/1/2019,3.25
764 | 2/2/2019,7
765 | 2/3/2019,10.5
766 | 2/4/2019,14
767 | 2/5/2019,17.5
768 | 2/6/2019,21
769 | 2/7/2019,24.5
770 | 2/8/2019,28
771 | 2/9/2019,33.75
772 | 2/10/2019,37.5
773 | 2/11/2019,41.25
774 | 2/12/2019,45
775 | 2/13/2019,48.75
776 | 2/14/2019,52.5
777 | 2/15/2019,56.25
778 | 2/16/2019,64
779 | 2/17/2019,68
780 | 2/18/2019,72
781 | 2/19/2019,76
782 | 2/20/2019,80
783 | 2/21/2019,84
784 | 2/22/2019,88
785 | 2/23/2019,97.75
786 | 2/24/2019,102
787 | 2/25/2019,106.25
788 | 2/26/2019,110.5
789 | 2/27/2019,114.75
790 | 2/28/2019,119
791 | 3/1/2019,123.25
792 | 3/2/2019,135
793 |
--------------------------------------------------------------------------------
/Ch3/Chapter03.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch3/Chapter03.pbix
--------------------------------------------------------------------------------
/Ch3/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch3/Timezones.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch3/Timezones.csv
--------------------------------------------------------------------------------
/Ch4/Chapter04.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch4/Chapter04.pbix
--------------------------------------------------------------------------------
/Ch4/R01_DynamicSlicerTitle1.txt:
--------------------------------------------------------------------------------
1 | Dynamic Slicer Title1 =
2 | VAR __ALLTEXT = "All"
3 | VAR __NONETEXT = "No"
4 | VAR __DIRECTFILTERPRETEXT = "You have chosen "
5 | VAR __CROSSFILTERPRETEXT = "You have filtered down to "
6 | VAR __POSTTEXT = " brand(s)."
7 | VAR __CONCATENATE_TEXT = ", "
8 | VAR __LASTCONCATENATE_TEXT = " and "
9 | VAR __TOOMANY_PRETEXT = " and "
10 | VAR __TOOMANY_POSTTEXT = " more"
11 | VAR __USEPERCENT = FALSE()
12 | VAR __PERCENTTEXT = " of"
13 | VAR __PERCENTZEROTEXT = "0.00%"
14 | VAR __USEMULTIPLECOUNT = FALSE()
15 | VAR __USEMULTIPLECOUNTEXTENDED = FALSE()
16 | VAR __USEMULTIPLECOUNTEXTENDEDTEXT = " of "
17 | VAR __USESIMPLEMULTIPLETEXT = FALSE()
18 | VAR __SIMPLEMULTIPLETEXT = "Multiple"
19 | VAR __TOOMANY_MAX = 4
20 | VAR __TOTAL_ROWS = COUNTROWS(DISTINCT(ALL('R01_Table'[Brand])))
21 | VAR __CURRENT_ROWS = COUNTROWS(DISTINCT('R01_Table'[Brand]))
22 | VAR __MAINTEXT =
23 | IF(
24 | __USEPERCENT,
25 | VAR __PERCENT = DIVIDE(__CURRENT_ROWS,__TOTAL_ROWS,0)
26 | RETURN
27 | IF(
28 | ISBLANK(__PERCENT),
29 | __PERCENTZEROTEXT & __PERCENTTEXT,
30 | FORMAT(__PERCENT,"Percent") & __PERCENTTEXT
31 | ),
32 | SWITCH(
33 | TRUE(),
34 | __CURRENT_ROWS = __TOTAL_ROWS,__ALLTEXT,
35 | __CURRENT_ROWS = 0 ,__NONETEXT,
36 | __CURRENT_ROWS = 1 , MAX('R01_Table'[Brand]),
37 | __CURRENT_ROWS < __TOOMANY_MAX,
38 | CONCATENATEX(
39 | TOPN(__CURRENT_ROWS - 1,DISTINCT('R01_Table'[Brand])),
40 | [Brand],
41 | __CONCATENATE_TEXT
42 | ) &
43 | __LASTCONCATENATE_TEXT &
44 | LASTNONBLANK(DISTINCT('R01_Table'[Brand]),TRUE()),
45 | IF(
46 | __USESIMPLEMULTIPLETEXT,
47 | __SIMPLEMULTIPLETEXT,
48 | IF(
49 | __USEMULTIPLECOUNT,
50 | IF(
51 | __USEMULTIPLECOUNTEXTENDED,
52 | __CURRENT_ROWS & __USEMULTIPLECOUNTEXTENDEDTEXT & __TOTAL_ROWS,
53 | __CURRENT_ROWS
54 | ),
55 | VAR __OVERAGE = __CURRENT_ROWS - __TOOMANY_MAX + 1
56 | RETURN
57 | CONCATENATEX(
58 | TOPN(__TOOMANY_MAX - 1,DISTINCT('R01_Table'[Brand])),
59 | [Brand],
60 | __CONCATENATE_TEXT
61 | ) & __TOOMANY_PRETEXT & __OVERAGE & __TOOMANY_POSTTEXT
62 | )
63 | )
64 | )
65 | )
66 | VAR __PRETEXT =
67 | IF(
68 | ISFILTERED('R01_Table'[Brand]),
69 | __DIRECTFILTERPRETEXT,
70 | IF(
71 | ISCROSSFILTERED('R01_Table'[Brand]),
72 | __CROSSFILTERPRETEXT,
73 | BLANK()
74 | )
75 | )
76 | RETURN __PRETEXT & __MAINTEXT & __POSTTEXT
--------------------------------------------------------------------------------
/Ch4/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch5/Chapter05.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch5/Chapter05.pbix
--------------------------------------------------------------------------------
/Ch5/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch6/Chapter06.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch6/Chapter06.pbix
--------------------------------------------------------------------------------
/Ch6/R03_RecoveredCustomers.txt:
--------------------------------------------------------------------------------
1 | Recovered Customers =
2 | VAR __Threshold = 1
3 | VAR __ThresholdUnit = "YEARS"
4 | VAR __Month = MAX('R03_Dates'[Month])
5 | VAR __Year = MAX('R03_Dates'[Year])
6 | VAR __MonthStart = DATE(__Year, __Month, 1)
7 | VAR __MonthEnd = MAX('R03_Dates'[Date])
8 | VAR __PreviousCustomers =
9 | SUMMARIZE(
10 | FILTER(
11 | 'R03_Table',
12 | [Date] < __MonthStart
13 | ),
14 | [Customer],
15 | "__FirstPurchase",MIN([Date]),
16 | "__LastPurchase",MAX([Date])
17 | )
18 | VAR __PreviousCustomers1 =
19 | ADDCOLUMNS(
20 | FILTER(
21 | __PreviousCustomers,
22 | MONTH([__FirstPurchase]) <> __Month && YEAR([__FirstPurchase]) <> __Year
23 | ),
24 | "__LostDate",
25 | SWITCH(
26 | __ThresholdUnit,
27 | "DAYS",[__LastPurchase] + __Threshold,
28 | "MONTHS",EOMONTH([__LastPurchase],__Threshold),
29 | "YEARS",DATE(YEAR([__LastPurchase]) + __Threshold,MONTH([__LastPurchase]),1)
30 | )
31 | )
32 | VAR __LostCustomers =
33 | DISTINCT(
34 | SELECTCOLUMNS(
35 | FILTER(
36 | __PreviousCustomers1,
37 | [__LostDate] < __MonthStart
38 | ),
39 | "__Customer",[Customer]
40 | )
41 | )
42 | VAR __CurrentCustomers =
43 | DISTINCT(
44 | SELECTCOLUMNS(
45 | FILTER('R03_Table',
46 | [Date] >= __MonthStart &&
47 | [Date] <= __MonthEnd
48 | ),
49 | "__Customer",[Customer]
50 | )
51 | )
52 | VAR __RecoveredCustomers =
53 | ADDCOLUMNS(
54 | __LostCustomers,
55 | "__IsCurrent",[__Customer] IN __CurrentCustomers
56 | )
57 | RETURN
58 | COUNTROWS(FILTER(__RecoveredCustomers,[__IsCurrent] = TRUE()))
--------------------------------------------------------------------------------
/Ch6/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch7/Chapter07.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch7/Chapter07.pbix
--------------------------------------------------------------------------------
/Ch7/R04_EmploymentCosts.txt:
--------------------------------------------------------------------------------
1 | Employment Costs =
2 | VAR __StartPeriod = MIN('R04_Calendar'[Date])
3 | VAR __EndPeriod = MAX('R04_Calendar'[Date])
4 | VAR __Year = YEAR(__StartPeriod)
5 | VAR __DaysInYear = DATEDIFF(DATE(__Year,1,1), DATE(__Year,12,31),DAY)+1
6 | VAR __Employees =
7 | ADDCOLUMNS(
8 | ADDCOLUMNS(
9 | ADDCOLUMNS(
10 | FILTER(
11 | 'R04_Table',
12 | [Hire Date] <= __EndPeriod &&
13 | ([Leave Date] >= __StartPeriod ||
14 | [Leave Date] = DATE(9999,1,1)
15 | )
16 | ),
17 | "__MinDate",
18 | IF([Hire Date] > __StartPeriod,
19 | [Hire Date],
20 | __StartPeriod
21 | ),
22 | "__MaxDAte",
23 | IF([Leave Date] < __EndPeriod,
24 | [Leave Date],
25 | __EndPeriod
26 | )
27 | ),
28 | "__DaysInPeriod",([__MaxDate] - [__MinDate]) * 1 + 1
29 | ),
30 | "__TotalCostInPeriod",
31 | [__DaysInPeriod] * [Annual Salary] / __DaysInYear
32 | )
33 | VAR __TotalCostsInPeriod =
34 | SUMX(
35 | __Employees,
36 | [__TotalCostInPeriod]
37 | ) * [Employee Overhead Cost Factor]
38 | RETURN
39 | __TotalCostsInPeriod
--------------------------------------------------------------------------------
/Ch7/R04_FTE.txt:
--------------------------------------------------------------------------------
1 | FTE =
2 | VAR __StartPeriod = MIN('R04_Calendar'[Date])
3 | VAR __EndPeriod = MAX('R04_Calendar'[Date])
4 | VAR __TotalDaysInPeriod = DATEDIFF(__StartPeriod, __EndPeriod,DAY) + 1
5 | VAR __Employees =
6 | ADDCOLUMNS(
7 | ADDCOLUMNS(
8 | FILTER(
9 | 'R04_Table',
10 | [Hire Date] <= __EndPeriod &&
11 | ([Leave Date] >= __StartPeriod ||
12 | [Leave Date] = DATE(9999,1,1)
13 | )
14 | ),
15 | "__MinDate",
16 | IF([Hire Date] > __StartPeriod,
17 | [Hire Date],
18 | __StartPeriod
19 | ),
20 | "__MaxDAte",
21 | IF([Leave Date] < __EndPeriod,
22 | [Leave Date],
23 | __EndPeriod
24 | )
25 | ),
26 | "__DaysInPeriod",([__MaxDate] - [__MinDate]) * 1 + 1
27 | )
28 | VAR __FullTimeEmployees =
29 | COUNTROWS(
30 | FILTER(__Employees,[__DaysInPeriod] = __TotalDaysInPeriod)
31 | )
32 | VAR __PartTimeEmployees =
33 | SUMX(
34 | FILTER(__Employees,[__DaysInPeriod] < __TotalDaysInPeriod),
35 | [__DaysInPeriod]
36 | ) / __TotalDaysInPeriod
37 | RETURN
38 | __FullTimeEmployees + __PartTimeEmployees
--------------------------------------------------------------------------------
/Ch7/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch8/Ch08R01Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch8/Ch08R01Data.xlsx
--------------------------------------------------------------------------------
/Ch8/Chapter08.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch8/Chapter08.pbix
--------------------------------------------------------------------------------
/Ch8/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Ch9/Ch09R02Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Ch09R02Data.xlsx
--------------------------------------------------------------------------------
/Ch9/Ch09R03Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Ch09R03Data.xlsx
--------------------------------------------------------------------------------
/Ch9/Ch09R04Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Ch09R04Data.xlsx
--------------------------------------------------------------------------------
/Ch9/Ch09R05Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Ch09R05Data.xlsx
--------------------------------------------------------------------------------
/Ch9/Ch09R06Data.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Ch09R06Data.xlsx
--------------------------------------------------------------------------------
/Ch9/Chapter09.pbix:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/Ch9/Chapter09.pbix
--------------------------------------------------------------------------------
/Ch9/Readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DAX Cookbook
2 | [DAX Cookbook](https://www.packtpub.com/data/learn-power-bi), published by [Packt](https://www.packtpub.com/)
3 |
4 |
5 |
6 | ## Learn
7 |
DAX provides an extra edge by extracting key information from the data that is already present in your model. Filled with examples of practical, real-world calculations geared toward business metrics and key performance indicators, this cookbook features solutions that you can apply for your own business analysis needs.
17 | 18 |You'll learn to write various DAX expressions and functions to understand how DAX queries work. The book also covers sections on dates, time, and duration to help you deal with working days, time zones, and shifts. You'll then discover how to manipulate text and numbers to create dynamic titles and ranks, and deal with measure totals. Later, you'll explore common business metrics for finance, customers, employees, and projects. The book will also show you how to implement common industry metrics such as days of supply, mean time between failure, order cycle time and overall equipment effectiveness. In the concluding chapters, you'll learn to apply statistical formulas for covariance, kurtosis, and skewness. Finally, you'll explore advanced DAX patterns for interpolation, inverse aggregators, inverse slicers, and even forecasting with a deseasonalized correlation coefficient.
19 | 20 |By the end of this book, you'll have the skills you need to use DAX's functionality and flexibility in business intelligence and data analytics.
21 | -------------------------------------------------------------------------------- /images/DAXCookbook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/images/DAXCookbook.jpg -------------------------------------------------------------------------------- /images/DAXCookbook2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/images/DAXCookbook2.png -------------------------------------------------------------------------------- /images/DAXCookbookSmall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdeckler/DAXCookbook/1dd13985a9cafed1fe5023b0ec11d2aae9b663aa/images/DAXCookbookSmall.jpg --------------------------------------------------------------------------------