Symmetry Corporate Solutions: Performance Reporting Framework, PROOF: " It's about time someone packaged BI Best practices into an OLAP model generator like PROOF. Symmetry's long experience in BI applications shows, and makes it much easier and faster for non-experts to build and, more importantly, maintain sophisticated multidimensional business models.”
Nigel Pendse, Author
The OLAP Report and The OLAP Survey
PROOF is like having an expert BI developer permanently on staff. PROOF makes the hard part of developing performance management applications easy. By managing metrics in a central repository, it guarantees a single version of the truth and significantly reduces development time, redundant programming, and maintenance.”
Claudia Imhoff,
President and Founder
Intelligent Solutions"
Thursday, April 20, 2006
Monday, April 17, 2006
Reporting Services with Relational Data and MDX
One common problem in reporting and BI solutions is how to incorporate data from both an OLAP cube and relational tables. The UDM in SQL 2005 attempts to solve this, however it really means you still need to build the information into your cubes and dimension attributes.
What if you don't want to or can't?
Reporting Services provides a Custom Code tab within the Report Properties page. You can access various VB.NET objects and system assemblies, and reference external assemblies. One of the internal assemblies is the Dictionary object.
Steps to lookup values from a reference table in SQL:
Drag a list onto the report.
Drag a textbox into the list, or a field from the relational dataset. Modify the textbox to contain =Code.setValue(Fields!KeyField.Value, Fields!ValueField.Value)
Create another list below. Drag another textbox into the list. Modify the textbox expression to hard-code the key for now. =Code.getValue("MyKey")
In the Code Properties window, try the following:
public dict as new System.Collections.Generics.Dictionary(Of System, System)
function setValue(value as object, value2 as object) as object
dict.Add(value,value2)
return value
end function
function getValue(value as object) as object
return dict(value)
end function
This is untested code and needs further work, but it should provide an idea of how to accomplish the task.
If you have properly bound a table to the first list control, you should be able to lookup results in the second table.
This can be applied in many scenarios, including adding relational reference data to MDX results, and creating a relationship between two separate datasets.
I'd be interested to know if anyone uses this. It seems to have many different applications. One could possibly involve showing two sets of information, for things like variances or budget vs. actual data. If a value doesn't exist in the dictionary, the original field could be returned. If it does exist, the adjustment could be returned.
What if you don't want to or can't?
Reporting Services provides a Custom Code tab within the Report Properties page. You can access various VB.NET objects and system assemblies, and reference external assemblies. One of the internal assemblies is the Dictionary object.
Steps to lookup values from a reference table in SQL:
Drag a list onto the report.
Drag a textbox into the list, or a field from the relational dataset. Modify the textbox to contain =Code.setValue(Fields!KeyField.Value, Fields!ValueField.Value)
Create another list below. Drag another textbox into the list. Modify the textbox expression to hard-code the key for now. =Code.getValue("MyKey")
In the Code Properties window, try the following:
public dict as new System.Collections.Generics.Dictionary(Of System, System)
function setValue(value as object, value2 as object) as object
dict.Add(value,value2)
return value
end function
function getValue(value as object) as object
return dict(value)
end function
This is untested code and needs further work, but it should provide an idea of how to accomplish the task.
If you have properly bound a table to the first list control, you should be able to lookup results in the second table.
This can be applied in many scenarios, including adding relational reference data to MDX results, and creating a relationship between two separate datasets.
I'd be interested to know if anyone uses this. It seems to have many different applications. One could possibly involve showing two sets of information, for things like variances or budget vs. actual data. If a value doesn't exist in the dictionary, the original field could be returned. If it does exist, the adjustment could be returned.
Project Management 101: Creating the Right Ripple
Simple Talk » Blog Archive » Project Management 101: "Joint Application Development
Essentially, I implemented a Joint Application Development (JAD) methodology. Everyone, from testers to junior developers and interns, participated in every meeting with the client. There was no endless communication string; everyone got their knowledge first hand. The entire development team, the client and anyone who had discrete business knowledge of the problem space, assembled in a room. The goal of these meetings was to:
* Define the problem/s that the solution is expected to solve
* Define each process –think use case – in the system in exact detail
* Define screen layouts
* Walk through each process with screen shots, roll play if necessary – people will often seeing missing steps when this is done repeatedly. If a new step is added start over again
* Define a complete and specific requirements document that the solution will be based on
* Get the client and the whole team to sign-off on the requirements document
By walking through each process and clarifying every detail with the client, and the entire team, we effectively killed scope creep. The client was confident that we understood their needs. In place of vague statements such as “we need a page to create customers”, we had we had sign-off on a clear, concise requirements document of the following form:
The system will maintain a list of customers. A customer record with be defined as:
# Customer ID – System Generated
# First Name
# Last Name
# Full Address (2 address fields, city state and postal code)
# Phone Number
# Email address
Each field with the exception of Customer ID will be fully editable. A drop-down list will be used to select a state. Validations include:
# First Name – required
# Last Name – required
# Postal Code- Required, must be 5 or 9 numbers only
# Phone Number – 9 numbers only
# Email Address – valid format, no anonymous accounts (Yahoo, Hotmail, GMail etc)
You will reach the customer edit page thought a search engine that allows you to search for customers on any combination of the following fields.
# First Name
# Last Name
# Postal Code
…And so on…
Essentially, I implemented a Joint Application Development (JAD) methodology. Everyone, from testers to junior developers and interns, participated in every meeting with the client. There was no endless communication string; everyone got their knowledge first hand. The entire development team, the client and anyone who had discrete business knowledge of the problem space, assembled in a room. The goal of these meetings was to:
* Define the problem/s that the solution is expected to solve
* Define each process –think use case – in the system in exact detail
* Define screen layouts
* Walk through each process with screen shots, roll play if necessary – people will often seeing missing steps when this is done repeatedly. If a new step is added start over again
* Define a complete and specific requirements document that the solution will be based on
* Get the client and the whole team to sign-off on the requirements document
By walking through each process and clarifying every detail with the client, and the entire team, we effectively killed scope creep. The client was confident that we understood their needs. In place of vague statements such as “we need a page to create customers”, we had we had sign-off on a clear, concise requirements document of the following form:
The system will maintain a list of customers. A customer record with be defined as:
# Customer ID – System Generated
# First Name
# Last Name
# Full Address (2 address fields, city state and postal code)
# Phone Number
# Email address
Each field with the exception of Customer ID will be fully editable. A drop-down list will be used to select a state. Validations include:
# First Name – required
# Last Name – required
# Postal Code- Required, must be 5 or 9 numbers only
# Phone Number – 9 numbers only
# Email Address – valid format, no anonymous accounts (Yahoo, Hotmail, GMail etc)
You will reach the customer edit page thought a search engine that allows you to search for customers on any combination of the following fields.
# First Name
# Last Name
# Postal Code
…And so on…
Sunday, April 16, 2006
Adding Relational Lookups to Reporting Services
Have not tested this in a production scenario yet, however this looks to be one way to use the results of 1 data set as a lookup for another data set.
1. Create a Reporting Services Report with 2 lists - 1 for lookups & 1 for results.
2. In the lookup list, add a textbox with this code. =Code.setValue(Fields!FirstName.Value, Fields!LastName.Value)
3. In the results list, add a textbox with this code = Code.getValue(Fields!FirstName.Value)
4. Add code:
public openWith as new System.Collections.Generic.Dictionary(Of String, String)
Function setValue(value as object, value2 as object) as object
openWith.Add(value, value2)
return 0
end function
Function getValue(value as object) as object
return openWith(value)
end function
The result should be that you can now lookup unique keys in the dictionary. This would be useful for scenarios involving relational data and MDX results. It could also be used for replacing system application values with their 'friendly-name' reporting equivalents.
1. Create a Reporting Services Report with 2 lists - 1 for lookups & 1 for results.
2. In the lookup list, add a textbox with this code. =Code.setValue(Fields!FirstName.Value, Fields!LastName.Value)
3. In the results list, add a textbox with this code = Code.getValue(Fields!FirstName.Value)
4. Add code:
public openWith as new System.Collections.Generic.Dictionary(Of String, String)
Function setValue(value as object, value2 as object) as object
openWith.Add(value, value2)
return 0
end function
Function getValue(value as object) as object
return openWith(value)
end function
The result should be that you can now lookup unique keys in the dictionary. This would be useful for scenarios involving relational data and MDX results. It could also be used for replacing system application values with their 'friendly-name' reporting equivalents.
Tuesday, April 11, 2006
MCITP: Business Intelligence Developer
MCITP: Business Intelligence Developer: "How to Earn Your MCITP: Business Intelligence Developer
MCITP candidates must first complete the requirements for the MCTS: SQL Server 2005 certification (one exam). After achieving this Technology Specialist certification, candidates earn their MCITP: Business Intelligence Developer by passing two required exams. The following table provides a complete list of exams and related training resources. For exam dates and specific areas of focus, see individual Exam Preparation Guides as the exams become available."
MCITP candidates must first complete the requirements for the MCTS: SQL Server 2005 certification (one exam). After achieving this Technology Specialist certification, candidates earn their MCITP: Business Intelligence Developer by passing two required exams. The following table provides a complete list of exams and related training resources. For exam dates and specific areas of focus, see individual Exam Preparation Guides as the exams become available."
Thursday, March 30, 2006
Using Expression Variables in SSIS
Here's a way to use Expression Variables in SQL Server Integration Services to dynamically create a connection string:
1. Create a new variable "SS_DST_Server"
2. Create a new variable "SS_DST_Database"
3. Create a new variable "SS_DST_Conn"
4. Set 'Use as Expression' property on SS_DST_Conn to true.
5. Under the expression, type in the connection string and append " + @[User::SS_DST_SERVER] + ";" where the server goes, and " + @[User::SS_DST_Database] + ";" where the database goes. Note it should start with =" and end with "
for example:
"Provider=SQLNCLI;Server=" + @[User::SS_DST_SERVER] +";Database=" + @[User::SS_DST_DATABASE] + ";UID=sa;PWD=asdasd;"
Now, instead of having to configure the connection string in a config file, you can store it in the package, and pass in the database and server name as a parameter.
There are other useful things you can do with this procedure.
Create a variable called "DATE_FILTER" and an expression variable "SQL_LOAD" with the expression "Select * from MyTable where mydate = '" + @[User::DATE_FILTER] + "'"
Dynamic SQL in your SSIS package.
Note variables are case-sensitive, so upper case is good practice.
Here's some sample connection strings...
www.connectionstrings.com
1. Create a new variable "SS_DST_Server"
2. Create a new variable "SS_DST_Database"
3. Create a new variable "SS_DST_Conn"
4. Set 'Use as Expression' property on SS_DST_Conn to true.
5. Under the expression, type in the connection string and append " + @[User::SS_DST_SERVER] + ";" where the server goes, and " + @[User::SS_DST_Database] + ";" where the database goes. Note it should start with =" and end with "
for example:
"Provider=SQLNCLI;Server=" + @[User::SS_DST_SERVER] +";Database=" + @[User::SS_DST_DATABASE] + ";UID=sa;PWD=asdasd;"
Now, instead of having to configure the connection string in a config file, you can store it in the package, and pass in the database and server name as a parameter.
There are other useful things you can do with this procedure.
Create a variable called "DATE_FILTER" and an expression variable "SQL_LOAD" with the expression "Select * from MyTable where mydate = '" + @[User::DATE_FILTER] + "'"
Dynamic SQL in your SSIS package.
Note variables are case-sensitive, so upper case is good practice.
Here's some sample connection strings...
www.connectionstrings.com
Monday, March 27, 2006
Swapping partitions in SSAS 2005 - MSDN Forums
Swapping partitions in SSAS 2005 - MSDN Forums: "You should be able to use the new database synchronization feature of AS 2005:
http://msdn2.microsoft.com/en-us/library/ms174928(SQL.90).aspx
>>
Synchronizing Analysis Services Databases
The Synchronize Database Wizard synchronizes two Microsoft SQL Server 2005 Analysis Services (SSAS) databases by copying the data and metadata from a database on a source server to a database on a destination server. You can also use this wizard to deploy a database from a staging server onto a production server, or to synchronize a database on a production server with the changes made to the data and metadata in a database on a staging server.
While the wizard synchronizes the data between the two databases, users can continue to query the destination database. After synchronization finishes,, Analysis Services automatically switches the users to the newly copied data and metadata, and drops the old data from the destination database."
http://msdn2.microsoft.com/en-us/library/ms174928(SQL.90).aspx
>>
Synchronizing Analysis Services Databases
The Synchronize Database Wizard synchronizes two Microsoft SQL Server 2005 Analysis Services (SSAS) databases by copying the data and metadata from a database on a source server to a database on a destination server. You can also use this wizard to deploy a database from a staging server onto a production server, or to synchronize a database on a production server with the changes made to the data and metadata in a database on a staging server.
While the wizard synchronizes the data between the two databases, users can continue to query the destination database. After synchronization finishes,, Analysis Services automatically switches the users to the newly copied data and metadata, and drops the old data from the destination database."
Friday, March 24, 2006
Integration Services - Powerful and painful
In my opinion, one of the more idiotic things about SQL Server 2005 is Integration Services. Not the product itself, which is actually quite powerful, and since I would not touch DTS with a ten-foot pole picking it up was relatively easy for me. It is fun to work with, didn't crash on me a whole lot (unlike Visual Studio 2005 which is like watching Houdini, since it disappears randomly) and was fairly intuitive once I got the basics down.
What stinks is the methods of execution of these packages in a production environment.
Two main problems for me are package security and remote execution.
1. Password Encryption: What's with all of the options for package security? User Keys, Certificates, Package Passwords. How about abstracting this stuff right out of the package itself and into another tool, like a code obfuscator. It's wonderful to have, but sometimes, like a door, you don't always need a lock on it. Why do I have to type in a package password for EVERY PACKAGE everytime I hit Build? That's like typing in a password for every file when I type DIR in DOS. Also, what's with passing the /DECRYPT password in every time I have to run from a command-line? Can't we stick this in an encrypted config file somewhere?
2. Remote Execution - This is where I got burned. SQL Agent is the recommended means of executing packages on the SQL Server from a remote PC. So how do you pass in passwords and other parameters to the command line? I ended up creating two command-line tasks with sqlcmd, one to edit the job task step sp_update_job_step and another to run the job sp_start_job. Of course, when you run sp_start_job it immediately comes back. This could cause a problem for jobs that have to wait for others to run before starting, so you need to grab another custom script that checks every 10 seconds to see if it's running.
Other things that bug me about SSIS - not knocking the developers who put tons of effort into this - but just stuff that bugs me.
- The 5-10 second delay executing packages from command line.
- Clicking the play button in Visual Studio doesn't play the package selected. It could do many things, depending on what mood it's in.
- The script editor. Sorta reminds me of Excel VBA but without the ability to tab back and forth between the package and the script.
- Passing parameters from a command line. %8 %9 %10 %11 just doesn't cut it for me.
- No encrypted parameters in config files.
Deployment question: SQLDB - SSIS on different boxes with SQL Agent for scheduling - MSDN Forums: "SQL Agent is my preferred scheduler, and maybe yours too, but many organisations have their own standards. Many houses use IBM/Tivoli for example, and SQLAgent is not required for SSIS. If you would prefer to use it, then yes you are stuck. I think buyng SQL Server for SQLAgent is an overkill, but if you look at that SQL Instance in the same way as you look at MSDE, then it is no big deal. There are plenty of proucts our there that install DB engines. I saw a report that said Informix (I think that was the one) was one of the most widely deployed DBs, and that is because CA shoved it under the covers of ArcServe backup, probably for the scheduling :) "
Yes, my client does prefer to use a Unix-based scheduler, and apparently this means we're stuck using SQL Agent, called from another scheduler.
What stinks is the methods of execution of these packages in a production environment.
Two main problems for me are package security and remote execution.
1. Password Encryption: What's with all of the options for package security? User Keys, Certificates, Package Passwords. How about abstracting this stuff right out of the package itself and into another tool, like a code obfuscator. It's wonderful to have, but sometimes, like a door, you don't always need a lock on it. Why do I have to type in a package password for EVERY PACKAGE everytime I hit Build? That's like typing in a password for every file when I type DIR in DOS. Also, what's with passing the /DECRYPT password in every time I have to run from a command-line? Can't we stick this in an encrypted config file somewhere?
2. Remote Execution - This is where I got burned. SQL Agent is the recommended means of executing packages on the SQL Server from a remote PC. So how do you pass in passwords and other parameters to the command line? I ended up creating two command-line tasks with sqlcmd, one to edit the job task step sp_update_job_step and another to run the job sp_start_job. Of course, when you run sp_start_job it immediately comes back. This could cause a problem for jobs that have to wait for others to run before starting, so you need to grab another custom script that checks every 10 seconds to see if it's running.
Other things that bug me about SSIS - not knocking the developers who put tons of effort into this - but just stuff that bugs me.
- The 5-10 second delay executing packages from command line.
- Clicking the play button in Visual Studio doesn't play the package selected. It could do many things, depending on what mood it's in.
- The script editor. Sorta reminds me of Excel VBA but without the ability to tab back and forth between the package and the script.
- Passing parameters from a command line. %8 %9 %10 %11 just doesn't cut it for me.
- No encrypted parameters in config files.
Deployment question: SQLDB - SSIS on different boxes with SQL Agent for scheduling - MSDN Forums: "SQL Agent is my preferred scheduler, and maybe yours too, but many organisations have their own standards. Many houses use IBM/Tivoli for example, and SQLAgent is not required for SSIS. If you would prefer to use it, then yes you are stuck. I think buyng SQL Server for SQLAgent is an overkill, but if you look at that SQL Instance in the same way as you look at MSDE, then it is no big deal. There are plenty of proucts our there that install DB engines. I saw a report that said Informix (I think that was the one) was one of the most widely deployed DBs, and that is because CA shoved it under the covers of ArcServe backup, probably for the scheduling :) "
Yes, my client does prefer to use a Unix-based scheduler, and apparently this means we're stuck using SQL Agent, called from another scheduler.
Thursday, March 16, 2006
Part 1: Automating the XML Data Mapping Process in Excel 2003
Part 1: Automating the XML Data Mapping Process in Excel 2003: "Conclusion
The sample code in this article is generic and can be used for most scenarios requiring support of flexible XML mapping with little or no modification. Currently we use this code in a project called 'The Rhythm of the Business 2.0,' which supports a flexible and constantly changing Excel template used by more than 1,000 Microsoft employees to assess the entire company's performance on a monthly basis. In our project we also needed to harvest the unaltered data-point descriptions for use in a reporting application. We did this by adding meta tags, using square brackets for marking up the description positions. (This article does not include the code that retrieves the description values.) We encountered another reporting issue related to the Excel formulas. In a future article, we will describe how to take advantage of the grid structure to programmatically extract and store Excel formulas in a Microsoft SQL Server database and replicate the UI-side calculations using dynamic SQL."
The sample code in this article is generic and can be used for most scenarios requiring support of flexible XML mapping with little or no modification. Currently we use this code in a project called 'The Rhythm of the Business 2.0,' which supports a flexible and constantly changing Excel template used by more than 1,000 Microsoft employees to assess the entire company's performance on a monthly basis. In our project we also needed to harvest the unaltered data-point descriptions for use in a reporting application. We did this by adding meta tags, using square brackets for marking up the description positions. (This article does not include the code that retrieves the description values.) We encountered another reporting issue related to the Excel formulas. In a future article, we will describe how to take advantage of the grid structure to programmatically extract and store Excel formulas in a Microsoft SQL Server database and replicate the UI-side calculations using dynamic SQL."
Saturday, March 04, 2006
dotProject Demo :: dotproject - Open Source Software :: Open Source Project and Task Management Software
dotProject Demo :: dotproject - Open Source Software :: Open Source Project and Task Management Software: "Thank you for your interest in our web-based project management tool.
dotProject is built using free open-source applications and is produced and maintained by a small, but dedicated group of volunteers. dotProject is programmed in PHP, and utilises MySQL for a backend database (although other databases such as Postgres could also be used).
Our recommended server platform includes Apache 1.3.27, PHP 4.2+, and MySQL. In the spirit of free, peer-reviewed, open source application development, we would also encourage you to use an operating system such as Linux, FreeBSD, or OpenBSD. However, additional operating systems such as Windows, Mac, and other flavours of *nix are also supported. "
dotProject is built using free open-source applications and is produced and maintained by a small, but dedicated group of volunteers. dotProject is programmed in PHP, and utilises MySQL for a backend database (although other databases such as Postgres could also be used).
Our recommended server platform includes Apache 1.3.27, PHP 4.2+, and MySQL. In the spirit of free, peer-reviewed, open source application development, we would also encourage you to use an operating system such as Linux, FreeBSD, or OpenBSD. However, additional operating systems such as Windows, Mac, and other flavours of *nix are also supported. "
Wednesday, March 01, 2006
Sunday, February 19, 2006
KPI Hell
The Management Cockpit �War Room� at Iglo-Ola (Unilever Belgium): An Interview with Iglo-Ola�s Financial Controller Ghislain Malcorps
The flight deck concept taken to new levels of complexity.
The flight deck concept taken to new levels of complexity.
Tuesday, February 07, 2006
71-528 Study Group Transcript - 2005-11-02
71-528 Study Group Transcript - 2005-11-02
It's law to include on goverment sites things like ALT tags etc for accessibility I do believe
AndrewCoates says:
Certainly is in the US
AndrewCoates says:
There's an accessability checker in the IDE that tells you whether you've complied
AndrewCoates says:
the rules are different in the US from Europe
michaelmileos says:
thats cool
AndrewCoates says:
In the US it's called something like "Section 508"
tathamoddie says:
localization: http://www.dotnetjunkies.com/WebLog/anoras/archive/2005/02/13/54271.aspx
tathamoddie says:
Globalization is a process of identifying all the parts of your application that need to be different for respective languages and separate them from the core application.
tathamoddie says:
Localization
tathamoddie says:
Localization is process of creating and configuring your application for a specific language.
It's law to include on goverment sites things like ALT tags etc for accessibility I do believe
AndrewCoates says:
Certainly is in the US
AndrewCoates says:
There's an accessability checker in the IDE that tells you whether you've complied
AndrewCoates says:
the rules are different in the US from Europe
michaelmileos says:
thats cool
AndrewCoates says:
In the US it's called something like "Section 508"
tathamoddie says:
localization: http://www.dotnetjunkies.com/WebLog/anoras/archive/2005/02/13/54271.aspx
tathamoddie says:
Globalization is a process of identifying all the parts of your application that need to be different for respective languages and separate them from the core application.
tathamoddie says:
Localization
tathamoddie says:
Localization is process of creating and configuring your application for a specific language.
Study Group for 71-528. 31 October 2005
Study Group for 71-528. 31 October 2005
Deadeye (~dead_eye_@218.214.2.XXX) has joined the conversation.
mikemileos says:
hi dan
Deadeye says:
hey
Deadeye says:
what have i missed?
mikemileos says:
we were just wrapping it up
Deadeye says:
:(
mikemileos grins
mikemileos says:
nah, we just started
Deadeye (~dead_eye_@218.214.2.XXX) has joined the conversation.
mikemileos says:
hi dan
Deadeye says:
hey
Deadeye says:
what have i missed?
mikemileos says:
we were just wrapping it up
Deadeye says:
:(
mikemileos grins
mikemileos says:
nah, we just started
Sunday, February 05, 2006
I need more exams?!?
Vishal Joshi's Tangent: "MCDBA Upgrade to MCITP Database Administrator
In the new family to become MCITP Database Administrator it is required to achieve MCTS SQL Server 2005 Credential by taking Exam 70-431 and then by passing two PRO exams 70-443 and 70-444.
For folks who are already MCDBA this three exam path becomes two exam path...
An MCDBA will have to achieve MCTS SQL Server 2005 credential by passing Exam 70-431 and then can take & pass an upgrade exam 70-447... So basically instead of passing the two exam 70-443 and 70-444, MCDBAs will have to pass just one exam.
This was a quick snapshot of SQL Server 2005 credential upgrade... Now lets talk about Visual Studio 2005 credential upgrades..."
In the new family to become MCITP Database Administrator it is required to achieve MCTS SQL Server 2005 Credential by taking Exam 70-431 and then by passing two PRO exams 70-443 and 70-444.
For folks who are already MCDBA this three exam path becomes two exam path...
An MCDBA will have to achieve MCTS SQL Server 2005 credential by passing Exam 70-431 and then can take & pass an upgrade exam 70-447... So basically instead of passing the two exam 70-443 and 70-444, MCDBAs will have to pass just one exam.
This was a quick snapshot of SQL Server 2005 credential upgrade... Now lets talk about Visual Studio 2005 credential upgrades..."
Configuration API Improvements in ASP.NET 2.0
Configuration API Improvements in ASP.NET 2.0: " AQA------------ FnvpHa1iy4Oww= "
Encrypting connection strings in the web.config
Encrypting connection strings in the web.config
Prepare for the 70-536 Certification Exam: Microsoft .NET Framework 2.0 - Application Development Foundation
Prepare for the 70-536 Certification Exam: Microsoft .NET Framework 2.0 - Application Development Foundation
What you need to know to pass the 70-536 certification exam:
Visit the following links for resources to their individual topics and study them completely and thoroughly until you're confident you've mastered them! The best way to accomplish this is by actually building Visual Studio .Net 2005 solutions and projects and incorporating the topics listed below into them accordingly. There's no better way to study for an exam than by actually doing it in real-world scenarios. You can get Visual Studio .Net 2005 by clicking on this link.
What you need to know to pass the 70-536 certification exam:
Visit the following links for resources to their individual topics and study them completely and thoroughly until you're confident you've mastered them! The best way to accomplish this is by actually building Visual Studio .Net 2005 solutions and projects and incorporating the topics listed below into them accordingly. There's no better way to study for an exam than by actually doing it in real-world scenarios. You can get Visual Studio .Net 2005 by clicking on this link.
Andrew Coates ::: MSFT : Studying for another Beta Exam (71-536)
Andrew Coates ::: MSFT : Studying for another Beta Exam (71-536)
Looks like Mitch is studying for 71–536 as well. I’m signed up to do it AFTER the Ready Launch – on Dec 20. For 71–528, we had a study group chat. Mitch has taken a different tack, doing individual blog posts on each of the skills being measured as he looks at them.
So far he’s done:
Value types and nullable types
Reference types
Attributes
Generic types
Exception classes
Boxing and Unboxing
Forwarding types? and
ArrayList class
This looks like a great approach. Leave comments on Mitch’s individual posts if you’ve got stuff to add and get ready to get certified!
Looks like Mitch is studying for 71–536 as well. I’m signed up to do it AFTER the Ready Launch – on Dec 20. For 71–528, we had a study group chat. Mitch has taken a different tack, doing individual blog posts on each of the skills being measured as he looks at them.
So far he’s done:
Value types and nullable types
Reference types
Attributes
Generic types
Exception classes
Boxing and Unboxing
Forwarding types? and
ArrayList class
This looks like a great approach. Leave comments on Mitch’s individual posts if you’ve got stuff to add and get ready to get certified!
Eric Gunnerson's C# Compendium : Nullable types in C#
Eric Gunnerson's C# Compendium : Nullable types in C#
Right off the bat, on the first thing I study in .NET 2.0, there is something that looks fundamentally wrong to me - nullable types and boolean.
Skills measured by exam 70-551
Section 1
Developing applications that use system types and collections
Manage data in a .NET Framework application by using .NET Framework 2.0 system types. (Refer System namespace)
Value types
Nullable type
Syntax:
bool? nullBool = null;
- Nullable, hasvalue property,boolean now has 3 values! return (int?) cmd.ExecuteScalar(); Null coalescing operator (x ?? Y) - default x to Y if null
G. Shaw said:
I hope you and the other language designers know what you are doing for the long run. The current C# language is thing of beauty with very few warts. By adding the Big Four plus this new feature I worried that you are starting to move the language from a simpiler easier to use language more into the realm of C++ hell. I've worked with C# for years now (since beta 1) and find the language has been perfect. The language is so explicity about what it is doing, adding new funky operators makes the language more confusing as it isn't immediately obvious what is being down.
Please do a lot of usability testing with the syntax of this feature. I can see a need but I really think it should be done as a keyword and not an operato. For example,
nullable int a;
nullable int b;
nullable int c = a+ b;
Is immediately obvious what we are doing. The int? syntax is alien and is painful to read/understand. Since this is a feature that isn't going to be used all the time people are going to have look it up to understand how it works when the encounter it.
How can a bool have three values! It can't, that's why you need a new type: nullable bool. In fact I'd keep it as Nullable but provide operator overloading so that the operators work correctly to return null types.
What's next... Reference types and attributes... Hmm. Only 450 or so items to cover in 2 weeks.
Right off the bat, on the first thing I study in .NET 2.0, there is something that looks fundamentally wrong to me - nullable types and boolean.
Skills measured by exam 70-551
Section 1
Developing applications that use system types and collections
Manage data in a .NET Framework application by using .NET Framework 2.0 system types. (Refer System namespace)
Value types
Nullable type
Syntax:
bool? nullBool = null;
- Nullable, hasvalue property,boolean now has 3 values! return (int?) cmd.ExecuteScalar(); Null coalescing operator (x ?? Y) - default x to Y if null
G. Shaw said:
I hope you and the other language designers know what you are doing for the long run. The current C# language is thing of beauty with very few warts. By adding the Big Four plus this new feature I worried that you are starting to move the language from a simpiler easier to use language more into the realm of C++ hell. I've worked with C# for years now (since beta 1) and find the language has been perfect. The language is so explicity about what it is doing, adding new funky operators makes the language more confusing as it isn't immediately obvious what is being down.
Please do a lot of usability testing with the syntax of this feature. I can see a need but I really think it should be done as a keyword and not an operato. For example,
nullable int a;
nullable int b;
nullable int c = a+ b;
Is immediately obvious what we are doing. The int? syntax is alien and is painful to read/understand. Since this is a feature that isn't going to be used all the time people are going to have look it up to understand how it works when the encounter it.
How can a bool have three values! It can't, that's why you need a new type: nullable bool. In fact I'd keep it as Nullable
What's next... Reference types and attributes... Hmm. Only 450 or so items to cover in 2 weeks.
What's the monetary value of Microsoft certification?
What's the monetary value of Microsoft certification?: "It's pretty clear that the MSDN2 material was consulted when the Exam 70-526 objective were drafted. For example, the objective �Use the Windows Forms Designer to create default event handlers.� maps directly to the topic How to: Create Default Event Handlers on the Windows Forms Designer. Need a resource for the exam objective �Connect multiple events to a single event handler�? Check out the MSDN2 topic How to: Connect Multiple Events to a Single Event Handler in Windows Forms. Objective 'Set page details for printing by using the PageSetupDialog component.' maps to PageSetupDialog Component (Windows Forms). There's not a one-to-one mapping of all objectives, but there are a lot of direct mappings. It's just hard not to learn when you use this approach, and it makes it easier to find related information in the future because it drills the content structure into your head."
What's the monetary value of Microsoft certification?
What's the monetary value of Microsoft certification?: "The technique I use is this: I create an Excel spreadsheet with all the objectives listed, and I create a column listing resources (usually hyperlinks) for each objective. For Exam 70-526, I've found this to be easy. Better yet, in the process of searching for resources, I'm definitely getting a much better grasp at the wealth of material and organization of material posted on MSDN2 (http://msdn2.microsoft.com). It's really impressive - kudos to the VS 2005 product teams and documentation team. "
Upgrade Microsoft Certifications + Promo Codes
Microsoft News
Until March 14, there are some promo codes for these.
MCAD Exam 71-551 (Promo code UPG551) MCAD Web
MCAD Exam 71-552 (promo code 552BTA) MCAD Windows
MCSD Exam 71-553 (promo code BTA553) MCSD #1/2
MCSD Exam 71-554 (promo code UPG554) MCSD #2/2
You also get 1 free exam per pass. So if you pass 3 exams you'll get $375USD worth of vouchers, on top of the $375USD you already saved, + you won't write all 7 of the new exams.
Something tells me these won't be easy....
Until March 14, there are some promo codes for these.
MCAD Exam 71-551 (Promo code UPG551) MCAD Web
MCAD Exam 71-552 (promo code 552BTA) MCAD Windows
MCSD Exam 71-553 (promo code BTA553) MCSD #1/2
MCSD Exam 71-554 (promo code UPG554) MCSD #2/2
You also get 1 free exam per pass. So if you pass 3 exams you'll get $375USD worth of vouchers, on top of the $375USD you already saved, + you won't write all 7 of the new exams.
Something tells me these won't be easy....
Sunday, January 29, 2006
Expressions in SSIS
So they are rather convoluted in my opinion, but very powerful.
Expressions in SSIS. The key to making dynamic packages is to use variables and expressions. Go to the variables window and create a new string variable, say DATE. (Use upper case for variables - they're case sensitive and this will save you headaches.) Then create another variable, let's call it SQL_QUERY. Make sure they're both string. Set the default date to 20050112 and the default sql to select * from mytable where date = '20051112'.
Here's where it gets interesting.
Go to the Package tab, then browse to the variables collection. Click on the SQL_QUERY variable and view the properties. Turn on Use as Expression. I use notepad to type in the expression, since they didn't put any ... window in there yet. (SP1??) And the expression is...
"Select * from mytable where date = '" + @[User::DATE] + '"
Your query should show up in the variable value property with the correct date at the end.
Voila. This should remove a bunch of useless script from your code. (See Project REAL where they were passing around the XML/A variable to the Analysis Services command task)
I can think of a few other places this would work (connection strings in variables maybe?).
Next goal is to try and figure out why it takes 5-15 seconds just to load a package from DTRUN.
Expressions in SSIS. The key to making dynamic packages is to use variables and expressions. Go to the variables window and create a new string variable, say DATE. (Use upper case for variables - they're case sensitive and this will save you headaches.) Then create another variable, let's call it SQL_QUERY. Make sure they're both string. Set the default date to 20050112 and the default sql to select * from mytable where date = '20051112'.
Here's where it gets interesting.
Go to the Package tab, then browse to the variables collection. Click on the SQL_QUERY variable and view the properties. Turn on Use as Expression. I use notepad to type in the expression, since they didn't put any ... window in there yet. (SP1??) And the expression is...
"Select * from mytable where date = '" + @[User::DATE] + '"
Your query should show up in the variable value property with the correct date at the end.
Voila. This should remove a bunch of useless script from your code. (See Project REAL where they were passing around the XML/A variable to the Analysis Services command task)
I can think of a few other places this would work (connection strings in variables maybe?).
Next goal is to try and figure out why it takes 5-15 seconds just to load a package from DTRUN.
SQL Server 2005 articles
SQL Server 2005 articles: "Generating Test Data" + Everything else you ever wanted to know about SSIS
Friday, January 27, 2006
Sunday, January 22, 2006
Presentation Zen: Gates, Jobs, & the Zen aesthetic
Presentation Zen: Gates, Jobs, & the Zen aesthetic
Presentation Zen is a very clean web site with some great links on powerpoint presentations.
Presentation Zen is a very clean web site with some great links on powerpoint presentations.
8 mistakes when creating PowerPoint presentations
8 mistakes when creating PowerPoint presentations
Here's one they missed: hide reminders/desktop alerts so you don't get a message like "refill herpes meds" etc during your presentation:
Powerpoint > Tools > Options. > Preferences tab > E-mail Options > Advanced E-mail Options.
Under When new items arrive in my Inbox, clear the Display a New Mail Desktop Alert (default Inbox only) check box.
Here's one they missed: hide reminders/desktop alerts so you don't get a message like "refill herpes meds" etc during your presentation:
Powerpoint > Tools > Options. > Preferences tab > E-mail Options > Advanced E-mail Options.
Under When new items arrive in my Inbox, clear the Display a New Mail Desktop Alert (default Inbox only) check box.
Thursday, January 19, 2006
Thursday, January 12, 2006
Connecting to a Remote SSIS Server
Connecting to a Remote SSIS Server
There are some hoops to jump through for access denied errors with SSIS.
There are some hoops to jump through for access denied errors with SSIS.
Wednesday, January 11, 2006
Paolo's WebLog on SQL Server
Paolo's WebLog on SQL Server: "Parent child dimensions in Analysis Services 2005 "
Monday, January 09, 2006
Sunday, January 08, 2006
Download details: PSS Service Center Labs - 2005
Download details: PSS Service Center Labs - 2005
Overview
Do you want to know how Microsoft SQL Product Support Services (PSS) engineers break down problems? Originally designed as an opportunity for customers to work with Microsoft SQL Server Escalation Engineers at the SQL PASS 2005 Conference, these labs can be used for self-paced troubleshooting training on SQL Server 2005.
All labs are documented so that users can work through different scenarios in a self-study environment. These labs cover popular topics such as blocking, performance, memory, and debugging, and data recovery.
My way of hacking myself out of problems with software is usually Sysinternals Filemon & Regmon. There should be some interesting tips from above.
Overview
Do you want to know how Microsoft SQL Product Support Services (PSS) engineers break down problems? Originally designed as an opportunity for customers to work with Microsoft SQL Server Escalation Engineers at the SQL PASS 2005 Conference, these labs can be used for self-paced troubleshooting training on SQL Server 2005.
All labs are documented so that users can work through different scenarios in a self-study environment. These labs cover popular topics such as blocking, performance, memory, and debugging, and data recovery.
My way of hacking myself out of problems with software is usually Sysinternals Filemon & Regmon. There should be some interesting tips from above.
Microsoft Analysis Services - Wikipedia, the free encyclopedia
Microsoft Analysis Services - Wikipedia, the free encyclopedia: "History
Microsoft's foray into OLAP Server business began in 1996 with acqusition of OLAP technology from Israeli company Panorama. In 1998 Microsoft released the first version, named OLAP Services, part of SQL Server 7. OLAP Services supported MOLAP, ROLAP, HOLAP and Hybrid OLAP architectures, used OLEDB for OLAP as the client access API and MDX as a query language. It could work in the client server mode or in offline mode with local cube files. In 2000 Microsoft released the next version, named Analysis Services 2000. The rename from OLAP Services happened because of the inclusion of Data Mining services, so the product wasn't just about OLAP anymore. Analysis Services 2000 was an evolutionary release, it was built on the same architecture as OLAP Services and was backward compatible with it. The major improvements included more flexibility in dimension design, by supporting parent child dimensions, changing dimensions, virtual dimensions etc. Another major area of improvements was much enhanced calculation engine with support for unary operators, custom rollups and cell calculations. Other new features were dimension security, distinct count, connectivity over HTTP, session cubes, grouping levels etc. In 2005 Microsoft released the next generation of OLAP and Data Mining technology as Analysis Services 2005. Unlike previous released, Analysis Services 2005 was a revolutionaly release. It maintained backward compatibility on the API level, i.e. applications written with OLEDB for OLAP and MDX continue to work, but the architecture of the product was completely different. The major change came to the model in the form of UDM - Unified Dimensional Model."
Microsoft's foray into OLAP Server business began in 1996 with acqusition of OLAP technology from Israeli company Panorama. In 1998 Microsoft released the first version, named OLAP Services, part of SQL Server 7. OLAP Services supported MOLAP, ROLAP, HOLAP and Hybrid OLAP architectures, used OLEDB for OLAP as the client access API and MDX as a query language. It could work in the client server mode or in offline mode with local cube files. In 2000 Microsoft released the next version, named Analysis Services 2000. The rename from OLAP Services happened because of the inclusion of Data Mining services, so the product wasn't just about OLAP anymore. Analysis Services 2000 was an evolutionary release, it was built on the same architecture as OLAP Services and was backward compatible with it. The major improvements included more flexibility in dimension design, by supporting parent child dimensions, changing dimensions, virtual dimensions etc. Another major area of improvements was much enhanced calculation engine with support for unary operators, custom rollups and cell calculations. Other new features were dimension security, distinct count, connectivity over HTTP, session cubes, grouping levels etc. In 2005 Microsoft released the next generation of OLAP and Data Mining technology as Analysis Services 2005. Unlike previous released, Analysis Services 2005 was a revolutionaly release. It maintained backward compatibility on the API level, i.e. applications written with OLEDB for OLAP and MDX continue to work, but the architecture of the product was completely different. The major change came to the model in the form of UDM - Unified Dimensional Model."
Propagating Stimula: Setting Up a SQL Server Stress Test Environment in 8 Steps
Propagating Stimula: Setting Up a SQL Server Stress Test Environment in 8 Steps: "Setting Up a SQL Server Stress Test Environment in 8 Steps"
Great article, even for general requirements gathering and analysis.
Great article, even for general requirements gathering and analysis.
Managing Analysis Services Partitions with Table-Valued Functions (table UDFs)
Managing Analysis Services Partitions with Table-Valued Functions (table UDFs): "Here's an Adventure Works cube example:
1.) Create the following function in the AdventureWorksDW database:
----------------------
CREATE FUNCTION dbo.udf_FactInternetSales_Date_Range
(@Start_OrderDateKey INT, @End_OrderDateKey INT)
RETURNS table
AS
RETURN
(
SELECT *
FROM dbo.FactInternetSales
WHERE OrderDateKey >= @Start_OrderDateKey
AND OrderDateKey <= @End_OrderDateKey
)
----------------------
2.) Open up BIDS and the Adventure Work cubes and browse to the Partitions tab.
3.) Under the 'Internet Sales' measure group partitions, change the Internet_Sales_2004 source query to:
SELECT * FROM dbo.udf_FactInternetSales_Date_Range(915,1280)
4.) Do the same for the other partitions, except change the input OrderDateKey ranges passed into the UDF."
1.) Create the following function in the AdventureWorksDW database:
----------------------
CREATE FUNCTION dbo.udf_FactInternetSales_Date_Range
(@Start_OrderDateKey INT, @End_OrderDateKey INT)
RETURNS table
AS
RETURN
(
SELECT *
FROM dbo.FactInternetSales
WHERE OrderDateKey >= @Start_OrderDateKey
AND OrderDateKey <= @End_OrderDateKey
)
----------------------
2.) Open up BIDS and the Adventure Work cubes and browse to the Partitions tab.
3.) Under the 'Internet Sales' measure group partitions, change the Internet_Sales_2004 source query to:
SELECT * FROM dbo.udf_FactInternetSales_Date_Range(915,1280)
4.) Do the same for the other partitions, except change the input OrderDateKey ranges passed into the UDF."
Friday, January 06, 2006
Geek Noise
Geek Noise: "$size = new-object System.Management.Automation.Host.Size [int] $width = 132 [int] $height = 45 switch( $args.Length ) { 2 { $width = $args[0] $length = $args[1] } 1 { $width = [int] $args[0] $height = [int] ($width / 3) } 0 { 'No args...' | out-host } } 'Setting to $width x $height' | out-host $bufferWidth = $host.UI.RawUI.BufferSize.Width if( $bufferWidth -lt $width ) { $size = $host.UI.RawUI.BufferSize $size.Width = $width $host.UI.RawUI.BufferSize = $size $size.Width = $width $size.Height = $height $host.UI.RawUI.WindowSize = $size } else { $size.Width = $width $size.Height = $height $host.UI.RawUI.WindowSize = $size $size = $host.UI.RawUI.BufferSize $size.Width = $width $host.UI.RawUI.BufferSize = $size } "
Time to download Monad.
Time to download Monad.
Friday, December 30, 2005
Donald Farmer on SQL Server Integration Services : Oracle and SQL Server Integration Services
Donald Farmer on SQL Server Integration Services : Oracle and SQL Server Integration Services: "SQL Server to Oracle. What can I say? S*!& happens. "
Subscribe to:
Posts (Atom)