Category Archives: 16765

Nice discussion on real world issues with software projects

Just watched a good session from TechEd USA 2013, it was billed as Agile Software Development with Microsoft Visual Studio ALM but has little that was specifically TFS based; no demos just war stories from Aaron Bjork and Peter Provost

It is a good discussion of the problems, experiences and solutions the Microsoft Visual Studio team went through when trying to move to agile development, including

  • Sprint lengths, be consistent across teams
  • Retrospectives, do you actually act on them?
  • Technical debt, do you write features or bugs?
  • Measure what you do
  • What is the role of the product owner/manager?

Well worth a watch

ALM Rangers sim-ship guidance with the VS11 RC

I am really proud to have been involved in the team of ALM Rangers who have SIMultaneous-SHIPped best practice guidance with Visual Studio 11 RC, which became available last night.

I am sure anyone working with Visual Studio and TFS will find the guidance of value, I have certainly learned a lot whilst helping produce the material. It has been a great experience working with a great crowd of people both inside and outside of Microsoft.

Visual Studio

Speaking on the 15th Feb at the NE Bytes user group on “TFS for Everyone”

I will be speaking at the NE Bytes user group next Wednesday (the 15th of Feb) on ‘TFS for Everyone’.

This a session based on the guest blog post on the UK Visual Studio blog  I did on how TFS is not just for .NET developers. It can be used from a whole range of development platforms and operating systems. I will be including demos using Eclipse and Ubuntu.

Hope to see you there.

Filtering in MDX Calculated Members

BI development is not something I do that often, but from time to time you need to develop a custom report in TFS. I recently had to battle a MDX problem that someone who does more BI development I am sure why have had no issue with; but as with most of these blog posts (or my long term memory as I think of it) I thought it worth a post in case it helps anyone else

What I was trying to do was produce a table, as shown below, that would allow me to report for a project on the total estimated time in the requirements work items (an estimate made in the requirements planning phase of the project), the total original estimate in the tasks work items (the estimate made by the developers during iteration planning) and compare both with the actual completed time from the task work items.

Project Estimated Effort (from Requirements) Estimated Effort (from Task) Actual Effort (from Tasks)
Proj A 10 11 12
Proj B 15 14 21
Proj C 23 20 24
Proj D 9 10 10

 

The problem is that in the TFS warehouse both the requirement and task work item estimate in stored in the

[Measures].[Microsoft_VSTS_Scheduling_OriginalEstimate]

measure. In the MDX query I needed to add a pair of calculated measures that would filter for the two work item type.

This is where I stumbled, should I use IIF() or FILTER(). So I tried both. However, working in Report Builder 3 neither seemed to work. I seemed to end up with either an empty column or not filtering at all and showing the sum of all the work items estimates irrespective of the filter.

The first tip is stop work in Report Builder, this is great for making the report look good, but not the best for resolving MDX issues. Use the query tool within SQL Management Studio. As soon as I did this I saw some of my efforts were returning #Err. This explained my empty columns, Report Builder seemed to just swallow the #Err and give me an empty column.

A a bit more digging I found the form that did what I needed, and ended up with the following form for the MDX in the calculated measures

MEMBER [Measures].[EstimatedWorkForTasks] AS ‘([Measures].[Microsoft_VSTS_Scheduling_OriginalEstimate], [Work Item].[System_WorkItemType].[Task])’

By editing the MDX in SQL Management Studio it was fair quicker to develop and debug

image

Once I was happy with the MDX, I could cut and pasted it back into Report Builder and fix the layout of the report. And all without using either IIF() or FILTER().