<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.adatis.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" 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/"><channel><title>Search results matching tags 'Business Intelligence', 'Atom', 'Data Service', and 'ADO.NET'</title><link>http://blogs.adatis.co.uk/search/SearchResults.aspx?o=DateDescending&amp;tag=Business+Intelligence,Atom,Data+Service,ADO.NET&amp;orTags=0</link><description>Search results matching tags 'Business Intelligence', 'Atom', 'Data Service', and 'ADO.NET'</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Creating a Custom Gemini/PowerPivot Data Feed – Method 1 – ADO.NET Data Services</title><link>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/20/creating-a-custom-gemini-powerpivot-data-feed-method-1-ado-net-data-services.aspx</link><pubDate>Tue, 20 Oct 2009 15:43:31 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7543</guid><dc:creator>sachatomey</dc:creator><description>&lt;p&gt;There are already a few good Gemini/PowerPivot blogs that provide an introduction into what it is and does so there is no need for repetition.&amp;#160; What I haven’t seen are examples of how existing investments can be harnessed for Gemini/PowerPivot based self-service analytics.&lt;/p&gt;  &lt;p&gt;This series of posts focuses on various ways of creating Custom Data Feeds that can be used by Gemini/PowerPivot natively – Providing a direct feed from otherwise closed systems opens up new channels of analytics to the end user.&lt;/p&gt;  &lt;p&gt;Gemini/PowerPivot supports reading data from Atom-based data feeds, this post looks at a quick way of creating an Atom-based feed that can be consumed by Gemini/PowerPivot.&amp;#160; By far the simplest way to develop an Atom-based data feed is to employ &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx" target="_blank"&gt;ADO.NET Data Services&lt;/a&gt; in conjunction with &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank"&gt;ADO.NET Entity Framework&lt;/a&gt;.&amp;#160; With very few (in fact one and a bit!) lines of code, a data source can be exposed as a feed that Gemini/PowerPivot can read natively.&amp;#160; &lt;/p&gt;  &lt;p&gt;I am going to use the AdventureWorksDW sample hosted by a SQL Server 2008 R2 instance for this – obviously Gemini/PowerPivot natively reads SQL Server databases, so creating a custom feed over the top may seems a little pointless.&amp;#160; However, this technique may be useful for quick wins in several scenarios, including:&lt;/p&gt;  &lt;p&gt;- Preventing the need for users to connect directly to the underlying data source.    &lt;br /&gt;- Restricting access to various elements of the data source (tables/columns etc)     &lt;br /&gt;- Applying simple business logic to raw data.&lt;/p&gt;  &lt;p&gt;ADO.NET Data Services are a form of Windows Communication Foundation (WCF) services, and therefore can be hosted in various environments.&amp;#160; Here, I will simply host the ADO.NET Data Service inside an ASP.NET site.&lt;/p&gt;  &lt;p&gt;To create a Native Gemini/PowerPivot feed, you take seven steps:&lt;/p&gt;  &lt;p&gt;1 - Create ASP.NET Web Application    &lt;br /&gt;2 - Create Entity Data Model     &lt;br /&gt;3 - Create the Schema     &lt;br /&gt;4 - Create the Data Service     &lt;br /&gt;5 - Load From Data Feed     &lt;br /&gt;6 - Create Relationships     &lt;br /&gt;7 - Test&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1) Create ASP.NET Web Application&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m using Visual Studio 2008 here to create an &lt;strong&gt;ASP.NET Web Application&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_0ACF3FCE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_319D560E.png" width="504" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2) Create Entity Data Model&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Add an &lt;strong&gt;ADO.NET Entity Data Model&lt;/strong&gt; item to the project, these files have a .edmx extension and allow us to create a schema that maps to the underlying database objects.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_4A992653.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_2A7E1996.png" width="504" height="304" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3) Create the Schema&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We simply require a 1:1 mapping so will ‘&lt;strong&gt;Generate from Database&lt;/strong&gt;’.&amp;#160; Incidentally, the ‘Empty Model’ option allows you to build a conceptual model of the database resulting in custom classes that can be optionally mapped to the database objects later. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_71673C93.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_0A630CD9.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Create a &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; connection to AdventureWorksDW2008.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_235EDD1E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_6A48001B.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select the appropriate database objects, I’ve selected the following tables:&lt;/p&gt;  &lt;p&gt;- DimCurrency    &lt;br /&gt;- DimCustomer     &lt;br /&gt;- DimDate     &lt;br /&gt;- DimProduct     &lt;br /&gt;- DimPromotion     &lt;br /&gt;- DimSalesTerritory     &lt;br /&gt;- FactInternetSales&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_353B70EB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_1116165C.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once the wizard has completed, a new .edmx and associated cs file is created that respectively contain an Entity Relationship Diagram and a set of Auto Generated Classes that represent the database objects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Due to the way the Entity Framework handles Foreign Key Constraints we have to apply a workaround to ensure the Foreign Keys on the FactInternetSales table are exposed and brought into Gemini/PowerPivot.&amp;#160; A previous post &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/16/hack-exposing-foreign-keys-as-properties-through-the-ado-net-entity-framework.aspx" target="_blank"&gt;Exposing Foreign Keys as Properties through ADO.NET Entity Framework&lt;/a&gt; walks through the workaround.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image31_67E515EB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image31_thumb_156635AF.png" width="504" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image21_3C344BEF.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image21_thumb_2742C97C.png" width="238" height="43" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4) Create the Data Service&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Add an &lt;strong&gt;ADO.NET Data Service&lt;/strong&gt; item to the project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_1BD36DB1.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_62BC90AE.png" width="504" height="304" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The service class inherits from a generic version of the System.Data.Services.DataService object, so we need to inform the compiler what class to base the generic object on.&amp;#160; We essentially want to base our Data Service on the class representing our newly created Entity Data Model.&amp;#160; The class name is derived from the database name, unless changed when the Entity Data Model was created, so in our case the class name is AdventureWorksDW2008Entities.&lt;/p&gt;  &lt;p&gt;The auto generated service class contains a ‘TODO’ comment that asks you to ‘put your data source class name here’.&amp;#160; The comment needs replacing with AdventureWorksDW2008Entities.&lt;/p&gt;  &lt;p&gt;The final step is to expose the resources in the Entity Data Model.&amp;#160; For security reasons, a data service does not expose any resources by default.&amp;#160; Resources need to be explicitly enabled.&lt;/p&gt;  &lt;p&gt;To allow read only access to the resources in the Entity Data Model the InitializeService method needs updating with a single line of code.&amp;#160; The code snippet below details the final class implementation, notice the AdventureWorksDW2008Entities reference at line 1 and the the explicit resource enablement at line 6. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0faa6294-0c75-484d-b329-40b8a7e39245" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GeminiDataService&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;DataService&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;AdventureWorksDW2008Entities&lt;/span&gt;&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// This method is called only once to initialize service-wide policies.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; InitializeService(&lt;span style="color:#2b91af;"&gt;IDataServiceConfiguration&lt;/span&gt; config)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background:#f3f3f3;"&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;config.SetEntitySetAccessRule(&lt;span style="color:#a31515;"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;EntitySetRights&lt;/span&gt;.AllRead);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;That’s all that’s needed, by default, ADO.NET Data Services conform to the Atom standard, so in theory the Service is ready to be consumed by Gemini/PowerPivot.&lt;/p&gt;  &lt;p&gt;Before we try, it’s worth giving the service a quick test, building and running the solution (F5) launches Internet Explorer navigating to the Service hosted by the ASP.NET Development Server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_7BB860F3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_14B43139.png" width="504" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You are first presented with an XML document containing elements that represent database objects, you can further drill into the objects by amending the URL.&amp;#160; For example, if you want to see the contents of the DimPromotion table then append DimPromotion to the end of the URL: &lt;strong&gt;http://localhost:56867/GeminiDataService.svc/DimPromotion&lt;/strong&gt; (Case sensitive)&lt;/p&gt;  &lt;p&gt;Note:&amp;#160; You may need to turn off Feed Reader View in Internet Explorer to see the raw XML (Tools-&amp;gt;Internet Options–&amp;gt;Content-&amp;gt;Settings–&amp;gt;Turn On Feed Reader View – make sure this is unchecked)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_708ED6A9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5073C9EC.png" width="504" height="450" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;As a slight aside, the URL can be further enhanced to, filter, top n rows, extract certain properties etc etc. Here are a couple of examples:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;URL&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Effect&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer?$top=5&lt;/td&gt;        &lt;td&gt;Return the top 5 Customers&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer(11002)&lt;/td&gt;        &lt;td&gt;Return Customer with id 11002&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer(11002)/FirstName&lt;/td&gt;        &lt;td&gt;Return the First Name of Customer 11002&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimProduct(310)?$exapnd=FactInternetSales&lt;/td&gt;        &lt;td&gt;Returns Product with id 310 and all related Internet Sales Records&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;Confident that the feed is working, we can now deploy the service, and start using the feed in Gemini/PowerPivot.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 5) Load From Data Feed&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open up Excel 2010, launch the Gemini/PowerPivot Client (by selecting ‘Load &amp;amp; Prepare Data’)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_3058BD2F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_49548D74.png" width="332" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select ‘From Data Feed’ from the ‘Get External Data’ section of the Gemini/PowerPivot Home Ribbon to launch the Table Import Wizard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_34630B01.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_103DB072.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Specify the Url from the ADO.NET Data Services feed created earlier, in my case: &lt;a href="http://localhost:56867/GeminiDataService.svc"&gt;http://localhost:56867/GeminiDataService.svc&lt;/a&gt; as the &amp;#39;Data Feed Url’ and click Next.&lt;/p&gt;  &lt;p&gt;Incidentally, you can use the majority of the enhanced Urls to, for example only select the DimProduct table should you so wish, however by specifying the root Url for the service you have access to all objects exposed by the service.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_1447FE44.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5B312141.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;From the Table Import Wizard Select the required tables, in my case I’ll select them all.&amp;#160; (You can optionally rename and filter the feed objects here too).&lt;/p&gt;  &lt;p&gt;Following the summary screen, the Gemini/PowerPivot Client then gets to work importing the data from the ADO.NET Data Service:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_742CF186.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_6903673C.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once completed, Gemini/PowerPivot displays all the data from all of the feed objects as if it came directly from the underlying database.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_2FEC8A3A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_61E42AC4.png" width="504" height="479" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 6) Create Relationships&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There is one final step before we can test our model using an Excel Pivot Table.&amp;#160; We need to create the relationships between the tables we have imported.&amp;#160; The Gemini/PowerPivot Client provides a simple, if a little onerous way of creating relationships, the ‘Create Relationship’ action on the Relationships section of the Home Ribbon launches the Create Relationship wizard:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_41C91E07.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5AC4EE4C.png" width="504" height="192" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Each table needs relating back to the primary Fact table which results in the following relationships:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_73C0BE91.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_21AE114A.png" width="504" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 7) Test&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We are now ready to start our analysis, selecting PivotTable from the View section of the Gemini/PowerPivot Client Home ribbon creates a pivot table in the underlying Excel workbook attached to your custom fed Gemini/PowerPivot data model.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_53A5B1D4.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="image" border="0" alt="image" align="left" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_0193048D.png" width="154" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_2F805745.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_487C278A.png" width="944" height="205" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, to allow fast access to, for example, potentially sensitive data, through Gemini/PowerPivot you can quickly build a custom data feed that can be consumed natively by the Gemini/PowerPivot Client data feed functionality.&lt;/p&gt;</description></item></channel></rss>