Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
电源查询Excel循环日期_Excel_Powerquery - Fatal编程技术网

电源查询Excel循环日期

电源查询Excel循环日期,excel,powerquery,Excel,Powerquery,我想直接在excel powerquery中循环此查询。我想循环在链接中找到的日期:从链接中的日期到今天的日期。数据必须全部插入到查询中。我怎样才能解决这个问题?多谢各位 let Origine = Web.Page(Web.Contents("https://www.forebet.com/scripts/getrs.php?ln=it&tp=bts&in=2019-06-01&ord=0")), Data0 = Origine{0}

我想直接在excel powerquery中循环此查询。我想循环在链接中找到的日期:从链接中的日期到今天的日期。数据必须全部插入到查询中。我怎样才能解决这个问题?多谢各位

let
    Origine = Web.Page(Web.Contents("https://www.forebet.com/scripts/getrs.php?ln=it&tp=bts&in=2019-06-01&ord=0")),
    Data0 = Origine{0}[Data],
    Children = Data0{0}[Children],
    Children1 = Children{1}[Children],
    #"Rimosse colonne" = Table.RemoveColumns(Children1,{"Kind", "Name", "Children"}),
    #"Analizzato JSON" = Table.TransformColumns(#"Rimosse colonne",{},Json.Document),
    Text = #"Analizzato JSON"{0}[Text],
    #"Conversione in tabella" = Table.FromList(Text, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Tabella Column1 espansa" = Table.ExpandRecordColumn(#"Conversione in tabella", "Column1", {"id", "host_id", "guest_id", "league_id", "Round", "Host_SC", "Guest_SC", "DATE", "DATE_BAH", "Host_SC_HT", "Guest_SC_HT", "comment", "match_preview", "host_stadium", "match_stadium", "HOST_NAME", "GUEST_NAME", "penalty_score", "extra_time_score", "goalsavg", "host_sc_pr", "guest_sc_pr", "weather_low", "weather_high", "weather_code", "short_tag", "Pred_gg", "Pred_no_gg", "odds_gg", "odds_gg_frac", "odds_gg_y", "odds_gg_n", "odds_gg_y_frac", "odds_gg_n_frac"}, {"Column1.id", "Column1.host_id", "Column1.guest_id", "Column1.league_id", "Column1.Round", "Column1.Host_SC", "Column1.Guest_SC", "Column1.DATE", "Column1.DATE_BAH", "Column1.Host_SC_HT", "Column1.Guest_SC_HT", "Column1.comment", "Column1.match_preview", "Column1.host_stadium", "Column1.match_stadium", "Column1.HOST_NAME", "Column1.GUEST_NAME", "Column1.penalty_score", "Column1.extra_time_score", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.short_tag", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Riordinate colonne" = Table.ReorderColumns(#"Tabella Column1 espansa",{"Column1.Round", "Column1.id", "Column1.host_id", "Column1.guest_id", "Column1.league_id", "Column1.Host_SC", "Column1.Guest_SC", "Column1.DATE", "Column1.DATE_BAH", "Column1.Host_SC_HT", "Column1.Guest_SC_HT", "Column1.comment", "Column1.match_preview", "Column1.host_stadium", "Column1.match_stadium", "Column1.HOST_NAME", "Column1.GUEST_NAME", "Column1.penalty_score", "Column1.extra_time_score", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.short_tag", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne1" = Table.RemoveColumns(#"Riordinate colonne",{"Column1.id", "Column1.host_id", "Column1.guest_id", "Column1.league_id"}),
    #"Merge di colonne" = Table.CombineColumns(#"Rimosse colonne1",{"Column1.Host_SC", "Column1.Guest_SC"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Sottoposto a merge"),
    #"Merge di colonne1" = Table.CombineColumns(#"Merge di colonne",{"Column1.Host_SC_HT", "Column1.Guest_SC_HT"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Sottoposto a merge.1"),
    #"Riordinate colonne1" = Table.ReorderColumns(#"Merge di colonne1",{"Column1.Round", "Column1.comment", "Sottoposto a merge", "Column1.DATE", "Column1.DATE_BAH", "Sottoposto a merge.1", "Column1.match_preview", "Column1.host_stadium", "Column1.match_stadium", "Column1.HOST_NAME", "Column1.GUEST_NAME", "Column1.penalty_score", "Column1.extra_time_score", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.short_tag", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne2" = Table.RemoveColumns(#"Riordinate colonne1",{"Column1.DATE"}),
    #"Riordinate colonne2" = Table.ReorderColumns(#"Rimosse colonne2",{"Column1.Round", "Column1.comment", "Column1.DATE_BAH", "Sottoposto a merge.1", "Sottoposto a merge", "Column1.match_preview", "Column1.host_stadium", "Column1.match_stadium", "Column1.HOST_NAME", "Column1.GUEST_NAME", "Column1.penalty_score", "Column1.extra_time_score", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.short_tag", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne3" = Table.RemoveColumns(#"Riordinate colonne2",{"Column1.match_preview", "Column1.host_stadium", "Column1.match_stadium"}),
    #"Riordinate colonne3" = Table.ReorderColumns(#"Rimosse colonne3",{"Column1.Round", "Column1.comment", "Column1.DATE_BAH", "Column1.HOST_NAME", "Sottoposto a merge.1", "Sottoposto a merge", "Column1.GUEST_NAME", "Column1.penalty_score", "Column1.extra_time_score", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.short_tag", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne4" = Table.RemoveColumns(#"Riordinate colonne3",{"Column1.penalty_score", "Column1.extra_time_score"}),
    #"Riordinate colonne4" = Table.ReorderColumns(#"Rimosse colonne4",{"Column1.Round", "Column1.comment", "Column1.DATE_BAH", "Column1.short_tag", "Column1.HOST_NAME", "Sottoposto a merge.1", "Sottoposto a merge", "Column1.GUEST_NAME", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Suddividi colonna in base al delimitatore" = Table.SplitColumn(#"Riordinate colonne4", "Column1.DATE_BAH", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.DATE_BAH.1", "Column1.DATE_BAH.2"}),
    #"Modificato tipo" = Table.TransformColumnTypes(#"Suddividi colonna in base al delimitatore",{{"Column1.DATE_BAH.1", type date}, {"Column1.DATE_BAH.2", type time}}),
    #"Riordinate colonne5" = Table.ReorderColumns(#"Modificato tipo",{"Column1.Round", "Column1.comment", "Column1.DATE_BAH.1", "Column1.DATE_BAH.2", "Column1.short_tag", "Column1.HOST_NAME", "Sottoposto a merge.1", "Sottoposto a merge", "Column1.GUEST_NAME", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.goalsavg", "Column1.host_sc_pr", "Column1.guest_sc_pr", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne5" = Table.RemoveColumns(#"Riordinate colonne5",{"Column1.host_sc_pr", "Column1.guest_sc_pr"}),
    #"Riordinate colonne6" = Table.ReorderColumns(#"Rimosse colonne5",{"Column1.Round", "Column1.comment", "Column1.DATE_BAH.1", "Column1.DATE_BAH.2", "Column1.short_tag", "Column1.HOST_NAME", "Sottoposto a merge.1", "Sottoposto a merge", "Column1.GUEST_NAME", "Column1.Pred_gg", "Column1.Pred_no_gg", "Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.goalsavg", "Column1.weather_low", "Column1.weather_high", "Column1.weather_code", "Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Rimosse colonne6" = Table.RemoveColumns(#"Riordinate colonne6",{"Column1.odds_gg", "Column1.odds_gg_frac", "Column1.odds_gg_y_frac", "Column1.odds_gg_n_frac"}),
    #"Modificato tipo1" = Table.TransformColumnTypes(#"Rimosse colonne6",{{"Column1.weather_low", Int64.Type}, {"Column1.weather_high", Int64.Type}, {"Column1.weather_code", Int64.Type}}),
    #"Sostituito valore" = Table.ReplaceValue(#"Modificato tipo1",".",",",Replacer.ReplaceText,{"Column1.odds_gg_y", "Column1.odds_gg_n", "Column1.goalsavg"}),
    #"Modificato tipo2" = Table.TransformColumnTypes(#"Sostituito valore",{{"Column1.odds_gg_y", type number}, {"Column1.odds_gg_n", type number}, {"Column1.goalsavg", type number}, {"Column1.Pred_gg", Percentage.Type}, {"Column1.Pred_no_gg", Percentage.Type}}),
    #"Divisa colonna" = Table.TransformColumns(#"Modificato tipo2", {{"Column1.Pred_gg", each _ / 100, Percentage.Type}}),
    #"Divisa colonna1" = Table.TransformColumns(#"Divisa colonna", {{"Column1.Pred_no_gg", each _ / 100, Percentage.Type}})
