cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
markive
Advocate II
Advocate II

Formula.Firewall: Query references other queries, so it may not directly access a data source.

I am getting the following error:

 

 

Formula.Firewall: Query 'Query1' (step 'Added Custom') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.

 

In my first query I am accessing an API to get a list of URLs. In the second query it uses this list of URLs to then go back to the API and request all of the data.

 

I understand what the complaint is, but how do I get around it? I am actually always hitting the same domain for both queries, but maybe it doesn't know that. I suppose it wouldn't know that until runtime.

 

I have read that in Excel PowerQuery you can go to:

 

File=>Options and Settings=>Options and set the Ignore Privacy Levels option.

 

But no such option seems to exist in Powe BI Desktop. Does anyone know what I'm doing wrong or how I can get around this restriction, it seems like a common usage scenario?

 

 

 

1 ACCEPTED SOLUTION

 

Ken Puls blogged about this here

http://www.excelguru.ca/blog/2015/03/11/power-query-errors-please-rebuild-this-data-combination/



* Matt is a Microsoft MVP (Power BI) and author of the Power BI Book Supercharge Power BI.

View solution in original post

32 REPLIES 32
Hennadii
Helper IV
Helper IV

Hi @markive , I had the same issue as you in 2016. Fortunately in 2020 there is Privacy Levels option which can be changed. If set it to "Ignore the Privacy Levels and potentially improve performance" the issue becomes resolved.

andrewbrick
Advocate II
Advocate II

For anyone still experiencing this issue, under File > Options, select Privacy, and if it's appropriate, select Ignore privay levels.  Even after following all the other suggestions referenced in this thread, I still got an error when refreshing.  It worked when I was in the Query Editor just fine (no errors), but refreshing from the regular report view would fail.

thank you

I can not believe this do work, and no failure rasied after clicking apply change. thanks, buddy!

Anonymous
Not applicable

The advice provided in this blog post now appears to be running contrary to experience in Power BI.

 

A query that contains all the Web.Contents calls a query needs leads it to function correctly. The splitting of the different Web.Contents calls into seperate queries before being merged into one final query leads an error to be thrown.

steve_honey
Advocate I
Advocate I

In case it helps others I ran into this issue after adding a non-supported/unofficial custom connector into PBI desktop and then trying to run queries against SharePoint files. 

