Microsoft SQL Server 2012 Analysis Services: The BISM Tabular Model

Errata for Microsoft SQL Server 2012 Analysis Services: The BISM Tabular Model




The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version
Page 9
6th paragraph

In the sentence "[...] when a requirement for so-called real-time BI HOLAP is almost never used" is a dot missing between BI and HOLAP. These probably should be two sentences.

Note from the Author or Editor:
There is a missing period between "BI" and "HOLAP" in the sixth paragraph. The paragraph should be: MOLAP storage is used in the vast majority of implementations, although ROLAP is sometimes used when a requirement for so-called real-time BI. HOLAP is almost never used.

Sam Jost  Sep 13, 2013 
Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version
Page 21
end of 2nd paragraph

This last part of the second paragraph: in contrast, there are, as we shall soon see, several good reasons for putting the workspace database server on the same machine as your development database. Should be replaced by: in contrast, there are, as we shall soon see, several good reasons for putting the workspace database server on the same machine as your development workstation.

Marco Russo
Marco Russo
O'Reilly Author 
Nov 14, 2012 
Printed
Page 37
Figure 2-16

The diagram of the Options box within SSDT shows "Analysis Services -> Data Modelling" as the route on the left hand side to get to the specific options shown e.g. "Default workspace server". However, my SSDT doesn't look anything like the diagram, and in my SSDT I find these same options via the left side path "Analysis Services Tabular Designers -> Workspace Database". Is this perhaps because the screenshot is based on a CTP version of SSDT as opposed to the RTM version perhaps?

Note from the Author or Editor:
The Figure 2-16 should be updated because latest updates of SSDT changed the user interface. On the left side, instead of "Analysis Services -> Data Modelling" you will find the settings in path "Analysis Services Tabular Designers -> Workspace Database".

Andy Hogg  Aug 02, 2013 
Printed, PDF
Page 40
4th paragraph

the link doesn't work: http://sqlblog.com/blogs/alberto_ferrari/archive/2011/09/27/creating-a-copy-of-a-bismtabular- project.asp it shoud be .. .aspx

Note from the Author or Editor:
The correct link at page 40 in the 4th paragraph should be changed to: http://sqlblog.com/blogs/alberto_ferrari/archive/2011/09/27/creating-a-copy-of-a-bismtabular-project.aspx

Anonymous  Nov 14, 2012 
Printed, PDF, Safari Books Online
Page 52
1st Paragraph

First paragraph says: "...and drag the EnglishDescription column down to below the new Color level to create the bottom level, as shown in Figure 2-32." But, in Figure 2-32, the screenshot shows EnglishProductName as the bottom level of the hierarchy.

Note from the Author or Editor:
Correct - the text should be EnglishProductName instead of EnglishDescription, like you can see in the Figure 2-32.

Ron Pihlgren  Aug 02, 2012  Nov 02, 2012
Printed
Page 132, 133
Pg132 / Table 4-2, Pg133 / Examples for Blank() - after paragraph 6

Pg132 / Table 4-2 Result for "0 / 0" has been mentioned as Infinity however when I am trying the same in local installation of SSAS Tabular, I am getting "NaN" as result Pg133 / Examples for Blank() - after paragraph 6 Result for "Blank() || Blank()" has been mentioned as Blank() however when I am trying the same in local installation of SSAS Tabular, I am getting "False" as result Result for "Blank() && Blank()" has been mentioned as Blank() however when I am trying the same in local installation of SSAS Tabular, I am getting "False" as result -------------------------------------------------------- Tabular Instance Version - Microsoft Analysis Server 11.0.2100.60

Note from the Author or Editor:
You are correct for both pages. Page 132 / Table 4-2 The third row has "0 / 0" in Expression column must have "NaN" value in Result column (instead of current "Infinity") Page 133 The last two examples at the bottom of the page have to be replaced with the following: BLANK() || BLANK() = FALSE BLANK() && BLANK() = FALSE

Pranav  Aug 17, 2012  Nov 02, 2012
Printed, PDF
Page 139
Figure 4.10

Figure 4.10 has a column called "ISO" which, unlike all the other columns in the figure is not mentioned or described in the text. Is that intentional?

Note from the Author or Editor:
It is not really intentional. There is another rounding function that should be added to the list before FIGURE 4-10 in order to match with the figure ISO = ISO.CEILING( Tests[Value], 0.01 )

Ron Pihlgren  Aug 03, 2012  Nov 02, 2012
Printed
Page 158
The third expression from the top of the page

The expression listed in the text: "CalcAmountB := SUMX( FILTER( Orders, Orders[Quantity] > 1 ), Orders[Amount] )" Doesn't match with the descirption a few paragraphs later which says "the Filter function skips just the <Internet, Green, Small> row from the table you saw in Figure 5-12 (which has a price of 1 and is excluded by the filter condition)." I believe the second argument to the Filter function in the formula should be "Orders[Price] > 1" rather than "Orders[Quantity] > 1"

Note from the Author or Editor:
You are right, the condition of FILTER should be Orders[Price] > 1 instaed of Orders[Quantity]. Thanks for reportin this.

Ron Pihlgren  Aug 05, 2012  Nov 02, 2012
Printed, PDF
Page 161
Important-box: 3rd CALCULATE statement

Missing characters ("] * ") in the SUMX expression, that probably should read: SUMX( Orders, Orders[Quantity] * Orders[Price] ),

