Forum Discussion

mmilegal's avatar
mmilegal
Frequent Visitor
5 years ago

Desktop refresh vs gateway refresh on service

Hi 

 

I feel sure my question must have already been asked and answered but I’ve been unable to find a search term that finds an answer that matches my experience. 

 

I’ve tried “desktop refresh vs gateway refresh” and “scheduled refresh vs manual refresh” and both find many discussions about refresh issues but the underlying issue is never quite what I’m looking for.  The ‘Service’ forum seems like it might be a suitable place to post.  Here’s a description of my scenario that hopefully has sufficient detail. 

  • Dataset draws data exclusively from SQL 2012 database living on an AWS cloud server
  • No native queries are used in the Get Data phase
  • There is extensive processing of the data in the Transform Data phase using Power Query, including:
    • Several merge query operations
    • One pivoted table, duplicated and filtered with each version filtered in a mutually exclusive way to allow different post-filter data type formatting (Example 1)
    • Use of 3 custom functions, created from imported SQL UDFs for the data type formatting
    • One imported table that is duplicated to several variants each filtered and processed using DAX – the peculiarity of that one particular source table allows for different data types in the same column across the whole table.   (Example 2)
  • Total size of pbix after successful refresh of the data in the Desktop version = 171Mb. 
  • Time to refresh entire dataset in single refresh operation in Desktop = 16 minutes.  16 minutes to refresh the entire database ready to use the full reporting power of PowerBI is fine.  That allows for daily refresh and even intra-day refreshes. 
  • 2 hours after publishing to Service (upon which a refresh begins) and the refresh shows no signs of completion.  I’ve monitored Task Manager on the server and it has been pinned at 99% CPU throughout.  Heavy consumer processes are ‘Microsoft Mashup Evaluation Container’.  The refresh eventually timed out. 
  • Dataset is configured to refresh in the Service via an On-Premises Gateway installed on the same AWS server as SQL2012.

Example 1

Source Format has 3 columns:

CaseID (integer), FieldID (integer), Value (text)

There is a merge to another table on FieldID that expands out to give Field Type

Pivot turns data into:

1 row per case, one column for each field containing the field value. 

Pivoted data is then duplicated, filtered by type (text, date and number) and the imported custom functions used to format the values. 

Example 2

Source data looks something like this:

GroupTableExample

 

 

 

 

 

GroupID

ID

InstanceID

Column01

Column02

Column03

1

1

1001

"20200101"

"[Hello]"

"123"

1

2

1009

"20211212"

"[World]"

"456"

2

3

1210

"[Lorem]"

"20210101"

"789"

2

4

1223

"[Ipsum]"

"20210131

"100"

 

Examples of the DAX to give formatted data for ‘table type 1’ and ‘table type 2’ based on GroupID are:

Filter1 = SUMMARIZE( FILTER(GroupTableExample,GroupTableExample[GroupID]=1),GroupTableExample[ID],

"Caseid",max(GroupTableExample[InstanceID]),

"DateColumn",if(len(max(CustomFieldGroupTable[Column01]))= 10 && LEFT(max(CustomFieldGroupTable[Column01]),1) = """" && RIGHT(max(CustomFieldGroupTable[Column01]),1) = """",DATE(LEFT(SUBSTITUTE(max(CustomFieldGroupTable[Column01]),"""",""),4),MID(SUBSTITUTE(max(CustomFieldGroupTable[Column01]),"""",""),5,2),RIGHT(SUBSTITUTE(max(CustomFieldGroupTable[Column01]),"""",""),2)),BLANK()),

"TextColumn",SUBSTITUTE(SUBSTITUTE(max(GroupTableExample[Column02]),"[""",""),"""]",""),

"NumberColumn",SUBSTITUTE(max(GroupTableExample[Column03]),"""","")

)

