Forum Discussion
Append Data with dynamic source
Hello,
I am fetching data from a web Page with a dynamic Source my target is to load all the source the site has and append it into one table. From trial and error i've created the page and splitted it in several queries, so that if the query is empty it would still work, but it seems it doesnt. Please find my code below:
Source = Web.Page(Web.Contents("https://x.com")),
Data0 = Source{0}[Data],
#"Appended Query" = Table.Combine({Data0, #"X - Top 20", #"X - Top 19", #"X - Top 18", #"X - Top 17", #"X - Top 16", #"X - Top 15", #"X - Top 14", #"X - Top 13", #"X - Top 12", #"X - Top 11", #"X - Top 10", #"X - Top 9", #"X - Top 8", #"X - Top 7", #"X - Top 6", #"X - Top 5", #"X - Top 4", #"X - Top 3", #"X - Top 2", #"X - Top 1"}),
Please find my error:
An error occurred in the ‘X - Top 13’ query. Expression.Error: There weren't enough elements in the enumeration to complete the operation.
Details:
Table
Is there anyway to load the existing source only? and combine only the existing one after?
- Anonymous6 years ago
Hi,
you could try in this way:
- Create a parameter TableNumber, type text and set = 1
- Import table 1 from the web site as query 1
- In the second step of query 1 ("Extracted Table From Html") substitute all
DIV.card--clean:nth-child(1)
with
DIV.card--clean:nth-child("&TableNumber&")
so you are parametrizing your query.
- Then Create Function from this query and call it TableReader
- Create a List of Number from 1 to N
- Transform to a table
- Add a column invoking TableReader function using first column as parameter
- Remove Errors
- Expand Column selecting column you need
Enjoy.
Your Final Query M Code must be something like this:
let
NumberRange = {1..20},
#"Converted to Table" = Table.FromList(NumberRange, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "TableNumber"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"TableNumber", type text}}),
#"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "Table", each TableReader([TableNumber])),
#"Removed Errors" = Table.RemoveRowsWithErrors(#"Invoked Custom Function", {"Table"}),
#"Expanded Table" = Table.ExpandTableColumn(#"Removed Errors", "Table", {"KICK OFF", "HOME TEAM", "% CHANCE", "HOME ODDS", "DRAW ODDS", "AWAY ODDS", "% CHANCE_1", "AWAY TEAM", "PREDICTION"}, {"KICK OFF", "HOME TEAM", "% CHANCE", "HOME ODDS", "DRAW ODDS", "AWAY ODDS", "% CHANCE_1", "AWAY TEAM", "PREDICTION"})
in
#"Expanded Table"Regards
Lorenzo
8 Replies
- HVPereiraFrequent Visitor
I was thinking on using the following code:
try Table.Combine({state, {#"Invoked Function"}})
And try making the "Invoked Function" one by one, however Powerbi does not allow me to use the same variable on every try, is there a way to just append on the same table over and over again?
- AnonymousNot applicable
Hi,
the structure of your web page source is not so clear for me, without a couple of examples, but I think that you can try building:
the function to invoke
a table with one form of your web page in each row
add a column with the function using value in the first column as parameter
Then expand the new column and select the columns you need
For a better sugestion please share some samples
Regards
Lorenzo
- HVPereiraFrequent VisitorHello
You are right! Sorry for that, please find the page below
https://oddslot.com/odds/
The problem here is that the tables can go from 1 to X and I don't know how to make it dynamic.
Thanks for the help!