Tabular mode in Azure SSAS

Answered
Lukas Navratil asked on December 12, 2018

Hello to Flexmonster,

We started to implement a completely new data model and we would like to continue using Flexmonster, however I’m not sure our use case is supported, could you advice?

We are using Tabular mode in Azure SSAS. I read that Azure SSAS is supported, also I found somewhere on your page that Tabular mode is supported as well. But Azure SSAS doesn’t support XMLA, so accelerator is the only option how to connect to Azure SSAS (and it would be our preferred option anyways). But it seems that Accelerator supports only Multidimensional model, is that right?

I had a quick look into Accelerator code and it looks that All Discover* methods are specific for Cubes. Is that correct? If yes, don’t you plan to extend it to support tabular mode as well?

Another, lower priority, thing is that we are using Accelerator in ASP.NET Core project and AcceleratorProxyController is a based on ApiController which is WebAPI thing which can’t be used in ASP.NET Core. It would need to inherit from ControllerBase. So I’m currently using controller code you sent me last year, when I was fixing for you the concurrency issues, which I adjusted for ASP.NET Core (it just inherits from different base controller).

Anyways I think that it would be better if accelerator would expose just service and not whole controller, then it could be referenced from both. I can help you with fixing this and refactoring it to some better state if you would make accelerator code public or if you would give us access.

But more important for us is now Accelerator that supports tabular mode. I believe we could maybe spend some time on that helping you to implement it, but I’m not very familiar with AdomdClient as you probably are, so I’m not sure if it would be useful.

 
Regards,
Lukas

16 answers

Public
Dmytro Zvazhii Flexmonster December 14, 2018

Hello Lukas,
Thank you for writing. 
Yes, we do have the plans on extending Flexmonster Accelerator functionality to support tabular mode. Our team would need to spend some more time on the investigation of this case.
As for the Accelerator refactoring, that seems to be a reasonable suggestion. We would need to discuss and arrange this task with the management.
We will keep you updated.
Regards,
Dmytro

Public
Tanya Gryshko Flexmonster December 19, 2018

Hello, Lukas,
Thank you for giving us some time.
First of all, we wanted to assure you that Flexmonster supports both tabular and multidimensional model types. We have tested Flexmonster Accelerator with the tabular model and it works fine. However, there seems to be some specifics when using the tabular model in Azure SSAS. Our development team is going to have a closer look at it during the next two weeks. We will notify you about the results on January the 2nd.
As far as the second point mentioned by you goes, we are going to further elaborate on this topic as well. Our development team will spend some time investigating the options of the Accelerator refactoring. We will provide you with the updates on this topic on January the 15th.
Please let me know if you need any additional information.
Regards,
Tanya

Public
Lukas Navratil December 19, 2018

Dear Tanya,
Thanks for the reply. It’s good to hear that Tabular is supported in Accelerator, when I was looking into the code it seemed to me, that the code is quite specific for multidimensional model, but maybe I was wrong, I’m not very familiar with Adomd. In any case, I will look forward for outputs from your investigation, thanks a lot! Beginning of January is absolutely fine.
Accelerator refactoring would be great as well, do not hesitate to contact me if you need any help with that, I think that I have quite clear idea how it should look like.
Regards,
Lukas

Public
Tanya Gryshko Flexmonster December 20, 2018

Many thanks for your reply.
It’s always a pleasure to work with you.
Once again thank you for the good idea and professional advice.
Have a nice holiday. 

Public
Pavlina Drosos December 21, 2018

Hello,

I’ve just requested a trial license and my intention was to use the Flexmonster Accelerator in ASP.NET Core API controller with Angular frontend and OLAP data source.

As far as I understand from this thread and from here, it’s not currently possible, as the AcceleratorProxyController is ASP.NET WebAPI controller and the JS library doesn’t support sending custom HTTP headers (e.g. Authorization header) with OLAP data source.

As far I understand from the other thread, support for custom HTTP headers will be added in January 2019. Please consider also adding support for ASP.NET Core, as many new projects are using it.
One of the main reasons to choose this library was the Flexmonster Accelerator, which I intended to use integrated with my ASP.NET Core API behind OAuth2 JWT Token Authorization.
 
Any advice how can I do it now until waiting for an official support of ASP.NET Core? Is there a place I can see the code of this AcceleratorProxyController and copy it inside my own ASP.NET Core API controller?

Public
Lukas Navratil December 21, 2018

Hi Pavlina,
It’s not a nice solution, but what we did as a temporary workaround is we decompiled the FlexmonsterProxyController (plus one more class) in some .NET decompiler (e.g. DotPeek), added the source into our solution and then just changed the base class of this controller from ApiController (WebAPI) to ControllerBase (ASP.NET Core). Then it works without any other changes.
Regards,
Lukas

Public
Pavlina Drosos December 21, 2018

Hi Lukas,
 
Thank you for your reply and for the information! I will try to do the same, it’s very helpful to know that someone already did it and it worked well.
 
KR,
Pavlina

Public
Tanya Gryshko Flexmonster December 21, 2018

Hello, Pavlina,
Thank you for writing to us. Our development team is going to investigate what can be done about the official support of ASP.NET Core. We will notify you about the results on January the 15th.
Please inform me in case of other questions.
Regards,
Tanya

