Recently I’ve been spending a lot of time with Explorer and I’ve made a few interesting discoveries that I wanted to pass along.
I’m not sure why some of my BI colleagues haven’t been giving Explorer any love (see the DSLayer Explorer Gets No Love podcast), but I think it’s a phenomenal product… but with any product there are always little quirks to deal with. Some people call them bugs… I call them quirks. 🙂
I spent a good part of a day experiencing truncation frustration.
I was trying to determine how to display a capacitance value within Explorer. Capacitance as you may know can be a extremely large or an extremely small number. It took me multiple attempts to figure out how to get it to work but I finally cracked it!
What Didn’t Work
Capacitance was stored in the database as a float, which worked great when I used it as a measure — but when I displayed it as a facet value, suddenly Explorer began to get it wrong. Here are both the facet and the measure for capacitance displayed side by side. It seemed only able to display up to three decimal places.
Here is how I initially had the capacitance defined as a float.
Normally the first thing to do with numbers is leverage the format value within the semantic layer and I tried everything but somehow, if the capacitance was stored as a number, Explorer would consistently drop the significant values to the right of the decimal place. Here is how I defined the custom format for the capacitance. I tried both # and 0’s but neither worked.
The IDT appears to show the number correctly when I preview it…
… and yet it still appeared incorrectly within Explorer. What was going on? At this point it’s pretty clear that this
bug quirk should be fixed, but I needed to get it working asap. I needed a work around.
I know I was going to have to convert the capacitance to a string. The added benefit of this was that now capacitance would also be full searchable as a string.
I tried multiple formulas to try and do the conversion to a string.
None of these worked successfully:
- cast (Capacitors.Capacitance as varchar(18)) returns scientific notation – Yuck.
- Str (Capacitors.Capacitance,10,8)
- charindex([^0],reverse(Str (Capacitors.Capacitance,10,8)))
What Did Work
The problem now was that regardless of how many decimals of precision the capacitance had, there were always 8 trailing zeros and I desperately wanted to get rid of these, so finally I found the magic formula:
CASE WHEN PATINDEX(‘%[1-9]%’, REVERSE(Str (Capacitors.Capacitance,10,8))) < PATINDEX(‘%.%’, REVERSE(Str (Capacitors.Capacitance,10,8))) THEN LEFT(Str (Capacitors.Capacitance,10,8), LEN(Str (Capacitors.Capacitance,10,8)) – PATINDEX(‘%[1-9]%’, REVERSE(Str (Capacitors.Capacitance,10,8))) + 1) ELSE LEFT(Str (Capacitors.Capacitance,10,8), LEN(Str (Capacitors.Capacitance,10,8)) – PATINDEX(‘%.%’, REVERSE(Str (Capacitors.Capacitance,10,8)))) END
Special Thanks to SwePeso
After beating my head against a wall, the sense of achievement and satisfaction were extremely rewarding and reminded me of why I love my job so much. I got what I wanted.
It was great. The user can search for 0027 capacitance and will get the appropriate match (more on that next week). Also, you can also observe that all the capacitance values show up in the correct sort order, which means when I display capacitance is order from smallest to largest they are sorted in the correct order.
As Explorer continues to mature, it’s my hope that more and more of these quirks will be addressed by the product team and more of the product will work as expected — becoming a fully fledged, first-class citizen of the semantic layer.
I’d also would like to see hyperlink support within Explorer. I think this is long overdue. Please help me vote YES, thumbs up for this feature >> http://bit.ly/SzSSo0