Phoenix hint [Software]
last Monday Simon Davis posted a trick at the Certara-Forum:
[…] viewing an analysis is to […] right-click on the root workflow and choose dependencies, this will generate an XML dump of the whole project that can be rendered in any web browser etc.
Almost perfect – if you want to make the life of monitors, auditors, and inspectors easier. There is a little bug in the XML-engine of PHX. The XML starts with…<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="Workflow.xslt"?>
<?xml version="1.0" encoding="utf-8"?>
Address: file:///C:/foo/bar/Workflow.xml
Row No. 2, Column 1:<?xml version="1.0" encoding="utf-8"?>
^
<?xml version="1.0" encoding="ISO-8859-1"?>
with <?xml version="1.0" encoding="utf-8"?>
, delete the second line, and safe in UTF-8 (otherwise special characters might not be displayed properly).The stylesheet
Workflow.xslt
sucks up too much space, IMHO. This is mine:<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<style type="text/css">
body {
font: normal 1em Tahoma, Verdana, Arial, sans-serif;
}
table {
width: 100%;
font: normal 0.83em Tahoma, Verdana, Arial, sans-serif;
border: 1px solid #000;
border-collapse: collapse;
}
caption {
font-size: 1em;
}
tfoot td {
text-align: left;
}
tbody {
border: 1px solid #000;
border-collapse: collapse;
}
th, td {
padding: 0.1em 0.75em;
height: 1em;
border: 1px solid #000;
border-collapse: collapse;
}
</style>
<body>
<xsl:apply-templates select="Workflow" />
</body>
</html>
</xsl:template>
<xsl:template match="Workflow">
<tr>
<xsl:if test="@Level > 1">
<td></td>
</xsl:if>
<td>
<br/>
<table border="1" rules="groups">
<thead>
<tr>
<xsl:if test="@Level > 1">
<th></th>
</xsl:if>
<th>
<h3>
<xsl:value-of select="@Name"/>
</h3>
</th>
</tr>
</thead>
<xsl:apply-templates select="Executable" />
<xsl:apply-templates select="Workflow" />
</table>
</td>
</tr>
</xsl:template>
<xsl:template match="Executable">
<xsl:if test="position() = 1">
<thead>
<tr>
<th>Object Type</th>
<th>Object Name</th>
<th>Object Status</th>
</tr>
</thead>
</xsl:if>
<tbody>
<tr>
<td><xsl:value-of select="@Type"/></td>
<td><xsl:value-of select="@Name"/></td>
<td><xsl:value-of select="@Status"/></td>
</tr>
<xsl:apply-templates select="Datasource" />
<xsl:apply-templates select="Result" />
</tbody>
</xsl:template>
<xsl:template match="Datasource">
<tr>
<tr>
<td><a name="{@Guid}" id="{@Guid}">Datasource</a></td>
<td><xsl:value-of select="@Name"/></td>
<xsl:choose>
<xsl:when test="@Generated='False'">
<td>Not Generated</td>
</xsl:when>
<xsl:otherwise>
<td><a href="{@FileName}">Source</a></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</tr>
<xsl:if test="Mappings">
<tr>
<td></td>
<td colspan="2"><xsl:apply-templates select="Mappings" /></td>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="Result">
<tr>
<td><a name="{@Guid}" id="{@Guid}">Result</a></td>
<td><xsl:value-of select="@Name"/></td>
<xsl:choose>
<xsl:when test="@Generated='False'">
<td>Not Generated</td>
</xsl:when>
<xsl:otherwise>
<td><a href="{@FileName}">Generated</a></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:template>
<xsl:template match="Mappings">
<table>
<tr><th colspan="2">Mappings</th></tr>
<tr>
<th>Variable</th>
<th>Column</th>
</tr>
<xsl:apply-templates select="Map" />
</table>
</xsl:template>
<xsl:template match="Map">
<tr>
<td><xsl:value-of select="@Variable"/></td>
<td><xsl:value-of select="@Column"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Screenshot:
![[image]](img/uploaded/image345.png)
All links point to the respective data (Source) or results (Generated). Data are in csv-format (comma delimited, decimal separator period). Plots are rendered to jpeg. Guess what *.txt means. These files are particularly interesting because they document the mapping of variables, the PHX version and build, and date/time of execution. Note that this is the timestamp of the object, not when you exported it to XML. Example for a nonparametric crossover-setup:
Date: Oct 28, 2015 15:40:37 Local
/********************************* Begin Mappings *********************************/
Main : BENonparCross.Data.SennTable4_9
Sort :
Subject : subj
Sequence : seq
Response : var
Treatment : trt
/********************************* End Mappings *********************************/
Phoenix Build 6.4.0.768
Treatment Data Layout = Stacked
The result (always in full precision) is given in a csv-file as:
Variables,Median,Confidence_Level,Exact,CI_Lower,CI_Upper
Treatment_Diff_( T - R ),1.25,0.8,0.8,-5,8.5
Treatment_Diff_( T - R ),1.25,0.9,0.9,-6,12.5
Treatment_Diff_( T - R ),1.25,0.95,0.95,-10,16
T,112.5,0.8,0.85400390625,100,125
T,112.5,0.9,0.85400390625,100,125
T,112.5,0.95,0.96142578125,90,130
R,110,0.8,0.85400390625,100,118
R,110,0.9,0.85400390625,100,118
R,110,0.95,0.96142578125,98,125
Date: Oct 28, 2015 15:40:37 Local
Phoenix Build 6.4.0.768
Step 1 Filter
--- Mappings ---
Worksheet : BENonparCross.Workflow.SennTable4_9.Crossover.Confidence Intervals
Exclude : Exact
--- Settings ---
Include where [Variables] = 'Treatment_Diff_( T - R )' (Tolerance = 0) Entire Row
Include where [Confidence_Level] = '0.95' (Tolerance = 0) Entire Row
Step 2 Properties
--- Mappings ---
Sort :
--- Settings ---
Median => PE
CI_Lower => CL_lo
CI_Upper => CL_hi
Variables PE Confidence_Level CL_lo CL_hi
Treatment_Diff_( T - R ) 1.25 0.95 -10 16
I think that the XML-file gives reviewers an opportunity to dive into what has been done – without needing a (trial)license of Phoenix or even on a different operating system. Furthermore, the output is tiny: My 1.32 MiB project-file boiled down to just 68 KiB.

Dif-tor heh smusma 🖖🏼 Довге життя Україна!
![[image]](https://static.bebac.at/pics/Blue_and_yellow_ribbon_UA.png)
Helmut Schütz
![[image]](https://static.bebac.at/img/CC by.png)
The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Complete thread:
- Phoenix hintHelmut 2015-10-31 18:41 [Software]
- Phoenix hint ElMaestro 2015-11-01 07:55
- No audit trail in PHX (what about SAS?) Helmut 2015-11-01 14:01
- What about SAS? d_labes 2015-11-02 09:11
- Phoenix dependencies dump and 'control' of SAS via Connect SDavis 2015-11-12 09:36
- No audit trail in PHX (what about SAS?) Helmut 2015-11-01 14:01
- Phoenix hint ElMaestro 2015-11-01 07:55