Training Kit (Exam 70-463): Implementing a Data Warehouse with Microsoft SQL Server 2012

Errata for Training Kit (Exam 70-463): Implementing a Data Warehouse with Microsoft SQL Server 2012

Submit your own errata for this product.


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

Note About Companion Content & Sample Databases All of the companion content and sample databases are freely available here for download: http://go.microsoft.com/FWLink/?Linkid=260986 If you cannot access the files, please contact our Customer Service department at msinput@microsoft.com. An earlier version of the companion content web page contained an incorrect URL, which is now fixed. You may need to refresh your browser's cache before the new page will load for you. We are sorry about any confusion caused by our error.

AdamZ  Jan 15, 2013 
Printed
Page xxix
Source Code

The specified link for the source code zip TK70463_CodeLabSolutions.zip is displayed on front page but the link does not provide access to the file, just access to the sample databases.

Note from the Author or Editor:
O'Reilly is informed about this issue and it should be resolved soon. Thank you for reporting. Dejan Sarka You should be able to download the companion content from http://examples.oreilly.com/9780735666092-files/. Thank you for your patience, Dejan Sarka

Anonymous  Dec 22, 2012  Jan 11, 2013
Printed, PDF
Page 9
4th paragraph

"However, in the DimDate dimension, if you know the month, you obviously know the calendar quarter, and if you know the calendar quarter, you know the calendar year." There is a functional dependency between month and quarter. This is NOT true for quarter and year. For example, knowing it is the 2nd quarter does not identify the year, as each and every year has a 2nd quarter.

Note from the Author or Editor:
The last statement in th e4th paragraph reads: However, in the DimDate dimension, if you know the month, you obviously know the calendar quarter, and if you know the calendar quarter, you know the calendar year. It should be: However, in the DimDate dimension, if you know the month, you obviously know the calendar quarter, and if you know the calendar quarter, you know the calendar semester.

Malcolm  Jan 16, 2013 
Printed, PDF
Page 18
3rd paragraph

On page 6, you wrote about using a DW to analyze data by country. "For example, you might have only the latest customer address, which might prevent you from calculating historical sales by country correctly." On page 18, you write about how these values are member properties, rather than attributes (as your previous comment would indicate). "A customer typically has an address, a phone number, and an email address. You do not analyze data on these columns. You do not need them for pivoting." Not a big deal, but a good opportunity to point out the risks in confusing member properties and attributes. In different DWs, they may be different types.

