Skip to articles

EXPLORE THE ARCHIVE

Month: March 2013

Browse all Insights

Query Options for Analytical Models and Transactional Reporting

Requesting both historical and transactional reports is a very common requirement. As they stand, neither Multidimensional nor Tabular are designed to support well transactional (detail-level) reporting with large datasets, as I discussed in my Transactional Reporting with Tabular blog post. There are two query options that might provide some relief with transactional reporting and they both have limitations. DRILLTHROUGH QUERIES You can use a DRILLTHROUGH…

Read article

Transactional Reporting with Tabular

Scenario: We had a requirement to replace the existing implementation of transactional reporting over large data volumes. By "transactional reporting" I mean allowing the user to query individual transactions as they're stored in the fact table. In some cases, this style of reporting requires simply reading data without aggregations. This, of course is what RDBMS are designed for but in our case, requirements call for…

Read article

Improving Tabular Design Experience

When you develop an organizational Tabular model in SSDT, there is always an implicit processing phase for each action you perform, such as renaming columns, creating hierarchies, changing formatting, and so on. This "data-driven" paradigm could be both a blessing and a curse. A blessing, because you always work with data and you don't have to explicitly process the model to see the effect of…

Read article

When Developers and BI Collide

I've been running in this situation quite often so I thought this will make a good topic for a blog. Scenario: Management has asked for some sort of a BI solution, such as a dashboard. BI hasn't happened to the organization in question yet. But they have smart developers and there is no project that they can't do. As the story goes, developers go to…

Read article

Adding a Set Total

Scenario: You have defined an MDX set in the cube script, such as a set that returns a few months. For the sake of simplicity, we will hardcode the months. CREATE SET CURRENTCUBE.[12Months] AS { [Date].[Month].&[201302].Lag(11):[Date].[Month].&[201302] }; As useful as the set might be, it has an issue. It doesn't return the total and users might complain about it: Solution: As a first try, you…

Read article

Optimizing Massive SQL Joins

Scenario: Run ETL to perform a full data warehouse load. One of the steps requires joining four biggish tables in a stating database with 1:M logical relationships. The tables have the following counts: VOUCHER: 1,802,743 VOUCHER_LINE: 2,183,469 DISTRIB_LINE: 2,658,726 VCHR_ACCTG_LINE: 10,242,414 Observations: On the development server, the SELECT query runs for hours. However, on the UAT server it finished within a few minutes. Both servers…

Read article