<div dir="ltr">The full docs about Cache() is here.<div><br></div><div><a href="http://mondrian.pentaho.com/documentation/performance.php#Optimizing_Calculations_with_the_Expression_Cache">http://mondrian.pentaho.com/documentation/performance.php#Optimizing_Calculations_with_the_Expression_Cache</a><br></div><div><br></div><div>Not sure why it wouldn&#39;t work. It&#39;s a trivial function implementation.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 16, 2015 at 4:08 PM, Hilario Fernandes <span dir="ltr">&lt;<a href="mailto:hilario.fernandes@cortex-intelligence.com" target="_blank">hilario.fernandes@cortex-intelligence.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Unfortunately using the Cache() around the except in the <span style="font-size:12.8000001907349px">FILTERED_D set seems no make no difference... Any reason why it shouldn&#39;t?</span><div><span style="font-size:12.8000001907349px"><br></span></div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 16, 2015 at 1:47 PM, Brandon Jackson <span dir="ltr">&lt;<a href="mailto:usbrandon@gmail.com" target="_blank">usbrandon@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>Luc!  Thanks for that golden nugget.<br><br>Sent from my iPhone</div><div><div><div><br>On Jun 16, 2015, at 10:00 AM, Luc Boudreau &lt;<a href="mailto:lucboudreau@gmail.com" target="_blank">lucboudreau@gmail.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><p dir="ltr">If you know that a given mdx expression will always return the same value, you can wrap it in a Cache() function. </p>
<div class="gmail_quote">On Jun 16, 2015 10:55, &quot;Hilario Fernandes&quot; &lt;<a href="mailto:hilario.fernandes@cortex-intelligence.com" target="_blank">hilario.fernandes@cortex-intelligence.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The set returned by the Except() is small, 3 members. If we replace the except with those 3 members, the performance is closer to expected.<div><br></div><div>Is there some way we can avoid the except from being recalculated on each iteration?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 15, 2015 at 2:44 PM, Matt Campbell <span dir="ltr">&lt;<a href="mailto:mcampbell@pentaho.com" target="_blank">mcampbell@pentaho.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">NonEmptyCrossJoin and Crossjoin on a NON EMPTY axis are mapped to the same native evaluator, so there should be no difference.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">How big is the set returned by Except?  That Aggregate() needs to be evaluated for each tuple on the rows, which can be time consuming for larger sets.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Just out of curiosity, if you replace the named set containing the Except with the same enumerated members the except() would return, do you see much difference?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif"> <a href="mailto:mondrian-bounces@pentaho.org" target="_blank">mondrian-bounces@pentaho.org</a> [mailto:<a href="mailto:mondrian-bounces@pentaho.org" target="_blank">mondrian-bounces@pentaho.org</a>]
<b>On Behalf Of </b>Hilario Fernandes<br>
<b>Sent:</b> Monday, June 15, 2015 1:36 PM<br>
<b>To:</b> Mondrian developer mailing list</span></p><div><div><br>
<b>Subject:</b> Re: [Mondrian] Except function performance<u></u><u></u></div></div><p></p><div><div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Thank you for your reply Matt! <u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">We are using the CrossJoin() function in our mdx, i just used the &#39;*&#39; operator for readability. Will NonEmptyCrossjoin() be more efficient than CrossJoin() considering that we are using NonEmpty on the axis?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Unfortunately we already have the ExpandNonNative property set to true.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Mon, Jun 15, 2015 at 2:26 PM, Matt Campbell &lt;<a href="mailto:mcampbell@pentaho.com" target="_blank">mcampbell@pentaho.com</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Except() is not handled natively.  You can try setting “mondrian.native.ExpandNonNative=true”, which
 will evaluate the except non-natively and attempt to include the resulting tuples in a native context.  That property is enabled by default in Pentaho biserver, but false by default in Mondrian.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Another thing that caught my eye- the ‘*’ crossjoin operator in your query is not mapped to native
 crossjoin (MONDRIAN-2284).  So that could also be a factor.  Try replacing the crossjoins with nested NonEmptyCrossJoin().</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">
