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 &#39;agg_1_facts&#39; for fact table &#39;facts&#39; has a column &#39;month&#39; 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=&quot;1.0&quot;?&gt;<br>&lt;Schema name=&quot;fx&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &lt;Cube name=&quot;fx&quot; cache=&quot;false&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Table schema=&quot;fx4olap&quot; name=&quot;facts&quot;&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggName schema=&quot;fx4olap&quot; name=&quot;agg_1_facts&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggFactCount column=&quot;row_count&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggMeasure name=&quot;[Measures].[Price]&quot; column=&quot;avg_price&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggMeasure name=&quot;[Measures].[Volume]&quot; column=&quot;total_volume&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Office].[Country]&quot; column=&quot;office_country&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Office].[State]&quot; column=&quot;office_state&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Office].[City]&quot; column=&quot;office_city&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Office].[Name]&quot; column=&quot;office_name&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Source].[Type]&quot; column=&quot;source_type&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Source].[Provider]&quot; column=&quot;source_name&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Time].[Year]&quot; column=&quot;year&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Time].[Month]&quot; column=&quot;month&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Time].[Day]&quot; column=&quot;day&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;AggLevel name=&quot;[Symbol].[Symbol]&quot; column=&quot;symbol&quot;/&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=&quot;Office&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy hasAll=&quot;true&quot; allMemberName=&quot;All Offices&quot; defaultMember=&quot;All Offices&quot;&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Country&quot; column=&quot;office_country&quot; uniqueMembers=&quot;true&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;State&quot; column=&quot;office_state&quot; uniqueMembers=&quot;true&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;City&quot; column=&quot;office_city&quot; uniqueMembers=&quot;true&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Name&quot; column=&quot;office_name&quot; uniqueMembers=&quot;true&quot;/&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=&quot;Source&quot;&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy hasAll=&quot;true&quot; allMemberName=&quot;All Sources&quot; defaultMember=&quot;All Sources&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Type&quot; column=&quot;source_type&quot; uniqueMembers=&quot;true&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Provider&quot; column=&quot;source_name&quot; uniqueMembers=&quot;true&quot;/&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=&quot;Time&quot; type=&quot;TimeDimension&quot;&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy hasAll=&quot;false&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Year&quot; column=&quot;year&quot; type=&quot;Numeric&quot; uniqueMembers=&quot;true&quot; levelType=&quot;TimeYears&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Month&quot; column=&quot;month&quot; type=&quot;Numeric&quot; uniqueMembers=&quot;false&quot; levelType=&quot;TimeMonths&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Day&quot; column=&quot;day&quot; type=&quot;Numeric&quot; uniqueMembers=&quot;false&quot; levelType=&quot;TimeDays&quot;/&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=&quot;Symbol&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Hierarchy hasAll=&quot;false&quot;&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Level name=&quot;Symbol&quot; column=&quot;symbol&quot; uniqueMembers=&quot;true&quot;/&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=&quot;Price&quot; column=&quot;price&quot; aggregator=&quot;avg&quot; formatString=&quot;#,###.##&quot; visible=&quot;true&quot;/&gt;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;Measure name=&quot;Volume&quot; column=&quot;volume&quot; aggregator=&quot;sum&quot; formatString=&quot;#,###,###,###&quot; visible=&quot;true&quot;/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/Cube&gt;<br>&lt;/Schema&gt;<br><br>