Boxplot
BoxPlot SVG _ Resolution Time =
//Developed by Kerry Kolosko
//BoxPlot values
VAR _min = MIN('Service Desk'[Resolution Total Hours])
VAR _max = MAX('Service Desk'[Resolution Total Hours])
VAR _avg = AVERAGE('Service Desk'[Resolution Total Hours])
VAR _median = MEDIAN('Service Desk'[Resolution Total Hours])
VAR _Q1 = [IQR 1 Resolution Time (hrs)] // PERCENTILE.INC('Service Desk'[Resolution Total Hours], 0.25)
VAR _Q3 = [IQR 3 Resolution Time (hrs)] // PERCENTILE.INC('Service Desk'[Resolution Total Hours], 0.75)
VAR _IQR = _Q3 - _Q1
//BoxPlot Axis Range
VAR _minAll = CALCULATE(MIN('Service Desk'[Resolution Total Hours]), ALL('Service Desk'))
VAR _maxAll = CALCULATE(MAX('Service Desk'[Resolution Total Hours]), ALL('Service Desk'))
VAR _axisRange = _maxAll - _minAll
//Fitting BoxPlot Values to Axis
VAR _averageNode = _avg / _axisRange * 100
VAR _medianNode = _median / _axisRange * 100
VAR _maxNode = _max / _axisRange * 100
VAR _minNode = _min / _axisRange * 100
VAR _Q1Node = _Q1 / _axisRange * 100
VAR _Q3Node = _Q3 / _axisRange * 100
VAR _IQRNode = _IQR / _axisRange * 100
RETURN
"data:image/svg+xml;utf8," & "
<svg width='100' height='20' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' overflow='visible'>
<rect id='box' x='" & _Q1Node & "' y='4' width='" & _IQRNode & "' height='12' fill='lightsteelblue'/>
<line x1='" & _minNode & "' y1='10' x2='" & _Q1Node & "' y2='10' stroke='black' stroke-width='2'/>
<line x1='" & _Q3Node & "' y1='10' x2='" & _maxNode & "' y2='10' stroke='black' stroke-width='2'/>
<rect id='minmarker' x="&"'"&_minNode&"'"&" y='1' width='2' height='20' fill='black'></rect>
<rect id='maxmarker' x="&"'"&_maxNode&"'"&" y='1' width='2' height='20' fill='black'></rect>
<circle cx='" & _averageNode & "' cy='10' r='3' fill='red'/>
</svg>"
Dumbell
_Dumbell Normalised =
VAR Category_1 = MIN(financials[Gross Sales])
VAR Category_2 = MAX(financials[Gross Sales])
VAR AXISMAXRANGE = CALCULATE(MAX(financials[Gross Sales]),ALL(financials))
VAR AXISMINRANGE = CALCULATE(MIN(financials[Gross Sales]),ALL(financials))
VAR AXISRANGE = AXISMAXRANGE-AXISMINRANGE
VAR NODE_1 = Category_1/AXISMAXRANGE*100
VAR NODE_2 = Category_2/AXISMAXRANGE*100
VAR MINNODE = MIN(NODE_1,NODE_2)
VAR MAXNODE = MAX(NODE_1,NODE_2)
VAR Result = IF(HASONEVALUE(financials[Country]),
"data:image/svg+xml;utf8," & "
<svg width='100' height='20' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='-4 0 108 20' overflow='visible'>
<rect id='track' x="&"'"&MINNODE&"'"&" y='9' width="&"'"&MAXNODE&"'"&" height='2' fill='black'/>
<circle id='cat_1' cx="&"'"&NODE_1&"'"&" cy='10' r='4' width='2' height='20' fill='orange'></circle>
<circle id='cat_2' cx="&"'"&NODE_2&"'"&" cy='10' r='4' width='2' height='20' fill='blue'></circle>
</svg>
", BLANK())
RETURN
Result