<a href="mailto:mondrian-bounces@pentaho.org" target="_blank">mondrian-bounces@pentaho.org</a> [mailto:<a href="mailto:mondrian-bounces@pentaho.org" target="_blank">mondrian-bounces@pentaho.org</a>]
<b>On Behalf Of </b>Hilario Fernandes<br>
<b>Sent:</b> Monday, June 15, 2015 12:41 PM<br>
<b>To:</b> Mondrian mailing list<br>
<b>Subject:</b> Re: [Mondrian] Except function performance</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hello!<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I&#39;ve sent this question a while ago without any replay, bringing it up again.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">As I could see, using something like except in that crossjoin, it cannot use a native evaluation and that slows things really a lot. This is as far as i&#39;ve gotten, maybe someone
 that knows how things work more in dept can throw some comments in?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Wed, Mar 4, 2015 at 2:15 PM, Hilario Fernandes &lt;<a href="mailto:hilario.fernandes@cortex-intelligence.com" target="_blank">hilario.fernandes@cortex-intelligence.com</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">Hi!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I&#39;m having somewhat of a performance problem when trying execute the following query:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">WITH<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">MEMBER [Measures].[TotalA] AS<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">IIF((NOT IsEmpty([Measures].[M1])), Aggregate({[A].CurrentMember} * {[B].[Total B]} * {[C].[Total C]} * {[FILTERED_D]} * {[E].[Total E]}, [Measures].[M1]), NULL)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">SET [FILTERED_D] AS<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Except({[D].[D].Members},{[D].[D].[member1], [D].[D].[member2]})})<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">SELECT<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">NON EMPTY ({[Measures].[M1], [Measures].[TotalA]}) ON COLUMNS,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">NON EMPTY [A].[A].Members * [B].[B].Members * [C].[C].Members * [FILTERED_D] * [E].[E].Members ON ROWS<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">FROM [C]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal">The point of the TotalA measure is to return the total of the measure for every A member, repeating it for the rest of the other dimension members on the axis. The problem is this
 measure must respect the filters in that axis, so the except is placed both on the rows and used on the aggregate.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thing is, when the except is used in the TotalA calculation its makes the evaluation a lot slower. This only happens with except, if something like Filter(members, measure &gt;100)
 is used then there is no major difference.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Can anyone shed some light on why this happens? And maybe some ideas to work around it with some other way to achieve the same result.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888"> </span><u></u><u></u></p>
</div>
<p class="MsoNormal"><span style="color:#888888">--
</span><u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:#888888">Hilario Fernandes</span><u></u><u></u></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">Hilario Fernandes<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
Mondrian mailing list<br>
<a href="mailto:Mondrian@pentaho.org" target="_blank">Mondrian@pentaho.org</a><br>
<a href="http://lists.pentaho.org/mailman/listinfo/mondrian" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">Hilario Fernandes<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div></div></div>
</div>

<br>_______________________________________________<br>
Mondrian mailing list<br>
<a href="mailto:Mondrian@pentaho.org" target="_blank">Mondrian@pentaho.org</a><br>
<a href="http://lists.pentaho.org/mailman/listinfo/mondrian" rel="noreferrer" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div>Hilario Fernandes</div></div></div>
</div>
<br>_______________________________________________<br>
Mondrian mailing list<br>
<a href="mailto:Mondrian@pentaho.org" target="_blank">Mondrian@pentaho.org</a><br>
<a href="http://lists.pentaho.org/mailman/listinfo/mondrian" rel="noreferrer" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a><br>
<br></blockquote></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Mondrian mailing list</span><br><span><a href="mailto:Mondrian@pentaho.org" target="_blank">Mondrian@pentaho.org</a></span><br><span><a href="http://lists.pentaho.org/mailman/listinfo/mondrian" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a></span><br></div></blockquote></div></div></div><br>_______________________________________________<br>
Mondrian mailing list<br>
<a href="mailto:Mondrian@pentaho.org" target="_blank">Mondrian@pentaho.org</a><br>
<a href="http://lists.pentaho.org/mailman/listinfo/mondrian" rel="noreferrer" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div>Hilario Fernandes</div></div></div>
</div>
</div></div><br>_______________________________________________<br>
Mondrian mailing list<br>
<a href="mailto:Mondrian@pentaho.org">Mondrian@pentaho.org</a><br>
<a href="http://lists.pentaho.org/mailman/listinfo/mondrian" rel="noreferrer" target="_blank">http://lists.pentaho.org/mailman/listinfo/mondrian</a><br>
<br></blockquote></div><br></div>