<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/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 'PowerPivot' and 'Tabular'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=PowerPivot,Tabular&amp;orTags=0</link><description>Search results matching tags 'PowerPivot' and 'Tabular'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Group Sales by Age of Customers #dax #powerpivot #tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2013/05/06/group-sales-by-age-of-customers-dax-powerpivot-tabular.aspx</link><pubDate>Mon, 06 May 2013 12:16:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:48800</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;I published an article describing how to implement the &lt;a href="http://www.sqlbi.com/articles/grouping-transactions-by-age-of-customers-in-dax"&gt;grouping of sales transactions by age of customer at the moment of the transaction&lt;/a&gt; by using PowerPivot or Analysis Services. The same pattern can be used also for any kind of banding operation, this specific case is useful also to recycle the formula that gets the exact age of the customer for each transaction.&lt;/p&gt;  &lt;p&gt;An interesting point is related to performance optimization. The technique is based on adding a calculated column in a table that might contain millions of transactions. This is less expensive than adding a column that contains a foreign key and then a relationship between a table containing group definitions and the transactions table. Every relationship is expensive and generates additional structures (you can see more files in the Analysis Services database, too). Adding one or two columns that have a low number of distinct values (10-15 rows) usually has a lower memory cost than creating a relationship with another table. &lt;a href="http://www.sqlbi.com/articles/grouping-transactions-by-age-of-customers-in-dax"&gt;The article&lt;/a&gt; also contains PowerPivot examples for both Excel 2010 and Excel 2013.&lt;/p&gt;  &lt;p&gt;If only I could decouple attribute visualization from physical structure, I would put these “degenerate dimensions” in a separate folder, because in this way such attribute will be included in attributes belonging to the fact table, which might not be so clear in presenting data. However, I understand that such a decoupling could make live very hard to DAX clients (but probably for MDX it could be not a big issue).&lt;/p&gt;</description></item><item><title>DAX Studio for Excel 2013 finally available! #dax #excel #powerpivot #ssas #tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2013/05/04/dax-studio-for-excel-2013-finally-available-dax-excel-powerpivot-ssas-tabular.aspx</link><pubDate>Sat, 04 May 2013 05:49:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:48963</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;I'm so happy that &lt;a href="http://www.sqlbi.com/tools/dax-studio/"&gt;DAX Studio&lt;/a&gt; finally supports Excel 2013! As &lt;a href="http://geekswithblogs.net/darrengosbell/archive/2013/05/04/new-release---dax-studio-1.2-with-excel-2013-support.aspx"&gt;Darren Gosbell described in his blog&lt;/a&gt;, this release has a few internal changes that will better support future enhancements. I will port the code to capture the query plan for a query in this new release, but unfortunately it will require some weeks because I'm traveling a lot in these days.&lt;/p&gt;&lt;p&gt;If you write DAX formulas and queries for PowerPivot or Analysis Services Tabular, DAX Studio is a must have tool: do you really want to live without a DAX Editor? There are a lot of possible improvements and I hope other contributors will give their help to &lt;a href="http://daxstudio.codeplex.com/"&gt;this Codeplex project&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>LASTNONBLANK and FIRSTNONBLANK functions work with any column #dax #powerpivot #ssas #tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2013/04/19/lastnonblank-and-firstnonblank-functions-work-with-any-column-dax-powerpivot-ssas-tabular.aspx</link><pubDate>Fri, 19 Apr 2013 10:28:50 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:48789</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;During a &lt;a href="http://www.powerpivotworkshop.com/"&gt;PowerPivot Workshop&lt;/a&gt; course we received an interesting question from a student: “Can I use LASTNONBLANK (and FIRSTNONBLANK) with a column which is not a date column?”&lt;/p&gt;  &lt;p&gt;The reason is that we introduce LASTNONBLANK in the Advanced Time Intelligence module, because its typical use case is on a date column. However, you can use these functions on any column, which raises the question about what happens at that point. The sort order used is the one that depends on the data type of the column. If it is a Text column, the alphabetical sort order is the reference order. If it is a number, then the numeric order is the reference.&lt;/p&gt;  &lt;p&gt;What happens if a column has the “Sort By Column” property set to another column? This sort order is &lt;strong&gt;*not considered*&lt;/strong&gt; by LASTNONBLANK and FIRSTNONBLANK functions. Even if a PivotTable shows you data sorted according to Sort by Column property, any DAX formula ignores such a sort order. Thus, be careful writing your DAX queries if you have to do some assumptions on the sort order of a column using DAX functions that rely on sort order, such as LASTNONBLANK and FIRSTNONBLANK.&lt;/p&gt;</description></item><item><title>Optimize memory in #powerpivot and #ssas #tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2013/04/03/optimize-memory-in-powerpivot-and-ssas-tabular.aspx</link><pubDate>Wed, 03 Apr 2013 10:55:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:48473</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;Microsoft published an interesting article about how to &lt;a href="http://office.microsoft.com/en-us/excel-help/create-a-memory-efficient-data-model-using-excel-2013-and-the-powerpivot-add-in-HA103981538.aspx"&gt;optimize memory consumption of a PowerPivot Data Model in Excel 2013&lt;/a&gt;. All these suggestions are also valid for SSAS Tabular. I&amp;nbsp;also wrote an article&amp;nbsp;&lt;a href="http://www.sqlbi.com/articles/checklist-for-memory-optimizations-in-powerpivot-and-tabular-models/"&gt;Checklist for Memory Optimizations in PowerPivot and Tabular Models&lt;/a&gt; with a summary of the best practices.&lt;/p&gt;  &lt;p&gt;The short list of things to do is very valuable:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Removing columns non necessary for analysis&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Identity column (PK) of a fact table&lt;/li&gt;      &lt;li&gt;Timestamps, guid and other info useful for auditing and replication, but with no data for analysis&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;If a column has too many distinct value and cannot be removed (i.e. transaction ID in a fact table for drillthrough), consider splitting the column into multiple distinct parts.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Each one of the parts will have a small number of unique values, and the combined total will be smaller than the original unified column. &lt;/li&gt;      &lt;li&gt;Always separate date and time in two columns, instead of the original datetime.&lt;/li&gt;      &lt;li&gt;In many cases, you also need the distinct parts to use as slicers in your reports. When appropriate, you can create hierarchies from parts like Hours, Minutes, and Seconds.&lt;/li&gt;      &lt;li&gt;Keep only the granularity you really need.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Normalize columns keeping only those with the lower number of distinct values&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;For example, if you have quantity, price and total line amount, import quantity and price and calculate total line amount as SUMX( Sales, Sales[quantity] * Sales[price] ) instead of SUM( Sales[line amount] ) importing line amount. &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Reduce precision of number to reduce distinct values (i.e. round to integer if decimal values are not relevant). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The reason is that VertiPaq compress data at column level, creating a dictionary for each column and storing for each row only the number of bits required to store the index to the dictionary. More details in the article &lt;a href="http://www.sqlbi.com/articles/optimizing-high-cardinality-columns-in-vertipaq/"&gt;Optimizing High Cardinality Columns in VertiPaq&lt;/a&gt; I wrote a few months ago and on the &lt;a href="http://www.sqlbi.com/books/microsoft-sql-server-2012-analysis-services-the-bism-tabular-model/"&gt;SSAS 2012 Tabular book&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A useful macro to analyze memory consumption and quickly identify the most expensive tables and columns in a PowerPivot workbook is available on Kasper De Jonge blog &lt;a href="http://www.powerpivotblog.nl/what-is-eating-up-my-memory-powerpivot-excel-edition"&gt;What is eating up my memory the PowerPivot / Excel edition&lt;/a&gt;. There is also a version for a Tabular database in his &lt;a href="http://www.powerpivotblog.nl/what-is-using-all-that-memory-on-my-analysis-server-instance"&gt;What is using all that memory on my Analysis server instance&lt;/a&gt; post.&lt;/p&gt;</description></item><item><title>DAX Time Intelligence for 4-4-5 Calendar, ISO Calendar and other custom ones #dax #powerpivot</title><link>http://sqlblog.com/blogs/marco_russo/archive/2013/02/19/dax-time-intelligence-for-4-4-5-calendar-iso-calendar-and-other-custom-ones-dax-powerpivot.aspx</link><pubDate>Tue, 19 Feb 2013 14:21:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:47663</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;DAX offers a set of Time Intelligence functions that simplify writing DAX expressions such as YTD, YOY and other time-related calculations. However, these functions only works when some assumptions are valid: your periods should be “natural” months and quarter. Some industries, such as retail and manufacturing, are used to accounting periods that are based on weeks instead of months. One month and one quarter are a set of weeks and a week cannot be split in different months, quarter or years. Making DAX working on these custom calendars requires you to write some DAX expression without using the built-in Time Intelligence functions.&lt;/p&gt;  &lt;p&gt;I wrote an article, &lt;a href="http://www.sqlbi.com/articles/week-based-time-intelligence-in-dax/"&gt;Week-Based Time Intelligence in DAX&lt;/a&gt;, which describes how to write the common DAX calculations required on a custom calendar. I also included two samples, one for Excel 2010 and the other for Excel 2013, so that you can easily work on both versions (&lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2013/01/14/powerpivot-compatibility-across-versions.aspx"&gt;as you know&lt;/a&gt;, downgrading a workbook from Excel 2013 to Excel 2010 with PowerPivot is not possible).&lt;/p&gt;  &lt;p&gt;An important tip you will find is that creating a column that contains the number of days elapsed in a year (or the running total of days in the year, if you prefer) makes it easy writing the FILTER required to use the right set of days in each calculation. After all, this technique is very similar to the one you would use in SQL to perform the same calculation, for this reason DAX is considered more intuitive than MDX by developers with a SQL background.&lt;/p&gt;</description></item><item><title>LASTDATE dates arguments and upcoming events #dax #tabular #powerpivot</title><link>http://sqlblog.com/blogs/marco_russo/archive/2012/10/01/lastdate-dates-arguments-and-upcoming-events-dax-tabular-powerpivot.aspx</link><pubDate>Mon, 01 Oct 2012 17:04:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45415</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;Recently I&amp;nbsp;had to write a DAX formula containing a LASTDATE within the logical condition of a FILTER: I found that its behavior was not the one I expected and I further investigated. At the end, I wrote my findings in &lt;a href="http://www.sqlbi.com/articles/usage-of-dates-argument-in-a-row-context/"&gt;this article on SQLBI&lt;/a&gt;, which can be applied to any Time Intelligence function with a &amp;lt;dates&amp;gt; argument.&lt;/p&gt;&lt;p&gt;The key point&amp;nbsp;is that when you write &lt;/p&gt;&lt;p&gt;&lt;strong&gt;LASTDATE( table[column] )&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;in reality you obtain something like &lt;/p&gt;&lt;p&gt;&lt;strong&gt;LASTDATE( CALCULATETABLE( VALUES( table[column] ) ) )&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;which converts an existing row context into a filter context.&lt;/p&gt;&lt;p&gt;Thus, if you have something like &lt;/p&gt;&lt;p&gt;&lt;strong&gt;FILTER( table, table[column] = LASTDATE( table[column] )&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;the FILTER will return all the rows of table, whereas you probably want to use &lt;/p&gt;&lt;p&gt;&lt;strong&gt;FILTER( table, table[column]&amp;nbsp;= LASTDATE( VALUES( table[column] ) ) )&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;so that the existing filter context before executing FILTER is used to get the result from VALUES( table[column] ), avoiding the automatic expansion that would include a CALCULATETABLE that would hide the existing filter context.&lt;/p&gt;&lt;p&gt;If after reading the &lt;a href="http://www.sqlbi.com/articles/usage-of-dates-argument-in-a-row-context/"&gt;article&lt;/a&gt; you want to get more insights, read the Jeffrey Wang's post &lt;a href="http://mdxdax.blogspot.com/2011/01/dax-time-intelligence-functions.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In these days I'm speaking at &lt;a href="http://www.sqlpass.org/sqlrally/2012/nordic/"&gt;SQLRally Nordic 2012&lt;/a&gt;&amp;nbsp;in Copenhagen&amp;nbsp;and I will be in &lt;a href="http://www.sqlbi.com/courses/ssas-workshop-cologne-oct2012/"&gt;Cologne (Germany)&lt;/a&gt; next week for a SSAS Tabular Workshop, whereas Alberto will teach the same workshop in &lt;a href="http://www.sqlbi.com/courses/ssas-workshop-amsterdam-oct2012/"&gt;Amsterdam&lt;/a&gt; one week later. Both workshops still have seats available and the Amsterdam's one is still in early bird discount until October 3rd!&lt;/p&gt;&lt;p&gt;Then, in November I expect to meet many blog readers at &lt;a href="http://www.sqlpass.org/summit/2012/"&gt;PASS Summit 2012&lt;/a&gt; in Seattle and I hope to find the time to write other article on interesting things on Tabular and PowerPivot. Stay tuned!&lt;/p&gt;</description></item><item><title>Community Events in K&amp;#246;ln (October) and Copenhagen November #ssas #tabular #powerpivot</title><link>http://sqlblog.com/blogs/marco_russo/archive/2012/09/12/community-event-in-copenhagen-on-november-21-2012.aspx</link><pubDate>Wed, 12 Sep 2012 10:12:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45128</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;Short update about community events in Europe where I will speak.&lt;/p&gt;&lt;p&gt;On October 11 I will present DAX in Action in Köln - all details in the PASS local chapter here: &lt;a href="http://www.sqlpass.de/Regionen/Deutschland/K%C3%B6lnBonnD%C3%BCsseldorf.aspx"&gt;http://www.sqlpass.de/Regionen/Deutschland/K%C3%B6lnBonnD%C3%BCsseldorf.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I will be speaking at a community event in Copenhagen on November 21, 2012. The session will be &lt;strong&gt;Excel 2013 PowerPivot in Action&lt;/strong&gt; and details about time and location are available here: &lt;a href="http://msbip.dk/events/30/msbip-mode-nr-9/"&gt;http://msbip.dk/events/30/msbip-mode-nr-9/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I will be in Köln and Copenhagen to teach the &lt;a href="http://ssasworkshop.com"&gt;SSAS Tabular Workshop&lt;/a&gt;. The workshop in Köln is the first in Germany and I look forward to meet new BI developers there.&lt;/p&gt;&lt;p&gt;Copenhagen is the second edition after another we delivered this spring. It is a convenient location also for people coming from Malmoe and Göteborg in Sweden. Last event in Copenhagen were conflicting with a large event in Sweden, maybe this time I'll meet more people coming from the other side of the Øresund Bridge!&lt;/p&gt;&lt;p&gt;Many other dates and location are available on the &lt;a href="http://ssasworkshop.com"&gt;SSAS Tabular Workshop&lt;/a&gt; website.&lt;/p&gt;</description></item><item><title>TechEd North America 2012-Day 4 #msTechEd #teched</title><link>http://sqlblog.com/blogs/marco_russo/archive/2012/06/15/teched-north-america-2012-day-4-msteched-teched.aspx</link><pubDate>Fri, 15 Jun 2012 16:21:59 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:43915</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;I hadn’t time yesterday to write a blog post before of the beginning of the day and I recover now that I’m already back to Europe. I spent many hours at the Microsoft booth meeting people who asked questions about Tabular, Power View and PowerPivot. I have to say that I’m really glad so many people started using PowerPivot and of the large interest around Tabular.&lt;/p&gt;  &lt;p&gt;During my &lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DBI319"&gt;BISM: Multidimensional vs. Tabular&lt;/a&gt; I’ve been helped by Alberto during the demo (we joked about he was the demo monkey) and the feedback received are good. I tried to compare the strength and weakness of the two modeling options without spending time describing the area in which they are similar. During the days before I had many discussions about scenarios based on snapshots and I added a few slides to the presentation in order to cover this area that I thought was marginal but seems to be a very common one. To know more, watch the presentation when it will be available or wait for some article I’ll write in the future describing these patterns.&lt;/p&gt;  &lt;p&gt;In less than 10 days, I’ll be at &lt;a href="http://europe.msteched.com/"&gt;TechEd Europe&lt;/a&gt; and I’m really looking forward to meet other Tabular developers and PowerPivot users there!&lt;/p&gt;</description></item><item><title>Fact Tables with Different Granularities in #PowerPivot and #BISM #Tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2012/01/11/fact-tables-with-different-granularities-in-powerpivot-and-bism-tabular.aspx</link><pubDate>Wed, 11 Jan 2012 12:35:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:40880</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;A few weeks ago I received a question that inspired me in writing &lt;a href="http://www.sqlbi.com/articles/budget-and-other-data-at-different-granularities-in-powerpivot/"&gt;this article&lt;/a&gt; about how to handle data at different granularities in PowerPivot and BISM Tabular. I think this is a common pattern when you have a budget table that contains data at an aggregated level (like month and product category) and you want to compare it with sales that are stored at product and day level. This scenario can be handled in a BISM Multidimensional model by using relationship with other attributes in a dimension, but this is not possible in PowerPivot and BISM Tabular because of the lack of attribute relationships in the model. &lt;/p&gt;  &lt;p&gt;In PowerPivot and BISM Tabular you have two issues: first, you have to create a single PivotTable with both Budget and Sales measures; second, you want to blank the budget value when a dimension or an attribute that is not included in the budget is drilled down. After that you may want to split the budget over these dimensions/attributes according with an allocation algorithm. In the &lt;a href="http://www.sqlbi.com/articles/budget-and-other-data-at-different-granularities-in-powerpivot/"&gt;article&lt;/a&gt; I covered the first two issues, whereas the third might be the topic for a future post. The following is the final result you will obtain – OrderQuantity and Budget are the two measures obtained from columns of two different tables, Sales and Budget, that have different granularities.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.sqlbi.com/wp-content/uploads/image13.png" /&gt;&lt;/p&gt;  &lt;p&gt;I’d like to get feedback from PowerPivot users that approached the same issue with alternative solutions.&lt;/p&gt;</description></item><item><title>Sorting Dates Columns in #PowerPivot and #BISM #Tabular</title><link>http://sqlblog.com/blogs/marco_russo/archive/2011/12/08/sorting-dates-columns-in-powerpivot-and-bism-tabular.aspx</link><pubDate>Thu, 08 Dec 2011 11:15:38 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:40219</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;I just published an article about &lt;a href="http://www.sqlbi.com/articles/sorting-dates-columns-in-powerpivot-v2-and-bism-tabular/"&gt;Sorting Dates Columns in PowerPivot v2 and BISM Tabular&lt;/a&gt; on SQLBI website. In reality, the article is about sorting columns by other columns in a Tabular model, but the common scenario in which you need that is in a Calendar table where you can have columns that have to be sorted by using a combination of other columns and not just once.&lt;/p&gt;  &lt;p&gt;For example, a MonthYear column containing January 2012 has to be sorted by Year and then by Month. In a Multidimensional model this is usually done by defining a composite attribute key for such attribute (which will be defined by Year and MonthNumber source columns, exactly in this order) and by selecting the AttributeKey value for the OrderBy property of MonthYear attribute in the Date dimension.&lt;/p&gt;  &lt;p&gt;The lack of attribute keys in a Tabular model has several consequences that include this one. Other issue is the inability to save an item key for a report different than the visual text (which is an issue if one day an item will change its description but not this key). Another related issue is related to translations: today Tabular doesn’t support translations and the lack of an item key is not a real problem for this specific scenario, but I’d like to know how Microsoft will handle Translations one day without introducing a concept similar to Attribute Key that we have been using in Multidimensional since the first version of Analysis Services.&lt;/p&gt;</description></item></channel></rss>