Filter2 = SUMMARIZE( FILTER(GroupTableExample,GroupTableExample[GroupID]=2),GroupTableExample[ID],

"Caseid",max(GroupTableExample[InstanceID]),

"TextColumn",SUBSTITUTE(SUBSTITUTE(max(GroupTableExample[Column01]),"[""",""),"""]",""),

"DateColumn",if(len(max(CustomFieldGroupTable[Column02]))= 10 && LEFT(max(CustomFieldGroupTable[Column02]),1) = """" && RIGHT(max(CustomFieldGroupTable[Column02]),1) = """",DATE(LEFT(SUBSTITUTE(max(CustomFieldGroupTable[Column02]),"""",""),4),MID(SUBSTITUTE(max(CustomFieldGroupTable[Column02]),"""",""),5,2),RIGHT(SUBSTITUTE(max(CustomFieldGroupTable[Column02]),"""",""),2)),BLANK()),

"NumberColumn",SUBSTITUTE(max(GroupTableExample[Column03]),"""","")

)

These work in their real-life form - if I've made any blunders while manually amending them into generic and anonymous examples please disregard.  

I’ve used all of these techniques in some form in other datasets that are published to the Service and for which scheduled refresh is configured to use the On-Premises Gateway and all refresh within tolerances of the desktop refresh time.  They all used native queries at the GetData stage and did reduce the size of the dataset in the pbix to approximately 40Mb.  However, my requirement now is to deliver the entire database for use in a single dataset and it seems native queries are to be avoided in general terms anyway. 

 

I recreated this dataset from the ground up to exclude native queries because I had concerns about the processing load on the SQL server.  However, if the heavy processing on the server is ‘Microsoft Mashup Evaluation Container’, does that mean that the bottleneck with this approach is the processing power of PowerBI and/or the Gateway?

 

What might I need to change about my approach to be able to deliver a dataset that can be successfully refreshed on a schedule?

 

Apologies if this duplicates any other question - I've looked hard at related questions in the hope of working out the possible issues for myself even if no other single post perfectly reflects my issue but there's so much going on and my knowledge is sufficiently lacking to be able to connect all the dots.  I would greatly appreciate any help from the community and would be happy to contribute if this chimes with any other user having similar difficulties.  

 

Kind regards

mmilegal

8 Replies

  • mmilegal's avatar
    mmilegal
    Frequent Visitor

    Hi aj1973 

     

    Many thanks for your suggestion - I appreciate your help.  My use of DAX for the transformation of some of the data was expedient for two reasons.  I had used that successfully in the past and it was quicker to be able to text-edit a formula to drop into 'create table' commands than to go through the process of adding transformation steps in Power Query. 

     

    However, expedient isn't always best! 

     

    As the removal of DAX seemed to help in the instance on that other thread I deleted all my tables created in DAX.  As a test and before trying to recreate the transformations in Power Query, I saved and published the dataset just with all DAX removed.  Once again, the desktop refresh went fine but the refresh in the service hogged resources and timed out.  

     

    I cannot easily regress the Gateway version and I cannot change the SQL Server version.  I have checked our Gateway and it is not the current version.  I have considered updating the Gateway to the current version but it is demanding a .NET Framework version update.  That's well above me, so I've referred that on.  

     

    I'm keeping an open mind.  I'm far from expert with Power BI, but I'm inclined to think if the refresh in Desktop can be successful and relatively quick that I can't have made too much of a mess of my methods of importing and transforming data.  Our Gateway version is 3000.66.4 (November 2020 Release 1) so we're not far out of date on that.  Whether updating it to 3000.77.7 (which seems to be the current version) will be significant, I don't know, but it seems worth trying.  I'll update the thread with actions/outcomes as they unfold.  

     

    Cheers

     

    mmilegal

    • aj1973's avatar
      aj1973
      Community Champion

      Hi mmilegal 

      it seems like your model is facing a version compatibilty issue. Please try to use Dataflow as connection mode and then re build a Sample report out of 2 tables(for example), then publish it. Logically when you try to connect to the SQL server through Dataflow, the Gateway is needed and a refresh is asked for. If it works then you know what to do.

      Please let me know.

       

      • mmilegal's avatar
        mmilegal
        Frequent Visitor

        Hi aj1973 

        I've not used dataflows until now.  I'm trying to study up on that now.  I know I'll be limited to some degree because I understand that merging tables in the dataflow requires a premium workspace, which we do not have.  
        Progress might be a little slow from here but I will work on your suggestion.  Please forgive me if it takes a few days for me to report back on what I've tried and how it turned out.  
        Cheers

        mmilegal