Note from the Author or Editor:
The reader is right, the statement on page 6 could be rephrased for clarification. This is the last statement of the third paragraph on page 6. Instead of: For example, you might have only the latest customer address, which might prevent you from calculating historical sales by country correctly. Should read: For example, you might have only the latest customer address (from which you extract customer's current country), which might prevent you from calculating historical sales by country correctly.

Malcolm  Jan 16, 2013 
Printed, PDF
Page 26
Exercise 2 - 4th bullet

The text refers to a column in the DimSalesReason dimension table named "SalesReasonType", but the column name is actually "SalesReasonReasonType" in the AdventureWorksDW2012 database (and is correctly displayed in the screenshot on p25).

Note from the Author or Editor:
The last sentence of the fourth bullet of Exercise 2 (top of the page) should be modified from "In the DimSalesReason dimension, it seems that there is a natural hierarchy: SalesReasonType ➝ SalesReasonName." to "In the DimSalesReason dimension, it seems that there is a natural hierarchy: SalesReasonReasonType ➝ SalesReasonName.".

Daniel Dittenhafer  May 02, 2013 
PDF
Page 28
5th paragraph, 2nd sentence

In the second sentence, "In addition, the Source Order Details table...", the word "Source" is capitalized and in italics. This makes it appear as if the table name is "Source Order Details". Change the word "Source" to be lower case and not italicized.

Note from the Author or Editor:
The last sentence before table 1-8, which is "In addition, the Source Order Details table has the ProductId foreign key column. The Quantity column is the measure.", should be modified. The word "Source" should no be capitalized and in italics.

truncheon411  May 01, 2013 
PDF
Page 44
MORE INFO Shaded Area

Just wanted to point out that due to word-wrapping the link in the PDF file for the SQLCAT Whitepaper doesn't work. There's a space between "06" and "/" which results in a not-found error on the SQLCAT Web Site. If you remove the space from the URL in your web browser it works. Perhaps you could replace the super-long hyperlink with a shortened version?

Note from the Author or Editor:
Thank you for the observation. However, as the book template does not anticipate shortened URLs, we cannot do much now. A note to the publisher.

Zack Jones  Apr 08, 2013 
Printed, PDF
Page 51
Exercise 2, Item 2

This is a minor tweak to a great exercise, in a very helpful introductory chapter. The calculation for Age Age AS CASE WHEN DATEDIFF(yy, BirthDate, CURRENT_TIMESTAMP) <= 40 THEN 'Younger' WHEN DATEDIFF(yy, BirthDate, CURRENT_TIMESTAMP) > 50 THEN 'Older' ELSE 'Middle Age' END does not really deal with NULL values for BirthDate. Regardless of whether there are NULL values currently in the data, the BirthDate field allows them, so the code should be prepared to deal with them. Age AS CASE WHEN BirthDate IS NULL THEN NULL WHEN DATEDIFF(yy,BirthDate,CURRENT_TIMESTAMP) > 50 THEN 'Older' WHEN DATEDIFF(yy,BirthDate,CURRENT_TIMESTAMP) > 40 THEN 'Middle Age' ELSE 'Younger' END

Note from the Author or Editor:
I agree with the reader. Just to make clear what needs the change: the code starts on page 49, at the bottom, bullet 2. The complete code for creating the dbo.Customers table, which spans over page 51 as well, is now: CREATE TABLE dbo.Customers ( CustomerDwKey INT NOT NULL, CustomerKey INT NOT NULL, FullName NVARCHAR(150) NULL, EmailAddress NVARCHAR(50) NULL, BirthDate DATE NULL, MaritalStatus NCHAR(1) NULL, Gender NCHAR(1) NULL, Education NVARCHAR(40) NULL, Occupation NVARCHAR(100) NULL, City NVARCHAR(30) NULL, StateProvince NVARCHAR(50) NULL, CountryRegion NVARCHAR(50) NULL, Age AS CASE WHEN DATEDIFF(yy, BirthDate, CURRENT_TIMESTAMP) <= 40 THEN 'Younger' WHEN DATEDIFF(yy, BirthDate, CURRENT_TIMESTAMP) > 50 THEN 'Older' ELSE 'Middle Age' END, CurrentFlag BIT NOT NULL DEFAULT 1, CONSTRAINT PK_Customers PRIMARY KEY (CustomerDwKey) ); and it should be changed to: CREATE TABLE dbo.Customers ( CustomerDwKey INT NOT NULL, CustomerKey INT NOT NULL, FullName NVARCHAR(150) NULL, EmailAddress NVARCHAR(50) NULL, BirthDate DATE NULL, MaritalStatus NCHAR(1) NULL, Gender NCHAR(1) NULL, Education NVARCHAR(40) NULL, Occupation NVARCHAR(100) NULL, City NVARCHAR(30) NULL, StateProvince NVARCHAR(50) NULL, CountryRegion NVARCHAR(50) NULL, Age AS CASE WHEN BirthDate IS NULL THEN NULL WHEN DATEDIFF(yy,BirthDate,CURRENT_TIMESTAMP) > 50 THEN 'Older' WHEN DATEDIFF(yy,BirthDate,CURRENT_TIMESTAMP) > 40 THEN 'Middle Age' ELSE 'Younger' END CurrentFlag BIT NOT NULL DEFAULT 1, CONSTRAINT PK_Customers PRIMARY KEY (CustomerDwKey) ); GO

Malcolm  Jan 18, 2013 
Printed, PDF, ePub
Page 52
Exercise 3 Create a Fact Table

The text has: "In this example, you cannot use all foreign keys together as a composite primary key ... and the primary key would be duplicated. You could use ... however, in order to show how you can autonumber a column with the IDENTITY property, this exercise has you add your own integer column with this property. This will be your surrogate key. CREATE TABLE dbo.InternetSales ( InternetSalesKey INT NOT NULL IDENTITY(1,1), CustomerDwKey INT NOT NULL, ProductKey INT NOT NULL, DateKey INT NOT NULL, OrderQuantity SMALLINT NOT NULL DEFAULT 0, SalesAmount MONEY NOT NULL DEFAULT 0, UnitPrice MONEY NOT NULL DEFAULT 0, DiscountAmount FLOAT NOT NULL DEFAULT 0, CONSTRAINT PK_InternetSales PRIMARY KEY (InternetSalesKey) );" But FIGURE 2-1 does not have InternetSalesKey as a column of the InternetSale table and shows CustomerDwKey, ProductKey, and DateKey as the primary key.

Note from the Author or Editor:
I already sent the corrected figure to the publisher.

Anil Das  Apr 25, 2013 
Printed
Page 60
Last Paragraph above Shaded NOte area

The first sentence starts out with "The query returns 6343 rows..." Actually it returns 6434. This can be confirmed by running the following: Select count(*) from dbo.FactInternetSales where CustomerKey <= 12000; The result of that query is 6434. Also not that it really matters but my logical read counts are significanty different than yours: FactInternetSales logical reads - 4534 DimCustomer logical reads - 196 Worktable logical reads - 21314 What could cause such big differences?

Note from the Author or Editor:
The beginning of the first sentence of the last paragraph before the note should be modified from "The query returns 6,343 rows and performs..." to "The query returns 6,434 rows and performs...". About different numbers for logical IO: you cannot guarantee that you would always get the same execution plan. This depends on your HW, database settings, indexes and more. There is actually a note at the bottom of the page: "Note Number of Logical Reads You might get slightly different numbers for logical reads; nevertheless, you should get many more logical reads from the first query than from the second query." The important thing here is that you definitely should get less logical reads from the second query, which uses the Window functions.

Zack Jones  Apr 10, 2013 
Printed
Page 63
2nd paragraph

View 'sys.column_store_index_stats' no longer exists

Note from the Author or Editor:
Yes, the reader is right, the view was removed in RTM. It was still there in CTP3 when I wrote the chapter. The second paragraph of the page should be changed from "There are three new catalog views you can use to gather information about columnstore indexes: &#9632;&#9632; sys.column_store_index_stats &#9632;&#9632; sys.column_store_segments &#9632;&#9632; sys.column_store_dictionaries" to "There are two new catalog views you can use to gather information about columnstore indexes: &#9632;&#9632; sys.column_store_segments &#9632;&#9632; sys.column_store_dictionaries"

Anonymous  Apr 01, 2013 
PDF
Page 64
Quick Check frame

Under Quick Check Answers there is a little typo: 2. No, you should use age compression only for data warehousing environments. Should be page compression since I am not aware of age compression yet.

Note from the Author or Editor:
The second answer in the Quick Check section should be changed from: 2. No, you should use age compression only for data warehousing environments. to: 2. No, you should use page compression only for data warehousing environments.

Lars Utterström  Jan 10, 2013 
Printed
Page 68
Exercise 2 Steps 1, 3, and 8

The @updateusage parameter of the system stored procedure sp_spacedused is a varchar datatype not nvarchar so all references to @updateusage = N'TRUE' should be changed to @updateusage='TRUE'

Note from the Author or Editor:
I checked, and this is correct. The sys.sp_spaceused system procedure's second parameter, the @updateusage parameter, is VARCHAR(5) data type. However, it seems to me that this is an inconsistency from MS. Nevertheless, the error is really minor, so I guess it makes no sense to change it all over the chapter.

Zack Jones  Apr 11, 2013 
Printed
Page 74
Step 5

Step 5 tells us to recreate the dbo.Internetsales table. Because it already exists the statement will fail. Before you can recreate it you must first drop it. Recommend adding a step between 4 and 5 that tells the reader to drop internetsales before trying to recreate it.

Note from the Author or Editor:
Actually, step 2 says to drop the table, so this is not an error. However, there is a real error in step 5, which reads: "5. Re-create the FactInternetSales table." This first sentence shoul be changed to "5. Re-create the InternetSales table."

Zack Jones  Apr 11, 2013 
PDF
Page 89
Planning a Simple Data Movement

Planning a Simple Data Movement To determine whether the and Export Wizard is the right tool for a particular data movement, ask yourself a few simple questions Maybe the word Import have fallen out and should be added as the 5th word in that sentence.

Note from the Author or Editor:
Thank you for reporting this. You are correct; the sentence should read: To determine whether the Import and Export Wizard is the right tool for a particular data movement, ask yourself a few simple questions ML

Lars Utterstrom  Jan 16, 2013 
PDF
Page 99,100
last section

Lesson 1 Review Question 1 and Lesson 1 Review Question 2 lack the standard text, "(Choose all that apply.)". In the answer section, both questions have more than one answer specified as a solution. This is misleading to the reader. Add the standard text to both questions 1 and 2.

Note from the Author or Editor:
Add the text "(Choose all that apply.)" to the end of questions 1 and 2 of Lesson 1 Review. ML

truncheon411  May 03, 2013 
Printed
Page 124
Lesson Review Question 1

Answer to review question 1. is "A, B" Possibly should include "C" also as the SQL Task Editor is not just 'a text box into which you type or paste an SQL statement', it comes with its own query builder which can be used to both develop and test SQL statements.

Note from the Author or Editor:
"Execute SQL Task Editor" should be replaced with "Execute T-SQL Statement Task Editor" on the following pages: 1) Page 124, Question 1, Answer C; and 2) Page 127, Question 1 for Lesson 3, Answer C.