in
    #"Divisa colonna1" 

下面的代码应该允许您获取给定日期范围的数据

let
    // Should return JSON for a given date.
    getJsonForDate = (someDate as date) as text => 
        let
            httpResponse = Web.Contents(
                "https://www.forebet.com/scripts/getrs.php",
                [Query = [ln = "it", tp = "bts", in = Date.ToText(someDate, "YYYY-MM-DD"), order = "0"]]
            ),
            htmlParsed = Web.Page(httpResponse),
            extracted = htmlParsed{0}[Data]{0}[Children]{1}[Children]{0}[Text] // Will throw an error if path changes
        in extracted,
    // Should return JSON for a given date range.
    getJsonForDateRange = (inclusiveStart as date, inclusiveEnd as date) as table =>
        let
            dates = List.Dates(inclusiveStart, Duration.TotalDays(inclusiveEnd - inclusiveStart) + 1, #duration(1, 0, 0, 0)),
            jsonForDates = List.Transform(dates, each [date = _, json = getJsonForDate(_)]),
            toTable = Table.FromRecords(jsonForDates, type table [date = date, json = text])
        in toTable,
    // Should return a table representing the JSON passed in.
    parseJsonResponse = (someJson as text) as table => 
        let
            parsed = Json.Document(someJson),
            toTable = if parsed <> null then Table.FromRecords(parsed) else #table({}, {})
        in toTable,
    
    data = getJsonForDateRange(#date(2020, 8, 30), DateTime.Date(DateTime.LocalNow())),
    parsed = Table.TransformColumns(data, {"json", parseJsonResponse, type table}),
    expanded = Table.ExpandTableColumn(parsed, "json", {"Round", "Host_SC", "Guest_SC", "DATE_BAH", "Host_SC_HT", "Guest_SC_HT", "comment", "HOST_NAME", "GUEST_NAME", "goalsavg", "weather_low", "weather_high", "weather_code", "short_tag", "Pred_gg", "Pred_no_gg", "odds_gg_frac", "odds_gg_y", "odds_gg_n"}),
    combineColumns = Table.CombineColumns(expanded, {"Host_SC", "Guest_SC"}, Combiner.CombineTextByDelimiter(":", QuoteStyle.None), "Sottoposto a merge"),
    combineColumnsAgain = Table.CombineColumns(combineColumns, {"Host_SC_HT", "Guest_SC_HT"}, Combiner.CombineTextByDelimiter(":", QuoteStyle.None), "Sottoposto a merge.1"),
    transformColumns = Table.TransformColumns(combineColumnsAgain, {
        {"DATE_BAH", each Date.FromText(Text.BeforeDelimiter(_, " ")), type date},
        {"weather_low", Number.From, Int64.Type},
        {"weather_high", Number.From, Int64.Type},
        {"weather_code", Number.From, Int64.Type},
        {"odds_gg_y", each Number.FromText(_, "en-US"), type number},
        {"odds_gg_n", each Number.FromText(_, "en-US"), type number},
        {"goalsavg", each Number.FromText(_, "en-US"), type number},
        {"Pred_gg", each Number.From(_, "en-US") / 100, Percentage.Type},
        {"Pred_no_gg", each Number.From(_, "en-US") / 100, Percentage.Type}
    })
in
    transformColumns

  • 最好先检查一下网站(
    www.forebet.com
    )是否在服务/使用方面禁止使用刮擦/机器人
  • 目前,每个请求之间没有延迟。因此,如果指定了较大的日期范围,可能会在短时间内发送大量请求,这可能会对其服务器产生不利影响
  • 根据您的问题,代码假定服务器的响应始终是具有特定结构的HTML文档。如果服务器(出于任何原因)返回具有不同结构的响应,则此代码将抛出错误

Perfect它可以工作,但在2019年8月19日,它得到一个错误
[Expression.error]空值无法转换为列表类型。
@phil,已编辑我的答案。修改后的代码现在应该通过返回该行的空表来处理
null
响应。如果需要,您可以过滤并排除这些行(服务器未返回任何数据)。
data = getJsonForDateRange(#date(2020, 8, 30), DateTime.Date(DateTime.LocalNow())),