Removing the custom connector from the local Documents > Power BI Destop > Custom Connectors folder got rid of the issue for me. (Note I didn't have any quries using the custom connector, just the fact it was there seemed to trigger the firewall thing).

david7f
Frequent Visitor

Thanks for the solution, I was struggling to solve this and now it works

MariyaSal
Advocate I
Advocate I

Please try the following in Power BI Desktop:

File -> Options -> Privacy -> Select “Ignore Privacy Levels…”

It helped me.

Fantastic! This saved my day (and most of yesterday 🙂 )

Hello,

 

I did this privacy level change, it solved for Power BI Desktop refreshes, but web refresh is still failing due to the same error.

This is the article previously referenced in this thread:

https://www.excelguru.ca/blog/2015/03/11/power-query-errors-please-rebuild-this-data-combination/

I confess I had to read it a few times to get it.

 

from the article by Ken Pulsfrom the article by Ken Puls

Basically, each query needs to be loaded into a staging query first. Then, you can combine these staging queries.

 

Fred

 

All of my data retrievals are now done in external functions

  • edicated functions which also do some manipulation of the data before returning it
  • a standard fLoadSheet function which is simply passed the name of a sheet in the spreadsheet and loads and returns it

However, yet again, I had a problem with this frustrating error. I called a standard function to return some parameters from a parameters sheet. Suddenly I got the Firewall error.

 

Given that I have written some VERY complicated scripts which retrieved data from various sources and worked no problem but written other scripts which are not (seemingly) as complicated but have failed with this error, I am still of the opinion that this is Microsoft's catch-all, can't cope error message!

 

Also, I sometimes get this error when stepping through the code (in the "advanced editor") but not when running the script, explain that!

I've just had it happen again ... twice!

I edited an existing script.

I didn't reference any additional (external) data.

I took a column creation out of a group statement and created it in the next step, the idea being to check a result from the group creation, something you can't do inside the group creation.

I also added a step inside an existing IF statement to check if the new column (which can be null or a record) was null before checking the contents of the column.

That's it, that's all I changed.

It failed with the usual error.

I changed four other scripts (which reference the same data but output different results) in the same way and they worked fine.

Even more bizarrely, one other script which I changed in the same way worked fine in the "Advanced Editor" and then failed when I quit back to Excel and ran the script!

This all adds weight to my belief that this really is a default "I can't cope" error message.

What's even more frustrating is if you read the actual error message it states "references other queries or steps" ... every step references other steps, so this is a meaningless error message!

It also means that I have literally no idea what the problem is or how to resolve it.

So frustrating.

You're right, this is a misleading "can't cope" messagem for a Power BI bug.

 

If this issue was only due to referencing other queries, nobody would be able to solve it, as many have, by using staging queries, custom functions, or changing the steps order.

This is madness.

 

I have tried using staging queries, and also making data retrieval in custom functions. None worked.

 

I'll probably have to start using a data lake to make simple merges between data sources, only because of this issue.

rensblom
Frequent Visitor

Hello all,

 

I came across this post because I experienced similar error message and followed all the proposed solutions here, but I keep getting the error above. What I try to acomplish is the following: I have a list of F1 drivers with their social media screennames in a SQL table (DimDriver), first I would like to add number of followers, tweets etc from the Twitter API. What I did was follow the oAuth method form this blog https://chris.koester.io/index.php/2015/07/16/get-data-from-twitter-api-with-power-query/ and put it all in a custom function.
Next I made a query referencing my DimDriver( renamed it directly to "twitterdata"), filtered on all driver with a screenname in the table and as a last step I invoked a custom column using the above function. As far as I can see that makes only one external data source, but still no luck. Could it be the custom function?

 

Any help would be appreciated, the F1 reports are openly available on our companies website for training purposes, if anyone is interested!

 

The code I used:

 

let
Source = Twitterdata,
#"Removed Columns" = Table.RemoveColumns(Source,{"Driver", "Reference", "Number", "Code", "Birthdate", "Nationality", "WikipediaURL", "Hashtag last name", "Hashtag code", "Facebook", "Instagram"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([Twitter] <> null)),
#"Split Column by Delimiter" = Table.SplitColumn(#"Filtered Rows", "Twitter", Splitter.SplitTextByDelimiter("@", QuoteStyle.Csv), {"Twitter.1", "Twitter.2"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Twitter.1", type text}, {"Twitter.2", type text}}),
#"Removed Columns1" = Table.RemoveColumns(#"Changed Type",{"Twitter.1"}),
#"Invoked Custom Function" = Table.AddColumn(#"Removed Columns1", "TwitterFunction", each TwitterFunction([Twitter.2]))
in
#"Invoked Custom Function"

Many thanks in advance!

 

Rens

It's hard (for me) to tell without seeing it "properly" but there doesn't seem to be anything wrong.

The only thing I can say is that I now have ALL data loads in separate functions ... I added a function which gets passed a sheet/range name and it loads the data.

I see that you have Source=Twitterdata ... what is Twitterdata, it doesn't seem to be a function as it doesn't have () closing brackets.

Apart from that this is a simple script which I would have hand-coded as a single multi-line statement so I'm rather puzzled.

Hope you sort it out. Good luck.

Solved just using "Merge" as soon as possible on the query.

 

Seems that editor doesn't like to do merges by the end of the query as it was clearly explained on excelguru blog.

 

Josep.

Hey the2nicks,

 

Actually TwitterData is referring to another Query, the function is invoked on the last line 

#"Invoked Custom Function" = Table.AddColumn(#"Removed Columns1", "TwitterFunction", each TwitterFunction([Twitter.2]))

The code for the function is:

 

let FxGetTwitterUserData = (ScreenName as text) =>

let
 authKey = "Basic " & Binary.ToText(Text.ToBinary("<<here are my twitter API keys ;-)>>"),0),
 url = "https://api.twitter.com/oauth2/token",
 GetJson = Web.Contents(url,
     [
         Headers = [#"Authorization"=authKey,
                    #"Content-Type"="application/x-www-form-urlencoded;charset=UTF-8"],
         Content = Text.ToBinary("grant_type=client_credentials") 
     ]
 ),
 FormatAsJson = Json.Document(GetJson),
 AccessToken = FormatAsJson[access_token],
 AccessTokenHeader = "bearer " & AccessToken,
 GetJsonQuery = Web.Contents("https://api.twitter.com/1.1/users/lookup.json?cursor=-1&screen_name="&ScreenName,
     [
         Headers = [#"Authorization"=AccessTokenHeader]
     ]
 ),
 FormatAsJsonQuery = Json.Document(GetJsonQuery),
    FormatAsJsonQuery1 = FormatAsJsonQuery{0},
    #"Converted to Table" = Record.ToTable(FormatAsJsonQuery1),
    #"Filtered Rows" = Table.SelectRows(#"Converted to Table", each ([Name] = "description" or [Name] = "favourites_count" or [Name] = "followers_count" or [Name] = "following" or [Name] = "follow_request_sent" or [Name] = "friends_count" or [Name] = "screen_name" or [Name] = "status" or [Name] = "statuses_count" or [Name] = "url")),
    #"Transposed Table" = Table.Transpose(#"Filtered Rows"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"screen_name", type text}, {"description", type text}, {"url", type text}, {"followers_count", Int64.Type}, {"friends_count", Int64.Type}, {"favourites_count", Int64.Type}, {"statuses_count", Int64.Type}, {"status", type any}, {"following", type any}, {"follow_request_sent", type any}})
in
    #"Changed Type"
in
    FxGetTwitterUserData



Of course it's nicer to hand code, but this was (I think) the 4th try to get it working, so I'll clean up later

 

Thanks for your reply

the2nicks
Advocate I
Advocate I

As far as I'm concerned this is their catch-all, can't cope error message!

I have a spreadsheet with a lot of queries (which create data for sheets in the spreadsheet) and function queries which reference that data and return to other queries, I did it in this way as I had repeatedly run into this error and it was suggested to me that placing the data retrieval in a function would resolve the issue, but it doesn't.

I have several very compliccated scripts which work fine. I just copied a few lines from one of those scripts into a far simpler script
 - call a common function to retreive data from a sheet into a table

 - a function to reference the above table to get a piece of information

 - a call to the above function to get the required piece of information

and, BANG, formula firewall error.

Looking at the message it tells me that the error is in the last step in the script BUT the retrieval of the data is in the previous step!

I stepped through the script and it then failed on the previous step.

The reason it was failing on the final step when I ran the whole script is because M uses a lazy interpretation model which only tries to determine the value of something when it's needed, so in the final step it referened data from the previous step and that's where the problem occurred.

And this is why I think these errors occur all too frequently ... the lazy interpretastion ... I'm sure that if every step were separately processed (and the result stored until the end of the script) that a lot of these errors would not occur ... if memory is an issue then add a command to discard something when it's no longer required.

I've looked at my script and tried to work out what the hell that error message means and how to fix it and I simply don;'t understand ... why does the same kind of processing work fine in another script?

I've had similar problems in other scripts ... I added a parameter sheet to the spreadsheet so that I could change the query results without having to edit the script every time ... retrieving the parameters works fine in most scripts BUT in a couple scripts when I add the step to retrieve the parameters I get the Firewall error  ... surely this is simply a matter of M not being able to cope and throwing out this generic and unhelpful message?

I wish they would fix this.

Helpful resources

Announcements
PBI_User Group Leader_768x460.jpg

Manage your user group events

Check out the News & Announcements to learn more.

Get Ready for Power BI Dev Camp

Microsoft named a Leader in The Forrester Wave

Microsoft received the highest score of any vendor in both the strategy and current offering categories.

Get Ready for Power BI Dev Camp

Power BI Dev Camp - September 30th, 2021

Mark your calendars and join us for our next Power BI Dev Camp!

PowerPlatform 768x460.png

Microsoft Learn

Check out our new Discover Your Career Path blog post series and get all the details.

Top Solution Authors