Anonymous  Apr 02, 2013 
Printed, PDF
Page 180
EXAM TIP

"At run time, the data flow task builds an execution plan from the data flow, and the data flow engine executes the plan." Would this be improved with the inclusion of "definition" before the second comma? As below? "At run time, the data flow task builds an execution plan from the data flow definition, and the data flow engine executes the plan."

Note from the Author or Editor:
Agree. The existing text should be changed from: "At run time, the data flow task builds an execution plan from the data flow, and the data flow engine executes the plan." to: "At run time, the data flow task builds an execution plan from the data flow definition, and the data flow engine executes the plan."

Bodhi Densmore  Feb 01, 2013 
Printed, PDF
Page 201
Multicast

Small typo - "Generates one or more identical outputs" not "Generates one or mode identical outputs"

Note from the Author or Editor:
The text "Generates one or mode identical outputs" should be changed to "Generates one or more identical outputs". Thank you for submitting this typo. Grega

Anonymous  Mar 04, 2013 
Printed, PDF
Page 210
Exercise 1, Item 5

Small typo - the database to connect to is TK463DW, not TK463

Note from the Author or Editor:
Thank you for noticing this. The item 5 in Exercise 1 should be changed from : 5. Drag another OLE DB source adapter onto the workspace and rename it stgCustomer. In the OLE DB Source Editor, set the OLE DB connection manager to TK463 and select the stg.Customer table. To: 5. Drag another OLE DB source adapter onto the workspace and rename it stgCustomer. In the OLE DB Source Editor, set the OLE DB connection manager to TK463DW and select the stg.Customer table.

