├── 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 | 14 | 15 | ## About 16 |

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 --------------------------------------------------------------------------------