<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6001.18248" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=529104220-21062009><FONT face="Lucida Sans" color=#000080 
size=2>Thanks - I have logged <A 
href="http://jira.pentaho.com/browse/MONDRIAN-568"><FONT face="Times New Roman" 
size=3>http://jira.pentaho.com/browse/MONDRIAN-568</FONT></A>&nbsp;to track 
this.</FONT></SPAN></DIV><BR>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000080 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> Alexander Korsukov 
  [mailto:akorsukov@gmail.com] <BR><B>Sent:</B> Saturday, June 20, 2009 11:52 
  PM<BR><B>To:</B> jhyde@pentaho.com; Mondrian developer mailing 
  list<BR><B>Subject:</B> Re: [Mondrian] [Measures] dimension is equals any 
  other [Measures]dimension.<BR></FONT><BR></DIV>
  <DIV></DIV>Hello, Julian.<BR><BR>See <SPAN 
  style="FONT-FAMILY: courier new,monospace">RoleImpl.getAccess(Dimension)</SPAN><BR><BR>Dimension 
  compared with dimensions from all cubes. I catch following 
  problem.<BR><BR>Have cube <SPAN 
  style="FONT-FAMILY: courier new,monospace">[CubeA]</SPAN> with measures <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Measures].[MA1]</SPAN> and <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Measures].[MA2]</SPAN> and cube 
  <SPAN style="FONT-FAMILY: courier new,monospace">[CubeB]</SPAN>. Define 
  roles:<BR><BR><SPAN style="FONT-FAMILY: courier new,monospace">&lt;Role 
  name="RoleA"&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; &lt;SchemaGrant 
  access="none"&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;CubeGrant cube="CubeA" 
  access="all"&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;HierarchyGrant 
  hierarchy="[Measures]" access="custom"&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;MemberGrant 
  member="</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">[Measures]</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">.</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">[MA1]</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">" access="all"/&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/HierarchyGrant&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace"></SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/CubeGrant&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/SchemaGrant&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/Role&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace"><BR>&lt;Role 
  name="RoleB"&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; &lt;SchemaGrant 
  access="none"&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;CubeGrant cube="CubeB" 
  access="all"/&gt;</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/SchemaGrant&gt;</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">&lt;/Role&gt;</SPAN><BR><BR>When 
  create mondrian connection with <SPAN 
  style="FONT-FAMILY: courier new,monospace">Role=RoleA, have access only to 
  </SPAN><SPAN style="FONT-FAMILY: courier new,monospace">[Measures].[MA1]. 
  </SPAN>When create mondrian connection with <SPAN 
  style="FONT-FAMILY: courier new,monospace">Role=RoleA,RoleB</SPAN>, have 
  access to all measures from<SPAN style="FONT-FAMILY: courier new,monospace"> 
  [</SPAN><SPAN style="FONT-FAMILY: courier new,monospace">CubeA</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">]<SPAN 
  style="FONT-FAMILY: arial,helvetica,sans-serif">. Why? Because when check 
  role</SPAN> RoleB<SPAN style="FONT-FAMILY: arial,helvetica,sans-serif"> 
  mondrian found </SPAN>[Measure]</SPAN> dimension of <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Cube</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">B</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">]</SPAN> then equals to <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Measure]</SPAN> dimension of <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Cube</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">A</SPAN><SPAN 
  style="FONT-FAMILY: courier new,monospace">]<SPAN 
  style="FONT-FAMILY: arial,helvetica,sans-serif"> and therefore</SPAN></SPAN> 
  get access to all members of <SPAN 
  style="FONT-FAMILY: courier new,monospace">[Measure]</SPAN>.<BR><BR>Alexander.<BR><BR>On 
  Sat, Jun 20, 2009 at 00:30, Julian Hyde&lt;<A 
  href="mailto:jhyde@pentaho.com">jhyde@pentaho.com</A>&gt; wrote:<BR>&gt; It 
  wasn't by design, but I don't see it as a glaring bug because we don't<BR>&gt; 
  need to compare dimensions from different cubes. I think the methods 
  on<BR>&gt; member, level, hierarchy do the same.<BR>&gt;<BR>&gt; We compare 
  dimensions for equality a lot - for example<BR>&gt; 
  RolapEvaluator.setContext(Member) calls it - so the implementation needs 
  to<BR>&gt; be very efficient. Frankly, the current implementation, of one 
  name<BR>&gt; comparison, is probably not efficient enough. If we could comehow 
  canonize<BR>&gt; dimensions, we could use identity.<BR>&gt;<BR>&gt; What is 
  your use case for this? We probably need a method that compares<BR>&gt; 
  objects in the same cube, and a less efficient method that works 
  globally.<BR>&gt; Depending on the use cases, equals could remain the former 
  (and we'd correct<BR>&gt; the doc) or would become the latter.<BR>&gt;<BR>&gt; 
  Julian<BR>&gt;<BR>&gt;&gt; -----Original Message-----<BR>&gt;&gt; From: <A 
  href="mailto:mondrian-bounces@pentaho.org">mondrian-bounces@pentaho.org</A><BR>&gt;&gt; 
  [mailto:<A 
  href="mailto:mondrian-bounces@pentaho.org">mondrian-bounces@pentaho.org</A>] 
  On Behalf Of Alexander Korsukov<BR>&gt;&gt; Sent: Friday, June 19, 2009 12:08 
  AM<BR>&gt;&gt; To: Mondrian developer mailing list<BR>&gt;&gt; Subject: 
  [Mondrian] [Measures] dimension is equals any other<BR>&gt;&gt; 
  [Measures]dimension.<BR>&gt;&gt;<BR>&gt;&gt; Hello.<BR>&gt;&gt;<BR>&gt;&gt; 
  Right now, [Measures] dimension of one RolapCube is equals 
  [Measures]<BR>&gt;&gt; dimension of any another RolapCube, because 
  RolapDimension and<BR>&gt;&gt; DimensionBase does not override equals() 
  method, and the base class<BR>&gt;&gt; (OlapElementBase) compares only a 
  name.<BR>&gt;&gt;<BR>&gt;&gt; My fix: add method to RolapDiemnsion (or 
  probably to DimensionBase)<BR>&gt;&gt;<BR>&gt;&gt; &nbsp; &nbsp; public 
  boolean equals(Object o) {<BR>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; if (this == 
  o) {<BR>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 
  true;<BR>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; }<BR>&gt;&gt; &nbsp; &nbsp; 
  &nbsp; &nbsp; if (!(o instanceof RolapDimension) || isMeasures() 
  ||<BR>&gt;&gt; ((RolapDimension)o).isMeasures()) {<BR>&gt;&gt; &nbsp; &nbsp; 
  &nbsp; &nbsp; &nbsp; &nbsp; return false;<BR>&gt;&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; }<BR>&gt;&gt;<BR>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; return 
  equals(o);<BR>&gt;&gt; &nbsp; &nbsp; }<BR>&gt;&gt;<BR>&gt;&gt; Future more, if 
  I have cube [A] with dimension [D] and cube [B] with<BR>&gt;&gt; dimension [D] 
  and try to check equality I will see following<BR>&gt;&gt;<BR>&gt;&gt; 
  RolapCubeDimension dimDofA = ...;<BR>&gt;&gt; RolapCubeDimension dimDofB = 
  ...;<BR>&gt;&gt;<BR>&gt;&gt; // call boolean<BR>&gt;&gt; 
  mondrian.olap.OlapElementBase.equals(OlapElement mdxElement)<BR>&gt;&gt; 
  dimDofA.equals(dimDofB) // result is true<BR>&gt;&gt;<BR>&gt;&gt; // call 
  boolean mondrian.rolap.RolapCubeDimension.equals(Object o)<BR>&gt;&gt; 
  dimDofA.equals((Object)dimDofB) // result is false<BR>&gt;&gt;<BR>&gt;&gt; 
  This is bug or feature by design?<BR>&gt;&gt;<BR>&gt;&gt; --<BR>&gt;&gt; Best 
  regards,<BR>&gt;&gt; Alexander Korsukov<BR>&gt;&gt; 
  _____________________________________________________<BR>&gt;&gt; mailto:<A 
  href="mailto:akorsukov@gmail.com">akorsukov@gmail.com</A> &nbsp; &nbsp; &nbsp; 
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;icq:8572488<BR>&gt;&gt; (2E0A2052) &nbsp; 
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<A 
  href="mailto:xmpp%3Ashko@jabber.ru">xmpp:shko@jabber.ru</A> 
</BLOCKQUOTE></BODY></HTML>