Public
Dmytro Zvazhii Flexmonster January 3, 2019

Hello,
We are glad to inform you that the latest version of the component includes the Azure Tabular SSAS mode support. 
You are welcome to download the latest version and try it.
Please note that you need to add some additional configs:

AZURE_AUTHORITY - Azure authority URI (e.g. https://login.microsoftonline.com/<your_domain>)
AZURE_CLIENT_ID - Client ID of the service principal registered in Azure Active Directory
AZURE_CLIENT_SECRET - Client secret of the service principal registered in Azure Active Directory

Please let us know in case of any other questions.
Regards,
Dmytro

Public
Lukas Navratil January 10, 2019

Hi Dmytro,
 
Thanks for the update. We will try it next week and let you know in case of any issues.
Could you just advice what should be the resourceUrl that is passed to the AzureAuthHelper? Is it the address where our Flexmonster is running?

Regards,
Lukas

Public
Ian Sadovy Flexmonster January 10, 2019

Hello Lukas,
 
Thank you for the feedback.
Answering your question about AzureAuthHelper, resourceUrl is the URL of your Azure Analysis Services instance (e.g. https://westeurope.asazure.windows.net).
So, setting up the auth helper can look like the following:

FlexmonsterProxyController.AuthHelper = new AzureAuthHelper(
"https://westeurope.asazure.windows.net", //resourceUrl
"https://login.microsoftonline.com/<your domain on azure>", //AZURE_AUTHORITY
"00000000-0000-0000-0000-000000000000", //AZURE_CLIENT_ID
"XXXXXXXXXXXXX" //AZURE_CLIENT_SECRET
);

We are going to publish the guide about connecting to Azure with more detailed steps soon.
 
Also, we have an update regarding .NET Core support for the Accelerator.
The main dependency for the Accelerator that communicates with Analysis Services (Microsoft.AnalysisServices.AdomdClient) currently supports only .NET Framework and does not work with .NET Core.
So, it is not to possible to port the Accelerator right now. We have to postpone this task and wait until the official AdomdClient will be released for .NET Core.
 
Please let us know if you have any further questions.
 
Regards,
Ian

Public
Lukas Navratil January 10, 2019

Thanks Ian for the example, it’s clear to me now.
Regarding the .NET core, I know that AdomdClient isn’t supported in .NET Core. Maybe there was some misunderstanding, but we needed support in ASP.NET Core. That’s just a different framework for for web applications (that replaces ASP.NET WebAPI), but that doesn’t mean that it needs to run under .NET Core, you can run it in standard .NET framework as we are doing that.
So basically the only change required is that FlexmonsterProxyController inherits from ControllerBase (from Microsoft.AspNetCore Nuget packages) instead of ApiController (from Microsoft.AspNet.WebApi). What I’m suggesting is that Flexmonster.Accelerator.Core would contain just some service that would have all application logic that is currently in FlexmonsterProxyController, but it wouldn’t contain neither reference to WebApi/ASP.NetCore not any controller and you would just distribute source of sample controllers for WebApi and ASP.NetCore. It could be then used in both WebAPI/ASP.NET Core and it would be up to customer which option they choose. Another alternatives are two separate versions – one for WebAPI and second for Asp.NetCore or maybe third would be to have both controllers and references in the same DLL, you would just add the second controller that will be based on ControllerBase.
Let me know if you need any additional information. 
Regards,
Lukas

Public
Ian Sadovy Flexmonster January 11, 2019

Hello Lukas,
 
Thank you for the clarification.
We will check regarding ASP.NET Core and update you soon about our progress.
 
Thanks,
Ian

Public
Lukas Navratil January 13, 2019

Hi Ian,
 
We started to try your latest updates, but we found one obstacle, which is currently preventing us to use Accelerator in the way we would need. The ConnectionString to the database is currently static field on the Controller, which means that we can’t use different connection string per each request. We need to connect to multiple SSAS instances and also to specify different EffectiveUserName for impersonation – if I understood it correctly, if we connect with Azure Client ID, the actual username is removed from the connection string.

Do you think you could change the ConnectionString to be per instance or at least add some option how to override it? E.g. there could be per instance ConnectionStringOverride with fallback to static ConnectionString if override isn’t specified. 
BTW, aren’t you thinking about releasing the source code of the accelerator? That would be probably the best option for us when we could implement it ourselves and then push it back to your repository…
 
Regards,
Lukas

Public
Ian Sadovy Flexmonster January 15, 2019

Hello Lukas,
 
Thank you for the update.
Taking into account your requests, we have prepared a package with Accelerator source code (it was sent to your email). 
Also, it contains the latest changes we have made to support ASP.NET Core (see sample controller at AcceleratorController.cs).
 
As for the ConnectionString, you can also override CreateConnection method to apply your custom logic to support multiple connection strings.
As for the Azure Client ID, it modifies UID and Password properties of the connection string.
 
Please let us if you have any questions.
 
Regards,
Ian

Public
Ian Sadovy Flexmonster January 16, 2019

Hello @Pavlina,
 
We have published a beta version of DLL for ASP.NET Core in the following thread: Analysis Services in Asp.net Core
Your feedback is highly appreciated.
 
Regards,
Ian

Please login or Register to Submit Answer