Malcolm  Jan 24, 2013 
PDF
Page 226
2nd paragraph

The last sentence in the paragraph is missing its closing parenthesis. However, it may be better so simply drop this sentence, since Chapter 2 provides no explanation of the T-SQL MERGE statement, other than a passing mention of its existence. This: (If you are not familiar with the T-SQL MERGE statement, see Chapter 2. change to this: (If you are not familiar with the T-SQL MERGE statement, see Chapter 2.)

Note from the Author or Editor:
The last sentence of the 2nd paragraph, the sentence "(If you are not familiar with the T-SQL MERGE statement, see Chapter 2.", should be deleted.

truncheon411  May 06, 2013 
Printed, PDF
Page 232
Lesson Review 1

Which data flow transformation would you use if had to combine data from two different database tables that exist on two different servers? should read Which data flow transformation would you use if YOU had to JOIN data from two different database tables that exist on two different servers? The "incorrect" answers are the ones that combine data through methods other than joins, so the question is a bit imprecise.

Note from the Author or Editor:
Agree. The question "Which data flow transformation would you use if had to combine data from two different database tables that exist on two different servers?" should be changed to "Which data flow transformation would you use if you had to join data from two different database tables that exist on two different servers?" GJ

Malcolm  Jan 25, 2013 
PDF
Page 232
Question 2

Question 2 asks "How many Data Source adapters do you need?". One only NEEDS to use one adapter...one COULD use two or three if desired. I suggest rewording the question to make it clearer.

Note from the Author or Editor:
Second sentence for question 2 on page 232, should be changed from "How many Data Source adapters do you need? (Choose all that apply.)" to "How many Data Source adapters could you use? (Choose all that apply.)"

truncheon411  May 06, 2013 
Printed
Page 235
Lesson 2 question 3 Correct Answers

Question 3 answer is stated as "Correct Answers: B and D", but should be "A and D" as shown by the detailed analysis of choices A through D.

Note from the Author or Editor:
Thank you for noticing this typo. Question 3 answer should be : "Correct Answers A and D". Grega Jerkic

Curt Coker  Jan 16, 2013 
PDF
Page 269
Middle

The name of the parent package variable must match the name of the corresponding variable in the parent package. should be The name of the parent package variable must match the name of the corresponding variable in the child package.

Note from the Author or Editor:
The last sentence in paragraph 6 (under Package Configurations) should read: "The name of the parent package variable must match the name of the corresponding variable in the child package." ML

ScottVK  Jan 29, 2013 
Printed, PDF
Page 274
ex3. step3

Step4 needs an extra first step: Set "Evaluation operation" to "Expression". Click the ellipsis (...)

Note from the Author or Editor:
The text for Step 4 needs to be replaced with the following paragraph: Change the Evaluation operation constraint option from “Constraint” to “Expression and Constraint”, leave “Success” as the evaluation value, then click the ellipsis (…) at the right of the Expression text box to open the Expression Builder dialog box, and build the expression shown in Listing 6-5.

Mark Pulles  Apr 26, 2013 
PDF
Page 317
Paragraph: Using Error Flows

In 3rd sentence: "In addition to the data paths, however,, there are also error paths." The sentence feels a little bit truncated to me or just to commas that could be de-duplicated.

Note from the Author or Editor:
Thanks for noticing this. The 3rd sentence should be changed from : "In addition to the data paths, however,, there are also error paths." to "In addition to the data paths, however, there are also error paths."

Lars Utterstrom  Feb 22, 2013 
PDF
Page 367
Question 3 Answer D

Please retract my earlier report of this error. The error is actually in the Lesson Review section, not the Answers section. 'The Lookup task cache mode property' should read 'The Lookup transformation SqlCommand property'

Note from the Author or Editor:
Agree. The question 3, answer D should be changed from: "The Lookup task cache mode property" to "The Lookup transformation SqlCommand property". GJ

ScottVK  Feb 03, 2013 
Printed, PDF
Page 408
2nd paragraph

"After the package has been created from a user-defined template, the value of its ID property will be the same as the one in the template." While this was true in previous versions of SSIS, this is no longer true in the current version. New Package ID's are generated automatically now. Also, in Exercise 2 (page 410), steps 6 and 7 are no longer required for this same reason.

Note from the Author or Editor:
We need to check this behavior with the vendor. ML

Malcolm  Feb 05, 2013 
Printed, PDF
Page 469
2nd paragraph

A couple of minor wording items, for your next printing. You refer to the "Object Browser" in SSMS. The SQL Query Analyzer had an Object Browser, and SSDT has one too, but SSMS has always used "Object Explorer" for some reason. Also, you describe SSDT variously as SQL Server Development Tools, and SQL Server Data Tools.

Note from the Author or Editor:
The reference "SQL Server Development Tools" is used three times throughout the book; all of these occurrences should be replaced with "SQL Server Data Tools". "Object Browser" (used 8 times) and "Object Explorer" (used >10 times) references must be verified against each particular context, where one or the other development tool is referenced. ML

Malcolm  Feb 06, 2013 
Printed, PDF
Page 481
Principals section, 1st paragraph

There isn't an SSISDB stored proc called "catalog.configure_server". Perhaps you mean "catalog.configure_catalog"

Note from the Author or Editor:
True. Any and all references to "catalog.configure_server" should be replaced with "catalog.configure_catalog" (that is, once on page 481 and once in the Index, on page 772). ML

Malcolm  Feb 07, 2013 
Printed, PDF
Page 507
Top

Quick Check Answer reads "On the SSISDB, project, and package levels" It should read "On the SSISDB, Folder, and Package levels" Predefined reports are not available on the Project level.

Note from the Author or Editor:
Unable to check at the moment, but I suspect the reader is correct. Will respond with a more definite answer ASAP. ML UPDATE: The reader is only partially correct. The text of the Quick Check Answer should be changed to: "On the SSISDB catalog, folder, project, and package levels." ML

Malcolm  Feb 08, 2013 
Printed
Page 508
Exercise 1, Step 1

In addition to re-running the script from chapter 5 code folder you also need to open the TK463Chapter13.sql file and run the first section to create the stg.SalesTerritory table. This step is missing from the instructions.

Note from the Author or Editor:
Exercise 1, Step 1 on page 508 should have an additional statement after the existing text "If you are missing the database objects from Chapter 5, “Designing and Implementing Data Flow,” execute the needed SQL code from that chapter to have all the stage and dimension tables available in the TK463DW database. " Should have an additional sentence at the end: Start SSMS and connect to your SQL Server instance. Open a new query window by clicking the New Query button. Select the TK463DW database in the database drop-down list. Create the stg.SalesTerritory staging table by executing the following SQL statement. CREATE TABLE stg.SalesTerritory ( TerritoryID INT NULL, Name NVARCHAR(50) NULL, CountryRegionCode NVARCHAR(10) NULL, [Group] NVARCHAR(50) NULL, ModifiedDate DATETIME NULL );

Zack Jones  May 02, 2013 
Printed, PDF
Page 538
Exercise 1, Check for Data Quality Issues

In the list of tables to check for data quality issues, there is a duplicate. Nice if you enjoy the irony. :-)

