Preconditions

In order to use this report, it assumes that you have already some requirements in your SpiraPlan product:

Requirements list

It also assumes you have some risks in your SpiraPlan product:

Risk register

and finally, that you have mapped some of these requirements to risks (and vice-versa):

Requirements mapped to risks

Creating the Custom Report

With the necessary data in place, simply create a new custom report, choosing the following options:

  • Name: Requirements - Risk Traceability Matrix
  • Category: Requirements
  • Format(s):
    • HTML
    • Excel (printable)
    • Word (current)
    • PDF

Then add a custom section to this report, with the following query and template:

Report Query

(select RQ.REQUIREMENT_ID, RQ.NAME as REQUIREMENT_NAME, RK.RISK_ID, RK.NAME as RISK_NAME, RK.RISK_IMPACT_NAME, RK.RISK_PROBABILITY_NAME, RK.RISK_EXPOSURE
from SpiraTestEntities.R_Requirements as RQ
left join SpiraTestEntities.R_ArtifactAssociations as AA on RQ.REQUIREMENT_ID = AA.SOURCE_ARTIFACT_ID and AA.SOURCE_ARTIFACT_TYPE_ID = 1
left join SpiraTestEntities.R_Risks as RK on AA.DEST_ARTIFACT_ID = RK.RISK_ID and AA.DEST_ARTIFACT_TYPE_ID = 14
where RQ.PROJECT_ID = ${ProjectId}
and RQ.IS_DELETED = false)
union
(select RQ.REQUIREMENT_ID, RQ.NAME as REQUIREMENT_NAME, RK.RISK_ID, RK.NAME as RISK_NAME, RK.RISK_IMPACT_NAME, RK.RISK_PROBABILITY_NAME, RK.RISK_EXPOSURE
from SpiraTestEntities.R_Requirements as RQ
left join SpiraTestEntities.R_ArtifactAssociations as AA on RQ.REQUIREMENT_ID = AA.DEST_ARTIFACT_ID and AA.DEST_ARTIFACT_TYPE_ID = 1
left join SpiraTestEntities.R_Risks as RK on AA.SOURCE_ARTIFACT_ID = RK.RISK_ID and AA.SOURCE_ARTIFACT_TYPE_ID = 14
where RQ.PROJECT_ID = ${ProjectId}
and RQ.IS_DELETED = false)

Report Template

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:template match="/RESULTS">
    <table class="DataGrid"><tr><th>Requirement ID</th><th>Requirement Name</th><th>Risk ID</th><th>Risk Name</th><th>Risk Impact</th><th>Risk Probability</th><th>Risk Exposure</th></tr>
      <xsl:for-each select="ROW">
        <tr><td>RQ:<xsl:value-of select="REQUIREMENT_ID"/></td><td><xsl:value-of select="REQUIREMENT_NAME"/></td><td>RK:<xsl:value-of select="RISK_ID"/></td><td><xsl:value-of select="RISK_NAME"/></td><td><xsl:value-of select="RISK_IMPACT_NAME"/></td><td><xsl:value-of select="RISK_PROBABILITY_NAME"/></td><td><xsl:value-of select="RISK_EXPOSURE"/></td>
        </tr>
      </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>

Click Save on the popup, and Save on the main report page. The report is now ready to use.

Running the Report

Now that you have created the report, go to the main Reports tab and choose to run the report in one of the supported formats. You will now see the following:

Requirement IDRequirement NameRisk IDRisk NameRisk ImpactRisk ProbabilityRisk Exposure
RQ:1Functional System RequirementsRK:    
RQ:2Online Library Management SystemRK:    
RQ:3Book ManagementRK:    
RQ:4Ability to add new books to the systemRK:    
RQ:4Ability to add new books to the systemRK:4The book pages may not be easy enough to useMarginalPossible6
RQ:4Ability to add new books to the systemRK:6The client team may not be ready for UATCriticalRare3
RQ:5Ability to edit existing books in the systemRK:    
RQ:5Ability to edit existing books in the systemRK:1The v1.1 release may not be ready in timeCriticalCertain15
RQ:5Ability to edit existing books in the systemRK:5The software licenses may be too expensiveMarginalUnlikely4
RQ:6Ability to delete existing books in the systemRK:    
RQ:7Ability to associate books with different subjectsRK:    
RQ:8Ability to associate books with different authorsRK:    
RQ:8Ability to associate books with different authorsRK:3The database may not support the volumeCriticalUnlikely6
RQ:9Ability to associate books with different editionsRK:    
RQ:9Ability to associate books with different editionsRK:3The database may not support the volumeCriticalUnlikely6

which will render something like: