Forum Discussion

marcobi's avatar
marcobi
Helper I
3 years ago

Formula.Firewall

Dear Community

 

I got a problem with the Formula.Firewall. I undertake a first request where i gather all deals from pipedrive (pipedrive_deals). Then in the second request I want to use the column deal_id from the pipedrive deals to then make the second request to take the product information of each deal id (each row from other table)

 

Request 1: Request all dealsRequest 2: Request product for each deal_id

 

However I get a Formula.Firewall error: Query 'Product_request_basic' (step 'Extended Column1') refers to other queries or steps and therefore cannot access a data source directly. Re-create this data combination.

 

However, if I only insert the deal_id directly i get acces to it. But I want to have it dynamically and depending on the first request.

 

Can somebody please help me? I tried a lot and did not find any solution... also pretty new in Power BI.

 

Thank you in advance! šŸ™‚

Marco

 

 

5 Replies

    • marcobi's avatar
      marcobi
      Helper I

      Thanks I watched the video. However, after trying a lot i still did not manage to do it. Can you somehow give me a hint in form of code to integrate into one partition?

    • marcobi's avatar
      marcobi
      Helper I
      //This first part will get all the total deal records
      
      let 
      Source = Json.Document(Web.Contents("https://hello.world.com/v1/deals?api_token=1234",[Query=[api_token="1234", limit="1", start="0", get_summary="1"]])), 
      #"Converted to Table Record" = Record.ToTable(Source),
      Value = #"Converted to Table Record"{2}[Value],
      summary = Value[summary],
      total_records = summary[total_count],
      
      //This second part, tries to resolve the maximum limit value of 500 that pipedrive have
      //Starts 0, 500, 1000, 1500 until the total records
      
      Starts = List.Generate(()=>0, each _ < total_records, each _ + 500), 
      #"Converted to Table" = Table.FromList(Starts, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 
      #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type text}}), 
      #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Json.Document(Web.Contents("https://hello.world.com/v1/deals?api_token=1234",[Query=[api_token="1234", limit="500", start=[Column1]]]))),
      
      //then is just branding and expanding
      #"Expanded Custom" = Table.ExpandRecordColumn(#"Added Custom", "Custom", {"data"}, {"Custom.data"}),
      #"Expanded Custom.data" = Table.ExpandListColumn(#"Expanded Custom", "Custom.data"),
      #"Expanded Custom.data1" = Table.ExpandRecordColumn(#"Expanded Custom.data", "Custom.data", {"stage_id", "title", "status", "won_time", "owner_name", "value", "products_count", "last_activity_id", "org_id", "id"}),
          #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Expanded Custom.data1",{"id", "Column1", "stage_id", "title", "status", "won_time", "owner_name", "value", "products_count", "last_activity_id", "org_id"}),
          #"Erweiterte org_id" = Table.ExpandRecordColumn(#"Neu angeordnete Spalten", "org_id", {"address"}, {"org_id.address"}),
          #"Gefilterte Zeilen1" = Table.SelectRows(#"Erweiterte org_id", each ([status] = "won")),
          #"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen1",{"Column1"}),
          #"Sortierte Zeilen" = Table.Sort(#"Entfernte Spalten",{{"stage_id", Order.Ascending}}),
          #"Gefilterte Zeilen" = Table.SelectRows(#"Sortierte Zeilen", each true),
          #"GeƤnderter Typ" = Table.TransformColumnTypes(#"Gefilterte Zeilen",{{"id", type text}}),
          #"Umbenannte Spalten" = Table.RenameColumns(#"GeƤnderter Typ",{{"id", "deal_id"}}),
          #"Gefilterte Zeilen2" = Table.SelectRows(#"Umbenannte Spalten", each true),
          #"GeƤnderter Typ1" = Table.TransformColumnTypes(#"Gefilterte Zeilen2",{{"value", Int64.Type}}),
          #"Gefilterte Zeilen3" = Table.SelectRows(#"GeƤnderter Typ1", each true)
      in
          #"Gefilterte Zeilen3"

       So this is the query where i'm taking the deal_id's from

      • marcobi's avatar
        marcobi
        Helper I

        And this is the query which is referring to the previous query, taking out the deal_ids

        //basic code
        
        let
            apiUrl = "https://hello.world.com/v1/deals/",
            apiToken = "1234",
            idsTable = Pipedrive_deals,
            ids = Table.Column(idsTable, "deal_id"),
            #"Entfernte alternative Elemente" = List.Alternate(ids,200,40,0),
            //ids = {"4334", "4237", "4223", "4222"}, // replace with your own list of IDs --> Pipedrive[id]
            getApiResults = (id) =>
                let
                    apiEndpoint = apiUrl & id & "/products?api_token=" & apiToken,
                    apiResult = Web.Contents(apiEndpoint),
                    jsonResult = Json.Document(apiResult),
                    data = jsonResult[data]
                in
                    data,
            results = List.Transform(#"Entfernte alternative Elemente", each getApiResults(_)),
            filteredResults = List.RemoveNulls(results),
            resultsTable = Table.FromColumns(filteredResults),
        
            #"Transponierte Tabelle" = Table.Transpose(resultsTable),
            #"Erweiterte Column1" = Table.ExpandRecordColumn(#"Transponierte Tabelle", "Column1", {"id", "deal_id", "product_id"}, {"Column1.id", "Column1.deal_id", "Column1.product_id"})
        in
            #"Erweiterte Column1"