I don't have much experience with SSAS cubes. We have an SSAS Visual Studio package that contains three cubes (see below). When these cubes are processed by our SSAS server, are the cubes processed sequentially or are they (or can they be) processed in parallel, to reduce processing time?
To check what is happening when you process a dimension / cube / Analysis database, you should use a tool named "sql server profiler". When you start it, it captures all queries/ events that happen in your SQL Server. You need to be sys_admin of the instance though.
Concerning the way SSAS works to process, the engine determine by himself how many threads it can use for parallelism depending of many parameters (number of core of your machine for example). Some parameters can be redefined in the instance parameters but I don't advice you to touch it without strong knowledge.
Hope it helps !
Related
I hope you are doing well.
I'm working on a migration from an on premise ssas multidimensionnal cube to an azure analysis services tabular model.
Is there a way , a method or a tool to do it quickly and efficiently?
It's a large cube and it will take time to develop it from scratch with tabular model.
Thank you for your help
SSAS Multi Dimensional (MD) and Tabular are fundamentally different technologies, there is no quick method of converting one to the other, you will have to rebuild the model from scratch, and the measures etc.
Be aware that some of the things MD models are good at, like calculating up and down hierarchies, Tabular really struggles with. If the cube is fundamentally sound and has good performance, and you want to move it into the cloud service, use a VM in Azure, with SQL Server on it, it may work out cheaper that Azure AS, per month.
I was wondering if anyone here knows the exact differences for these 2 modes, more specifically:
What can we do in one model that we can't do with the other? (Multi-dimensional vs Tabular and vice versa)
How is the data stored in one model versus another?
If I am wring an SSRS / PowerBI / Excel report against this, what limitations does one model have over the other?
Does the tabular model have cubes? If not, what is the alternative storage medium and how does it differ from cubes (maybe provide for me
some background on what cubes are to begin with)
What are the differences in security considerations? As I understand, with the Multi-dimensional model, row-level, column, level
and even cell-level security can be applied - what is available with
this for the tabular model?
Also, as I understand SQL Server 2016 is moving to using the Tabular Model by default and that there may be some differences/improvements
over what is current in use (SQL Server 2014) - can you please provide
a list of what those are?
Thank you so much in advance.
A good place to start might be these articles which should be accurate as to the differences in SSAS 2014.
Advice on the decision points for choosing to build a Tabular or Multidimensional model
Paul Turley’s high-level description of Tabular strengths and weaknesses
Dimension relationships
Summary level presentation
Many-to-many relationships and writeback and scope statements and non-visual dimension security are some of the biggest missing features in SSAS 2014 Tabular in my opinion.
Tabular security is row based and just supports visual totals, not non-visual totals or cell security. But in many cases you don't want to use cell security for performance reasons.
Tabular uses in-memory columnar storage. Multidimensional uses disk-based row-based storage. So scanning a billion row fact table requires reading all columns from disk in Multidimensional and takes a minute or two to return a query on a fact table that large. If you optimize the Multidimensional model by building an aggregation then the query may take seconds. Tabular just scans the columns used in the query and simple queries or calculations even on a billion row table may return in under a second.
With SSAS 2016 Tabular the bidirectional relationship was added which was a very big deal for modeling flexibility and allowing many-to-many relationships. And parallel partition processing made loading large models feasible.
SQL 2017 installer for SSAS has Tabular as the default.
If you have the option for using SSAS 2016 Tabular or above it is highly recommended for performance and modeling flexibility. Here is what's new in SSAS 2016 and SSAS 2017.
I have some simulation models that I routinely use that were built in Microsoft Access VBA. I have just became aware of Microsoft Azure (I know I am late to the show), and was curious to know if there was anyway to run my model via Azure's distributed computing services to make them faster?
I saw something call SQL Azure on the website but I didn't entirely understand the product. 95% of the computation that exists in the VBA model are sql commands.
If you have any knowledge or experience I would love to hear from you.
SQL Azure is most like a remote SQL Server which - as you know - knows nothing about VBA.
But you can create one or more virtual machines hosted at Azure and install your application on this/these. Then, as needed, you can assign expanded CPU resources to these machines for as little as one hour.
Azure has a free tier. Create an account and you have access to quite some resources to evaluate.
While Azure is distributed, it also utility computing (that means slow in terms of processing ability and considerable amounts of “governing” in terms of CPU available).
The other issue of course is that running SQL on the cloud OS Azure means that any data you pull into Access/VBA has to occur over a VERY slow network connection. This connection is 1000’s of times slower than a local Access table.
So the real issue then becomes transfer of data. You could I suppose re-write the VBA code into t-SQL code and much dump the use of Access. However t-sql is even less suited to simulation type software than that of VBA (and procedural t-sql code is not that fast in terms of execution speed either).
So between bandwidth issues, and that of t-sql on sql server being a rather limited language when it comes to writing + running lots of procedural code (which most simulation software entails), then this approach is likely the wrong approach and wrong technology here.
I'm fairly new to SSAS development and when the existing team was giving me a run through of the existing SSAS project they mentioned that every query has a SELECT TOP *n* in it that they then manually go into the XML file and comment out when they are ready to migrate to production (and make sure you pick an n that no one else is using).
This was done because it takes too long to import the data into Visual Studio without the TOP n in the queries.
Is this really best practice, or is there a better way to set up the development environment so that you don't have to comment out code before a deployment?
I assume you are talking about Analysis Services Tabular which does load the data at design time into memory in your "workspace database" which is usually a local Analysis Services Tabular instance.
You may consider creating a SQL view layer and building the Analysis Services model on top of the views. This recommendation is mentioned here with reasons:
http://www.jamesserra.com/archive/2013/03/benefits-of-using-views-in-a-bi-solution/
But SELECT TOP X may not be enough. For example, if SELECT TOP 100 * FROM FactSales only returns fact rows for stores in the southwest but SELECT TOP 100 * FROM DimStore only returns stores in the northeast then it will be challenging to develop your model and calculations because everything will be rolling up to the blank store. So consider putting some more intelligent filter logic into the views.
It sounds like you want to change the MDX statements inside SSRS reports. If that is the case I would not suggest doing that. You need to see the performance of your reports on development environment as well. Of course, as suggested you can reduce the size of the data but that has big drawbacks since you cannot predict the real performance on Production anymore.
By the way, top n queries are generally very expensive since the results have to be calculated for the whole set and then get discarded. So advantage of having "top n" inside MDX to improve performance is pretty limited.
I'm curious if SQL Server can allow for the creation of in memory databases.
Currently I'm looking at unit testing/integration testing some data layer code that is connected to SQL Server.
In the past I have availed myself of SQLite's support for this concept and found it invaluable.
You could mount either an SSD drive or a ramdisk on your server and then put a regular database on that volume?
Otherwise, no.
I've not mentioned Table Variables as they're only partly held in memory and are likely to be too transient for your requirements.