Using The RelativePath And Query Options With Web.Contents() In Power Query And...
source link: https://blog.crossjoin.co.uk/2016/08/16/using-the-relativepath-and-query-options-with-web-contents-in-power-query-and-power-bi-m-code/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Using The RelativePath And Query Options With Web.Contents() In Power Query And Power BI M Code
The Web.Contents() function in M is the key to getting data from web pages and web services, and has a number of useful – but badly documented – options that make it easier to construct urls for your web service calls.
Consider the following url:
https://data.gov.uk/api/3/action/package_search?q=cows
It is a call to the metadata api (documentation here) for https://data.gov.uk/, the UK government’s open data portal, and returns a JSON document listing all the datasets found for a search on the keyword “cows”. You can make this call using Web.Contents() quite easily like so:
However, instead of having one long string for your url (which will probably need to be constructed in a separate step) you can use the RelativePath and Query options with Web.Contents(). They are given in the second parameter of the function and passed through as fields in a record. RelativePath adds some extra text to the base url given in the first parameter for the function, while Query allows you to add query parameters to the url, and is itself a record.
So, taking the example above, if the base url for the api is https://data.gov.uk/api we can use these options like so:
RelativePath is just the string “3/action/package_search” and is added to the base url. There is just one query parameter “q”, the search query, and the search term is “cows”, so Query takes a record with one field: [q=”cows”]. If you want to specify multiple query parameters you just need to add more fields to the Query record; for example:
Web.Contents(
[
RelativePath="3/action/package_search",
Query=
[
q="cows",
rows="20"
]
]
)
Generates a call that returns 20 results, rather than the default 10:
https://data.gov.uk/api/3/action/package_search?q=cows&rows=20
Obviously these options make it easier to construct urls and the code is much clearer, but there are also other benefits to using these options which I’ll cover in another blog post soon.
Note: at the time of writing there is a bug that causes the value given in RelativePath to be appended twice when the Web.Page() function is also used. Hopefully this will be fixed soon.
UPDATE January 2021: This blog post has more details on using the Query option:
https://blog.crossjoin.co.uk/2021/01/10/handling-multiple-url-query-parameters-with-the-same-name-using-web-contents-in-power-query-power-bi/
Like this:
Post navigation
65 responses
-
Pingback: daily 08/16/2016 | Cshonea's Blog
-
Pingback: Web.Contents(), M Functions And Dataset Refresh Errors In Power BI – Chris Webb's BI Blog
-
Pingback: Dynamic Web.Contents() and Power BI Refresh Errors – Data Inspirations
-
Bertrand d'Arbonneau says:
2018-05-21 Still not fixed. Thanks for your solution, it saved my day.
Loading... -
Pingback: Credentials, Data Privacy Settings And Data Sources In Power Query/Power BI « Chris Webb's BI Blog
-
Wouter van den Eerenbeemt says:
Hi Chris, quick question which keeps puzzling us. After finding this brilliant solution of yours we proceeded but ran into a new problem. The API we are calling uses the same query option 4 times.
The URL would be something along the lines of:
In your example this would lead to:
Query =
[
properties = “value1”,
properties = “value2”,
properties = “value3”,
properties = “value4”,
hapikey = “xxxxxxxxxxxxxxxxxxxxxx”,
]I feared this would pose a problem, knowing how standard arrays work, the last value assigned to properties would over write all previous ones. And indeed Power BI M actually warns for this problem.
Any idea how to circumvent this?
sincerely, Wouter
Loading...-
Chris Webb says:
Hmm, interesting question. Can you try something like [ properties = “value1&properties=””value2″”&properties=””value3″””] ?
Loading...
-
-
Wouter van den Eerenbeemt says:
Thank you very much for your reply. Unfortunately power bi encodes all data between “”, and although it skips the quotes, the ampersand and the equal sign all get encoded rendering the string unusable. I even installed Netmon to observe this from happening. (thankfully the api was reachable using http instead of https) I – again – am at a loss. Any new ideas?
Loading...-
Chris Webb says:
Hmm, no – I would need to do some tests to see if there’s a workaround in M
Loading...-
Wouter van den Eerenbeemt says:
If you would do that, that would be great, but that sounds like something I cannot ask of you
Loading... -
Chris Webb says:
I’ve tried a few things but I can’t get anything to work. Sorry…
Loading... -
Wouter van den Eerenbeemt says:
Neverteless, thank you very much for getting back to me. Much appreciated.
Loading... -
Wouter van den Eerenbeemt says:
Just a little feedback. I pushed everything in the RelativePath variable. Problem solved. Custom Functions are also not allowed, so those I have integrated into alle Table-code.
Loading... -
Chris Webb says:
Interesting, thanks!
Loading...
-
-
-
Alex says:
Hi Chris,
Thanks for this article.
I encounter an issue where the data from the website does not return correctly it seems if I use multiple query string.
For example,
this works fine – the data returns correctly (not using Query option)
Source = Json.Document(Web.Contents(“http://useragentstring.com/?uas=”&userAgent_URLEncoded&”&getJSON=all”)),but this will cause failure in Scheduled Data Refresh in Power BI, so I have to use the Query option, like below.
Source = Json.Document(Web.Contents(“http://useragentstring.com/”,[Query=[uas=userAgent_URLEncoded,getJSON=”all”]])),
However, it seems that the data is not parsed in correctly, and I’ve got unknown values for most of the records.
Try using
userAgent_URLEncoded = Mozilla%2F5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20×64%29%20AppleWebKit%2F537.36%20%28KHTML%20%20like%20Gecko%29%20Chrome%2F69.0.3497.100%20Safari%2F537.36Do you know why?
Thanks
Loading...-
Chris Webb says:
I don’t know for sure, but I’ve heard of similar problems. I need to do some research to find out what’s going on here…
Loading...
-
-
Julian Payne says:
We have tried using your method, and it works for PBIX and updates in the workbool, but when we upload to PBIS, and try to run the refresh there, the only APIs that will connect are those that do not use your method of breaking the relative path out from the main URL string. All of our data sources (APIs) that are called with the relative path in the main URL string work, and those where we use your method to break them out into their own relative path are unable to connect to the API for data refresh via PBIS. The same queries that work on the desktop do not connect or work in PBIS.
Loading...-
Chris Webb says:
Hmm, that suggests something else is going on here. Have you turned off data privacy checks in Power BI Desktop? If so, does refresh fail when you turn on the data privacy checks?
Loading...-
ConfusedPBiGuy says:
I know this is old, but I’m seeing the same thing. Did y’all figure this out
Loading...
-
-
-
Thye Jansman says:
-
Paul says:
What about if the query parameter name contains a pipe?
Like this – query_start_date|lt
(not me, but the API i am trying to hit) – is there any way to wrap it so PowerBI accepts it? currently throws an Invalid Identifier error
Loading...-
Chris Webb says:
Something like this should work:
#”query_start_date|It”Loading...
-
-
Heath says:
This worked perfectly for me but then I found that it requires a gateway. I’m doing straight web calls, any idea how to skip the gateway?
Loading... -
Ignacio says:
I can’t make it work for any way in order to schedule refresh data. I have even check 404 errors. In Power Bi desktop works perfectly. It is azure devops api.
I’m getting: “We reached the end of the buffer.. The exception was raised by the IDataReader interface. Table: Query1”
Capacity = (ProjectSK as text, IterationSK as text, AssignedToUserSK as text) =>
let
Url = Web.Contents(“https://dev.azure.com”, [RelativePath=”/[Companyname]/” & ProjectSK & “/” & “_apis/work/teamsettings/iterations/” & IterationSK & “/capacities/” & AssignedToUserSK , ManualStatusHandling={404}, Query=[#”api-version”=”5.0″]] ),
Origen = Table.FromColumns({Lines.FromBinary(Url, null, null, 65001)}),
#”JSON analizado” = Table.TransformColumns(Origen,{},Json.Document),
#”Se expandió Column1″ = Table.ExpandRecordColumn(#”JSON analizado”, “Column1”, {“teamMember”, “activities”, “daysOff”, “url”, “_links”}, {“Column1.teamMember”, “Column1.activities”, “Column1.daysOff”, “Column1.url”, “Column1._links”}),
#”Se expandió Column1.activities” = Table.ExpandListColumn(#”Se expandió Column1″, “Column1.activities”),
#”Se expandió Column1.activities1″ = Table.ExpandRecordColumn(#”Se expandió Column1.activities”, “Column1.activities”, {“capacityPerDay”, “name”}, {“Column1.activities.capacityPerDay”, “Column1.activities.name”}),
#”Columnas quitadas” = Table.RemoveColumns(#”Se expandió Column1.activities1″,{“Column1.teamMember”, “Column1.activities.name”, “Column1.daysOff”, “Column1.url”, “Column1._links”}),
#”Columnas con nombre cambiado” = Table.RenameColumns(#”Columnas quitadas”,{{“Column1.activities.capacityPerDay”, “capacityPerDay”}}),
GetMetadata = Value.Metadata(Url),
GetResponseStatus = GetMetadata[Response.Status],
Output = if GetResponseStatus=404 then Table.FromRecords({[capacityPerDay = 0]}) else #”Columnas con nombre cambiado”
in
Outputin
CapacityLoading...-
Chris Webb says:
It’s hard to say what’s going on here, but it doesn’t look like a problem with your code.
Loading...-
Ignacio says:
It is curious how Power Bi Service is different to Desktop. I found my solution taking [CompanyName] out of relative path to join de URL parameter in Web.Content. It doesn’t have so much sense, but it is actually working.
Loading...
-
-
-
Daníel says:
Since this albeit very useful post is written in 2016 it ends with “Note: at the time of writing there is a bug that causes the value given in RelativePath to be appended twice when the Web.Page() function is also used. Hopefully this will be fixed soon.”
This bug seems to be ongoing still today.
I can’t get my function to work with the Query parameter when I use Web.Page() around the Web.Contents(“url”, [Query=[term=value]])
However it works when I use Web.Page(Web.Contents(“url/?term=value)) (No
I really wanted to let my custom connection run through a gateway but stumbled upon the unsupported source error because of Web.Contents() function – hence me reading this post.
Now I seem to have two problems instead of one.
Loading...-
Chris Webb says:
Can you try using Web.BrowserContents instead of Web.Page?
Loading...
-
-
amkhullar says:
I have a API URL which works like this :
https://jira.company.com/rest/api/2/issue/RC-2345/worklog
to get the data from JIRA , the param is RC-2345 in this rest is static , how can we create a similar funtion to pass the JIRAID as param , i tried the below sample function but it doesnt pass it correctly.= (JIRAID as text) =>
let Source = Json.Document(Web.Contents(“https://jira.company.com/rest/api/2/issue”, [Query=[JIRAID]], [RelativePath=”worklog/”]))
in SourceLoading...-
Chris Webb says:
Why are you using the Query option here? Both JIRAID and worklog should be passed in through RelativePath here I think
Loading...
-
-
Pingback: Historical Stock Price Function in Power Query - Power BI Tips and Tricks
-
William says:
Have you ever seen an issue where it adds a “/” into the url?
The API I’m trying to hit is something like this:
“www.website.com/api/measures/history?metrics=metric1,metric2,metric3&project=ProjectName
RelativePath =”?metrics=metric1,metric2,metric3&project=”
Query=[project=ProjectName]
The problem is that it shoots out
http://www.website.com/api/measures/history/?metrics=metric1,metric2,metric3&project=ProjectName
because it adds a “/” automatically before the relativepath.Loading... -
Pingback: Tips, Gateway, Embedding and Analysis Services – Roundup #57 – 360reports.io Power BI Videos
-
KC Kang says:
Hi Chris,
I have been exploring using USERNAME() or USEPRINCIPALNAME() to dynamically assign the Paranmeter value in the Web.Contents query. The idea is to extract relevant data based on Power BI login user. Using RLS is possible however this alternative (if possible) will greatly reduce the number of records extracted for respective users.
Do you think this is possible ?Loading...-
Chris Webb says:
No, you can’t pass a value from DAX back to a Power Query function, you will have to use RLS
Loading...
-
-
Dan says:
Chris, first of all, thanks for this incredibly helpful post! I’ve tried to follow what you have done and the code works fine in the desktop, but I’m still having problems with not being able to refresh the data when I have published to the powerbi service.
I’m actually connecting to an ODATA service, and had to figure out how to use params with ‘$’ signs in the name, so the example below might be helpful to others doing the same thing.
I did try and import the data using an ODATA data source, but was having problems, hence ended up going this route:
BaseUri = “https://myurl/v1/”,
QueryRecord =
[ RelativePath=”tickets/”,
Query=
[
token = “xxxxxxxxxx”,
#”$select” = “id,type,origin,baseStatus,createdDate,slaSolutionDate,slaSolutionTime,resolvedIn,urgency,serviceFull,subject”,
#”$filter” = “createdDate gt ” & FormattedDate & “-05:00 and baseStatus ne ‘Canceled'”,
#”$top” = “1000”,
#”$skip” = “1”
]
],
Source = Json.Document(
Web.Contents( BaseUri, QueryRecord )Anything obvious I am doing wrong?
Thanks
Loading...-
Razvan Canua says:
Hi,
I would also like to know the correct way to express “select” parameter from Query.Thanks,
RazvanLoading... -
Ryan says:
I am also extremely interested in a solution for this problem. We are trying to use Microsoft Graph api “skiptoken” element which is preceded by a dollarsign too.
Loading...
-
-
Raul Pino says:
I have been facing this Issue for a week and tried various approaches to fix it with no positive results
I have set a Parameter that provides the ability to make a Dynamic URL with the Following Code which would later be merged with a list-to-table Query:
let
Document=(Numero as number)as table =>
let
Source = Web.Contents(“http://www.sanaa.hn/colonias/dbo_fechas_agua_list.php?masterkey1=”&Number.ToText(Numero)&”&mastertable=dbo.barriocolonia”,[RelativePath=”Numero”]),#”Extracted Table From Html” = Html.Table(Source, {{“Column1”, “TABLE[id=’form_grid_8′] > TR > :nth-child(1), TABLE[id=’form_grid_8′] > * > TR > :nth-child(1)”}, {“Column2”, “TABLE[id=’form_grid_8′] > TR > :nth-child(2), TABLE[id=’form_grid_8′] > * > TR > :nth-child(2)”}, {“Column3”, “TABLE[id=’form_grid_8′] > TR > :nth-child(3), TABLE[id=’form_grid_8′] > * > TR > :nth-child(3)”}, {“Column4”, “TABLE[id=’form_grid_8′] > TR > :nth-child(4), TABLE[id=’form_grid_8′] > * > TR > :nth-child(4)”}}, [RowSelector=”TABLE[id=’form_grid_8′] > TR, TABLE[id=’form_grid_8′] > * > TR”]),
#”Promoted Headers” = Table.PromoteHeaders(#”Extracted Table From Html”, [PromoteAllScalars=true]),
#”Changed Type” = Table.TransformColumnTypes(#”Promoted Headers”,{{“Id Colonia”, Int64.Type}, {“Barrio o Colonia”, type text}, {“Salida de Tanque”, type text}, {“Horario”, type text}})
in#”Changed Type”
in DocumentStatic example of one of the URLS would be :”http://www.sanaa.hn/colonias/dbo_fechas_agua_list.php?masterkey1=1&mastertable=dbo.barriocolonia”
How would the Relative Path and Query solution be applied in this context to solve the Refresh Solution in the PBI Service?
Loading...-
Raul Pino says:
Just Fixed it with help of a friend, turns out it was simpler than I thought:
Source = Web.Contents(“http://www.sanaa.hn/colonias/dbo_fechas_agua_list.php?masterkey1=1&mastertable=dbo.barriocolonia”,[Query=[masterkey1=Number.ToText(Numero),mastertable=”dbo.barriocolonia”]]),
Loading...
-
-
Thai Nguyen says:
-
Pingback: Hente data fra API’er til Power BI | Gaute Holmin - Teknologi, livet og sånt...
-
Raphael Dorian Schmidt says:
I got a similiar problem with the upload refresh and i am unable to implement a RelativePath. Either I have a too big dimension or my syntax is not correct. How would you do this? The line without the Relative Path is
WebCall = Json.Document(Web.Contents(URL & “/webapp/api/v1/salesOrder/?pageSize=1000&sort=-id&page=”&Text.From([Page])&””, [Headers=[AuthenticationToken=”” & token & “”, #”Content-Type”=”application/json”, Accept=”application/json”]]))
Best regards
Raphael SchmidtLoading... -
Pingback: Power BI Incremental Refresh with Web API Data Source | Data and Analytics with Dustin Ryan
-
Pingback: Como obter dados de APIs e atualizar automaticamente - Aprenda Power BI
-
Jacques Scholtz says:
Chris Webb you beaut! Saved the day with this blog post.
Loading... -
Jason says:
Hi Chris,
I am having a very similar issue with trying to connect to a SharePoint.Files() source.
I need to be able to access a set of files that over time will move from a Development SharePoint folder to an Operations folder.
My original plan was to connect to an excel file that would contain the url pathways (root, path, file), and then load my data using parameters against that excel file.
It works a treat in desktop, but then I get the “Dynamic data source” error once published to a workspace.
Is it possible to use a similar “relative path” solution using SharePoint.Files() as a source?Loading... -
Pingback: How to get and automatically refresh APIs data - Power BI Experience
-
THEO says:
Hi Chris,
Dynamic URL with Web.Contents and RelativePath worked well on Power BI Report Server (May 2020).
But since we upgraded to Power BI Report Server (October 2020) the refresh failed with this beautiful message :
[0] -1056505856: COM error: mscorlib, An item with the same key has already been added..
[1] -1056505856: COM error: System.Core, Sequence contains no elements.
[2] -1055784828: The database operation was cancelled because of an earlier failure.Loading...-
Chris Webb says:
That looks like a bug – can you open a support case
Loading... -
Ryan McCauley says:
We’re getting the same error an in our case, it looks like it’s being caused by a Table.Combine statement – it worked fine before the October release and now fails to refresh on PBI Server. Not sure if that’s your issue, but if so, just here to tell you that I’m not aware of a work-around….
Loading...
-
-
Aleksandar says:
Need help with power Query to schedule dynamic refresh of data and keep old data
Hello,
I need to keep the data for the past 24 hours that I refresh in power BI desctop (thats how I model my report and dataset)
I have premium and pro account
I have set RangeStart and RangeEnd parameters
schedule data refresh and update the data in first point every 15 minutes in power BI workspace ( here I get that my data source is not supported for refresh error – ” This dataset includes a dynamic data source. “)
I have read this blog post about “Faking Out” Web.Contents (http://blog.datainspirations.com/2018/02/17/dynamic-web-contents-and-power-bi-refresh-errors/), but I cannot seem to get it working.
Below is my query, any help would be much appreciated:let
EntitiesPerPage = 500,
Limit=”&limit=” & Text.From(EntitiesPerPage),
Url = “https://*******.********.com/api/1/rest/public/runtime/dev_org2?org_wide=true&last_hours=24” & Limit,
GetJson = (Url) =>
let
RawData = Web.Contents(Url),
Json = Json.Document(RawData)
in Json,GetEntityCount = () =>
let Url = Url & “&offset=0″,
Json = GetJson(Url),
Count = Json[#”response_map”],
Count1 = Count[#”total”]
in
Count1,GetPage = (Index) =>
let
//(option A)offset equal to previous row count
offset = “&offset=” & Text.From(Index * EntitiesPerPage),
//(option B)offset equal to page numer
//offset = “&offset=” & Text.From(Index),
Url = Url & offset,
Json = GetJson(Url),
Value = Json[#”response_map”],
Value1 = Value[#”entries”]
in
Value1,EntityCount = GetEntityCount(),
PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),
PageIndices = { 0 .. PageCount – 1 },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#”Expanded Column1″ = Table.ExpandRecordColumn(Table, “Column1”, {“documents”, “state_timestamp”, “error_documents”, “label”, “path_id”, “state”, “create_time”, “duration”, “cc_label”, “runtime_label”}, {“Column1.documents”, “Column1.state_timestamp”, “Column1.error_documents”, “Column1.label”, “Column1.path_id”, “Column1.state”, “Column1.create_time”, “Column1.duration”, “Column1.cc_label”, “Column1.runtime_label”}),
#”Renamed Columns” = Table.RenameColumns(#”Expanded Column1″,{{“Column1.cc_label”, “cc_label”}, {“Column1.create_time”, “create_time”}, {“Column1.documents”, “documents”}, {“Column1.duration”, “duration”}, {“Column1.error_documents”, “error_documents”}, {“Column1.label”, “label”}, {“Column1.path_id”, “path_id”}, {“Column1.state”, “state”}, {“Column1.runtime_label”, “runtime_label”}, {“Column1.state_timestamp”, “state_timestamp”}}),
#”Changed Type” = Table.TransformColumnTypes(#”Renamed Columns”,{{“state_timestamp”, type datetime}, {“create_time”, type datetime}}),
#”Filtered Rows” = Table.SelectRows(#”Changed Type”, each [state_timestamp] >= RangeStart and [state_timestamp] < RangeEnd)
in
#"Filtered Rows"Regards,
Aleksandar
Loading... -
vidhya says:
Hi chris,
Iam having the same data source refresh issue. I followed your blog but still finding issue.
Could anyone help me in creating the relative path and query for the below code
let
Source = Json.Document(Web.Contents(“https://nam.api.newvoicemedia.com/stats/agent-activities/interactions?end=”&Date.ToText(EndDate, “yyyy-MM-dd”)& “T23:00:00.000Z”&”&start=”&Date.ToText(StartDate, “yyyy-MM-dd”)& “T00:00:00.000Z”&””, [Headers=[Accept=”application/vnd.newvoicemedia.v3+json”, Authorization=”bearer “&GetAccessToken()]])),items = Source[items],
#”Converted to Table” = Table.FromList(items, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#”Expanded Column1″ = Table.ExpandRecordColumn(#”Converted to Table”, “Column1”, {“agentId”, “start”, “status”, “duration”, “state”, “reason”, “interaction”, “channel”}, {“agentId”, “start”, “status”, “duration”, “state”, “reason”, “interaction”, “channel”}),
#”Expanded interaction” = Table.ExpandRecordColumn(#”Expanded Column1″, “interaction”, {“guid”, “medium”, “mediumManager”, “direction”}, {“guid”, “medium”, “mediumManager”, “direction”}),
#”Expanded channel” = Table.ExpandRecordColumn(#”Expanded interaction”, “channel”, {“guid”}, {“guid.1″}),
#”Changed Type” = Table.TransformColumnTypes(#”Expanded channel”,{{“guid”, type text}})
in
#”Changed Type”thanks
Loading... -
Jason says:
Hi Chris,
I have a small dataset of about 6 workbooks that are stored across various places in a large SharePoint site.
I can’t use a gateway and the Folder connector, because the file paths are too many characters, and I can’t move the files.
Using the SharePoint.Files connector works, but the report takes between 1-2hrs to refresh about 1,000 rows of data, and often fails due to api/contextinfo error.
Using SharePoint.Contents doesn’t help in this case, as the files are spread throughout too many different folder paths.
This got me thinking about your Web.Contents RelativePath solution. I had read it, but never attempted to implement it.
While I can build a Dynamic Data Source that refreshes the SharePoint files in Desktop in about 1 minute using the Web.Contents approach, I can’t seem to take advantage of the RelativePath option because I can’t authenticate into the subsite.
my code:
Desktop Solution works a charm:
=Excel.Workbook(Web.Contents(Root&Path&File), null, true)
Root, Path, File are obviously Parameters, and then I use a function to call the correct details.
So, I attempted to modify this approach for the service:
=Excel.Workbook(Web.Contents(“MyCompany.SharePoint.com/sites/SubSite”, [RelativePath=Path&File]), null, true)
In theory I thought this should work, because if i type “MyCompany.SharePoint.com/sites/SubSite” into my browser, I can sign in and all is good.
BUT, in Power Query, I have to add a suffix to the URL before I can successfully authenticate:
“MyCompany.SharePoint.com/sites/SubSite/SitePages/Home(1).aspx”
This Suffix obviously messes with my ability to use RelativePath.
Do you know why I can’t authenticate into “MyCompany.SharePoint.com/sites/SubSite/” by itself?
Any ideas how I could overcome this?
Loading... -
Pingback: Integrating Workspace ONE Intelligence reports with PowerBI – Arsen Bandurian: Technical Blog
-
Pingback: Power Query - Dynamic Data Source and Web.Contents() - Hat Full of Data
-
Sunil Kumar Tak says:
Hi Chris,
below is my code
let
BaseURL = “https://portal.k3imagine.com/gw-bi/api/v1.0/customeraccounttransactions”,
Token = AccessToken,
Options = [Headers=[Authorization=”Bearer ” & Token]],
URL = BaseURL,
//Define a function that would take step/page as parameter and return results
Source = Json.Document(Web.Contents(URL, Options)),
#”Converted to Table” = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#”Expanded Column1″ = Table.ExpandRecordColumn(#”Converted to Table”, “Column1”, {“transactionDate”, “customerId”, “shopId”, “posId”, “transactionReceiptId”, “updatedByClerkId”, “spend”, “balanceDifference”, “creditLimit”, “loyaltyPointsEarned”, “loyaltyPointsManuallyRewarded”, “loyaltyPointsSpent”, “type”, “currencyCode”}, {“transactionDate”, “customerId”, “shopId”, “posId”, “transactionReceiptId”, “updatedByClerkId”, “spend”, “balanceDifference”, “creditLimit”, “loyaltyPointsEarned”, “loyaltyPointsManuallyRewarded”, “loyaltyPointsSpent”, “type”, “currencyCode”}),
#”Changed Type” = Table.TransformColumnTypes(#”Expanded Column1″,{{“transactionDate”, type datetime}, {“customerId”, Int64.Type}, {“shopId”, Int64.Type}, {“posId”, Int64.Type}, {“transactionReceiptId”, Int64.Type}, {“updatedByClerkId”, Int64.Type}, {“spend”, Int64.Type}, {“balanceDifference”, Int64.Type}, {“creditLimit”, Int64.Type}, {“loyaltyPointsEarned”, Int64.Type}, {“loyaltyPointsManuallyRewarded”, type logical}, {“loyaltyPointsSpent”, Int64.Type}, {“type”, Int64.Type}, {“currencyCode”, type text}}),
#”Filtered Rows” = Table.SelectRows(#”Changed Type”, each ([transactionDate] #datetime(1, 1, 1, 0, 0, 0))),
//Find the current date and time when this query runs
CurrentDateTime = DateTimeZone.FixedUtcNow(),
//Find yesterday’s date
PreviousDay = Date.AddDays(DateTime.Date(CurrentDateTime),-1),
//Put the current date and time in a new column in the table
#”Added Custom” = Table.AddColumn(#”Filtered Rows”, “UTC Data Load Date”, each CurrentDateTime),
#”Changed Type3″ = Table.TransformColumnTypes(#”Added Custom”,{{“UTC Data Load Date”, type datetimezone}}),
//Add the filter required for incremental refresh
//Only return rows in this table if:
//a) The RangeStart parameter equals yesterday’s date, and
//b) RangeEnd is not null (which should never be true)
#”Filtered Rows (1)” = Table.SelectRows(#”Changed Type3″, each DateTime.Date(RangeStart)=PreviousDay and RangeEndnull)
in
#”Filtered Rows (1)”This code is working fine in Power BI Desktop but
I am getting below error while refreshing from Power BI service.This dataset includes a dynamic data source. Since dynamic data sources aren’t refreshed in the Power BI service, this dataset won’t be refreshed. Learn more: https://aka.ms/dynamic-data-sources.
Please help to resolve the issue
Loading...
Leave a Reply Cancel reply
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Recommend
-
6
NHibernate: What are the options for retrieving multiple entities in a query? advertisements The NHib...
-
2
Using the SVG tag on websites is handy, but its interface can be different than we’re used to. In this post, we’re going to see how to fit the viewport of an SVG to its contents every time. The Problem In some cases, we might...
-
2
Maven 'parent.relativePath' points at wrong local POM @ line 6, column 13 ©OSCHINA(OSChina.NET) 开源软件推进联盟
-
6
When you’re troubleshooting an issue, finding the root cause often involves finding specific logs generated by infrastructure and application code. The faster you can find logs, the faster you can confirm or refute your hy...
-
8
Building A Reporting Solution Using Excel Power Query – Where Are We Now? Seven years ago I gave a presentation at SQLBits called “Build...
-
7
Web.Contents, Text Concatenation And Dataset Refresh Errors In Power BI/Power Query One of the most popular topics I’ve ever written about here is the dataset refresh errors you get with dynam...
-
3
Nitin Sharma March 26, 2023 5 minute read ...
-
4
Introduction In the previous blog, we have discussed about the URI calls which do not require any custom implementation. In this blog, we will go through the URI’s which do require custom implementation. Steps We can divid...
-
5
Using the contents of a file to define an MSBuild property Raymond C...
-
5
Andre Kuller May 27 at 08:08 AM query options in function to database query 51 Views Last edit May 27 at 08:...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK