THE SQL Server Blog Spot on the Web

Welcome to SQLblog.com - The SQL Server blog spot on the web Sign in | Join | Help
in Search

SQLBI - Marco Russo

SQLBI is a blog dedicated to building Business Intelligence solutions with SQL Server

  • Optimize Table and Column Size in #PowerPivot and #BISM #Tabular #SSAS #VertiPaq

    When you create a PowerPivot workbook or a BISM Tabular model (new in Analysis Services 2012), you store data by using the VertiPaq engine, which is an in-memory columnar database. Instead of considering the row of a table as the main unit of storage, it considers every column as a separate entity and stores data for every column in a separate way. This makes it very fast to query data for a single column, but requires a higher computational effort in order to retrieve data for several columns of a single row.

    VertiPaq is very fast and stores data in a highly compressed way. This is possible also thanks to its particular storage architecture. Every table you process is divided in columns, and every column has its own storage. For every column, a dictionary of all the distinct values is created, so that the real storage for that column will be a bitmap index that references the dictionary. Both dictionary and bitmap index are then highly compressed and are stored in a compressed way on both RAM and disk. The disk is used only as a sort of backup of data and all the queries are made by loading all of the column data in memory.

    Exactly two years ago I wrote a blog post about how to optimize memory usage in PowerPivot and those suggestions where still valid today in any VertiPaq implementation:

    • Reduce the number of columns
    • Avoid high-cardinality columns
    • Reduce precision of some numbers (the goal is reducing the number of distinct values)

    Considering the possible ways to optimize a table in VertiPaq, the best approach is locating the largest column and trying to optimize it if you cannot remove it. It’s interesting to discover that possible optimizations require a completely counterintuitive approach, that would increase table size in a SQL Server table but can reduce space up to 90% in VertiPaq. The basic idea is that you can save this space by splitting the column in two or more columns with a smaller number of distinct values, and I described that in the new article Optimizing High Cardinality Columns in VertiPaq. I’d like to get feedback using this technique, especially on possible unexpected side effects!

    In the meantime, I’d like to highlight the next upcoming events in which I’ll talk about PowerPivot and BISM Tabular (hint: even if you don’t understand Italian language, take a look at the conference web site and let me know if you don’t like it!):

  • Free online session at PASS DW/BI Virtual Chapter #sqlpass – Wed Jan 18th, 2012

    On January 18th, 2012 at 12pm Eastern Time (which is 5pm GM) Alberto Ferrari will deliver a free online session for the PASS DW/BI Virtual Chapter. This is the official description of the session.

    Many-to-Many Relationships in DAX

    The introduction of many to many dimension relationships in SSAS (since 2005) opened new scenarios that can be solved using OLAP cubes. Now, with the introduction of the Vertipaq engine and the DAX programming language, it seems that many-to-many relationships are no longer supported. As we are going to show, this is not true: many-to-many relationships can be leveraged in DAX too, even if this means some deep understanding of the Vertipaq engine and of the DAX programming language. During the session we will show many scenarios where many-to-many relationships can be managed by using DAX. The implementations are different from those used in SSAS, both from the data modeling and from the programming points of view. Gaining the ability to master many-to-many relationships will open new modeling scenarios that look very promising in SSAS.

    This is the session that scored the best session in BI Platform Track at PASS Summit 2011, so you might have high expectations! Don’t miss this session if you are serious with BISM Tabular. It is an advanced one, but is a must for any serious BI Developer who wants to use BISM Tabular!

  • Using SQL to query Multidimensional and Tabular models #dax #sql #mdx #ssas

    Analysis Services answers to query in MDX, in DAX (by now just for Tabular models) and has a limited capability to answer SQL queries. It is not useful for any development or client tool, but I wanted to write a blog post on it in order to be able to retrieve these information I gathered during study of DAX and MDX queries sent to Tabular models.

    If you create an OLE DB connection using the MSOLAP driver you can send queries to BISM models according to the following schema:

    • Multidimensional (aka UDM/OLAP)
      • MDX
      • SQL
    • Tabular
      • DAX
      • MDX
      • SQL

    The SQL support exists mainly for creating local cubes from a Multidimensional model and it is also used by BISM Tabular model editor. The feature is not documented and not supported outside the syntax that is required for supporting local cubes (for example, it is used when you create an Offline cube in Excel).

    You can see some examples of SQL syntax used to query an OLAP cube in two blog post of 2005/2006: one from Mat Stephen and the other from Chris Webb. You can use the same syntax also to query a BISM Tabular model. In such a case, you can also add the SQLQueryMode=DataKeys in the connection strings in order to improve performance, because there is a more direct translation into a Vertipaq request balanced by further restrictions in SQL syntax.

    I haven’t found a good reason to use such a SQL syntax and the fact that it is not documented and not completely supported means that it is not something that should be used anyway. However, I think it is good to know what is the SQL support existent in Analysis Services (someone might remember some presentation of UDM in early days of SQL 2005 beta) and I’d like to get your feedback about reasons for which this feature should be supported (but before answering, please remember this is a very particular SQL dialect, with syntax like NATURAL JOIN and no support for many standard ANSI constructs).

  • Fact Tables with Different Granularities in #PowerPivot and #BISM #Tabular

    A few weeks ago I received a question that inspired me in writing this article 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.

    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 article 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.

    I’d like to get feedback from PowerPivot users that approached the same issue with alternative solutions.

  • Pre-Conference Seminar at #TechEdEurope: #ssas #bism #tabular

    The Microsoft TechEd Europe 2012 will be in Amsterdam this year on June 26-29. The day before (25 June 2012) there are several pre-conference seminars and I’m glad to announce that I and Alberto Ferrari will deliver this one:

    Using BISM Tabular in Microsoft SQL Server Analysis Services 2012
    […] After an initial introduction of the overall architecture with the Microsoft platform, including SharePoint, PowerPivot and Power View, most of the time is dedicated to the definition of a BISM Tabular model. Learn about creating one from the ground up and then defining all the metadata required in order to obtain a rich semantic model that provides better user experience for data exploration in both Excel and Power View. You also learn the basics of DAX language and how to manage role based security and partitioning in a Tabular model. […]

    Full-day pre-conference seminar at TechEd Europe 2012 - 25 June 2012 – Amsterdam

    This seminar is introductive and is suggested if you (or some of your colleagues!) want to have a complete vision about BISM Tabular and its role in the Microsoft BI platform, including Power View and PowerPivot. We are also preparing other courses on BISM Tabular and DAX that we’ll start delivering them in Europe in April and we’ll announce in a few weeks. These will be 2-day courses dedicated to BI Developers and BI Consultants that want to get a deeper knowledge of Tabular, especially compared to the skills they might already have on UDM/BISM Multidimensional.

  • Free online session at PASS DW/BI Virtual Chapter #sqlpass – Tues Jan 10th, 2012

    Tomorrow January 10th, 2012 at 3pm Eastern Time (which is 8pm GMT) I will deliver a free online session for the PASS DW/BI Virtual Chapter. This is the official description of the session.

    Vertipaq vs OLAP: Change Your Data Modeling Approach

    While in classical OLAP cubes the clear winner data modeling technique is dimensional modeling, it is interesting to understand what will happen with the new Vertipaq engine. In Vertipaq there is no real need to do dimensional modeling, because the engine is able to manage relational modeling too. In this session we will introduce the new modeling capabilities of Vertipaq, showing how the same scenarios can be modeled in both UDM and Vertipaq. This will lead to an interesting discussion about how to develop your data warehouse in order to make it working with both UDM and Vertipaq.

    This is the same session I delivered at PASS Summit 2011, maybe with just some update and fix according to the feedback I received at PASS and new knowledge I’ve got in the last two months.

    Thanks to some feedback I received, I’d like to advise you that this session is not a comparison between Vertipaq and OLAP in terms of performance, scalability or features set. The focus of this session is about data modeling, and how you may change the data model on the relational side (and in Tabular, too) in order to leverage the characteristics of the Tabular technology. Just to make an example: in an OLAP model you are used to move part of the calculation in the ETL (snapshot tables, ranking, and so on). Is this still necessary with Vertipaq or not? You might guess the answer, but this and other topics will be the base for the discussion during this session.

    Set your agenda and connect to the LiveMeeting session following this link (Tues Jan 10th 3pm Eastern (US) – 8pm GMT)

  • Use parameters in your #DAX queries

    The DAX query syntax allows you to insert a parameter by using the @ symbol.

    EVALUATE

    CALCULATETABLE(

        'Product Subcategory',

        'Product Category'[Product Category Name] = @Category )

    Depending on the client and on the driver you are using to execute your DAX query, this syntax may be supported or not. Here is a short recap:

    • XMLA Execute Command: supported
    • OLE DB MSOLAP driver with ADO connection: supported
    • OLE DB MSOLAP driver with ADO.NET connection: not supported
    • OLE DB for OLAP MSOLAP driver with ADOMD library: supported
    • OLE DB for OLAP MSOLAP driver with ADOMD.NET library: supported
    • Reporting Services with Analysis Services driver: supported using DMX editor - not supported in Report Builder
    • Reporting Services with OLE DB driver: not supported (but a workaround is available)

    Here is an example of an XMLA command that executes the initial DAX query passing Bikes as Category parameter.

    <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">

        <Command>

            <Statement>

                EVALUATE

                CALCULATETABLE(

                'Product Subcategory',

                'Product Category'[Product Category Name] = @Category )

            </Statement>

        </Command>

        <Properties>

            <PropertyList>

                <Catalog>AdventureWorks Tabular Model SQL 2012</Catalog>

            </PropertyList>

        </Properties>

        <Parameters>

            <Parameter>

                <Name>Category</Name>

                <Value>Bikes</Value>

            </Parameter>

        </Parameters>

    </Execute> 

    Passing the parameter to the OLE DB MSOLAP driver doesn’t work in .NET because of a problem in System.Data.OleDb assembly, as described in a Connect bug that has never been fixed despite the “Fixed” state of the issue (please vote it!). As a workaround, you can use the ADOMD.NET library in .NET and you can find a working example written in C# in this article on SQLBI web site.

    Finally, you can use DAX queries in Reporting Services by using the DMX editor in BIDS/SSDT/Visual Studio (you know, there are a lot of names for the same thing!). In fact, standard user interface for MDX only supports MDX queries, but if you select the "Command Type DMX" button (which is used to insert data mining queries) then you will be able to insert a DAX query with a parameter (remember to manually insert the parameters without the @ prefix by using the Query Parameters button).

    image

    However, you cannot use DAX queries at all in Reporting Builder by using the standard Microsoft Analysis Services Data Source with Report Builder, because the user interface doesn't support DMX and only supports MDX queries. Instead, you can use the standard OLE DB connection type, by passing MSOLAP as a provider name.

    Define OLE DB Data Source using MSOLAP in Reporting Services

    However, even in this case parameters in DAX queries are not supported, probably because of the same bug on System.Data.OleDb. Maybe that when this bug will be fixed, also Reporting Builder (and Reporting Services deisgner in Visual Studio) will work. In the meantime, you have to rely on string concatenation in order to pass a parameter to a query. In other words, you should set the Query.CommandText properties with the following expression:

    = "EVALUATE CALCULATETABLE(
    'Product Subcategory',
    'Product Category'[Product Category Name] = """ & Parameters!Category.Value & """ )"

    I hope that the OLE DB support from ADO.NET will be fixed by Microsoft. I understand that OLE DB has been deprecated, but I don’t understand why we should wait a months if not years in order to get an ODBC driver for Analysis Services instead of a quick fix for that. Reporting Services developer using DAX would really appreciate this gift!

    UPDATE: I fixed the post on January 5, 2012 thanks to Greg Galloway that pointed me to DMX Builder in Visual Studio

  • Analyze #DAX query plan with Profiler

    Jeffrey Wang started the 2012 (or finished the 2011, depending on your time zone) by publishing the first article dedicated to DAX Query plan. While I look forward to reading next articles, it is interesting the explanation of what is the relationship between MDX and DAX in Analysis Services 2012.

    An MDX query sent to a Tabular model is not converted in an equivalent DAX query, but at a certain point a DAX query plan is created (and probably many of them, both logical and physical plans). This is something that is very clear whenever you compare the DAX Query plan obtained from an MDX query and the one generated by an equivalent DAX query (You can find more examples in my article about converting queries from MDX to DAX).

    Happy 2012 to everyone!

  • String Comparison in #DAX

    In DAX you don’t have the LIKE operator and you have to use SEARCH instead. However, performance are not very good and it is better to use LEFT and RIGHT if you just need to compare the initial (or ending) match of a string.

    I just wrote an article about string comparison in DAX. During my exploration of LIKE replacement functions in DAX, I have found that documentation of SEARCH for PowerPivot v1 is wrong – in DAX the SEARCH function is always case-insensitive, whereas FIND is always case-sensitive. Moreover, in PowerPivot v1 you had to use IFERROR to catch the string not found condition. This was a big issue in performance and in PowerPivot v2 (and in BISM Tabular) the new SEARCH and FIND functions have a fourth parameter that specify the value that should be returned when a match is not found. Using FIND seems to be 10% faster than SEARCH, just because it is case-insensitive.

    I'd like to thank Marius Dumitru for the feedback he provided me in this analysis. Here are a few best practices he also suggest:

    • Always avoid IFERROR and ISERROR (everywhere, not just for string functions).
    • Use LEFT instead of FIND/SEARCH for expressing “starts with” conditional expressions on strings
    • Use FIND instead of SEARCH if your comparison is (or can be) case-sensitive.
    • When FIND or SEARCH are needed, use their new flavors taking a 4th parameter (added in SQL11)

    If you are curious to see a few performance numbers, at the end of the post I includes the timing for a few query over a Tabular model based on an IISLog table. I included a best-practice table conversion in my article. If you think that a regular expression function would be useful in DAX, you can vote this suggestion on Connect.

    -- Each DAX query is preceded by a comment with total execution time

    -- The original condition over IISLog[cIp] column is this one in SQL:

    --   WHERE cIp NOT LIKE '217.57.131.11%'

    --     AND cIp NOT LIKE '11.22.33.3%'

    --     AND cIp NOT LIKE '127.0.0.1'

    --     AND cIp NOT LIKE '192.168.%'

    --

    -- Other conditions tested in a few queries are:

    --     AND csUriStem LIKE '%SQLBI%Methodology%at%work%pdf'

    --     AND csUserAgent NOT LIKE '%bot%'

     

    -- 28 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[csUserAgent]),

                SEARCH( "bot", IISLog[csUserAgent], 1, 0 ) = 0

        ),

        FILTER( ALL(IISLog[csUriStem]),

                SEARCH( "SQLBI*Methodology*at*work*pdf", IISLog[csUriStem], 1, 0 ) <> 0

        ),

        FILTER( ALL(IISLog[cIp]),

          [cIp] <> "127.0.0.1"

          && LEFT( [cIp], 12 ) <> "11.22.33.3"

          && LEFT( [cIp], 8 ) <> "192.168."

          && LEFT( [cIp], 13 ) <> "217.57.131.11"

        )

    )

     

     

    -- 15 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[csUserAgent]),

                SEARCH( "bot", IISLog[csUserAgent], 1, 0 ) = 0

        )

    )

     

    -- 11 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[csUriStem]),

                SEARCH( "SQLBI*Methodology*at*work*pdf", IISLog[csUriStem], 1, 0 ) <> 0

        )

    )

     

     

    -- 9 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[csUriStem]),

                SEARCH( "SQLBI", IISLog[csUriStem], 1, 0 ) <> 0

        )

    )

     

     

    -- 54 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[cIp]),

                IFERROR( SEARCH( "217.57.131.11", IISLog[cIp] ), -1 ) < 0

                && IFERROR( SEARCH( "11.22.33.3", IISLog[cIp] ), -1 ) < 0

                && IFERROR( SEARCH( "127.0.0.1", IISLog[cIp] ), -1 ) < 0

                && IFERROR( SEARCH( "192.168.", IISLog[cIp] ), -1 ) < 0

        )

    )

     

    -- 16 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[cIp]),

                SEARCH( "217.57.131.11", IISLog[cIp], 1, 0 ) = 0

                && SEARCH( "11.22.33.3", IISLog[cIp], 1, 0 ) = 0

                && SEARCH( "127.0.0.1", IISLog[cIp], 1, 0 ) = 0

                && SEARCH( "192.168.", IISLog[cIp], 1, 0 ) = 0

        )

    )

     

     

    -- 14 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[cIp]),

                FIND( "217.57.131.11", IISLog[cIp], 1, 0 ) = 0

                && FIND( "11.22.33.3", IISLog[cIp], 1, 0 ) = 0

                && FIND( "127.0.0.1", IISLog[cIp], 1, 0 ) = 0

                && FIND( "192.168.", IISLog[cIp], 1, 0 ) = 0

        )

    )

     

     

    -- 12 seconds

    EVALUATE ROW( "result",

      COUNTROWS(

        FILTER( DISTINCT(IISLog[cIp]),

                [cIp] <> "127.0.0.1"

          && SEARCH( "11.22.33.3", [cIp], 1, 0 ) <> 1

          && SEARCH( "192.168.", [cIp], 1, 0 ) <> 1

          && SEARCH( "217.57.131.11", [cIp], 1, 0 ) <> 1

        )

      )

    )

     

     

    -- 12 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[cIp]),

                [cIp] <> "127.0.0.1"

          && SEARCH( "11.22.33.3", [cIp], 1, 0 ) <> 1

          && SEARCH( "192.168.", [cIp], 1, 0 ) <> 1

          && SEARCH( "217.57.131.11", [cIp], 1, 0 ) <> 1

        )

    )

     

    -- 2 seconds

    EVALUATE

    CALCULATETABLE(

        ROW( "Rows", DISTINCTCOUNT( IISLog[cIp] ) ),

        FILTER( ALL(IISLog[cIp]),

          [cIp] <> "127.0.0.1"

          && LEFT( [cIp], 12 ) <> "11.22.33.3"

          && LEFT( [cIp], 8 ) <> "192.168."

          && LEFT( [cIp], 13 ) <> "217.57.131.11"

        )

    )

     

     

  • Query Projection in #DAX

    I wrote a short article about query projection in DAX. To make the story short, you should always use SUMMARIZE in order to remove columns from a table in a query. Thus, if you just want three columns from a table, instead of writing this in SQL:

    SELECT Col1, Col2, Col3 FROM Table

    you should write this in DAX:

    EVALUATE SUMMARIZE( Table, Table[Col1], Table[Col2], Table[Col3] )

    A longer explanation is available in this article on SQLBI, that also explain how to rename a column, even if there are penalty performances doing that. Feedback are welcome in case you have suggestions!

  • Ratio Calculation Differences between #MDX and #DAX in #BISM #Tabular

    You should have already read that DAX is simpler than MDX. It’s true, and sometime you have to pay a price for simplicity. I am used to say that DAX is somewhere between SQL and MDX. In fact, SQL requires you to put any relationship in the query (using JOIN or subqueries) whereas MDX can only leverage on existing relationships in the underlying data model, without any syntax that allows to create relationships “on the fly” during a query. DAX is in the middle because it can leverage on existing relationships (like MDX) *and* it can also join tables in a query definition (like SQL).

    These differences might appear also in unexpected conditions. In the new article Ratio Over Subtotals with Normalized Tables in DAX I show how the calculation of a simple ratio (product vs. model and product vs. category) can be different in DAX according to the underlying data model and the shape of the query used to obtain the result. For example, the fact of showing the category name in the result might affect the way you write the corresponding ratio. After all, this is not so different if you think to a corresponding SQL query, but if you are used to write MDX queries, the effort required in DAX might surprise you.

    I would like to your get feedback about these differences between DAX and MDX.

  • Best session in BI Platform Track at PASS Summit 2011 #sqlpass

    Last week the final session evaluations from PASS Summit 2011 have been communicated to speakers and best scores have been made public. My session was not particularly good: it had very good feedback (overall average 4.32) and some average one, mostly because the title (Vertipaq vs OLAP: Change Your Data Modeling Approach) suggested to someone a comparison about MOLAP and Vertipaq engines, whereas I dedicated the session to differences in data modeling for those two models. I know, I have to compare the two engines and I will do in the future, but only after some real data gathered in real projects. It is not just a question of performance, but also of scalability and resources requested in order to run a system.

    But the reason for the blog post is that the best session in the BI Platform Architecture, Development and Administration track has been the Many-to-Many Relationships in DAX by Alberto Ferrari, which achieved an outstanding overall average score of 4.84 and is the 5th session in overall ranking of PASS Summit 2011, tied with Peter Myers session (which is also the top in BI Information Delivery – PowerPivot and DAX rocks this year). If you attended PASS Summit you should be able to view the streamed recording of the session. In any case, you can download for free the whitepaper The Many-to-Many Revolution 2.0, which contains the whole content of Alberto’s session, plus more models and corresponding techniques in Multidimensional models. I and Alberto worked on this paper in the months before PASS Summit and we expect to review the paper in late 2012, after we’ll have shipped the upcoming book we are writing with Chris Webb. This is the reason we have released few new articles in the last months, but soon we will start writing more articles, stay tuned!

    I always try to understand from session feedback what can be improved in my delivery and what are the reasons a session is appreciated by the attendees. To my, the goal of attending a session is to learn something and looking to a topic from a different perspective. Votes, and comments, in session evaluations are not the ultimate judgment, but they are helpful in understanding attendee’s perception. Alberto’s session on Many-to-Many relationship is very well prepared and has very good animated graphical representation of calculations going on behind the scenes. This is very expensive in preparing the session (every animated slide may require one hour or more, and there are many!), but it is clearly a very good way to communicate effectively. Well, more lessons learned that I think will be helpful next year, many conferences are coming (remember, you can vote you desired sessions at SQLBits 10!).

  • Vote desired sessions at #SQLBits 10

    Just a breaking news: you can vote the sessions you'd like to attend at the next SQLbits in London! I already did my job and I have to say that it's very hard to use your 10 sesssions - there are too many sessions that I'd like to watch!
  • Sorting Dates Columns in #PowerPivot and #BISM #Tabular

    I just published an article about Sorting Dates Columns in PowerPivot v2 and BISM Tabular 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.

    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.

    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.

  • Publish Your Data on Windows Azure MarketPlace

    If you missed this, it is finally possible to publish your data on Windows Azure Marketplace. The name DataMarket is no longer present here also because the marketplace also include applications and not only data, but the news introduced by the last service update is that you can finally publish your data without having to run into a manual process with Microsoft.

    I think this is a very good opportunity for all these companies that produced data sets for their own internal use but that can be interesting to a wider audience, even just for technical reasons like normalization and cleansing domain specific data. I’d like to investigate on TCO for publishing data “for free” – if someone already did the math, I’d like to get feedback!

More Posts Next page »

This Blog

Syndication

Powered by Community Server (Commercial Edition), by Telligent Systems
  Privacy Statement