Sometimes there is a need to display a solid line on the chart without using the "Display missing values as zeros" function. Here is a widget script that will read the average value between two neighboring points and draw a line.
<font face="courier new,courier" size="2"><span>widget.on('processresult', function(widget, result) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> const series = result.result.series;</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> for (let j = 0; j < series.length; j++) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> const data = series[j].data;</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> for (let i = 0; i < data.length; i++) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> if (data[i].y === null) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> let leftIndex = i - 1;</span></font><br/><br/><font face="courier new,courier" size="2"><span> let rightIndex = i + 1;</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> while (leftIndex >= 0 && data[leftIndex].y === null) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> leftIndex--;</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> while (rightIndex < data.length && data[rightIndex].y === null) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> rightIndex++;</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> const leftValue = leftIndex >= 0 ? data[leftIndex].y : null;</span></font><br/><br/><font face="courier new,courier" size="2"><span> const rightValue = rightIndex < data.length ? data[rightIndex].y : null;</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> if (leftValue === null && rightValue === null) {</span></font><br/><br/><font face="courier new,courier" size="2"><span> data[i].y = 0; // You can change this default value</span></font><br/><br/><font face="courier new,courier" size="2"><span> } else {</span></font><br/><br/><font face="courier new,courier" size="2"><span> const average = ((leftValue || 0) + (rightValue || 0)) / 2;</span></font><br/><br/><br/><br/><br/><font face="courier new,courier" size="2"><span> data[i].y = average;</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><font face="courier new,courier" size="2"><span> }</span></font><br/><br/><font face="courier new,courier" size="2"><span>});</span></font>
Before:

After:

Leave a comment if this helped or if you need further assistance!
Disclaimer: This blog post contains one possible custom workaround solution for users with similar use cases. We cannot guarantee that the custom code solution described in this post will work in every scenario or with every Sisense software version. As such, we strongly advise users to test solutions in their environment before deploying them to ensure that the solutions proffered function as desired. To avoid doubt, the content of this blog post is provided to you "as-is" and without warranty of any kind, express, implied, or otherwise, including without limitation any warranty of security and or fitness for a particular purpose. The workaround solution described in this post incorporates custom coding, which is outside the Sisense product development environment and is, therefore, not covered by Sisense warranty and support services.