<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Excel Do, Dynamic Does</title><link>http://msmvps.com/blogs/xldynamic/default.aspx</link><description>Making the simple complicated is commonplace; making the complicated simple, awesomely simple, that&amp;#39;s creativity - Charles Mingus
</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/msmvps/tUAg" /><feedburner:info uri="msmvps/tuag" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>PowerPivot &amp; DAX &amp; Data Explorer BlogRoll - 31st March 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/l_zccGjyOwc/powerpivot-amp-dax-amp-data-explorer-blogroll-31st-march-2013.aspx</link><pubDate>Tue, 02 Apr 2013 10:35:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1826389</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1826389</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/04/02/powerpivot-amp-dax-amp-data-explorer-blogroll-31st-march-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX &amp;amp; Data Explorer activity announced on Twitter for the week ending 31st March 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI&lt;/strong&gt;&lt;br /&gt;
        Checklist for Memory Optimizations in &lt;strong&gt;PowerPivot&lt;/strong&gt; and Tabular Models - &lt;a href="http://bit.ly/17aAaNr"&gt;bit.ly/17aAaNr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beyond Rational&lt;/strong&gt;&lt;br /&gt;
        MS BI # 85 - &lt;strong&gt;PowerPivot&lt;/strong&gt; #2 - Download , Install , Connect to SQL Server and Getting Started - &lt;a href="http://bit.ly/14BHhyJ"&gt;bit.ly/14BHhyJ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bacon Bits&lt;/strong&gt;&lt;br /&gt;
        Use Data Explorer to Hack into Very Hidden Sheets - &lt;a href="http://bit.ly/ZIcNqk"&gt;bit.ly/ZIcNqk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;readwrite enterprise&lt;/strong&gt;&lt;br /&gt;
        Microsoft&amp;#39;s Data Explorer: Picking Up Where Bing Leaves Off - &lt;a href="http://bit.ly/16XQXDd"&gt;bit.ly/16XQXDd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matt Masson&lt;/strong&gt;&lt;br /&gt;
        Consuming CANSIM Datasets using Data Explorer - &lt;a href="http://bit.ly/10llbL8"&gt;bit.ly/10llbL8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
        Always Show Yesterday, Today, or Tomorrow&amp;rsquo;s Data - &lt;a href="http://bit.ly/14KrjCL"&gt;bit.ly/14KrjCL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lightswitch For The Enterprise&lt;/strong&gt;&lt;br /&gt;
        Self Reporting via &lt;strong&gt;PowerPivot&lt;/strong&gt; In Highly Deferred Execution Mode - &lt;a href="http://bit.ly/VtkjBj"&gt;bit.ly/VtkjBj&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data Explorer&lt;/strong&gt;&lt;br /&gt;
        &lt;strong&gt;Data Explorer&lt;/strong&gt; Online Search Overview - &lt;a href="http://bit.ly/10eJLfx"&gt;bit.ly/10eJLfx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
        New Version of &lt;strong&gt;Data Explorer&lt;/strong&gt; Released - &lt;a href="http://bit.ly/16il19t"&gt;bit.ly/16il19t&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Katie &amp;amp; Emil Newsletter&lt;/strong&gt;&lt;br /&gt;
        Add-in &lt;strong&gt;Data Explorer&lt;/strong&gt; and Excel tutorial - &lt;a href="http://conta.cc/XDYIHw"&gt;conta.cc/XDYIHw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQL blog.com&lt;/strong&gt;&lt;br /&gt;
        BI Beginner: &lt;strong&gt;Data Explorer&lt;/strong&gt; is a must have - &lt;a href="http://bit.ly/YBl7bO"&gt;bit.ly/YBl7bO&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gob&amp;aacute;n Saor&lt;/strong&gt;&lt;br /&gt;
        M&amp;rsquo;s back &amp;ndash; Create a &lt;strong&gt;PowerPivot&lt;/strong&gt; Time Dimension using Excel&amp;rsquo;s &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/ZqJVmq"&gt;bit.ly/ZqJVmq&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gob&amp;aacute;n Saor&lt;/strong&gt;&lt;br /&gt;
        The Model of a very modern &lt;strong&gt;PowerPivot&lt;/strong&gt; &amp;ndash; without the add-in - &lt;a href="http://bit.ly/YDgRFE"&gt;bit.ly/YDgRFE&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1826389" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/l_zccGjyOwc" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Explorer/default.aspx">Data Explorer</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/04/02/powerpivot-amp-dax-amp-data-explorer-blogroll-31st-march-2013.aspx</feedburner:origLink></item><item><title>PowerPivot &amp; DAX &amp; Data Explorer BlogRoll - 24th March 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/Q_KSeOh-rtw/powerpivot-amp-dax-blogroll-24th-march-2013.aspx</link><pubDate>Mon, 25 Mar 2013 21:29:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1825841</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1825841</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/03/25/powerpivot-amp-dax-blogroll-24th-march-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX &amp;amp; Data Explorer activity announced on Twitter for the week ending 24th March 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Romi&amp;#39;s Stream&lt;/strong&gt;&lt;br /&gt;
        &lt;strong&gt;Data Explorer&lt;/strong&gt; for Excel: An experiment with Sachin Tendulkar - &lt;a href="http://bit.ly/1188Lrc"&gt;bit.ly/1188Lrc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kasper de Jonge PowerPivot Blog&lt;/strong&gt;&lt;br /&gt;
        NBA team spending and their results with Excel, &lt;strong&gt;PowerPivot&lt;/strong&gt; and &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/10sJuJo"&gt;bit.ly/10sJuJo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLServerCentral.com&lt;/strong&gt;&lt;br /&gt;
        Stairway to &lt;strong&gt;PowerPivot&lt;/strong&gt; and &lt;strong&gt;DAX&lt;/strong&gt; - Level 4: The &lt;strong&gt;DAX&lt;/strong&gt; BLANK() Function - &lt;a href="http://bit.ly/Zllw1a"&gt;bit.ly/Zllw1a&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BaconBits&lt;/strong&gt;&lt;br /&gt;
        5 Cool Things You Can Do With &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/Ydiorz"&gt;bit.ly/Ydiorz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LessThanDot&lt;/strong&gt;&lt;br /&gt;
        How I used &lt;strong&gt;Data Explorer&lt;/strong&gt; to create a demo - &amp;lt; a href=&amp;quot;http://bit.ly/10hIYhi&amp;quot;&amp;gt;bit.ly/10hIYhi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
        ISFILTERED: A Better Way to Detect Totals - &lt;a href="http://bit.ly/ZRvCon"&gt;bit.ly/ZRvCon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brent Greenwood&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
        Pareto Chart with &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/14cfXXs"&gt;bit.ly/14cfXXs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gob&amp;aacute;n Saor&lt;/strong&gt;&lt;br /&gt;
        [Updated]Look&amp;rsquo;s like Star Schema is back on the menu! - &lt;a href="http://bit.ly/YBcB8Z"&gt;bit.ly/YBcB8Z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
        UK/US Date Format Bug in &lt;strong&gt;PowerPivot&lt;/strong&gt; and SSAS Tabular - &lt;a href="http://bit.ly/WMd8Jy"&gt;bit.ly/WMd8Jy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Romi&amp;#39;s Stream&lt;/strong&gt;&lt;br /&gt;
        &lt;strong&gt;Data Explorer&lt;/strong&gt; for Excel: An experiment with Sachin Tendulkar - &lt;a href="http://bit.ly/1188Lrc"&gt;bit.ly/1188Lrc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Machlis Musings&lt;/strong&gt;&lt;br /&gt;
        New Excel &lt;strong&gt;Data Explorer&lt;/strong&gt; add-in bolsters data analysis - &lt;a href="http://bit.ly/16Uah4g"&gt;bit.ly/16Uah4g&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MSSQLTips&lt;/strong&gt;&lt;br /&gt;
        Creating Hierarchies in &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/X8uAZS"&gt;bit.ly/X8uAZS&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1825841" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/Q_KSeOh-rtw" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Explorer/default.aspx">Data Explorer</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/03/25/powerpivot-amp-dax-blogroll-24th-march-2013.aspx</feedburner:origLink></item><item><title>PowerPivot &amp; DAX &amp; Data Explorer BlogRoll - 17th March 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/P_A5NWiAY_o/powerpivot-amp-dax-amp-data-explorer-blogroll-17th-march-2013.aspx</link><pubDate>Mon, 18 Mar 2013 09:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1825404</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1825404</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/03/18/powerpivot-amp-dax-amp-data-explorer-blogroll-17th-march-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX &amp;amp; Data Explorer activity announced on Twitter for the week ending 17th March 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MS Office Blog&lt;/strong&gt;&lt;br /&gt;
		Learn about &lt;strong&gt;Data Explorer&lt;/strong&gt; Formulas - &lt;a href="http://bit.ly/118wr2d"&gt;bit.ly/118wr2d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Javier Guill&amp;eacute;n Pervasive Business Intelligence&lt;/strong&gt;&lt;br /&gt;
		PivotStream and Mariner join forces to deliver &lt;strong&gt;PowerPivot&lt;/strong&gt; solutions - &lt;a href="http://bit.ly/118uzqc"&gt;bit.ly/118uzqc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Finding Shakespeare&amp;rsquo;s Favourite Words With &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/133FUcz"&gt;bit.ly/133FUcz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Erik Svensen&lt;/strong&gt;&lt;br /&gt;
		How to use &lt;strong&gt;Data Explorer&lt;/strong&gt; for Excel to extract data from Statistics Denmark - &lt;a href="http://bit.ly/YKjCag"&gt;bit.ly/YKjCag&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MSDN Blog&lt;/strong&gt;&lt;br /&gt;
		A new build of &lt;strong&gt;Data Explorer&lt;/strong&gt;, and an Auto Update feature - &lt;a href="http://bit.ly/WwuR7P"&gt;bit.ly/WwuR7P&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSIS Junkie&lt;/strong&gt;&lt;br /&gt;
		M Lives! - &lt;a href="http://bit.ly/10JyB8r"&gt;bit.ly/10JyB8r&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gob&amp;aacute;n Saor&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;DAX&lt;/strong&gt;&amp;rsquo;s back &amp;ndash; Create &lt;strong&gt;DAX&lt;/strong&gt; Measures in Excel 2013 without &lt;strong&gt;PowerPivot&lt;/strong&gt; Add-in - &lt;a href="http://bit.ly/XjZZn4"&gt;bit.ly/XjZZn4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kasper de Jonge PowerPivot Blog&lt;/strong&gt;&lt;br /&gt;
		What is eating up my memory the &lt;strong&gt;PowerPivot&lt;/strong&gt; / Excel edition - &lt;a href="http://bit.ly/113zmpl"&gt;bit.ly/113zmpl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some Random Thoughts&lt;/strong&gt;&lt;br /&gt;
		Unpivoting Data in &lt;strong&gt;Data Explorer&lt;/strong&gt;- &lt;a href="http://bit.ly/118xIGy"&gt;bit.ly/118xIGy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Javier Guill&amp;eacute;n Pervasive Business Intelligence&lt;/strong&gt;&lt;br /&gt;
		Configuring &amp;quot;drill to details&amp;quot; behavior in &lt;strong&gt;PowerPivot&lt;/strong&gt;: Part 1 - &lt;a href="http://bit.ly/YlDZbE"&gt;bit.ly/YlDZbE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; on Airplanes and NBC - &lt;a href="http://bit.ly/142RIen"&gt;bit.ly/142RIen&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1825404" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/P_A5NWiAY_o" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Explorer/default.aspx">Data Explorer</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/03/18/powerpivot-amp-dax-amp-data-explorer-blogroll-17th-march-2013.aspx</feedburner:origLink></item><item><title>PowerPivot &amp; DAX &amp; Data Explorer BlogRoll - 10th March 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/NJF9wOMUxm4/powerpivot-amp-dax-amp-data-explorer-blogroll-10th-march-2013.aspx</link><pubDate>Sun, 10 Mar 2013 23:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1824975</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1824975</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/03/11/powerpivot-amp-dax-amp-data-explorer-blogroll-10th-march-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX &amp;amp; Data Explorer activity announced on Twitter for the week ending 10th March 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extended Results&lt;/strong&gt;&lt;br /&gt;
		Calendar Analytics - &lt;a href="http://bit.ly/VYvfLU"&gt;bit.ly/VYvfLU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; Discovers a New Form of Communication in the Animal World, Makes Headlines in Science! - &lt;a href="http://bit.ly/YhOPhN"&gt;bit.ly/YhOPhN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matt Masson&lt;/strong&gt;&lt;br /&gt;
		Using &lt;strong&gt;Data Explorer&lt;/strong&gt; with Power View - &lt;a href="http://bit.ly/XYGt2H"&gt;bit.ly/XYGt2H&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer Feedback SQL Server Content Samples&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;Data Explorer&lt;/strong&gt;: An introduction to table relationships and the Expand operation - &lt;a href="http://bit.ly/XWWtlN"&gt;bit.ly/XWWtlN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		&amp;quot;Introducing&amp;quot; &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/Z4BSdv"&gt;bit.ly/Z4BSdv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;Data Explorer&lt;/strong&gt;&amp;ndash;Where Does The Real Work Get Done? - &lt;a href="http://bit.ly/VOkkVc"&gt;bit.ly/VOkkVc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamics NAV Financials&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; to the People - &lt;a href="http://bit.ly/YtSzzK"&gt;bit.ly/YtSzzK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		A funny thing happened in Redmond&amp;hellip; - &lt;a href="http://bit.ly/12rBmfH"&gt;bit.ly/12rBmfH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerhard Brueckl&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Another Post about Calculating New and Returning Customers &amp;ndash; Part 2 - &lt;a href="http://bit.ly/YKRMHL"&gt;bit.ly/YKRMHL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Calling A Web Service From &lt;strong&gt;Data Explorer&lt;/strong&gt;, Part 2 - &lt;a href="http://bit.ly/Y9gdi1"&gt;bit.ly/Y9gdi1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vignesh C&lt;/strong&gt;&lt;br /&gt;
		Consume csv with &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/14lWZcN"&gt;bit.ly/14lWZcN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matt Masson&lt;/strong&gt;&lt;br /&gt;
		Dynamic Lookups With &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/Vw6Zkg"&gt;bit.ly/Vw6Zkg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some Random Thoughts&lt;/strong&gt;&lt;br /&gt;
		Introduction to &lt;strong&gt;Data Explorer&lt;/strong&gt; Preview for Excel - &lt;a href="http://bit.ly/ZaWrDt"&gt;bit.ly/ZaWrDt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dan English&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Installing &lt;strong&gt;Data Explorer&lt;/strong&gt; Preview &amp;amp; Demo with IMDB Data - &lt;a href="http://bit.ly/W0vvJe"&gt;bit.ly/W0vvJe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Calling A Web Service From &lt;strong&gt;Data Explorer&lt;/strong&gt;, Part 1 - &lt;a href="http://bit.ly/WErC9X"&gt;bit.ly/WErC9X&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1824975" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/NJF9wOMUxm4" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Explorer/default.aspx">Data Explorer</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/03/11/powerpivot-amp-dax-amp-data-explorer-blogroll-10th-march-2013.aspx</feedburner:origLink></item><item><title>PowerPivot &amp; DAX &amp; Data Explorer BlogRoll - 3rd March 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/Gwfzu3NDH1E/powerpivot-amp-dax-amp-data-explorer-blogroll-3rd-march-2013.aspx</link><pubDate>Sun, 03 Mar 2013 13:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1824603</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1824603</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/03/03/powerpivot-amp-dax-amp-data-explorer-blogroll-3rd-march-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX &amp;amp; Data Explorer activity announced on Twitter for the week ending 3rd March 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Importing Data From Multiple Log Files Using &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/YWPTvA"&gt;bit.ly/YWPTvA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSISJunkie&lt;/strong&gt;&lt;br /&gt;
		Traversing the Facebook Graph using &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/VWYY6J"&gt;bit.ly/VWYY6J&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matt Masson&lt;/strong&gt;&lt;br /&gt;
		Access the Windows Azure Marketplace from &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/YHwRFq"&gt;bit.ly/YHwRFq&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Altius Consulting&lt;/strong&gt;&lt;br /&gt;
		Best Oscar winning Film? My first &lt;strong&gt;Data Explorer&lt;/strong&gt; adventure&amp;hellip; - &lt;a href="http://bit.ly/VWYC01"&gt;bit.ly/VWYC01&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ian&amp;#39;s SharePoint Blog&lt;/strong&gt;&lt;br /&gt;
		SharePoint OData and the Excel &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/160EaiL"&gt;bit.ly/160EaiL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Public Preview of &lt;strong&gt;Data Explorer&lt;/strong&gt; - &lt;a href="http://bit.ly/XPmXlK"&gt;bit.ly/XPmXlK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Microsoft&lt;/strong&gt;&lt;br /&gt;
		Microsoft &lt;strong&gt;&amp;quot;Data Explorer&amp;quot;&lt;/strong&gt; Preview for Excel - &lt;a href="http://bit.ly/Y6WY8M"&gt;bit.ly/Y6WY8M&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Toggling Conditional Formatting On/Off via Slicer - &lt;a href="http://bit.ly/XLISNW"&gt;bit.ly/XLISNW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI - Marco Russo&lt;/strong&gt;&lt;br /&gt;
		Update to the &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel 2013 licensing - &lt;a href="http://bit.ly/XLILlB"&gt;bit.ly/XLILlB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TechCrunch&lt;/strong&gt;&lt;br /&gt;
		Microsoft Launches Updated Office 365 For Business, Adds ProPlus With Full Office Apps And New Small And Medium Business Versions - &lt;a href="http://tcrn.ch/YHyaEb"&gt;http://tcrn.ch/YHyaEb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MSSQLTips&lt;/strong&gt;&lt;br /&gt;
		Importing SQL Server Data from Multiple Data Sources into &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel - &lt;a href="http://bit.ly/WAQ2kD"&gt;bit.ly/WAQ2kD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		How to buy &lt;strong&gt;PowerPivot&lt;/strong&gt; 2013, and the $30 Volume Licensing Workaround - &lt;a href="http://bit.ly/ZYLrzc"&gt;bit.ly/ZYLrzc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MSSQLTips&lt;/strong&gt;&lt;br /&gt;
		Combining Data from Multiple Relational Data Sources into One Table in &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel  - &lt;a href="http://bit.ly/13dFUFY"&gt;bit.ly/13dFUFY&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1824603" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/Gwfzu3NDH1E" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Explorer/default.aspx">Data Explorer</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/03/03/powerpivot-amp-dax-amp-data-explorer-blogroll-3rd-march-2013.aspx</feedburner:origLink></item><item><title>PowerPivot (&amp; DAX) BlogRoll - 24th February 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/6CaNkjIS0iA/powerpivot-amp-dax-blogroll-24th-february-2013.aspx</link><pubDate>Tue, 26 Feb 2013 09:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1824293</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1824293</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/02/26/powerpivot-amp-dax-blogroll-24th-february-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX activity announced on Twitter for the week ending 24th February 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoWorld&lt;/strong&gt;&lt;br /&gt;
		More Office 2013 bait-and-switch revelations - &lt;a href="http://bit.ly/XWHF5d"&gt;bit.ly/XWHF5d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RAMBLES.IO&lt;/strong&gt;&lt;br /&gt;
		A Response To Where Did My &lt;strong&gt;PowerPivot&lt;/strong&gt; Go? - &lt;a href="http://bit.ly/W5RRep"&gt;bit.ly/W5RRep&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Erik Svensen&lt;/strong&gt;&lt;br /&gt;
		Create a dynamic table from &lt;strong&gt;PowerPivot&lt;/strong&gt; data in Excel 2013 without VBA - &lt;a href="http://bit.ly/11Uwsre"&gt;bit.ly/11Uwsre&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI - Marco Russo&lt;/strong&gt;&lt;br /&gt;
		DAX Time Intelligence for 4-4-5 Calendar, ISO Calendar and other custom ones - &lt;a href="http://bit.ly/UDm1nM"&gt;bit.ly/UDm1nM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Revolutionaries in Redmond! PowerPivotPro Readers Quoted in ZDNet! - &lt;a href="http://bit.ly/YvMxxd"&gt;bit.ly/YvMxxd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DynamicAccounting.Net&lt;/strong&gt;&lt;br /&gt;
		Microsoft peed on my PowerPivot - &lt;a href="http://bit.ly/152Km8G"&gt;bit.ly/152Km8G&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ZDNet&lt;/strong&gt;&lt;br /&gt;
		Can Microsoft bring BI to the masses if the Excel 2013 masses can&amp;#39;t get BI? - &lt;a href="http://zd.net/ZcFt9G"&gt;zd.net/ZcFt9G&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI - Marco Russo&lt;/strong&gt;&lt;br /&gt;
		The Right Version of Excel 2013 for using &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/151oieu"&gt;bit.ly/151oieu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gob&amp;aacute;n Saor&lt;/strong&gt;&lt;br /&gt;
		Look&amp;rsquo;s like Star Schema is back on the menu! - &lt;a href="http://bit.ly/Y931eM"&gt;bit.ly/Y931eM&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1824293" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/6CaNkjIS0iA" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/02/26/powerpivot-amp-dax-blogroll-24th-february-2013.aspx</feedburner:origLink></item><item><title>PowerPivot (&amp; DAX) BlogRoll - 17th February 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/CpDJCvK1K5o/powerpivot-amp-dax-blogroll-17th-february-2013.aspx</link><pubDate>Sun, 17 Feb 2013 20:55:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823909</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1823909</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/02/17/powerpivot-amp-dax-blogroll-17th-february-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX activity announced on Twitter for the week ending 17th February 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Data Specialist&lt;/strong&gt;&lt;br /&gt;
		Equivalent of VLOOKUP in DAX&amp;ndash;Part I - &lt;a href="http://bit.ly/Xk0FKL"&gt;bit.ly/Xk0FKL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot Pro&lt;/strong&gt;&lt;br /&gt;
		Hey, Who Moved My (&lt;strong&gt;PowerPivot&lt;/strong&gt; 2013) Cheese? - &lt;a href="http://bit.ly/11OZdWp"&gt;bit.ly/11OZdWp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot Pro&lt;/strong&gt;&lt;br /&gt;
		New Beginning - &lt;a href="http://bit.ly/15fNsXV"&gt;bit.ly/15fNsXV&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot Pro&lt;/strong&gt;&lt;br /&gt;
		Tomorrow is the Last Day for Chandoo Sign-Up! - &lt;a href="http://bit.ly/VUlOOD"&gt;bit.ly/VUlOOD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Data Specialist&lt;/strong&gt;&lt;br /&gt;
		Bug in &lt;strong&gt;PowerPivot&lt;/strong&gt; 2012 for Excel 2010 - &lt;a href="http://bit.ly/WLhoIh"&gt;bit.ly/WLhoIh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		&amp;quot;Announcing&amp;quot; the Business Analytics Conference - &lt;a href="http://bit.ly/XPDerQ"&gt;bit.ly/XPDerQ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BaconBits&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; and PowerView Confusion in Office 2013 - &lt;a href="http://bit.ly/Vpfqws"&gt;bit.ly/Vpfqws&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technitrain&lt;/strong&gt;&lt;br /&gt;
		[Course]Advanced DAX - &lt;a href="http://bit.ly/Vpfqws"&gt;bit.ly/Vpfqws&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerhard Brueckl&amp;#39;s BI Blog	&lt;/strong&gt;&lt;br /&gt;
		Fiscal Periods, Tabular Models and Time-Intelligence - &lt;a href="http://bit.ly/W3SiAH"&gt;bit.ly/W3SiAH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQL Chick&lt;/strong&gt;&lt;br /&gt;
		Checklist for Knowing Your &lt;strong&gt;PowerPivot&lt;/strong&gt; Model is Complete - &lt;a href="http://bit.ly/YzWEQh"&gt;bit.ly/YzWEQh&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823909" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/CpDJCvK1K5o" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/02/17/powerpivot-amp-dax-blogroll-17th-february-2013.aspx</feedburner:origLink></item><item><title>PowerPivot (&amp; DAX) BlogRoll - 10th February 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/HEyHyDCFiBw/powerpivot-amp-dax-blogroll-10th-february-2013.aspx</link><pubDate>Tue, 12 Feb 2013 00:30:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823680</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1823680</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/02/12/powerpivot-amp-dax-blogroll-10th-february-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX activity announced on Twitter for the week ending 10th February 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Guest Post from Ken Puls: Determine Effective Tax Rate - &lt;a href="http://bit.ly/U2vdlc"&gt;bit.ly/U2vdlc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		When to Use Measures vs. Calc Columns - &lt;a href="http://bit.ly/VQSm8E"&gt;bit.ly/VQSm8E&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI&lt;/strong&gt;&lt;br /&gt;
		First &lt;b&gt;DAX&lt;/b&gt; Advanced Workshop in London, May 2013 &lt;b&gt;DAX&lt;/b&gt; Tabular SSAS - &lt;a href="http://bit.ly/Y3sx4Y"&gt;bit.ly/Y3sx4Y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Excel Hero Blog&lt;/strong&gt;&lt;br /&gt;
		Master Excel &lt;strong&gt;PowerPivot&lt;/strong&gt; Now - &lt;a href="http://bit.ly/X0vnXa"&gt;bit.ly/X0vnXa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Javier Guill&amp;eacute;n Pervasive Business Intelligence&lt;/strong&gt;&lt;br /&gt;
		Developing child-aware KPIs in &lt;strong&gt;PowerPivot&lt;/strong&gt; and BISM Tabular - &lt;a href="http://bit.ly/VDtCyI"&gt;bit.ly/VDtCyI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some Random Thoughts&lt;/strong&gt;&lt;br /&gt;
		UNION Operation in &lt;strong&gt;DAX&lt;/strong&gt; Queries - &lt;a href="http://bit.ly/XTZa33"&gt;bit.ly/XTZa33&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ProLogika Forums&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; Data Refresh in Excel 2013 - &lt;a href="http://bit.ly/XU0wuK"&gt;bit.ly/XU0wuK&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823680" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/HEyHyDCFiBw" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/02/12/powerpivot-amp-dax-blogroll-10th-february-2013.aspx</feedburner:origLink></item><item><title>PowerPivot (&amp; DAX) BlogRoll - 3rd February 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/_cSGunO4o3M/powerpivot-blogroll-3rd-february-2013.aspx</link><pubDate>Tue, 05 Feb 2013 13:11:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823493</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1823493</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/02/05/powerpivot-blogroll-3rd-february-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot &amp;amp; DAX activity announced on Twitter for the week ending 3rd February 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chandoo.org&lt;/strong&gt;&lt;br /&gt;
		Introduction to DAX Formulas &amp;amp; Measures for &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/126dmx9"&gt;bit.ly/126dmx9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cindy Gross&lt;/strong&gt;&lt;br /&gt;
		Hurricane Sandy Mash-Up: Hive, SQL Server, &lt;b&gt;PowerPivot&lt;/b&gt; &amp;amp; Power View - &lt;a href="http://bit.ly/WLYQan"&gt;bit.ly/WLYQan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Office 2013, Office 365 Editions and BI Features - &lt;a href="http://bit.ly/14zvxdt"&gt;bit.ly/14zvxdt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MSSQLTips&lt;/strong&gt;&lt;br /&gt;&lt;b&gt;
		PowerPivot&lt;/b&gt; with Excel 2013 - &lt;a href="http://bit.ly/XenvCk"&gt;bit.ly/XenvCk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Stars and Snowflakes and Bears, Oh My! - &lt;a href="http://bit.ly/WrDNdG"&gt;bit.ly/WrDNdG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI&lt;/strong&gt;&lt;br /&gt;
		Execute a DAX Query on SSAS Tabular in Excel - &lt;a href="http://bit.ly/Y7zHDP"&gt;bit.ly/Y7zHDP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI&lt;/strong&gt;&lt;br /&gt;
		Import Data from Tabular Model in Excel Using a DAX Query - &lt;a href="http://bit.ly/UsB0Sx"&gt;bit.ly/UsB0Sx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLServerCentral.com&lt;/strong&gt;&lt;br /&gt;
		Stairway to &lt;strong&gt;PowerPivot&lt;/strong&gt; and DAX - Level 2: The DAX COUNTROWS() and FILTER() Functions - &lt;a href="http://bit.ly/TQbVRb"&gt;bit.ly/TQbVRb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Botticelli&lt;/strong&gt;&lt;br /&gt;
		[Pay Site]New Video Tutorial by Marco: Querying with DAX - &lt;a href="http://bit.ly/11FJzLY"&gt;bit.ly/11FJzLY&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Mini Post #3 of 3: Are You Using Excel 2013 Yet? - &lt;a href="http://bit.ly/XelcPO"&gt;bit.ly/XelcPO&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Mini Post #2 of 3: Supporting/Example Files from the Book Available for Free Download - &lt;a href="http://bit.ly/11FHPCz"&gt;bit.ly/11FHPCz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Mini Post #1 of 3: Interview at SoftwareAdvice.com - &lt;a href="http://bit.ly/11OzlUX"&gt;bit.ly/11OzlUX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pyramid Analytics&lt;/strong&gt;&lt;br /&gt;
		 Pyramid Analytics announces deeper Integration with &lt;b&gt;PowerPivot&lt;/b&gt; and SQL Server Tabular Analysis- &lt;a href="http://bit.ly/WXSbcV"&gt;bit.ly/WXSbcV&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technet&lt;/strong&gt;&lt;br /&gt;
		Tutorial: Optimize a Sample &lt;strong&gt;PowerPivot&lt;/strong&gt; Model for Power View Reports - &lt;a href="http://bit.ly/UssbZ1"&gt;bit.ly/UssbZ1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BurningSuit&lt;/strong&gt;&lt;br /&gt;
		What is &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://conta.cc/VGpoMe"&gt;conta.cc/VGpoMe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Salvo(z)&lt;/strong&gt;&lt;br /&gt;
		Currency Conversion in Tabular Model Using DAX - &lt;a href="http://bit.ly/118W7LG"&gt;http://bit.ly/118W7LG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot-info.com&lt;/strong&gt;&lt;br /&gt;
		PASS Business Analytics conference - Chicago, IL - April 10-12, 2013 - &lt;a href="http://bit.ly/WpEGT8"&gt;bit.ly/WpEGT8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerhard Brueckl&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Dynamic ABC Analysis in &lt;strong&gt;PowerPivot&lt;/strong&gt; using DAX - &lt;a href="http://bit.ly/T3PBSv"&gt;bit.ly/T3PBSv&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823493" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/_cSGunO4o3M" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/02/05/powerpivot-blogroll-3rd-february-2013.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 27th January 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/g0KbwgO4sOc/powerpivot-blogroll-27th-january-2013.aspx</link><pubDate>Tue, 29 Jan 2013 09:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823231</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1823231</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/29/powerpivot-blogroll-27th-january-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 27th January 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chandoo.org&lt;/strong&gt;&lt;br /&gt;
		Introduction to DAX Formulas &amp;amp; Measures for &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/126dmx9"&gt;bit.ly/126dmx9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kasper de Jonge PowerPivot Blog&lt;/strong&gt;&lt;br /&gt;
		Filtering results to only show top x results in Power View chart - &lt;a href="http://bit.ly/UzkC0n"&gt;bit.ly/UzkC0n&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Modeling Viral and Marketing Growth, Part 3 of 3 - &lt;a href="http://bit.ly/114srjB"&gt;bit.ly/114srjB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		Building Relative Date Reports in &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/XOEXw8"&gt;bit.ly/XOEXw8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stefan Johansson&lt;/strong&gt;&lt;br /&gt;
		Create Time Dimension- &lt;a href="http://bit.ly/126aWyJ"&gt;bit.ly/126aWyJ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Modeling Viral and Marketing Growth, Part Two - &lt;a href="http://bit.ly/XOEBpl"&gt;bit.ly/XOEBpl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brent Greenwood&amp;#39;s BI blog&lt;/strong&gt;&lt;br /&gt;A Time dimension specifically for &lt;strong&gt;PowerPivot&lt;/strong&gt; &amp;amp; AS Tabular - &lt;a href="http://bit.ly/Wut3dK"&gt;bit.ly/Wut3dK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MindSharp&lt;/strong&gt;&lt;br /&gt;
		Demystifying &lt;strong&gt;PowerPivot&lt;/strong&gt; in SharePoint and Excel -&lt;a href="http://bit.ly/VkwlNq"&gt;http://bit.ly/VkwlNq&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823231" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/g0KbwgO4sOc" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/AS+Tabular/default.aspx">AS Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerView/default.aspx">PowerView</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/29/powerpivot-blogroll-27th-january-2013.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 20th January 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/z27ZoXrkeaw/powerpivot-blogroll-20th-january-2013.aspx</link><pubDate>Tue, 29 Jan 2013 09:36:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823230</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1823230</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/29/powerpivot-blogroll-20th-january-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 20th January 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Modeling Viral Growth vs. Traditional Advertising in &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/10EOrS3"&gt;bit.ly/10EOrS3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Javier Guill&amp;eacute;n Pervasive Business Intelligence&lt;/strong&gt;&lt;br /&gt;
		Grouping by an Aggregation in DAX - &lt;a href="http://bit.ly/SeC22c"&gt;bit.ly/SeC22c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivotPro&lt;/strong&gt;&lt;br /&gt;
		Calendar Tables: Not Just for Formulas. Use Them on Your Pivots Too! - &lt;a href="http://bit.ly/W6YrMa"&gt;bit.ly/W6YrMa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Javier Guill&amp;eacute;n Pervasive Business Intelligence&lt;/strong&gt;&lt;br /&gt;
		Leveraging DAX query tables for staging Data Transformations - &lt;a href="http://bit.ly/13Awule"&gt;bit.ly/13Awule&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some Random Thoughts&lt;/strong&gt;&lt;br /&gt;
		Row Selection Using Slicers in &lt;strong&gt;PowerPivot&lt;/strong&gt; - Part 1 - &lt;a href="http://bit.ly/108bp2H"&gt;bit.ly/108bp2H&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris Webb&amp;#39;s BI Blog&lt;/strong&gt;&lt;br /&gt;
		A Different Approach To Last-Ever Non-Empty in DAX - &lt;a href="http://bit.ly/Y82Owx"&gt;bit.ly/Y82Owx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Excel Do, Dynamic Does&lt;/strong&gt;&lt;br /&gt;
		CUBEs For Dessert - Cube formulae with MDX - &lt;a href="http://bit.ly/13uGmNf"&gt;bit.ly/13uGmNf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI - Marco Russo&lt;/strong&gt;&lt;br /&gt;
		&lt;strong&gt;PowerPivot&lt;/strong&gt; Comatibility across versions - &lt;a href="http://bit.ly/UKJ9MM"&gt;bit.ly/UKJ9MM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLBI&lt;/strong&gt;&lt;br /&gt;
		Linkback Tables in PowerPivot for Excel 2013 -&lt;a href="http://bit.ly/UBhmAi"&gt;bit.ly/UBhmAi&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823230" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/z27ZoXrkeaw" height="1" width="1"/&gt;</description><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/29/powerpivot-blogroll-20th-january-2013.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 13th January 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/2l2viPY0e5Y/powerpivot-blogroll-13th-january-2013.aspx</link><pubDate>Sun, 13 Jan 2013 19:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1822577</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1822577</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/13/powerpivot-blogroll-13th-january-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 13th January 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The New Internal Data Model in Excel 2013 - &lt;a href="http://bit.ly/VFumXv"&gt;bit.ly/VFumXvk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;New Customers Per Day Generalized to &amp;ldquo;New Customers per Month,&amp;rdquo; etc. - &lt;a href="http://bit.ly/RP7EeK"&gt;bit.ly/RP7EeK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot&lt;/strong&gt; User Experience Survey - &lt;a href="http://t.co/aGlhdPu7"&gt;t.co/aGlhdPu7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;New Customers per Day &amp;ndash; &lt;a href="http://bit.ly/VJtD7j"&gt;bit.ly/VJtD7j&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Getting the active products between a date range using DAX - &lt;a href="http://bit.ly/VDT7AH"&gt;bit.ly/VDT7AH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[Update] What is using all that memory on my Analysis server instance? - &lt;a href="http://bit.ly/T51Hsc"&gt;bit.ly/T51Hsc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Parameterising &lt;strong&gt;PowerPivot&lt;/strong&gt; Connection Strings in Excel 2013 - &lt;a href="http://bit.ly/XKBOTH"&gt;bit.ly/XKBOTH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Technitrain 2013 Course Schedule: SSAS, &lt;strong&gt;PowerPivot&lt;/strong&gt;, MDX, SSIS, TSQL and SQL Server Engine Training in London - &lt;a href="http://bit.ly/U2mVra"&gt;bit.ly/U2mVra&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Group Multiple Rows to Single Delimited Row in &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/XiDTlO"&gt;bit.ly/XiDTlO&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1822577" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/2l2viPY0e5Y" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Tabular/default.aspx">Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivotivot/default.aspx">PowerPivotivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Technitrain/default.aspx">Technitrain</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/13/powerpivot-blogroll-13th-january-2013.aspx</feedburner:origLink></item><item><title>CUBEs For Dessert</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/fNcy5xJ1bq4/cubes-for-dessert.aspx</link><pubDate>Sun, 13 Jan 2013 19:07:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1822576</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1822576</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/13/cubes-for-dessert.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;A few weeks ago I showed how to create a fully dynamic table using CUBE formulae against a PowerPivot model in &lt;a href="http://msmvps.com/blogs/xldynamic/archive/2012/12/16/cooking-with-cubes.aspx"&gt;Cooking With Cubes&lt;/a&gt;.This example presented data from the AdventureWorks database of sales of product categories over years, all integrated with a Fiscal Year slicer.&lt;/p&gt;
