<!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.6000.16441" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2>Alan,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2>That looks like a bug to me. Can you please log it as a bug 
against mondrian at sf.net, with the testcase you provided 
below?</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2>I think that the "unknown usage" message is just a warning, 
which you can safely ignore, so this bug has a workaround.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2>Thanks,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=847435016-18052007><FONT face=Verdana 
color=#000080 size=2>Julian</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> mondrian-bounces@pentaho.org 
  [mailto:mondrian-bounces@pentaho.org] <B>On Behalf Of </B>Alan 
  Li<BR><B>Sent:</B> Thursday, May 17, 2007 7:12 PM<BR><B>To:</B> 
  mondrian@pentaho.org<BR><B>Subject:</B> [Mondrian] Recognizer.checkLevels() 
  issue<BR></FONT><BR></DIV>
  <DIV></DIV>Julian,<BR><BR>Suppose a user designs the base fact table that is 
  fully de-normalized (e.g. members of each level are in the fact table for all 
  dimensions.&nbsp; And I know that this is normally designed as a start schema 
  where there are separate dimension tables, but this is a requirement that we 
  have).&nbsp; And suppose the user creates an aggregate table for that fact 
  table, then he would see warning messages like: 
  <BR><BR>mondrian.rolap.aggmatcher.AggTableManager - 
  Recognizer.checkUnusedColumns: Candidate aggregate table 'agg_1_facts' for 
  fact table 'facts' has a column 'month' with unknown usage.<BR><BR>I believe 
  that this may be an issue in Recognizer.checkLevels() where the hierarchyUsage 
  has no foreign key, thus will not match any of the notSeenForeignKeys.&nbsp; 
  This ends up preventing the code from trying to match the levels to the 
  aggtable columns.<BR><BR>The following is my schema file that causes this 
  problem with the 2.3.2 release.&nbsp; Your feedback is 
  appreciated.<BR><BR>&lt;?xml version="1.0"?&gt;<BR>&lt;Schema 
  name="fx"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Cube name="fx" 
  cache="false"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Table 
  schema="fx4olap" name="facts"&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;AggName schema="fx4olap" 
  name="agg_1_facts"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggFactCount 
  column="row_count"/&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggMeasure name="[Measures].[Price]" 
  column="avg_price"/&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggMeasure 
  name="[Measures].[Volume]" column="total_volume"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Office].[Country]" column="office_country"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Office].[State]" column="office_state"/&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Office].[City]" column="office_city"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Office].[Name]" column="office_name"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Source].[Type]" column="source_type"/&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Source].[Provider]" column="source_name"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Time].[Year]" column="year"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Time].[Month]" column="month"/&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel 
  name="[Time].[Day]" column="day"/&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name="[Symbol].[Symbol]" 
  column="symbol"/&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;/AggName&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;/Table&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Dimension 
  name="Office"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;Hierarchy hasAll="true" allMemberName="All Offices" defaultMember="All 
  Offices"&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;Level name="Country" column="office_country" 
  uniqueMembers="true"/&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="State" 
  column="office_state" uniqueMembers="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="City" 
  column="office_city" uniqueMembers="true"/&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="Name" 
  column="office_name" uniqueMembers="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/Hierarchy&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;/Dimension&gt;<BR><BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;Dimension name="Source"&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy hasAll="true" 
  allMemberName="All Sources" defaultMember="All 
  Sources"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;Level name="Type" column="source_type" 
  uniqueMembers="true"/&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="Provider" 
  column="source_name" uniqueMembers="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/Hierarchy&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;/Dimension&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;Dimension name="Time" type="TimeDimension"&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy 
  hasAll="false"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;Level name="Year" column="year" type="Numeric" 
  uniqueMembers="true" levelType="TimeYears"/&gt; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level 
  name="Month" column="month" type="Numeric" uniqueMembers="false" 
  levelType="TimeMonths"/&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="Day" column="day" 
  type="Numeric" uniqueMembers="false" levelType="TimeDays"/&gt; 
  <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;/Hierarchy&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;/Dimension&gt;<BR><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Dimension 
  name="Symbol"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;Hierarchy hasAll="false"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name="Symbol" column="symbol" 
  uniqueMembers="true"/&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &lt;/Hierarchy&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &lt;/Dimension&gt;<BR><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Measure 
  name="Price" column="price" aggregator="avg" formatString="#,###.##" 
  visible="true"/&gt; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Measure 
  name="Volume" column="volume" aggregator="sum" formatString="#,###,###,###" 
  visible="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; 
  &lt;/Cube&gt;<BR>&lt;/Schema&gt;<BR><BR></BLOCKQUOTE></BODY></HTML>