Skip to main content
 
Go Search
Home
Categories
Bloggers
By: Mike Burger | Posted: October 15, 2009 at 4:51 PM
If you are like me you have spent a lot of time fighting with BIDS to get every connector within SSIS to line up perfectly straight...ahhhhh!!!
 
Thanks to Steve Jackson for this great tip on how to easily format and align all of the items within an SSIS package.  I have fought with this before and had become excellent at holding down the CTRL key in order to slowly move items once I drag them close enough to almost make all the lines straight.
 
Can't wait to try this out!  I wonder if the lines will stay straight once the package is closed and reopened??
By: Mike Burger | Posted: September 29, 2009 at 7:36 PM

Introduction:

I recently worked on a quick SSRS (SQL Server Reporting Services) project with a client that had a need to be able to query large datasets (potentially over 300,000 rows by 30 text columns wide). The report needed to be very dynamic, meaning that the report would need to allow the end user to run the report to return all of the data, or if they chose, filter on any of the columns to limit the end result. Not only this, but the query to pull the data needed to join to almost as many tables as there were columns in the report (a bit of an over exaggeration but we have all been there before).

The true problem with the report is that it would time out when running it from the web browser within SharePoint Integrated mode. The strange part is that the query would run in Management Studio in a couple seconds, and within BIDS (Business Intelligence Development Studio) within about a minute...which in my opinion was still way to long for a report that would be run often by users as an ad-hoc query tool. What could we do to improve the performance of the report?

Suggestion:

Whenever you run into a situation like this, use SSIS (SQL Server Integration Services) to write a quick package which can pre-aggregate the data in some type of reporting database. In this scenario, that was not possible since we needed the data to be available at the most granular level. However, even though we couldn't pre-aggregate the data, we were able to flatten it within a newly created reporting database table.

Essentially what we did was author an SSIS package that ran the original report query to dump the data into a new table local to the installation of SSRS. We were allowed this solution because we had a server that was underutilized that could handle the extra capacity of a new reporting database as well as the strain from having SSRS hit (query) the instance of SQL installed on the box. By doing this, we removed the need for all of the INNER and OUTER joins within the query, and allowed the report to only hit one table in order to return any combination of results from the large dataset.

This scenario worked out well, the SSIS package ran in a matter of seconds and was scheduled to pull the data each day in order to make sure that the data for the report was always refreshed. The SSRS report runs super fast (matter of seconds) and users are able to execute the report at their own will quickly and efficiently.

By: Mike Burger | Posted: September 29, 2009 at 12:59 AM

Overview:

Oftentimes when developing a cube there will be a need to limit which dimensions and measures a user can view within the cube. For the purpose of this blog, the steps and processes needed to develop a solid security model are out of scope; however, I will offer four different techniques which can be used in order to test the cube roles once they are setup.

Ideas for testing roles come from my personal experience as well as from the book, "Expert Cube Development with Microsoft SQL Server 2008 Analysis Services" by Marco Russo (which by the way I highly recommend).

 

Technique One:

The first technique, which I feel is a good place to start testing, can be performed within the Browser tab of BIDS. From here connection string properties can be set by clicking on the "Change User" button within the toolbar. This button on the toolbar is highlighted below:

 

Technique Two:

Similar to technique one, there is also another place within BIDS to perform cube security testing. This can be done by clicking on the "Test cube security" link which shows up within the "Cell Data" tab of each individual role. The benefit to technique one and two are that they can be performed within BIDS while developing the cube.

Technique Three:

The third technique uses a tool that most of us are very familiar with, Excel. You can run a client tool like Excel as another user by right clicking and using the "Run As" option. Once the context of the program has been set you can then browse the cube by creating a connection to the cube as shown in the screenshots below.

Similarly, while connecting to the cube you could create a data connection using the test user's credentials. You could then browse the cube to perform the necessary testing. Note: In some versions of Windows the "Shift" key needs to be held down while right clicking in order to view the "Run As" option.