Note from the Author or Editor:
Truly:-) Delete the last row, i.e. the last bullet on the page, where DimDate appears for the second time.

Malcolm  Feb 09, 2013 
Printed
Page 628
Quick Check Answer

Excel 2012 should be Excel 2010.

Note from the Author or Editor:
The Quick Check answer should be corrected from "Quick Check Answer &#9632;&#9632; Use Excel 2012 with MDS Add-in for Excel to update batches of data in an MDS model." to "Quick Check Answer &#9632;&#9632; Use Excel 2010 with MDS Add-in for Excel to update batches of data in an MDS model."

Zack Jones  May 09, 2013 
PDF
Page 644
Exercise 2 Step 18

"Then enter the following string as the expression: \p{L}+\d\d@ADVENTURE-WORKS\.COM." should read "Then enter the following string as the expression: \p{L}+\d@ADVENTURE-WORKS\.COM."

Note from the Author or Editor:
The regular expression in step 18 at the bottom of the page, which is currently \p{L}+\d\d@ADVENTURE -WORKS \.COM should be modified to: \p{L}+\d@ADVENTURE -WORKS \.COM

ScottVK  Feb 05, 2013 
Printed, PDF
Page 728
second and 3d paragraph Deploy.bat

gacutil fails with "Failure adding assembly to the cache: Attempt to install an assembly without a strong name." There should be a reference to instructions for signing the assembly.

Note from the Author or Editor:
Additional steps must be added to Exercise 2 of Lesson 3, Chapter 19, instructing the student how to digitally sign the assembly.

Bodhi Densmore  Mar 27, 2013