Business Intelligence Blogs

View blogs by industry experts on topics such as SSAS, SSIS, SSRS, Power BI, Performance Tuning, Azure, Big Data and much more! You can also sign up to post your own business intelligence blog.

«September 2015»
MonTueWedThuFriSatSun
31123

Executing DBCC for SQL Server Analysis Services 2016

In the upcoming release of SQL Server Analysis Services 2016, one of the new features you’ll see is the ability to perform a database consistency check against your SSAS cubes and Tabular models. Just like in the database engine side of things, DBCC for SSAS checks for corruption across the entire database or individual objects within the database.

The DBCC command is shaped likes the XMLA Process command so there’s not a lot of complexity to it. Below here, you can see the basic syntax for the SSAS DBCC command. Its worthing noting that the syntax of the command will look the same whether you’re running it against an SSAS multidimensional database or Tabular model.

"http://schemas.microsoft.com/analysisservices/2003/engine">
    <Object>
        
        
        
        
    Object>

To run the DBCC command, just open a new MDX query window and use the code seen above. Enter in the IDs of your Database, cube, measure and/or partition.

When you’re running the DBCC command against a Tabular model, there are a couple things I’d like to point out.

In the element for the CubeID, you’ll need to specify the ID of the Model. And in the element for the MeasureGroupID, specify the ID for the table you want to check.

DBCC XMLA command for SSAS

If you want to check the whole database or model for consistency, simply remove the elements the lower elements. For example, if I wanted to check the whole model, I just would leave out the elements for MeasureGroupID and PartitionID.

To find the MeasureGroupID (Table ID) or PartitionID in a Tabular model, just navigate to the Properties for that object.

Find the SSAS Tabular MeasureGroup ID or Table ID

To find the Partition ID in a Tabular model, right click the table and select Partitions. Then highlight the partition you want to check and click the Settings icon.

Find the SSAS Tabular partition ID

If you run SQL Server Profiler against SSAS while executing the DBCC command, you can see the individual checking of the columns, tables, database and more.

SSAS Tabular Profiler trace DBCC

I also ran a trace against my SSAS 2016 OLAP instance to watch each segment of

Read more
456
78910111213
14151617181920
21222324252627
2829301234
567891011

An other Example of Calculation-Dimension

  • 30 August 2010
  • Author: Qazafi Anjum Syed
  • Number of views: 20324
  • 0 Comments

Recently one of my clients would like to see their Revenue figures represented some of the time as a positive (+VE) value and some time as a negative (-VE) value. They would like to have the ability to select between the two at run time in the Analyses Services Cube. The users are using Excel 2007 as the client tool for reporting. They do not want to change the figures inside the source database but would instead like to apply a mask at runtime. There are some specific post codes which are dedicated to Revenue; this enables revenue transactions to be indentified

CREATING THE DIMENSION
In order to achieve this I have created a dummy dimension, similar to a ‘time utility dimension' (also known as a ‘date tool' dimension or a ‘shell' dimension. I had advice from Chris Webb regarding this, he also referred me the book ‘Expert Cube Development with SQL Server Analysis Services 2008') and then add a calculated member to it with two values.

We do not need to create a table in our Data warehouse for this purpose; we can create a view some thing like this

CREATE VIEW RevenueAsPositive AS
SELECT 0 AS ID, 'Convert Revenue to Positive' AS Description
UNION ALL
SELECT 1 AS ID, 'Stay Revenue as Negative' AS Description
Now we need to add this view inside our DSV and create a dimension based on this view
Alternatively we can create some thing like this inside our DSV

 

 

 

So this dimension has two values

1. Convert Revenue to Positive --> 0
2. Stay Revenue as Negative --> 1

 

CONFIGURING THE DIMENSION

After creating this dimension now you need to set the properties of the attribute hierarchy

  • Set "DefaultMember" to ‘Stay Revenue as Negative', as below:

 

•Set the “IsAggregatable” property to “False”, so there’s no All Member on the attribute hierarchy, as below:

 

In the following picture you can see all the revenue figures are negative, which is the default behavior we have defined inside the Analyses Services Cube

 

 

If now the user would like to convert the revenue figures to display as positive, they need to set the report filter to Convert Revenue to Positive as shown in the following figure:

In order to achieve this functionality you need to use a scoped assignment using MDX that's something like this:

When the user chooses "Convert Revenue to Positive" than I multiplied all actual measure values by -1, using this MDX:

SCOPE([Convert Revenue To Positive].[Convert Revenue To Positive].&[0],descendants([Dimension POST CODE].[Post Code Structure].[PC Level 2].&[IREV],[Dimension POST CODE].[Post Code Structure].[Post Code],self_and_before),[Measures].[YTD Actuals]
);
This =(([Dimension POST CODE].[Post Code Structure].currentmember)*(-1));
END SCOPE;

SCOPE([Convert Revenue To Positive].[Convert Revenue To Positive].&[0],descendants([Dimension POST CODE].[Post Code Structure].[PC Level 2].&[EREV],[Dimension POST CODE].[Post Code Structure].[Post Code],self_and_before),[Measures].[YTD Actuals]
);
This =(([Dimension POST CODE].[Post Code Structure].currentmember)*(-1));
END SCOPE;

Notice that the "Profit and Loss" values do not change even though the Revenue values have changed to positive. This is achieved through the following SCOPE statement:

SCOPE([Convert Revenue To Positive].[Convert Revenue To Positive].&[0],[Dimension POST CODE].[Post Code Structure].[PC Level 1].&[PL],[Measures].[YTD Actuals]
);
This =(([Dimension POST CODE].[Post Code Structure].&[EEXP])+[Dimension POST CODE].[Post Code Structure].&[IEXP]-[Dimension POST CODE].[Post Code Structure].&[IREV]-[Dimension POST CODE].[Post Code Structure].&[EREV]);
END SCOPE;

Hopefully this will help you if you are trying to build some similar functionality.

Finally, I would like to acknowledge and thank Chris Webb for his suggestions and support, thank you Chris.

Print
Categories: Analysis Services
Tags:
Rate this article:
No rating

Please login or register to post comments.