&lt;p&gt;I recently had a similar need, but with the further challenge of presenting two levels in a hierarchy (actually, this was related tables in a snowflake schema). I needed to show all of the items in the first level, and for each of these items, all of the associated items at the second level including those items that have no sales value. The AdventureWorks database has a similar setup with products, where each sale is for a particular product, each product is of specific product sub-category, and each product sub-category is of a specific product category. Within this model, we would be showing sub-categories of Mountain Bikes and Road Bikes against the category of bikes, but not against any other category.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I will demonstrate my solution using the same AdventureWorks data. Whilst this  will be similar to the previous post in showing how to manage the presentation using Excel formulae, it is extended to multiple data levels and some more complex formatting. Additionally, and the main point of this post, I show a technique to display the related values in that hierarchy, not simple with straight CUBE formulae, by adding some MDX trickery in the CUBE formulae.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1&lt;/strong&gt; shows the final results of all of the formulae and formatting.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3276.Final-Results.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3276.Final-Results.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;Figure 1 - Final Results&lt;/p&gt;
&lt;h2&gt;Preparing With Good Ingredients&lt;/h2&gt;
&lt;p&gt;First I need to prepare the PowerPivot model so that I have have product name, product sub-category name, and product category name all on the Product table. To achieve this, I added two calculated columns&lt;/p&gt;
&lt;p&gt;[ProductSubcategoryName]&lt;br /&gt;
		&lt;span class="function"&gt;&lt;strong&gt;=RELATED(ProductSubcategory[ProductSubcategoryName]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
		[ProductCategoryName]&lt;br /&gt;
		&lt;span class="function"&gt;&lt;strong&gt;=RELATED(ProductCategory[ProductCategoryName]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
		&lt;strong&gt;Formula 1 - PowerPivot Model Calculated Columns&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Mixing It Up&lt;/h2&gt;
&lt;p&gt;The data is ready, so let&amp;#39;s build the required data. I need the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a text definition of the cube&lt;/li&gt;
&lt;li&gt;a set of all categories&lt;/li&gt;
&lt;li&gt;a count if the items in the category set&lt;/li&gt;
&lt;li&gt;a list of all of the items in the year set, from the slicer or the dimension if no slicer selections&lt;/li&gt;
&lt;li&gt;a count if the items in the year set&lt;/li&gt;
&lt;li&gt;a list of all of the items in the category set (in columns)&lt;/li&gt;
&lt;li&gt;for each listed category, a set of all associated sub-category items&lt;/li&gt;
&lt;li&gt;for each sub-category set, a count of all items in that set&lt;/li&gt;
&lt;li&gt;a running total of the sub-category set counts&lt;/li&gt;
&lt;li&gt;for each sub-category set, a list of items (in rows)&lt;/li&gt;
&lt;li&gt;a reference cell for the sales measure&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Taking these in the order given, showing cell(s), defined name, definition:&lt;/p&gt;
&lt;h3&gt;1. Cube Definition&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This is simple text for the connection argument to the cube functions.&lt;br /&gt;
				&lt;strong&gt;J1:[_model]PowerPivot Data&lt;/strong&gt;&lt;br /&gt;
				I am using Excel 2010 for this example, Excel 2013 would use the value &lt;i&gt;ThisWorkbookdataModel&lt;/i&gt;.&lt;br /&gt;
				In the previous example, I named this cell &lt;strong&gt;_cube&lt;/strong&gt;, here I use &lt;strong&gt;_model&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2. Category Set&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This is the set of all categories in the model. This is being taken from the calculated column for product category name in the &lt;strong&gt;&lt;i&gt;Products&lt;/i&gt;&lt;/strong&gt; table.&lt;br /&gt;
				&lt;strong&gt;J2:[_setCategory]=CUBESET(_model,&amp;quot;[Product].[ProductCategoryName].Members&amp;quot;,&amp;quot;Categories&amp;quot;)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3. Category Set Count&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;A simple count of the items in the category set, used in later dynamic formulae.&lt;br /&gt;
				&lt;strong&gt;J3:[_setCategoryCount]=CUBESETCOUNT(_setCategory)-2&lt;/strong&gt;&lt;br /&gt;
				I subtract two from the actual count because this set contains the All member and blank, I am not interested in these.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;4. Year Set&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This is the set of years in the model, constrained by the slicer.&lt;br /&gt;
				&lt;strong&gt;J4:[_setYear]&lt;br /&gt;
	=IF(CUBERANKEDMEMBER(_model,Slicer_FiscalYear,1)&amp;lt;&amp;gt;&amp;quot;All&amp;quot;,&lt;br /&gt;
	CUBESET(_model,Slicer_FiscalYear,&amp;quot;Slicer Years&amp;quot;),&lt;br /&gt;
	CUBESET(_model,&amp;quot;[Date].[FiscalYear].Children&amp;quot;,&amp;quot;Dimension Years&amp;quot;))&lt;/strong&gt;&lt;br /&gt;
				As in the previous example, to show all years with no slicer selection (not show All), I check the slicer to see  the first set member is All, getting the set from the Date dimsnsion if so, otherwise get the set from the slicer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;6. Year Set Count&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;A simple count of the items in the year set.&lt;br /&gt;
				&lt;strong&gt;J3:[_setYearCount]=CUBESETCOUNT(_setYear)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;6. List of Category Set Items&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;A list of the items in the category set, for use in building the sub-category sets.&lt;br /&gt;
				&lt;strong&gt;K2:N2:[_listCategory]=IFERROR(CUBERANKEDMEMBER(_model,$J$2,COLUMN()-COLUMN($J$2)+2),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				The name definition uses a dynamic formula&lt;br /&gt;
				&lt;strong&gt;=OFFSET(_setCategory,0,1,1,_setCategoryCount)&lt;/strong&gt;&lt;br /&gt;
				This is a simple dynamic &lt;strong&gt;OFFSET&lt;/strong&gt; formula to build a list of the categories.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;7. Sets of Subcategory Items&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Sets of sub-category items, one set per category.&lt;br /&gt;
				&lt;strong&gt;K3:N3:[_setsSubcategory]=IFERROR(CUBESET(_model,&amp;quot;EXISTS([Product].[ProductSubcategoryName].Members,&amp;quot;&amp;amp;K$2&amp;amp;&amp;quot;)&amp;quot;,&amp;quot;Products:&amp;quot;&amp;amp;K$2),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This is where the MDX magic kicks in. The &lt;strong&gt;EXISTS&lt;/strong&gt; function ... &lt;i&gt;Returns the set of tuples of the first set specified that exist with one or more tuples of the second set specified&lt;/i&gt; ..., so we can use it within a &lt;strong&gt;CUBESET&lt;/strong&gt; function to get all of the product subcategory names for the category above, in &lt;i&gt;_listCategory&lt;/i&gt;.&lt;br /&gt;
				Using this technique, instead of building a set of all subcategories, we build a set of the subcategories for a particular category; in our case the category passed to the &lt;strong&gt;CUBESET&lt;/strong&gt; function from the cells in &lt;strong&gt;_listCategory&lt;/strong&gt;.&lt;br /&gt;
				I prefix the text shown with the text &lt;strong&gt;Products:&lt;/strong&gt; for readability&lt;br /&gt;
				The name definition uses a dynamic formula&lt;br /&gt;
				&lt;strong&gt;=OFFSET(_setCategory,1,1,1,_setCategoryCount)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;8. List of Subcategory Set Counts&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;A list of counts for the sub-category sets, for use in the layout.&lt;br /&gt;
				&lt;strong&gt;K4:N4:[_setsSubcategoryCounts]=INDEX(CUBESETCOUNT(_setsSubcategories),COLUMN()-COLUMN(_setCategory))&lt;/strong&gt;&lt;br /&gt;
				The name definition uses a dynamic formula&lt;br /&gt;
				&lt;strong&gt;=OFFSET(_setCategory,2,1,1,_setCategoryCount)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;9. List of Subcategory Set Count Totals&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;A list of running totals for the sub-category set counts, for use in the layout.&lt;br /&gt;
				&lt;strong&gt;K5:O5:[_setsSubcategoryTotals]=SUM($K$4:K4)-K$4+1&lt;/strong&gt;&lt;br /&gt;
				The name definition uses a dynamic formula&lt;br /&gt;
				&lt;strong&gt;=OFFSET(_setCategory,3,1,1,_setCategoryCount+1)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;10. Lists of Sub-category Sets Items&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Lists of each set sub-category items, within the relevant category.&lt;br /&gt;
				&lt;strong&gt;K6:N30:[_listSubcategoryies]=IFERROR(CUBERANKEDMEMBER(_model,K$3,ROW()-ROW(_setCategory)-2),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This is using the same technique to list the set items as in the previous blog. &lt;br /&gt;
				The name definition uses a dynamic formula&lt;br /&gt;
				&lt;strong&gt;=OFFSET(_setCategory,4,1,MAX(_setsSubcategoryCounts)-1,_setCategoryCount))&lt;/strong&gt;&lt;br /&gt;
				Unlike the other dynamic formulae, this one is multi-column, for the multiple categories.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;11. Sales Measure&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Finally, we have a cell defining the Sales measure&lt;br /&gt;
				&lt;strong&gt;J7:[_sales]=CUBEMEMBER(_model,&amp;quot;[Measures].[Sum of SalesAmount]&amp;quot;,&amp;quot;Sales&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This is to save repeated definition within the value formulae.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Figure 2&lt;/strong&gt; and &lt;strong&gt;Figure 3&lt;/strong&gt; below show all of the helper cells populated, and the nanmes defined in the NameManager.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3731.Excel-Helper-Cells.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3731.Excel-Helper-Cells.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2 - Populated Helper Cells&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0257.Name-Definitions.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0257.Name-Definitions.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3 - Defined Names&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;It&amp;#39;s All About The Presentation&lt;/h2&gt;
&lt;p&gt;All that needs to be done now is to lay it out, allowing for a variable number of categories and a differing variable number of sub-categories within each category.&lt;/p&gt;
&lt;p&gt;In my layout, I am repeating each category a number of times equal to to the number of subcategores for that category, but only showing the first instance. The years are shown as column headings, using the year slicer to filter the columns. The values are displayed referencing the category, sub-category, and year headings.&lt;/p&gt;
&lt;p&gt;The formulae are as follows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Category items&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
				&lt;strong&gt;A7:An:=IFERROR(INDEX(_listCategory,MATCH(ROW()-ROW(_start),_setsSubcategoryTotals,1)),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This matches the ordinal row number within the list of categories against the running totals for sub-category set counts, so as to determine which of the categories we are listing.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sub-category items&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
				&lt;strong&gt;B7:Bn:=IFERROR(IF(A7&amp;lt;&amp;gt;A6,&amp;quot;&amp;quot;,INDEX(_listSubcategories,COUNTIF($A$7:A7,A7)-1,MATCH(ROW()-ROW(_start),_setsSubcategoryTotals,1))),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This uses the same matching technique to determine which sub-category set to list.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Filtered Years&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
				&lt;strong&gt;D6:H6:=IFERROR(CUBERANKEDMEMBER(_model,_setYear,COLUMN()-COLUMN(_start)-2),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				Although the slicer controls the selected years, the year set in &lt;strong&gt;_setYear&lt;/strong&gt; outsorts the data, the filtering is done there.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sales Totals&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
				&lt;strong&gt;C7:C50:=IFERROR(CUBEVALUE(_model,_sales,IF($A7&amp;lt;&amp;gt;$A6,$A7,$A7:$B7),Slicer_FiscalYear),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				This determines the sum of the values for the current row, be that just a category row, or a category and sub-category row, whilst respecting the slicer selection. The &lt;strong&gt;IF&lt;/strong&gt; in the formula caters for that possibility of a category row or a category and sub-category row.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sales Values&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
				&lt;strong&gt;D7:H50:=IFERROR(CUBEVALUE(_model,_sales,D$6,IF($A7&amp;lt;&amp;gt;$A6,$A7,$A7:$B7)),&amp;quot;&amp;quot;)&lt;/strong&gt;&lt;br /&gt;
				Similar to the sales totals, but using the year heading instead of the slicer, beacuse the year heading has already take the slicewr into account.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Conditional formatting is added to the results to improve the viusual effect and readability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product Category Labels&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The list of product categories is repeated on every row, changing at the appropriate point of course. This value is needed for the value calculation, but I feel the look is improved if the repeated items are suppressed, so I use conditional formatting to set the font colour to white on repeated items. This uses a simple formula of &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A7:A50:=A7=A6&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Product Category Totals&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I list the product category one more time that its associated sub-categories. This is so that I can show category totals as well as category and sub-category totals. These need highlighting so that the totals stand out. To achieve this, I have made them bold with a blue font, borders above and below. The conditional formatting formula for this is&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A7:H50:=AND($A7&amp;lt;&amp;gt;&amp;quot;&amp;quot;,$A7&amp;lt;&amp;gt;$A6,ROW($A7)-ROW(_start)-1&amp;lt;=MAX(_setsSubcategoryTotals),COLUMN(A6)-COLUMN(_start)-3&amp;lt;=_setYearCount)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;But Is It All Too Rich?&lt;/h2&gt;
&lt;p&gt;One question that may occur to anyone reading this who is skilled with pivot tables is, why bother? Couldn&amp;#39;t the same effect be achieved by formatting a pivot table showing the product category and sub-category and years with the format set to &lt;i&gt;Show Tabular Form&lt;/i&gt; and &lt;i&gt;Repeat All Item Labels&lt;/i&gt;? This would give a similar look, but it would only show product categories and sub-categories that have a value, it would not show those that are not selling. Agreed, there is a pivot option to &lt;i&gt;Show items with no data on rows&lt;/i&gt; which does address this, but the problem here is that it will show all product sub-categories under &lt;span style="text-decoration:underline;"&gt;EVERY&lt;/span&gt; product category, my method only shows the relevant sub-categories.&lt;/p&gt;
&lt;h2&gt;In Summary&lt;/h2&gt;
&lt;p&gt;In many ways this is similar to the previous post on CUBE formulae, with an extra level of data and more complex formatting. But what I hope that it shows is that by utilising some fairly straightforward MDX the formulae can do far more complex operations, and extend the data displayed. And who knows how far this can be taken as one&amp;#39;s MDX skills increase?&lt;/p&gt;
&lt;p&gt;It is possible that many of the formulas could be replaced with DAX measures in the model, maybe that is a post for another time.&lt;/p&gt;
&lt;p&gt;You can download the workbook here &lt;a href="http://dl.dropbox.com/u/4911716/xld.CUBE%20Formulae%20-%20Hierarchy.xlsx"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0677.download.gif" alt="" /&gt;&lt;/a&gt;
	
	&lt;/p&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Allan Folting of Microsoft first showed me this technique, I am grateful for his insights.&lt;/p&gt;
&lt;p&gt;Chris Webb has a series of excellent blog posts on &lt;a href="http://bit.ly/Xwug2T"&gt;MDX For PowerPivot Users&lt;/a&gt;, which are worth reading if this technique interests you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1822576" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/fNcy5xJ1bq4" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/MDX/default.aspx">MDX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivotivot/default.aspx">PowerPivotivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/CUBE+Formulae/default.aspx">CUBE Formulae</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/13/cubes-for-dessert.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 6th January 2013</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/Ws0BpQSjK4Y/powerpivot-blogroll-6th-january-2013.aspx</link><pubDate>Sun, 06 Jan 2013 17:56:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1822211</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1822211</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/06/powerpivot-blogroll-6th-january-2013.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 6th January 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Time To Name This Year&amp;#39;s Book! - &lt;a href="http://bit.ly/TyZ5nX"&gt;bit.ly/TyZ5nX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Database Pros in Demand - &lt;a href="http://bit.ly/UXN78m"&gt;bit.ly/UXN78m&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[Commercial Webinar] Deep Dive into Business Intelligence in Excel 2013&amp;rsquo;s PowerPivot and Power View - &lt;a href="http://bit.ly/115ls8J"&gt;bit.ly/115ls8J&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creating Linked Tables in &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel - &lt;a href="http://bit.ly/TyZ5nX"&gt;bit.ly/TyZ5nX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Excel 2013, Power View, Top 10 &amp;quot;long tail&amp;quot; and how DAX helps&lt;a href="http://bit.ly/YJTMkd"&gt;bit.ly/YJTMkd&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1822211" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/Ws0BpQSjK4Y" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Tabular/default.aspx">Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Templates/default.aspx">Templates</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SSAS/default.aspx">SSAS</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Azure/default.aspx">Azure</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DataMarket/default.aspx">DataMarket</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/06/powerpivot-blogroll-6th-january-2013.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 30th December 2012</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/LD-azFppPmY/powerpivot-blogroll-30th-december-2012.aspx</link><pubDate>Tue, 01 Jan 2013 11:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821922</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1821922</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2013/01/01/powerpivot-blogroll-30th-december-2012.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 30th December 2012.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Templated Excel workbooks with &lt;strong&gt;PowerPivot&lt;/strong&gt; and Macro&amp;rsquo;s - &lt;a href="http://bit.ly/12VdWwP"&gt;bit.ly/12VdWwP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Importing SQL Server Data from Multiple Data Sources into &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel - &lt;a href="http://bit.ly/UAX22u"&gt;bit.ly/UAX22u&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot&lt;/strong&gt; &amp;ndash; Importing Data from Different Data Sources into &lt;strong&gt;PowerPivot&lt;/strong&gt; for Excel - &lt;a href="http://bit.ly/131Qi0v"&gt;bit.ly/131Qi0v&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;End of 2012 and news in 2013 for #&lt;strong&gt;PowerPivot&lt;/strong&gt;, #ssas #tabular and BI - &lt;a href="http://bit.ly/VpwWxI"&gt;bit.ly/VpwWxI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Refreshing &lt;strong&gt;PowerPivot&lt;/strong&gt; Data in SharePoint 2013 - &lt;a href="http://bit.ly/131Q3Ti"&gt;bit.ly/131Q3Ti&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[Video] Using &lt;strong&gt;PowerPivot&lt;/strong&gt; with DataMarket Section of Windows Azure Marketplace - &lt;a href="http://bit.ly/12Vd23e"&gt;bit.ly/12Vd23e&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1821922" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/LD-azFppPmY" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Tabular/default.aspx">Tabular</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2013/default.aspx">Excel 2013</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Templates/default.aspx">Templates</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SSAS/default.aspx">SSAS</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Azure/default.aspx">Azure</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DataMarket/default.aspx">DataMarket</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SharePoint/default.aspx">SharePoint</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2013/01/01/powerpivot-blogroll-30th-december-2012.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 23rd December 2012</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/wMojPM26vzo/powerpivot-blogroll-23rd-december-2012.aspx</link><pubDate>Sun, 23 Dec 2012 14:47:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821476</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1821476</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2012/12/23/powerpivot-blogroll-23rd-december-2012.aspx#comments</comments><description>&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;PowerPivot activity announced on Twitter for the week ending 23rd December 2012.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Using HASONEVALUE in a &lt;strong&gt;DAX&lt;/strong&gt; IF statement - &lt;a href="http://bit.ly/TVMwA7"&gt;bit.ly/TVMwA7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create a memory-efficient Data Model using Excel 2013 and the &lt;strong&gt;PowerPivot&lt;/strong&gt; add-in - &lt;a href="http://bit.ly/ZfaRsf"&gt;bit.ly/ZfaRsf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Introduction to MDX for &lt;strong&gt;PowerPivot&lt;/strong&gt; Users, Part 5: MDX Queries - &lt;a href="http://bit.ly/12wLGQI"&gt;bit.ly/12wLGQI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[Update] What is using all that memory on my Analysis server instance? - &lt;a href="http://bit.ly/T51Hsc"&gt;bit.ly/T51Hsc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Running Product in &lt;strong&gt;DAX&lt;/strong&gt;: Calculating Portfolio Returns - &lt;a href="http://bit.ly/XOobxz"&gt;bit.ly/XOobxz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The CALCULATE Function&amp;mdash;New &lt;strong&gt;DAX&lt;/strong&gt; Video Tutoria - &lt;a href="http://bit.ly/XTTirq"&gt;bit.ly/XTTirq&lt;/a&gt;. Note that this is a subscription site.&lt;/p&gt;
&lt;p&gt;Dynamic CUBE Formulae In Excel - &lt;a href="http://bit.ly/R6Fnjs"&gt;bit.ly/R6Fnjs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Ballad of Ken Puls, &lt;strong&gt;DAX&lt;/strong&gt; Convert - &lt;a href="http://bit.ly/RLv1ac"&gt;bit.ly/RLv1ac&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DAX&lt;/strong&gt; Spicy Scale Survey - &lt;a href="http://bit.ly/RbtqZC"&gt;bit.ly/RbtqZC&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1821476" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/wMojPM26vzo" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivotPro/default.aspx">PowerPivotPro</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/XLGuru/default.aspx">XLGuru</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/BlogRoll/default.aspx">BlogRoll</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/CALCULATE/default.aspx">CALCULATE</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2012/12/23/powerpivot-blogroll-23rd-december-2012.aspx</feedburner:origLink></item><item><title>Cooking With CUBEs</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/vaifwjGfp0Y/cooking-with-cubes.aspx</link><pubDate>Sun, 16 Dec 2012 22:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821046</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1821046</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2012/12/16/cooking-with-cubes.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;As we should all know by now, PowerPivot provides Excel with a powerful way to harness data from one or more sources, and to do further analysis on that data within familiar pivot tables.&lt;/p&gt;
&lt;p&gt;Furthermore, because PowerPivot is creating an in-memory cube of the data, it is possible to build an analysis using CUBE formulae. I have blogged a couple of times about CUBE formulae, in &lt;a href="http://msmvps.com/blogs/xldynamic/archive/2010/01/07/cycling-through-the-fog.aspx"&gt;Cycling Through The Fog&lt;/a&gt; and in &lt;a href="http://msmvps.com/blogs/xldynamic/archive/2010/10/04/cracking-the-code.aspx"&gt;Cracking The Code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Excel, as with any development, you want your solution to be as flexible and dynamic as possible. This blog is about building dynamic tables using CUBE formulae, but to start with the following formula shows an example of a value extracted from a PowerPivot model using CUBE functions&lt;/p&gt;
&lt;p class="function"&gt;=CUBEVALUE(&amp;quot;PowerPivot Data&amp;quot;,&lt;br /&gt;
CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[Measures].[Sum of SalesAmount]&amp;quot;),&lt;br /&gt;
CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;, &amp;quot;[DimProductCategory].[EnglishProductCategoryName].&amp;amp;[Bikes]&amp;quot;),&lt;br /&gt;
CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[DimDate].[FiscalYear].&amp;amp;[2006]&amp;quot;))&lt;/p&gt;
&lt;p class="equation"&gt;&lt;strong&gt;Equation 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This formula gets the Sales Amount from the PowerPivot cube for the Bikes product category, for the fiscal year 2006. There will be many values at this intersection, there can be many dates in 2006 and many products within that category, all pre-aggregated in the cube; the CUBEVALUE function returns that aggregate amount&lt;/p&gt;
&lt;p&gt;We could build the whole table of values using similar formulae. In our table we need to know what the value is related to, so we have row and column headers that identify the intersection points. We could define those headers using the &lt;span class="function"&gt;CUBEMEMBER&lt;/span&gt; functions giving a table such as shown in &lt;strong&gt;Figure 1&lt;/strong&gt; below, which shows a table based on AdventureWorks.&lt;/p&gt;
&lt;p class="centre"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3264.Table-of-values-over-year-over-product-category.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3264.Table-of-values-over-year-over-product-category.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;&lt;strong&gt;Figure 1 - Table of values over year and product category&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The formulas for the headings are&lt;/p&gt;
&lt;p class="function"&gt;=CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[DimDate].[FiscalYear].&amp;amp;[2006]&amp;quot;)&lt;br /&gt;
=CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[DimDate].[FiscalYear].&amp;amp;[2007]&amp;quot;)&lt;br /&gt;
etc. for the column headings, &lt;/p&gt;
&lt;p class="equation"&gt;&lt;strong&gt;Equation 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;span class="function"&gt;=CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;, &amp;quot;[DimProductCategory].[EnglishProductCategoryname].&amp;amp;[Accessories]&amp;quot;)&lt;br /&gt;
=CUBEMEMBER(&amp;quot;PowerPivot Data&amp;quot;, &amp;quot;[DimProductCategory].[EnglishProductCategoryname].&amp;amp;[Bikes]&amp;quot;)&lt;/span&gt;&lt;br /&gt;
etc. for the row headings.&lt;/p&gt;
&lt;p&gt;The values at the intersection points simply use these heading cells like so&lt;/p&gt;
&lt;p&gt;&lt;span class="function"&gt;=CUBEVALUE(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[Measures].[Sum of SalesAmount]&amp;quot;,$A3,B$1)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This is equivalent to the formula given in &lt;strong&gt;Equation 1&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Slicing the Vegetables&lt;/h2&gt;
&lt;p&gt;Further richness is bestowed upon us because we can also link slicers to our table, giving us the sort of filtering we have with the pivot tables. For example, Figure 2 shows the same data table built using CUBE formulae with a fiscal year slicer; the data reflecting the fact that only the years 2006, 2007, and 2008 have been selected.&lt;/p&gt;
&lt;p class="centre"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0871.Table-reflecting-year_2700_s-slicer-selections.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0871.Table-reflecting-year_2700_s-slicer-selections.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;&lt;strong&gt;Figure 2 - Table of values reflecting years slicer selections&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Showing the slicer selections on your report has been covered elsewhere, but it is so useful and asked so often that I thought I would also cover. I also have a couple of variations that I haven&amp;rsquo;t seen elsewhere, which are worth presenting.&lt;/p&gt;
&lt;h2&gt;The Menu&lt;/h2&gt;
&lt;p&gt;Previously, as shown in the formulae in &lt;strong&gt;Equation 2&lt;/strong&gt;, we built the row and column headers using hard-coded values for the year and category fields. We need to be more dynamic in how we list these values. To show the slicer selections as in E5, F5, etc., we need a list of values from which we can choose and display the individual ordered items. The &lt;strong&gt;CUBESET&lt;/strong&gt; function gives us this. The syntax for &lt;strong&gt;CUBESET&lt;/strong&gt; is&lt;/p&gt;
&lt;p&gt;&lt;span class="functionsyntax"&gt;&lt;i&gt;CUBESET(connection. set_expression, [caption], [sort_order], [sort_by])&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;span class="functionsyntax"&gt;&lt;i&gt;connection&lt;/i&gt;&lt;/span&gt; is the cube, &lt;span class="functionsyntax"&gt;&lt;i&gt;set_expression&lt;/i&gt;&lt;/span&gt; is the set of values required, and &lt;span class="functionsyntax"&gt;&lt;i&gt;caption&lt;/i&gt;&lt;/span&gt; is a value to display. So, looking at cell D1 we have the formula&lt;/p&gt;
&lt;p&gt;&lt;span class="function"&gt;=CUBESET(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,&amp;quot;Set of Years&lt;/span&gt;&lt;/p&gt;
&lt;p class="equation"&gt;&lt;strong&gt;Equation  3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;which would look as shown in &lt;strong&gt;Figure 3&lt;/strong&gt; when added to cell D1 to build our set of fiscal years.&lt;/p&gt;
&lt;p class="centre"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/1512.Slicer-years-set-formula.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/1512.Slicer-years-set-formula.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;&lt;strong&gt;Figure 3 &amp;ndash; Slicer years set formula&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As can be seen, we use &lt;strong&gt;Slicer_FiscalYear&lt;/strong&gt; as the &lt;span class="functionsyntax"&gt;&lt;i&gt;set_expression&lt;/i&gt;&lt;/span&gt;, so the set will include all selected values in that slicer, with the &lt;span class="functionsyntax"&gt;&lt;i&gt;caption&lt;/i&gt;&lt;/span&gt; signifying the cell contents.&lt;/p&gt;
&lt;p&gt;So far, so good, but we still need to list those selected values. For this, we use the &lt;strong&gt;CUBERANKEDMEMBER&lt;/strong&gt; function, which returns the nth, or ranked, member in a set. The syntax of this&lt;/p&gt;
&lt;p class="functionsyntax"&gt;=CUBERANKEDMEMBER(connection, set_expression, rank, [caption])&lt;/p&gt;
&lt;p&gt;where &lt;span class="functionsyntax"&gt;&lt;i&gt;connection&lt;/i&gt;&lt;/span&gt; is the cube as before, &lt;span class="functionsyntax"&gt;&lt;i&gt;set_expression&lt;/i&gt;&lt;/span&gt; is the set of values to choose from, and &lt;span class="functionsyntax"&gt;&lt;i&gt;rank&lt;/i&gt;&lt;/span&gt; is nth value. So, to get the first member, we use&lt;/p&gt;
&lt;p class="function"&gt;=CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$1,1)&lt;/p&gt;
&lt;p&gt;for the second&lt;/p&gt;
&lt;p class="function"&gt;=CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$1,2)&lt;/p&gt;
&lt;p&gt;and so on.&lt;/p&gt;
&lt;p&gt;Because there are 5 years in the PowerPivot model, and when filtered in the slicer we might be showing less than 5, we need to cater for a variable number of items. The simplest way is just to add an error wrapper around the formula,&lt;/p&gt;
&lt;p class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$1,1),&amp;quot;&amp;quot;)&lt;/p&gt;
&lt;p class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$1,2),&amp;quot;&amp;quot;)&lt;/p&gt;
&lt;p&gt;etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Equation 4&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Why Extra Ingredients?&lt;/h2&gt;
&lt;p&gt;We could nest the &lt;strong&gt;CUBESET&lt;/strong&gt; function within the &lt;strong&gt;CUBERANKEDMEMBER&lt;/strong&gt;,but that would mean that a set is evaluated 5 times. By defining the set in its own cell and referring to that cell within the &lt;strong&gt;CUBERANKEDMEMBER &lt;/strong&gt;function, it is evaluated just the once. A small matter, but it makes the spreadsheet easier to maintain, and is more efficient.&lt;/p&gt;
&lt;h2&gt;Cooked To Perfection&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s as simple as that.&lt;/p&gt;
&lt;p&gt;But hang on a minute, have we overcooked it?&lt;/p&gt;
&lt;p&gt;Looking at the syntax definition for these two functions, we can see that they both take &lt;span class="functionsyntax"&gt;&lt;i&gt;set_expression&lt;/i&gt;&lt;/span&gt; as an argument. The &lt;strong&gt;CUBESET&lt;/strong&gt; function is passed the slicer values as its set, and in turned is passed to the &lt;strong&gt;CUBERANKEDMEMBER &lt;/strong&gt;function as its set. &lt;/p&gt;
&lt;p&gt;As the slicer values is a &lt;span class="functionsyntax"&gt;&lt;i&gt;set_expression&lt;/i&gt;&lt;/span&gt;, you would think that we should be able to pass the slicer values directly to &lt;strong&gt;CUBERANKEDMEMBER&lt;/strong&gt; as a set and be done with. And so we can, these formulae&lt;/p&gt;
&lt;p class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,1),&amp;quot;&amp;quot;)&lt;/p&gt;
&lt;p class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,2),&amp;quot;&amp;quot;)&lt;/p&gt;
&lt;p&gt;etc.&lt;/p&gt;
&lt;p class="equation"&gt;&lt;strong&gt;Equation 5&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;work equally as well as those formulae in &lt;strong&gt;Equation 4&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Managing The Ingredients&lt;/h2&gt;
&lt;p&gt;The list of product categories can also be listed in a similar way using &lt;strong&gt;CUBESET&lt;/strong&gt; and &lt;strong&gt;CUBERANKEDMEMBER&lt;/strong&gt;. Here we do need &lt;strong&gt;CUBESET&lt;/strong&gt; as there is no pre-defined set of values as we had with the fiscal year that we can pick up. The set will be all values for the Product Category English name in the Product Category table,&lt;/p&gt;
&lt;p class="function"&gt;=CUBESET(&amp;quot;PowerPivot Data&amp;quot;,&lt;br /&gt;
&amp;quot;[DimProductCategory].[EnglishProductCategoryName].Children&amp;quot;,&lt;br /&gt;
&amp;quot;Set of Categories&amp;quot;)&lt;/p&gt;
&lt;p class="equation"&gt;&lt;strong&gt;Equation 6&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As can be seen, &lt;strong&gt;.Children&lt;/strong&gt; gets us all of the category values.&lt;/p&gt;
&lt;p&gt;One thing to note is the use of the &lt;span class="functionsyntax"&gt;&lt;i&gt;caption&lt;/i&gt;&lt;/span&gt; argument. Again, this helps to highlight the cell containing the set.&lt;/p&gt;
&lt;p&gt;We now have formulae that can define our full table, such as&lt;/p&gt;
&lt;p&gt;D1: the formula in &lt;strong&gt;Equation 3&lt;/strong&gt;&lt;br /&gt;
&lt;span class="function"&gt;=CUBESET(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,&amp;quot;Set of Years&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;D2: the formula in &lt;strong&gt;Equation 6&lt;/strong&gt;&lt;br /&gt;
&lt;span class="function"&gt;=CUBESET(&amp;quot;PowerPivot Data&amp;quot;,&lt;br /&gt;
&amp;quot;[DimProductCategory].[EnglishProductCategoryName].Children&amp;quot;,&lt;br /&gt;
&amp;quot;Set of Categories&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;E5:I5: the formulae in  &lt;strong&gt;Equation 5&lt;/strong&gt;&lt;br /&gt;
&lt;span class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,1),&amp;quot;&amp;quot;)&lt;br /&gt;
=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,Slicer_FiscalYear,2),&amp;quot;&amp;quot;)&lt;/span&gt;&lt;br /&gt;
etc.,&lt;/p&gt;
&lt;p&gt;D6:D9: formulae for the product categories&lt;br /&gt;	
&lt;span class="function"&gt;=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$2,1),&amp;quot;&amp;quot;)&lt;br /&gt;
=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$2,2),&amp;quot;&amp;quot;)&lt;br /&gt;
=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$2,1),&amp;quot;&amp;quot;)&lt;br /&gt;
=IFERROR(CUBERANKEDMEMBER(&amp;quot;PowerPivot Data&amp;quot;,$D$2,2),&amp;quot;&amp;quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And finally, in E6:I9, the formulae for the values&lt;br /&gt;	
		&lt;span class="function"&gt;=IFERROR(CUBEVALUE(&amp;quot;PowerPivot Data&amp;quot;,&amp;quot;[Measures].[Sum of SalesAmount]&amp;quot;,$D6,E$5),&amp;quot;&amp;quot;)&lt;/span&gt;&lt;br /&gt;
etc., each cell reflecting the correct product category ($D6) and fiscal year (E$5).&lt;/p&gt;
&lt;p&gt;Our table now has a full set of values, and reflects the choices made in the fiscal year slicer.&lt;/p&gt;
&lt;p&gt;(If we wished, we could add the product categories to a slicer, and make our table dynamically reflect that.)&lt;/p&gt;
&lt;h2&gt;Ready to Serve?&lt;/h2&gt;
&lt;p&gt;Although we have been diligent in storing the evaluated sets in one place rather than nest a &lt;strong&gt;CUBESET&lt;/strong&gt; function within the &lt;strong&gt;CUBERANKEDMEMBER&lt;/strong&gt; function, but there are still a number of things going on here that I just don&amp;rsquo;t like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The connection is hard-coded, multiple times&lt;/li&gt;
&lt;li&gt;If a new year is added to the data, just copying cell I5 to J5 won&amp;rsquo;t work because the rank is hard-coded in the formula, it will need a small change&lt;/li&gt;
&lt;li&gt;If no selection is made in the fiscal year slicer, the values shown are the total of all years, with a header value of All, as shown in &lt;strong&gt;Figure 4&lt;/strong&gt;. This may be what is required in some instances, in others we may want to show each year&amp;rsquo;s values individually.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="centre"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3666.Showing-all-years-as-a-total-_2E00__2E00__2E00_.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/3666.Showing-all-years-as-a-total-_2E00__2E00__2E00_.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;&lt;strong&gt;Figure 4 - Showing all years as a total with no slicer selections&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These &amp;lsquo;difficulties&amp;rsquo; can be overcome relatively easily.&lt;/p&gt;
&lt;p&gt;Rather than hard-code the connection within each formula, put the connection text &amp;lsquo;PowerPivot data&amp;rsquo; (without the quotes), in a cell, say D3, and assign an Excel name &lt;strong&gt;_cube&lt;/strong&gt;, then use that defined name within the formulae. Note that this also makes the transition to Excel 2013 simpler, where the connection has now changed to &amp;lsquo;ThisWorkbookDataModel&amp;rsquo; (again, without the quotes).&lt;/p&gt;
&lt;p&gt;The rank is managed by using a function that returns a variable number depending upon the row or column of the cell, namely &lt;span class="functionsyntax"&gt;&lt;i&gt;ROW([reference])&lt;/i&gt;&lt;/span&gt; or &lt;span class="functionsyntax"&gt;&lt;i&gt;COLUMN([reference])&lt;/i&gt;&lt;/span&gt;. You might think that you can use &lt;strong&gt;COLUMN(A1)&lt;/strong&gt; in E5, and copy that across so that it updates to &lt;strong&gt; COLUMN(B1)&lt;/strong&gt;,&lt;strong&gt; COLUMN(C1)&lt;/strong&gt;, etc. Believe me, this is a very bad idea. Although everything will be fine at first, what happens if you decide to insert a column before column E? The answer is that &lt;strong&gt;COLUMN(A1)&lt;/strong&gt; will update to &lt;strong&gt;COLUMN(B1)&lt;/strong&gt; and whereas the first column of year table originally reflected the first selected year in the fiscal year slicer, it will now reflect the second. You might say that you would never do that, but no-one ever does until they do. For the sake of a simple change it is hardly worth risking it.&lt;/p&gt;
&lt;p&gt;The suggested change is to use &lt;strong&gt;COLUMN()-COLUMN($D$5)&lt;/strong&gt;, which uses the top left cell of our table as an anchor point. Thus, a formula in cell E5 using these functions will return 1 for that calculation, and so on. If a column is inserted to the left of the table, those parts of formulae will update to &lt;strong&gt;COLUMN()-COLUMN($E$5)&lt;/strong&gt;, which means the formula that was in cell E5 which has now moved to cell F5 still return 1 for that calculation.&lt;/p&gt;
&lt;p&gt;Similarly, the category list will use &lt;strong&gt; ROW()-ROW($D$5)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Finally, how can we show each year in the column headers and the vales for those years when no slicer selection is made, rather than showing &amp;lsquo;All&amp;rsquo; and totals for all years? We already have the formula in D1 that gets the set of selected slicer years, that is&lt;/p&gt;
&lt;p class="function"&gt;=CUBESET(_cube,Slicer_FiscalYear,&amp;quot;Slicer Years&amp;quot;)&lt;/p&gt;
&lt;p&gt;As we showed before, we can get a set of all year regardless of slicer selection with the &lt;strong&gt;CUBESET&lt;/strong&gt; function and the member&amp;rsquo;s children property, as in&lt;/p&gt;
&lt;p class="function"&gt;CUBESET(_cube,&amp;quot;[DimDate].[FiscalYear].Children&amp;quot;,&amp;quot;Dimension Years&amp;quot;)&lt;/p&gt;
&lt;p&gt;But how do we know when to use which? One way would be to test whether the first member of this slicer set returns All. If it does, there are no slicer selections so we show all years individually, if not we show the slicer selected years. We can check the first slicer set value with the following&lt;/p&gt;
&lt;p class="function"&gt;IF(CUBERANKEDMEMBER(_cube,Slicer_FiscalYear,1)&amp;lt;&amp;gt;&amp;quot;All&amp;quot;, &amp;hellip;&lt;/p&gt;
&lt;p&gt;Adding all three elements together, we have the following formula in D1 that determines what goes into the set of years that will drive the table column headings&lt;/p&gt;
&lt;p class="function"&gt;=IF(CUBERANKEDMEMBER(_cube,Slicer_FiscalYear,1)&amp;lt;&amp;gt;&amp;quot;All&amp;quot;,&lt;br /&gt;
CUBESET(_cube,Slicer_FiscalYear,&amp;quot;Slicer Years&amp;quot;),&lt;br /&gt;
CUBESET(_cube,&amp;quot;[DimDate].[FiscalYear].Children&amp;quot;,&amp;quot;Dimension Years&amp;quot;))&lt;/p&gt;
&lt;p&gt;With this formula to get the years set, we can see all the years listed when no selections are made on the ribbon rather than showing all year totals, as in &lt;strong&gt;Figure 5.&lt;/strong&gt;&lt;/p&gt;
&lt;p class="centre"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/2555.Showing-all-years-with-no-slicer-_2E00__2E00__2E00_.png"&gt;&lt;img border="0" src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/2555.Showing-all-years-with-no-slicer-_2E00__2E00__2E00_.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="figure"&gt;&lt;strong&gt;Figure 5 - Showing all years with no slicer selections&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s For Dessert?&lt;/h2&gt;
&lt;p&gt;That&amp;rsquo;s about it. Using this technique we have a table that shows the value by year by product category, with a slicer for selecting specific years which is reflected in the years shown in the table. The years and product categories are dynamically built and so can accommodate extra years and extra categories in the source data, and the years can also handle a full slicer set without showing the values as totals for all years.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1821046" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/vaifwjGfp0Y" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2007/default.aspx">Excel 2007</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/cube/default.aspx">cube</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/OLAP/default.aspx">OLAP</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/formulas/default.aspx">formulas</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/dynamic/default.aspx">dynamic</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Slicer/default.aspx">Slicer</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Data+Analysis/default.aspx">Data Analysis</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2012/12/16/cooking-with-cubes.aspx</feedburner:origLink></item><item><title>PowerPivot BlogRoll - 16th December 2012</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/zYb-djYoA0o/powerpivot-blogroll-16th-december-2012.aspx</link><pubDate>Sun, 16 Dec 2012 20:17:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821043</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1821043</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2012/12/16/powerpivot-blogroll-16th-december-2012.aspx#comments</comments><description>&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPivot&lt;/strong&gt; in Excel 2013 - &lt;a href="http://bit.ly/V1jN01"&gt;bit.ly/V1jN01&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How &lt;strong&gt;PowerPivot&lt;/strong&gt; can help financial reporting -&lt;a href="http://bit.ly/T0o1Dj"&gt;bit.ly/T0o1Dj&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Importing your SalesForce data directly into	&lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/T0nRMi"&gt;bit.ly/T0nRMi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set Up a VM Test Server for &lt;strong&gt;PowerView&lt;/strong&gt; and &lt;strong&gt;PowerPivot&lt;/strong&gt; - &lt;a href="http://bit.ly/R0QY3s"&gt;bit.ly/R0QY3s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hide Calculated Items With Zero Totals In &lt;strong&gt;PowerPivot&lt;/strong&gt; PivotTables - &lt;a href="http://bit.ly/12tBW8W"&gt;bit.ly/12tBW8W&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Book Review: DAX Formulas For &lt;strong&gt;PowerPivot&lt;/strong&gt;	- &lt;a href="http://bit.ly/12hDDXR"&gt;bit.ly/12hDDXR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creating a Spacer Column in a &lt;strong&gt;PowerPivot&lt;/strong&gt; PivotTable - &lt;a href="http://bit.ly/T2bMHu"&gt;bit.ly/T2bMHu&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1821043" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/zYb-djYoA0o" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2010/default.aspx">Excel 2010</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/accountingweb/default.aspx">accountingweb</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/SQLRockstar/default.aspx">SQLRockstar</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/PowerPivotPro/default.aspx">PowerPivotPro</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/XLGuru/default.aspx">XLGuru</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/DAX/default.aspx">DAX</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2012/12/16/powerpivot-blogroll-16th-december-2012.aspx</feedburner:origLink></item><item><title>Who Says The Ribbon Is Hard?</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/YrW5TBsmzmI/who-says-the-ribbon-is-hard.aspx</link><pubDate>Tue, 06 Mar 2012 20:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1807034</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1807034</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2012/03/06/who-says-the-ribbon-is-hard.aspx#comments</comments><description>&lt;p&gt;


&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I was recently chatting with a friend, and he was asking how you can have dynamic ribbon buttons, buttons that are available depending upon worksheet events. I knocked up a simple example, and I thought I would share it here for anyone else who might be interested. It takes a few steps, but it is remarkably easy.&lt;/p&gt;
&lt;p&gt;The example has three buttons within a single group, on a custom tab. The first button can be hidden by changing a cell value (a data validation cell in this case), or have its visibility restored. The second does nothing, whilst the third can change the image when a certain cell is selected, from one image to another. This principle could easily be extended to have say different groups of buttons for each sheet in a workbook, hide/expose the group upon activation/deactivation of the sheet.&lt;/p&gt;
&lt;h2&gt;CustomUI Editor&lt;/h2&gt;
&lt;p&gt;If you want to look at the xml, you should download the &lt;a href="http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2009/08/07/7293.aspx"&gt;CustomUI Editor&lt;/a&gt;. It is hardly what you would call a sophisticated tool, but it does enable you to create xml for the ribbon customisations.&lt;/p&gt;
&lt;h2&gt;Coding Techniques&lt;/h2&gt;
&lt;p&gt;A couple of things about my code. I do not hardcode any values in the xml, apart from the ids of the code. Instead I use callbacks for all of the properties. As an example, I could setup a button in the xml like so&lt;/p&gt;
&lt;p&gt;&lt;span class="property"&gt;&amp;lt;button &lt;/span&gt;&lt;span class="propertyId"&gt;id&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;btnDynaRibbon1&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onAction&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxOnAction&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; image&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;ImportExcel&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; visible&lt;/span&gt; &lt;span class="propertyValue"&gt;=TRUE&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; screentip&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;Button that toggles the image&amp;quot;&lt;/span&gt; &lt;span class="property"&gt;/&amp;gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;which has all of the properties, except &lt;span class="propertyId"&gt;onAction&lt;/span&gt;, hard-coded. &lt;/p&gt;
&lt;p&gt;I could do it this way, but I don&amp;rsquo;t, instead my xml looks like this&lt;/p&gt;
&lt;p&gt;&lt;span class="property"&gt;&amp;lt;button &lt;/span&gt;&lt;span class="propertyId"&gt;id&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;btnDynaRibbon1&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getLabel&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxGetLabel&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onAction&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxOnAction&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getImage&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxGetImage&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getSize&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxGetImageSize&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getVisible&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;getVisible&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="propertyId"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getScreentip&lt;/span&gt; &lt;span class="propertyValue"&gt;=&amp;quot;rxGetScreentip&amp;quot;&lt;/span&gt; &lt;span class="property"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where all of the properties are using callbacks, which means that the value gets set within the VBA code. This is the code for the &lt;span class="propertyId"&gt;rxGetLabel&lt;/span&gt; callback &lt;/p&gt;
&lt;h2&gt;Ribbon Code&lt;/h2&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;Public Function&lt;/span&gt; rxGetLabel(control &lt;span class="codekeyword"&gt;As&lt;/span&gt; IRibbonControl, &lt;span class="codekeyword"&gt;ByRef&lt;/span&gt; label)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Select Case&lt;/span&gt; control.Id&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Case&lt;/span&gt; CONTROLID_TAB_DYNA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label = LABEL_TAB_DYNA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Case&lt;/span&gt; CONTROLID_GRP_DYNA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label = LABEL_GRP_DYNA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Case&lt;/span&gt; CONTROLID_BTN_DYNA_1:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label = LABEL_BTN_DYNA_1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Case&lt;/span&gt; CONTROLID_BTN_DYNA_2:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label = LABEL_BTN_DYNA_2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;Case&lt;/span&gt; CONTROLID_BTN_DYNA_3:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label = LABEL_BTN_DYNA_3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="codekeyword"&gt;End Select&lt;/span&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;End Function&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It simply tests for the control&amp;rsquo;s id, and returns the caption for the label appropriately. All of the values tested for and the values returned are stored as constants in the VBA (they could just as easily be stored in a table on a worksheet). The values of all of those constants in the above code snippet are&lt;/p&gt;
&lt;p&gt;&lt;span class="codecomment"&gt;&amp;#39; CONTROLID_ constant values&lt;/span&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; CONTROLID_TAB_DYNA &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;tabDynaRibbon&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; CONTROLID_GRP_DYNA &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;grpDynaRibbon&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; CONTROLID_BTN_DYNA_1 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;btnDynaRibbon1&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; CONTROLID_BTN_DYNA_2 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;btnDynaRibbon2&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; CONTROLID_BTN_DYNA_3 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;btnDynaRibbon3&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;span class="codecomment"&gt;&amp;#39; LABEL_ constant values&lt;/span&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; LABEL_TAB_DYNA As String = &amp;quot;Dyna-Ribbon&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; LABEL_GRP_DYNA As String = &amp;quot;Dynamic Ribbon&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; LABEL_BTN_DYNA_1 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;Button 1&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; LABEL_BTN_DYNA_2 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;Button 2&amp;quot;&lt;br /&gt;&lt;span class="codekeyword"&gt;Global Const&lt;/span&gt; LABEL_BTN_DYNA_3 &lt;span class="codekeyword"&gt;As String&lt;/span&gt; = &amp;quot;Button 3&amp;quot;&lt;/p&gt;
&lt;h2&gt;Managing Changes&lt;/h2&gt;
&lt;p&gt;Taking one of the dynamic elements, the first button that can be made non-visible, the visible value is not a constant, but a variable as it has to be manipulated by the code&lt;/p&gt;
&lt;p&gt;&lt;span class="codecomment"&gt;&amp;#39; VISIBLE constant values&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;Global&lt;/span&gt; VISIBLE_BTN_DYNA_1 &lt;span class="codekeyword"&gt;As Boolean&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This variable is initialised as TRUE in the Workbook_Open event, and in the callback procedure, the control&amp;rsquo;s visibility property is returned as whatever is in this variable&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;Public Function&lt;/span&gt; rxGetVisible(control &lt;span class="codekeyword"&gt;As&lt;/span&gt; IRibbonControl, &lt;span class="codekeyword"&gt;ByRef&lt;/span&gt; Visible)&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Select Case&lt;/span&gt;control.Id&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Case&lt;/span&gt; CONTROLID_BTN_DYNA_1:&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Visible = VISIBLE_BTN_DYNA_1&lt;/p&gt;
&lt;p&gt;etc.&lt;/p&gt;
&lt;p&gt;The visibility variable gets changed in simple worksheet event code (remember, I am using a data validation cell to drive this code).&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;Private Sub&lt;/span&gt; Worksheet_Change(ByVal Target As Range)&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Select Case&lt;/span&gt; Target.Address&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Case&lt;/span&gt; &amp;quot;$C$3&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VISIBLE_BTN_DYNA_1 = Target.Value = &amp;quot;Visible&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Select&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mgrxIRibbonUI.Invalidate&lt;br /&gt;&lt;span class="codekeyword"&gt;End Sub&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As you can see, it sets the variable depending upon the cell value. Finally, it invalidates the ribbon variable so as to rebuild our ribbon customisations. The ribbon variable gets set in the ribbon onLoad callback&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;Public Function&lt;/span&gt; rxDMRibbonOnLoad(ribbon &lt;span class="codekeyword"&gt;As&lt;/span&gt; IRibbonUI)&lt;/p&gt;
&lt;p&gt;&lt;span class="codekeyword"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&lt;/span&gt; mgrxIRibbonUI = ribbon&lt;br /&gt;&lt;span class="codekeyword"&gt;End Function&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Invalidating the ribbon variable causes the callback routines to be re-entered; this is how you change things dynamically.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Hopefully you can see how simple it is to create dynamic ribbon customisations, and how to manage the changes within your VBA code. You should also be able to see how this can be extended to other areas of dynamic interaction.&lt;/p&gt;
&lt;p&gt;As I mentioned, I keep the CustomUI very simple, and rely on the VBA code to set all of the properties of my ribbon customisations. This is not necessary, it is a style aspect that I prefer, I like to the XML simple, reducing the amount of changes that I need to make there, and instead drive it all from VBA. I use a host of global constants for my ribbon values, but again as mentioned earlier, it would be just as simple (and maybe pro vide more manageability of the values) if all of the control properties were added as a table on a hidden worksheet, and grabbed from there on ribbon load.&lt;/p&gt;
&lt;p&gt;My example workbook is attached &lt;a href="http://tinyurl.com/7k7u2ck"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/0474.download.gif" border="0" alt="" /&gt;.&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1807034" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/YrW5TBsmzmI" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/RibbonX/default.aspx">RibbonX</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel/default.aspx">Excel</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/dynamic/default.aspx">dynamic</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2012/03/06/who-says-the-ribbon-is-hard.aspx</feedburner:origLink></item><item><title>Ribbon On The Fly Part2</title><link>http://feedproxy.google.com/~r/msmvps/tUAg/~3/vLg3LhDvjzA/ribbon-on-the-flky-part2.aspx</link><pubDate>Thu, 03 Mar 2011 12:49:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1789221</guid><dc:creator>Bob Phillips</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://msmvps.com/blogs/xldynamic/rsscomments.aspx?PostID=1789221</wfw:commentRss><comments>http://msmvps.com/blogs/xldynamic/archive/2011/03/03/ribbon-on-the-flky-part2.aspx#comments</comments><description>&lt;p&gt;



&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In my last blog post, I described how I thought that I could build an Excel 2007 ribbon on th fly. The technique was founded upon having a &amp;lsquo;worker&amp;rsquo; addin that handled the main functionality as well as the version management and ribbon building; and a simpler Excel 2007 ribbon wrapper addin.&lt;/p&gt;
&lt;p&gt;This approach would be similar to the myriad of table driven menu solutions around, but the &amp;lsquo;table&amp;rsquo; would be a configuration file in this case, to allow the user to control the menu/ribbon.&lt;/p&gt;
&lt;p&gt;The &amp;lsquo;worker&amp;rsquo; addin would read the  configuration file that held the details of the each procedure to be run, and construct the menu or ribbon on the fly. In the case of the ribbon, the customUI XML would be generated, written back to the (as yet) unopened ribbon wrapper addin, then open the ribbon wrapper addin so as to display the changed ribbon in all its pristine glory.&lt;/p&gt;
&lt;p&gt;At that point, this was just an idea, albeit an idea that I was confident that it could be implemented. Since then I have implemented it, so it is time to share the details.&lt;/p&gt;
&lt;h2&gt;Linking the Ribbon Addin to the &amp;lsquo;Worker&amp;rsquo; Addin&lt;/h2&gt;
&lt;p&gt;Having a &amp;lsquo;worker&amp;rsquo; addin and a separate ribbon presentation addin does create one problem, namely how dos a button on the ribbon run a procedure in the &amp;lsquo;worker&amp;rsquo; addin. This is easily resolved using &lt;b&gt;Application.Run&lt;/b&gt;, rather than a simple call to the procedure, as this allows specifying the file as well as the procedure name.&lt;/p&gt;
&lt;p&gt;In fact, this allows even greater flexibility when deploying in the &amp;lsquo;real&amp;rsquo; world. If we release our super application, with a configuration file, the &amp;lsquo;worker&amp;rsquo; addin, and a ribbon addin, a user can add items to the configuration file as long as it runs a procedure already defined in our &amp;lsquo;worker&amp;rsquo; addin. But what if they want to run a completely new process, how do we provide the ability to extend the applications overall functionality? We could just open up the addin and tell the user to do add thewir code to the &amp;lsquo;worker&amp;rsquo; addin, but is this a good idea? I don&amp;rsquo;t think this is good, it could break the whole application. A better way is to tell the user that they can build their code in an entirely separate project, and addin, Person.als/xlsm, or whatever they wish, and the include the full file/procedure call in the configuration file procedure column.&lt;/p&gt;
&lt;h2&gt;Format of Configuration  File&lt;/h2&gt;
&lt;p&gt;It is probably a good point to describe the configuration file at this point.&lt;/p&gt;
&lt;p&gt;I have set it up as a standard Excel workbook, in Excel 2003 format for backwards compatibility, and I have a separate tab for each (user) functional ribbon group (or sub-menu for Excel 2003).&lt;/p&gt;
&lt;p&gt;I built this technique to service the running of a set of user reports, which are all template files and generally all run the same process, but it could be anything that you want, you would just setup the configuration data, and extract it in the configuration management code.
Figure 1 - Configuration File Group shows a typical layout. If you have any other attributes that you need to capture, just insert extra columns in the first part (in my application, I was importing XML files, so I had to specify the XML table worksheet etc.).&lt;/p&gt;
&lt;p&gt;As you can see, some of the columns are relating to the report running, and some relate to the presentation of the ribbon.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/7801.Config-Group.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/7801.Config-Group.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
Figure 1 - Configuration File Group
&lt;p&gt;I have a column for Report Type, this is so that the client can have the templates in different locations, say company reports on a central server, departmental reports on a departmental server, and the user can have their own report templates locally.&lt;/p&gt;
&lt;p&gt;This is all defined on the Client worksheet, Figure 2 - Configuration File Client. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/7382.Config-Client.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/xldynamic/7382.Config-Client.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
Figure 2 - Configuration File Client
&lt;p&gt;This simply allows the user to provide the client name to appear on the ribbon/menu, a logo file, and the various template directories. Again, if you have a requirement for other client related details, add them here.&lt;/p&gt;
&lt;p&gt;The only amendable field here is the client name, the directory values are added by clicking the browse buttons.&lt;/p&gt;
&lt;p&gt;I have also added a button to add new groups sheets, so as to keep a consistent format.&lt;/p&gt;
&lt;h2&gt;Check the Configuration File&lt;/h2&gt;
&lt;p&gt;Writing the XML back to the ribbon addin is an expensive process, cracking open the zip file, updating the customUI.xml file and then re-writing the file, so I have added a check to ensure this is only done if and when the configuration file is updated.&lt;/p&gt;
&lt;p&gt;This is simply achieved with some simple change event code in the configuration file, Figure 3 - Configuration File Change Code, lines 440-450 simply setup a defined name with a value of TRUE. This is checked in the &amp;lsquo;worker&amp;rsquo;; addin initialise code to determine whether to update the ribbon addin or not.&lt;/p&gt;
&lt;p&gt;As you can see, there is a lot of code here for creating a simple name. In addition to this, the code also checks for a duplicate report ID, resetting if a duplicate value is added (this is to avoid compromising the ribbon).&lt;/p&gt;
&lt;pre&gt;&lt;span class="codekeyword"&gt;Private&lt;/span&gt; mcPrevValue &lt;span class="codekeyword"&gt;As&lt;/span&gt; Variant&lt;br /&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;Private Sub&lt;/span&gt; Workbook_SheetActivate(&lt;span class="codekeyword"&gt;ByVal&lt;/span&gt; Sh &lt;span class="codekeyword"&gt;As&lt;/span&gt; Object)&lt;br /&gt;    &lt;span class="codekeyword"&gt;If&lt;/span&gt; Sh.Name = WS_TEMPLATE &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;        wsClient.Activate&lt;br /&gt;    &lt;span class="codekeyword"&gt;End If&lt;br /&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;Private Sub&lt;/span&gt; Workbook_SheetChange(&lt;span class="codekeyword"&gt;ByVal&lt;/span&gt; Sh &lt;span class="codekeyword"&gt;As&lt;/span&gt; Object, &lt;span class="codekeyword"&gt;ByVal&lt;/span&gt; Target &lt;span class="codekeyword"&gt;As &lt;/span&gt; Range)&lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; mpName &lt;span class="codekeyword"&gt;As &lt;/span&gt; Name&lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; mpSheet &lt;span class="codekeyword"&gt;As&lt;/span&gt; Worksheet&lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; mpDuplicateRepID &lt;span class="codekeyword"&gt;As Boolean&lt;/span&gt; &lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; mpDuplicateGroupID &lt;span class="codekeyword"&gt;As Boolean&lt;/span&gt; &lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; mpLastrow &lt;span class="codekeyword"&gt;As Long&lt;/span&gt;&lt;br /&gt;      &lt;span class="codekeyword"&gt;Dim&lt;/span&gt; i &lt;span class="codekeyword"&gt;As Long&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;10        &lt;span class="codekeyword"&gt;On Error GoTo&lt;/span&gt; ws_exit&lt;br /&gt;          &lt;br /&gt;20        Application.EnableEvents = &lt;span class="codekeyword"&gt;False&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;30        &lt;span class="codekeyword"&gt;If&lt;/span&gt; Sh.Name = &amp;quot;Client&amp;quot; &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;40        &lt;span class="codekeyword"&gt;ElseIf&lt;/span&gt; Sh.Name = &amp;quot;_template&amp;quot; &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;50        &lt;span class="codekeyword"&gt;Else&lt;/span&gt;&lt;br /&gt;          &lt;br /&gt;60            &lt;span class="codekeyword"&gt;If&lt;/span&gt; Target.Column = 1 &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;              &lt;br /&gt;70                mpDuplicateRepID = &lt;span class="codekeyword"&gt;False&lt;/span&gt;&lt;br /&gt;80                &lt;span class="codekeyword"&gt;For Each&lt;/span&gt; mpSheet &lt;span class="codekeyword"&gt;In&lt;/span&gt; Sh.Parent.Worksheets&lt;br /&gt;                  &lt;br /&gt;90                    &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpSheet.Name &amp;lt;&amp;gt; WS_CLIENT &lt;span class="codekeyword"&gt;And&lt;/span&gt; mpSheet.Name &amp;lt;&amp;gt; WS_TEMPLATE &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                      &lt;br /&gt;100                       mpLastrow = mpSheet.Cells(mpSheet.Rows.Count, &amp;quot;A&amp;quot;).End(xlUp).Row&lt;br /&gt;110                       &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpLastrow &amp;gt; 2 &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                          &lt;br /&gt;120                           &lt;span class="codekeyword"&gt;For&lt;/span&gt; i = 3 &lt;span class="codekeyword"&gt;To&lt;/span&gt; mpLastrow&lt;br /&gt;                              &lt;br /&gt;130                               &lt;span class="codekeyword"&gt;If&lt;/span&gt; Sh.Name &amp;lt;&amp;gt; mpSheet.Name &lt;span class="codekeyword"&gt;Or&lt;/span&gt; Target.Row &amp;lt;&amp;gt; i &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                                  &lt;br /&gt;140                                   &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpSheet.Cells(i, &amp;quot;A&amp;quot;).Value2 = Target.Value &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                                  &lt;br /&gt;150                                       mpDuplicateRepID = &lt;span class="codekeyword"&gt;True&lt;/span&gt;&lt;br /&gt;160                                       &lt;span class="codekeyword"&gt;Exit For&lt;/span&gt;&lt;br /&gt;170                                   &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;180                               &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;190                           &lt;span class="codekeyword"&gt;Next&lt;/span&gt; i&lt;br /&gt;                              &lt;br /&gt;200                           &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpDuplicateRepID &lt;span class="codekeyword"&gt;Then Exit For&lt;/span&gt;&lt;br /&gt;210                       &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;220                   &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;230               &lt;span class="codekeyword"&gt;Next&lt;/span&gt; mpSheet&lt;br /&gt;                  &lt;br /&gt;240               &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpDuplicateRepID &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;250                   ShowMessage Replace(MSG_ERROR_DUPLICATE_REPORT, _&lt;br /&gt;                                      &amp;quot;&amp;quot;, Target.Value), vbOKOnly + vbExclamation&lt;br /&gt;260                   Target.Value = mcPrevValue&lt;br /&gt;270               &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;280           &lt;span class="codekeyword"&gt;ElseIf Not&lt;/span&gt; Intersect(Sh.Range(NAME_GROUP_ID), Target) Is Nothing &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;              &lt;br /&gt;290               mpDuplicateGroupID = &lt;span class="codekeyword"&gt;False&lt;/span&gt;&lt;br /&gt;300               &lt;span class="codekeyword"&gt;For Each&lt;/span&gt; mpSheet In Sh.Parent.Worksheets&lt;br /&gt;                  &lt;br /&gt;310                   &lt;span class="codekeyword"&gt;If&lt;/span&gt; Sh.Name &amp;lt;&amp;gt; WS_CLIENT &lt;span class="codekeyword"&gt;And&lt;/span&gt; Sh.Name &amp;lt;&amp;gt; WS_TEMPLATE &lt;span class="codekeyword"&gt;And&lt;/span&gt; Sh.Name &amp;lt;&amp;gt; mpSheet.Name &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                      &lt;br /&gt;320                       &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpSheet.Range(NAME_GROUP_ID).Value2 = Target.Value &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;                                  &lt;br /&gt;330                           mpDuplicateGroupID = &lt;span class="codekeyword"&gt;True&lt;/span&gt;&lt;br /&gt;340                           &lt;span class="codekeyword"&gt;Exit For&lt;/span&gt;&lt;br /&gt;350                       &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;360                   &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;370               &lt;span class="codekeyword"&gt;Next&lt;/span&gt; mpSheet&lt;br /&gt;                  &lt;br /&gt;380               &lt;span class="codekeyword"&gt;If&lt;/span&gt; mpDuplicateGroupID &lt;span class="codekeyword"&gt;Then&lt;/span&gt;&lt;br /&gt;390                   ShowMessage Replace(MSG_ERROR_DUPLICATE_GROUP, _&lt;br /&gt;                                      &amp;quot;&amp;quot;, Target.Value), vbOKOnly + vbExclamation&lt;br /&gt;400                   Target.Value = mcPrevValue&lt;br /&gt;410               &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;420           &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;430       &lt;span class="codekeyword"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;440       &lt;span class="codekeyword"&gt;Set&lt;/span&gt; mpName = ThisWorkbook.Names.Add(Name:=&amp;quot;_Changed&amp;quot;, RefersTo:=&amp;quot;=TRUE&amp;quot;)&lt;br /&gt;450       mpName.Visible = &lt;span class="codekeyword"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ws_exit:&lt;br /&gt;460       mcPrevValue = Target.Value&lt;br /&gt;470       Application.EnableEvents = &lt;span class="codekeyword"&gt;True&lt;/span&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;span class="codekeyword"&gt;Private Sub&lt;/span&gt; Workbook_SheetSelectionChange(&lt;span class="codekeyword"&gt;ByVal&lt;/span&gt; Sh &lt;span class="codekeyword"&gt;As&lt;/span&gt; Object, &lt;span class="codekeyword"&gt;ByVal&lt;/span&gt; Target &lt;span class="codekeyword"&gt;As&lt;/span&gt; Range)&lt;br /&gt;    mcPrevValue = Target.Value&lt;br /&gt;&lt;span class="codekeyword"&gt;End Sub&lt;/span&gt;&lt;/pre&gt;
Figure 3 - Configuration File Change Code
&lt;h2&gt;Testing Excel Version&lt;/h2&gt;
&lt;p&gt;Determining whether to build a menu or a ribbon is very straight-forward, all we need to do is to check the application version, as shown in Figure 4 - Test Excel Version. There is nothing particularly trick here, but there are a few call to other procedures that will be covered in the next post, namely&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppInitialise &amp;ndash; opens the configuration file, does some basic validation of the template paths, and  then grabs all of the report details&lt;/li&gt;
&lt;li&gt;OpenRibbonAddin &amp;ndash; this checks if the configuration file has been changed since the last run, builds the XML, and writes it back to the ribbon addin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is one other procedure call, BuildMenus, which I will not go into, it is a standard commandbar menu builder.&lt;/p&gt;
&lt;pre&gt;Private Const mmModule As String = &amp;quot;ThisWorkbook&amp;quot;	&lt;br /&gt;&lt;br /&gt;&amp;#39;-----------------------------------------------------------------&lt;br /&gt;Private Sub Workbook_BeforeClose(Cancel As Boolean)&lt;br /&gt;&amp;#39;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;    If Val(Application.Version) &amp;lt; 12 Then&lt;br /&gt;&lt;br /&gt;        Call DeleteMenus&lt;br /&gt;    Else&lt;br /&gt;&lt;br /&gt;        mgInsightRibbon.Close&lt;br /&gt;    End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&amp;#39;-----------------------------------------------------------------&lt;br /&gt;Private Sub Workbook_Open()&lt;br /&gt;&amp;#39;-----------------------------------------------------------------&lt;br /&gt;Const mpProcedure As String = &amp;quot;Workbook_Open&amp;quot;&lt;br /&gt;&lt;br /&gt;    On Error GoTo Workbook_Open_Error&lt;br /&gt;    PushProcedureStack mpProcedure, True&lt;br /&gt;&lt;br /&gt;    Call AppInitialise&lt;br /&gt;    If Val(Application.Version) &amp;lt; 12 Then&lt;br /&gt;&lt;br /&gt;        Call BuildMenus&lt;br /&gt;        mgConfigWB.Close SaveChanges:=False&lt;br /&gt;        Set mgConfigWB = Nothing&lt;br /&gt;&lt;br /&gt;    Else&lt;br /&gt;&lt;br /&gt;        Call OpenRibbonAddin&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;Workbook_Open_Tidy:&lt;br /&gt;    PopProcedureStack&lt;br /&gt;&lt;br /&gt;Workbook_Open_Exit:&lt;br /&gt;    Application.DisplayAlerts = True&lt;br /&gt;    If Not mgConfigWB Is Nothing Then mgConfigWB.Close SaveChanges:=False&lt;br /&gt;    Set mgConfigWB = Nothing&lt;br /&gt;    Exit Sub&lt;br /&gt;&lt;br /&gt;Workbook_Open_Error:&lt;br /&gt;    If Err.Number = AppBypassErrorNum Then Resume Workbook_Open_Tidy&lt;br /&gt;    If AppErrorHandler(mmModule, mpProcedure, True) Then&lt;br /&gt;        Stop&lt;br /&gt;        Resume&lt;br /&gt;    Else&lt;br /&gt;        Resume Workbook_Open_Exit&lt;br /&gt;    End If&lt;br /&gt;End Sub&lt;/pre&gt;
Figure 4 - Test Excel Version
&lt;h2&gt;Next Post&lt;/h2&gt;
&lt;p&gt;In the next post, I will give details on the getting the configuration file details, building the ribbon XML, and using the addin.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1789221" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/msmvps/tUAg/~4/vLg3LhDvjzA" height="1" width="1"/&gt;</description><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Ribbon/default.aspx">Ribbon</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/Excel+2007/default.aspx">Excel 2007</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/dynamic/default.aspx">dynamic</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/commandbars/default.aspx">commandbars</category><category domain="http://msmvps.com/blogs/xldynamic/archive/tags/addin/default.aspx">addin</category><feedburner:origLink>http://msmvps.com/blogs/xldynamic/archive/2011/03/03/ribbon-on-the-flky-part2.aspx</feedburner:origLink></item></channel></rss>