Technique Four:

The fourth technique, which I admit I was unaware of, is to perform the testing through SQL Server Management Studio. When connecting to Analysis Services click on the "Additional Connection Properties" tab of the "Connect to Server" dialog box (if you are unable to view the tabs click the "Options" button). Once on the "Additional Connection Parameters" tab, you can manually set the Role and Username which will be used to access the cube. The "roles" property can be a comma delimited list, however, you must be an Administrator to use this property. Cube roles which had previously been setup can be used in the comma delimited list. Similarly, the "effectiveusername" property can be used to impersonate another user (domain\username). You must be an Administrator to impersonate another user as well.

By: Mike Burger | Posted: September 1, 2009 at 7:57 PM

Done with Session 01 of the 24 PASS Webinar.  This was by far the largest live meeting I have been a part of with over 450 users.  I will not have time to write a complete review of all the webinars, however, I will add updates in this blog posts comments as I go along!

 

For the first session the sound did seem to cut out a bit, and some of the slides were a bit behind, but overall a good start to the 24 hour event.  Taking notes the best I could as the webinar went along, these were the 10 Big Ideas In Database Design from Paul Nielsen and Louis Davidson:

 

1.     Denormalization is for wimps:  For an OLTP database the extra code it takes to get the data out of the database can outweigh the effort it takes to normalize the database.  However, in reality, there are situations where normalization and denormalization work within the same database.

2.     Use Keys: make sure to use primary and surrogate keys.  These days it seems that there is a trend within application development to not use any keys at all…sometimes Guids are overused.

3.     Generalize:   Leveraging a data driven design and fewer tables can make the database easier to extend.  Find a middle ground between over simplifying the database design and over complicating the design.  Generalization can keep things from getting over complicated.

4.     Class <> Table:  Just because it is a class does not mean it needs to be a table.

5.     Data Drives Design:   You can put business logic at the application level, push it down into procedures, put it in schemas, or put it all the way down into the data.  The further down you are, the more extensible it is.  Don't hide the logic in a nasty query or stored procedure.

6.     Sets Good, Cursors Bad:  Be cognizant of when you are using cursors versus a set based approach (it is okay to use cursors for certain types of iterations), however, SQL Server is very set based.  Understand which approach you are using, and why.

7.     Use Proper Data Types:  Put data in the right sized object.  The speakers used an analogy of inviting people over for tea and making them all drink out of a trough.  If you don't truly need a varchar(max), then don't use one!!

8.     Abstract/Encapsulate --> Extensibility:  Data is much more permanent then which development technique is "hot" this week, year, etc…stored procedures last as long as your data! T-SQL has been around for awhile and will continue to be around longer.  The analogy is that a plug in the wall hides how the power gets to you, but anything that plugs into the plug will work, it can use the power!

9.     Spaghetti is food, not code:  Sometimes a trigger can kick off a procedure, the procedure can then call a trigger, back to procedure, and so on and so on…this hides the code from the programmers / developers.  The data is not easy to follow, it is very hard to trace.  Unraveling all of the stored procedures can not only make the code easier to understand, but it can greatly improve performance.  Sometimes operations need to be complex, most of the time they can be simplified.

10.  NOLOCK = NO Consistency:  Don't forego table locks to try and gain performance.

 

A big argument for a lot of these points is like the answer to most questions in consulting…it depends!  Truthfully for a lot of these points, it truly does depend.  What do you think about these points, do you agree with most of them?  Please let me know if you have any additional details for each point.

 

The next session I am attending in a couple hours is "Session 04 (BI) - Delivering Good Performance Consistently with SSIS (John Welch)".  Due to my extensive experience with SSIS I am really looking forward to this one!

 

 About Mike Burger

ConsultantMike Burger is a consultant for PointBridge.  Mike has developed a great passion for business intelligence and he has in depth information technology and business intelligence experience. Most recentl... [more]

 Tag Cloud

 External Links

 ‭(Hidden)‬ Admin Links