Search code examples
powerbidaxpowerqueryrefresh

"This dataset includes a dynamic data source. Since dynamic data sources aren’t refreshed in the Power BI service"


So i have a problem when try to use refresh schedule menu from Power BI. The problem is 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.

I tried to collect my dataset using paginated API. However, I think because this process is likely dynamic so the Power BI Service cannot do the scheduling refresh. How to fix that? Thanks in advance.

let
    Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis?pagination[page]=1")),
    metadata = Source[meta],
    pagination = metadata[pagination],
    totalpages = pagination[pageCount],
    List = {1..totalpages},
    #"Converted to Table" = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table", {{"Column1", type text}}),
    #"Get Page" = Table.AddColumn(#"Changed Type", "Data", each 
        let
            page = [Column1],
            Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis?pagination[page]=" & page)),
            data = Source[data],
            #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
            #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"attributes"}),
            #"Expanded attributes" = Table.ExpandRecordColumn(#"Expanded Column1", "attributes", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, 
            {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"})
        in
            #"Expanded attributes"
    ),
    #"Expanded Data" = Table.ExpandTableColumn(#"Get Page", "Data", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, {"Data.eartag", "Data.tgl", "Data.kode_straw", "Data.jenis", "Data.rumpun", "Data.sexing", "Data.jumlah", "Data.createdAt", "Data.updatedAt", "Data.publishedAt"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded Data", {{"Data.createdAt", type datetime}, {"Data.updatedAt", type datetime}, {"Data.publishedAt", type datetime}})
in
    #"Changed Type1"

Solution

  • This is a common error to get if you are using the Web.Contents function in Power Query and use a dynamic endpoint, instead of using the Web.Contents as it should!

    Here is a fixed code snippet:

    let
        Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis?pagination[page]=1")),
        metadata = Source[meta],
        pagination = metadata[pagination],
        totalpages = pagination[pageCount],
        List = {1..totalpages},
        #"Converted to Table" = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table", {{"Column1", type text}}),
        #"Get Page" = Table.AddColumn(#"Changed Type", "Data", each 
            let
                page = [Column1],
                Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis,[Query = ["pagination[page]"= page]])),
                data = Source[data],
                #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
                #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"attributes"}),
                #"Expanded attributes" = Table.ExpandRecordColumn(#"Expanded Column1", "attributes", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, 
                {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"})
            in
                #"Expanded attributes"
        ),
        #"Expanded Data" = Table.ExpandTableColumn(#"Get Page", "Data", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, {"Data.eartag", "Data.tgl", "Data.kode_straw", "Data.jenis", "Data.rumpun", "Data.sexing", "Data.jumlah", "Data.createdAt", "Data.updatedAt", "Data.publishedAt"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Expanded Data", {{"Data.createdAt", type datetime}, {"Data.updatedAt", type datetime}, {"Data.publishedAt", type datetime}})
    in
        #"Changed Type1"
    

    Note that the semantics of a query parameter that includes a bracket is unknown to me, but this is how you would structure it. The key is the Web.Contents function takes an optional options record that can carry these extra "dynamic" components, while the request URL itself remains static in the expression.

    See more here: https://learn.microsoft.com/en-us/powerquery-m/web-contents

    Edit: You can perhaps also just use RelativePath instead of Query:

    let
        Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis?pagination[page]=1")),
        metadata = Source[meta],
        pagination = metadata[pagination],
        totalpages = pagination[pageCount],
        List = {1..totalpages},
        #"Converted to Table" = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table", {{"Column1", type text}}),
        #"Get Page" = Table.AddColumn(#"Changed Type", "Data", each 
            let
                page = [Column1],
                Source = Json.Document(Web.Contents("https://semenbeku.rcve.in/api/semen-beku-produksis,[RelativePath = "?pagination[page]=" & page]])),
                data = Source[data],
                #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
                #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"attributes"}),
                #"Expanded attributes" = Table.ExpandRecordColumn(#"Expanded Column1", "attributes", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, 
                {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"})
            in
                #"Expanded attributes"
        ),
        #"Expanded Data" = Table.ExpandTableColumn(#"Get Page", "Data", {"eartag", "tgl", "kode_straw", "jenis", "rumpun", "sexing", "jumlah", "createdAt", "updatedAt", "publishedAt"}, {"Data.eartag", "Data.tgl", "Data.kode_straw", "Data.jenis", "Data.rumpun", "Data.sexing", "Data.jumlah", "Data.createdAt", "Data.updatedAt", "Data.publishedAt"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Expanded Data", {{"Data.createdAt", type datetime}, {"Data.updatedAt", type datetime}, {"Data.publishedAt", type datetime}})
    in
        #"Changed Type1"