Note from the Author or Editor:
The third calculate in the Important box at page 161 should be fixed in this way: CALCULATE( SUMX( Orders, Orders[Quantity] * Orders[Price] ), ALL( Orders[Channel] ) )

ErikBo  Feb 07, 2013 
Printed, PDF, ePub
Page 164
First partial paragraph

The function EARLIEST does not accept negative numbers for the second parameter. Your text suggests that passing -1 as the second argument can be used instead of the function EARLIER. From MSDN page on EARLIER (http://msdn.microsoft.com/en-us/library/ee634551.aspx) num (Optional) A positive number to the outer evaluation pass. The next evaluation level out is represented by 1; two levels out is represented by 2 and so on. When omitted default value is 1.

Note from the Author or Editor:
The sentence "You can get the same result of EARLIEST by passing -1 to the second parameter of EARLIER." must be removed. The -1 argument was possible in a previous version but now is no longer allowed.

Marc Temkin  Jul 02, 2013 
Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version
Page 198
Table at the bottom of the page

Column header of the second column should be "Product Category[Product Category Name]" instead of "Product Category[Category Name]"

Note from the Author or Editor:
In the second table of this page, the column header of the second column should be "Product Category[Product Category Name]" instead of "Product Category[Category Name]"

Vinod Jain  Oct 08, 2013 
Printed, PDF, ePub
Page 201-202
Bottom through following page

The formulas refer to Date Id as in Due Date Id and Ship Date Id when I think you mean Due Date or Ship Date. There are no columns named Due Date Id or Ship Date Id in the Adventure Works DW Tabular model.

Note from the Author or Editor:
In page 201 and 202 these names should be replaced in both text and code samples: Due Date Id --> Due Date Ship Date Id --> Ship Date

Marc Temkin  Jul 18, 2013 
Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version
Page 296
Section "Handling Wrong or Missing Dates"

The technique described in the section "Handling Wrong or Missing Dates" generates a Date table that is not compatible with the Time Intelligence functions in DAX. The Date column cannot contain NULL if used in the "Mark as Date Table" feature. A clarification about possible alternative approaches is described in this article: http://www.sqlbi.com/articles/handling-wrong-or-missing-dates-in-tabular

Marco Russo
Marco Russo
O'Reilly Author 
Sep 12, 2013 
Printed
Page 413
2nd Paragraph

The paragraph indicates that there is a location to find the scripts for creating the required tables but the location is missing and the paragraph just ends "you can find the script that adds the required tables here." and then nothing else. What is the location?

Derek Venus  May 31, 2013 
Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version
Page 414
Bottom of page, figure 12-11

With the formula given at page 414 I get a different number than in figure 12-11. The numbers I get are: Christmas Leaflet 15,498,019.44 Christmas TV Spot 17,937,205.26 Easter Leflet 13,770,306.66 Easter TV Spot 20,335,288.02

Note from the Author or Editor:
The numbers produced are different because the screenshot published has been taken using a different set of sample data. The query that populates the tables uses random numbers, so every user will probably see different results, this does not affect the technique, just the numbers shown.

Steini Jonsson  Jun 17, 2013 
PDF
Page 531
The note area after the 2nd paragraph

The text reads: "Note: The Process Recalc operation that is performed within Process Full of a table automatically refreshes all calculated columns in other tables that depend on the table that has been processed. For this reason, Process Full over tables does not depend on the order in which it is executed in different transactions, distinguishing it from the Process Defrag operation." I was wondering whether instead of refering to 'Process Defrag', the intention was actually to refer to Process Default', as this would make more sense base on the explanation of 'Process Default' earlier on in the section.

Note from the Author or Editor:
In the note box the term "Process Defrag" has to be changed to "Process Default" - the correct complete box becomes: Note The Process Recalc operation that is performed within Process Full of a table automatically refreshes all calculated columns in other tables that depend on the table that has been processed. For this reason, Process Full over tables does not depend on the order in which it is executed in different transactions, distinguishing it from the Process Default operation.

Michael Amadi  Jan 17, 2013 
Printed, PDF, ePub
Page 5939
Chapter 7, section "'Using ALLSELECTED for VisualTotals"

I only have the "Kindle" version of the book, so the page number provided is the "location". There is a problem with the large DAX query listed after this sentence: "Instead you must use a special DAX function called ALLSELECTED". When ran the query against AdventureWorksDW it produces the following error: Query (21, 9) The value for column 'Product Category Name' in table 'Product Category' cannot be determined in the current context. Check that all columns referenced in the calculation expression exist, and that there are no circular dependencies. Based on my understanding, the problem is caused by this FILTER condition: FILTER( 'Product Category'[Product Category Name], 'Product Category'[Product Category Name] = "Accessories" || 'Product Category'[Product Category Name] = "Clothing" ) changing it to: ('Product Category'[Product Category Name] = "Accessories" || 'Product Category'[Product Category Name] = "Clothing" ) fixes the issue and the query returns correct results.

Note from the Author or Editor:
You're right. This is at page 255 in the printed book. This part of the query at page 255: FILTER( 'Product Category'[Product Category Name], 'Product Category'[Product Category Name] = "Accessories" || 'Product Category'[Product Category Name] = "Clothing" ) must be replaced by: ('Product Category'[Product Category Name] = "Accessories" || 'Product Category'[Product Category Name] = "Clothing" )

Michael Neymit  Apr 28, 2013