Uren inladen vanuit Simplicate loopt vast Microsoft.Mashup.Evaluator.Interface.ErrorException

Wanneer ik uren probeer in te laden vanuit Simplicate krijg ik de volgende error:

The operation has timed out.
Microsoft.Mashup.Evaluator.Interface.ErrorException
True

Is het mogelijk om het detailsscherm uit Bridge Online Monitoring dat bij dit request hoort toe te voegen (geanonimisserd, maar include titelbalk en tabelnaam)?

Ik kan nu niks meer zien in het Bridge Online Monitoring-scherm (zie screenshot). Daarnaast kreeg ik geen error te zien, toen ik het Bridge Online Monitoring-scherm nog wel kon zien.

Mocht er geen inhoud verschijnen, controleer dan dat er niet nog een Bridge Online Monitoring scherm openstaat. Sluit de browser volledig af in geval van twijfel. Heropen daarna Bridge Online Monitoring.

Zijn de verzoeken nu wel te zien?

Ik heb nogmaals geprobeerd om alle uren vanuit Simplicate in te laden, maar ik merk dat het laden altijd stopt bij 67.4 MB. Vervolgens krijg ik het volgende error-scherm te zien (Zie screenshot). Bovendien komt er geen melding in Bridge Online Monitoring te staan.

Advies is om te controleren dat er maar 1 Bridge Online Monitoring openstaat; maximaal 1 instantie wordt bijgewerkt.

Bij controle van Invantive Bridge Online Monitoring zijn er van het tijdstip rond het voorgaande bericht een vijftal downloads van Simplicate.Hours.Hours@spe te vinden, allen met hetzelfde aantal rijen, gefilterd op type_type. Ook is een download zonder filter te vinden, evenals enkele minuten eerder nogmaals een zelfde vijftal en een download zonder filter. Nog een aantal minuten eerder is precies een enkele download na 4 seconden beëindigd, nadat er 2700 rijen opgehaald waren. De downloadduurt varieerde tussen 7 milliseconden (uit cache) en 36 seconden (ongefilterd alle uren zonder cache).

Deze downloads hebben allen de server volledig verlaten zonder foutmelding.

Advies is om de Internetverbinding vanaf Power BI te controleren en eventueel alles te herstarten.

In het scherm “Systeemberichten” is te zien dat structureel de volgende URL leidt tot een structurele time-out na 30 seconden. Deze time-out blijft optreden ook na 10 pogingen en op meerdere tijdstippen van de dag, en altijd precies bij de offset van 24500.

itgensgr070
Try again on failing to retrieve text data of partition ‘DEFAULT’ after 487,087 ms using ‘***’ of ‘Simplicate.Hours.Hours’.
Waiting for 30,000 ms and try again.
Try #7 of 10; message ID ‘19671c4e-b0a8-444e-ba31-c91bb9f5f413’. Invantive.Basics.InvantiveSqlException:
itgenoda316: The data could not be downloaded since the connection timed out before returning results.
Timeout was set to 60,000 ms. (https://h???Simplicate: CRM- en projectsoftware voor zakelijke dienstverleners)
—> System.Net.WebException: The operation has timed out.
at System.Net.HttpWebRequest.GetResponse()

Advies is om:

  • Contact op te nemen met Simplicate en dit probleem te melden, samen met bovenstaande URL.
  • Proberen met een filter het datavolume te beperken, bijvoorbeeld op datum (let op: datum is een tekstveld bij Simplicate, dus filter moet iets zijn zoals `datumveld >= ‘20230101’).

Reactie Simplicate:

Beste Ssn,

Bedankt voor je berichten.

We hebben contact gehad over een foutmelding die je krijgt bij het ophalen van gegevens uit onze API. Wanneer je de uren van h???r.simplicate.nl probeert op te halen, krijg je een foutmelding. Wij (support afdeling) kunnen op het moment helaas niet direct achterhalen waar de foutmelding door veroorzaakt wordt.

Daarom zal ik je melding doorzetten naar ons Development Team zodat zij dit verder kunnen onderzoeken. Zodra wij een terugkoppeling hebben vanuit ons Development Team, kom ik weer bij je in de lucht. Excuses voor het ongemak, we komen er zo snel mogelijk bij je op terug.

Let op: tussentijds krijg je geen updates. Je kunt er dus echt vanuit gaan dat we direct van ons laten horen zodra wij een terugkoppeling hebben.

1 like

Is er een manier voor mij om alleen data in te laden vanaf 2020? Wanneer de laatste regels probeer in te laden vanuit PowerBI, dan krijg ik namelijk dezelfde foutmelding.

Reactie Simplicate:

Inmiddels hebben we dit verder onderzocht en er blijkt een corrupte urenregel in jullie data te zitten, waardoor een timeout getoond wordt bij het ophalen van offset 24500. Echter is het voor ons lastig te concluderen waar deze oorzaak precies zit, en hoe dit op te lossen is.

Het elke keer ophalen van alle uren voor het maken van rapportages is geen best practice gebruik van de Simplicate API. Gebruikers die grote datasets gebruiken voor rapportages in power BI gebruiken een tussenlaag. In de deze tussenlaag zitten bijvoorbeeld alle uren en er wordt periodiek gekeken naar welke urenregels bijgekomen, gewijzigd of verwijderd zijn. Vervolgens worden alleen de mutaties verwerkt. In onze API documentatie staat een voorbeeld beschreven:

  1. Simplicate - Developers
  2. Simplicate - Developers

Dit maakt je rapportages veel beter bestand tegen bijvoorbeeld verstoringen in de API. Zoals een corrupte urenregel.

Daarnaast kun je je afvragen of urenregels uit 2016 en 2017 of wel relevant zijn voor de data en het inzicht dat je wil bereiken.

Door dit gegeven en het feit dat het erg intensief is om een corrupt datapunt uit 2016 of 2017 uit te zoeken, zal deze melding minder prioriteit krijgen.

Helaas kan ik op dit moment dus nog geen inschatting geven over wanneer dit precies verder uitgezocht wordt. Zodra wij een definitieve terugkoppeling hebben vanuit ons Development Team, komen we weer bij je in de lucht. De verwachting is niet dat deze terugkoppeling op korte termijn zal komen.

Ja, dat is eenvoudig mogelijk door een filter mee te geven op het veld start_date.

Let op: bij Simplicate is de datum een tekstveld, dus niet als datum, maar als tekst meegeven in het formaat YYYY-MM-DD. In Invantive Bridge Online Monitoring zie je dan een where clause verschijnen bij het SQL-statement. Dit filter wordt dan automatisch doorgestuurd naar Simplicate zodat er alleen de relevante rijen opgevraagd worden.

Dit concept heet “server-side filtering” op Invantive SQL en “query folding” op Power BI. Zie bijvoorbeeld What is PowerBI's query folding? Why does it enhance performance? en Uren kopieren op Simplicate naar SQL Server voor Power BI is erg langzaam - 2 van forums.

Consistentie

Merk op dat Simplicate geen mogelijkheid biedt om vervallen rijen te detecteren anders dan via een laadactie. Aangezien de meeste gebruikers van Invantive een achtergrond in finance hebben en bijpassende verwachtingen qua correctheid van cijfers is het functioneel niet haalbaar om sluitende cijfers te realiseren met alleen detectie van gewijzigde en toegevoegde rijen.

Dit staat beschreven in de tweede hyperlink:

Tracking Deletions
The only way to see what items have been deleted, is to do a full comparison with data you’ve stored yourself.

Het komt vrij weinig voor dat platforms een detectie bieden van vervallen rijen. De Exact Online sync API’s bieden die bijvoorbeeld wel binnen bepaalde grenzen.

In het algemeen raden we daarom aan om standaard alles op te halen en als prestaties of stabiliteit daaronder lijden performanceoptimalisaties toe te passen, zoals filteren. Hierbij kan de organisatie op basis van haar eigen kennis van de werkwijze bepalen welke data irrelevant zijn cq. niet meer zullen wijzigen. In de ene organisatie komt voor dat men 10 jaar later nog gegevens wijzigt, in de andere organisatie is dat zeer ongebruikelijk.

Zou je svp een voorbeeld kunnen geven van hoe ik moet filteren vanaf 2020 als het een tekstveld is?

Filteren vanuit Power BI gaat via een “filterstap” in Power Query. Zorg er wel voor dat de filterstap dicht tegen de navigatiestap aan staat zodat “query folding” mogelijk blijft. Vrijwel altijd kan de filterstap direct na de navigatiestap staan. Zie verder:

Het importeren van de uren werkt vooralsnog niet.

Hierbij mijn Power BI query:

let
  Source = OData.Feed(“https://bridge-online.cloud/acme-simplicate-1/odata4”, null, [Implementation=“2.0”]),
#“Simplicate.Hours.Hours@spe_table” = 
  Source{[Name=“Simplicate.Hours.Hours@spe”,Signature=“table”]}[Data],
#“Filtered Rows” = Table.SelectRows(#“Simplicate.Hours.Hours@spe_table”, each Text.StartsWith([start_date], “202”))
in
  #“Filtered Rows”

Hierbij de SQL query uit Invantive Bridge Monitoring Online:

select t.*
from Simplicate.Hours.Hours@spe t

Ik zie inderdaad dat alle uren nog geselecteerd worden in de SQL query.

Hoe kan ik query folding hierin toepassen?

Niet alle operatoren worden door Power BI via “query folding” doorgegeven, ook al had het eenvoudig geïmplementeerd kunnen zijn in Power Query.

Bijvoorbeeld een filter “tekst begint met” zoals op relatienaam in ActiveCampaign accounts:

let
    Source = OData.Feed("https://bridge-online.cloud/acme-activecampaign/odata4", null, [Implementation="2.0"]),
    #"ActiveCampaign.V3.Accounts@acn_table" = Source{[Name="ActiveCampaign.V3.Accounts@acn",Signature="table"]}[Data],
    #"Filtered Rows" = Table.SelectRows(#"ActiveCampaign.V3.Accounts@acn_table", each Text.StartsWith([name], "Start"))
in
    #"Filtered Rows"

leidt tot de volgende SQL query zonder where-clause omdat er geen query folding wordt gedaan naar bijvoorbeeld een like:

select t.*
from   ActiveCampaign.V3.Accounts@acn t

Andere operatoren werken wel, ook al biedt de standaard user interface van Power BI geen mogelijkheid met een tekstveld om die in te vullen. Als in de Power Query de filterstap aangepast wordt naar:

let
    Source = OData.Feed("https://bridge-online.cloud/invantive-activecampaign/odata4", null, [Implementation="2.0"]),
    #"ActiveCampaign.V3.Accounts@acn_table" = Source{[Name="ActiveCampaign.V3.Accounts@acn",Signature="table"]}[Data],
    #"Filtered Rows" = Table.SelectRows(#"ActiveCampaign.V3.Accounts@acn_table", each [name] > "Start")
in
    #"Filtered Rows"

dan wordt de operator wel doorgegeven en is het eindresultaat qua SQL:

select t.*
from   ActiveCampaign.V3.Accounts@acn t
where  ([name] > :w1)

Dit is vergelijkbaar met wat beschreven staat op How to filter data from OData query on Azure Data Factory? - 3 van forums.

Query Folding Transformaties

Een overzicht van de operatoren waarbij query folding mogelijk is staan in

In dit specifieke geval is advies om NIET op begintekst te zoeken, maar zoals beschreven in via groter dan/gelijk.

Mocht verdere assistentie nodig zijn, dan is advies contact op te nemen met een ervaren Power BI-consultant.

Het is gelukt om met de volgende blank query de uren in te laden vanaf 2023-01-01. Echter laadt deze query enorm langzaam vergeleken met de Invantive koppeling. Hebben jullie een idee hoe ik deze query kan toepassen vanuit de Invantive software?

let
api = (offset) =>
let
data = Json.Document(Web.Contents(“https://h???Simplicate: CRM- en projectsoftware voor zakelijke dienstverleners” & DateTime.ToText(DateTime.LocalNow(), “yyyy-MM-dd”) & “&offset=” & Number.ToText(offset) & “&limit=100&sort=-start_date”, [Headers=[#“Authentication-Key”=“???”, #“Authentication-Secret”=“???”]]))[data]
in
data,
nestedLists =
List.Generate(
() => [ Offset = 100, Hours = api(0) ],
each not ( List.IsEmpty( [Hours] ) ) ,
each [ Hours = api( [Offset] ),
Offset = [Offset] + 100 ],
each [Hours]
),
data = List.Combine(nestedLists),
#“Converted to Table” = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#“Renamed Columns” = Table.RenameColumns(#“Converted to Table”,{{“Column1”, “Hours”}}),
#“Expanded Hours” = Table.ExpandRecordColumn(#“Renamed Columns”, “Hours”, {“employee”, “project”, “projectservice”, “tariff”, “status”, “hours”, “start_date”, “end_date”}, {“Hours.employee”, “Hours.project”, “Hours.projectservice”, “Hours.tariff”, “Hours.status”, “Hours.hours”, “Hours.start_date”, “Hours.end_date”}),
#“Expanded Hours.project” = Table.ExpandRecordColumn(#“Expanded Hours”, “Hours.project”, {“id”, “name”, “organization”}, {“Hours.project.id”, “Hours.project.name”, “Hours.project.organization”}),
#“Expanded Hours.project.organization” = Table.ExpandRecordColumn(#“Expanded Hours.project”, “Hours.project.organization”, {“name”}, {“Hours.project.organization.name”}),
#“Expanded Hours.projectservice” = Table.ExpandRecordColumn(#“Expanded Hours.project.organization”, “Hours.projectservice”, {“id”, “name”}, {“Hours.projectservice.id”, “Hours.projectservice.name”}),
#“Expanded Hours.employee” = Table.ExpandRecordColumn(#“Expanded Hours.projectservice”, “Hours.employee”, {“id”, “name”}, {“Hours.employee.id”, “Hours.employee.name”}),
#“Aangepaste kolom toegevoegd” = Table.AddColumn(#“Expanded Hours.employee”, “Productie”, each [Hours.tariff]*[Hours.hours]),
#“Type gewijzigd” = Table.TransformColumnTypes(#“Aangepaste kolom toegevoegd”,{{“Hours.tariff”, Currency.Type}, {“Hours.hours”, type number}, {“Hours.start_date”, type datetime}, {“Hours.end_date”, type datetime}, {“Productie”, Currency.Type}})
in
#“Type gewijzigd”

Excuses, voor vragen over producten buiten de Invantive-suite is advies om de desbetreffende leverancier rechtstreeks te benaderen.

Momenteel probeer ik een custom SQL query te doen met behulp van de Invantive Query Tool. In de query is te zien dat ik alleen een rij probeer te importeren om te checken of het werkt. Echter zie ik in Bridge Online Monitoring dat de query nog steeds alle uren probeert in te laden. Hoe kan ik ervoor zorgen dat de query ook direct in Bridge Online monitoring wordt geroepen?

Screenshot query Invantive Query Tool.

Screenshot query in Bridge Online Monitoring

De Invantive Bridge Online driver voor Invantive Query Tool geeft limit 1 niet door aan Invantive Bridge Online.

Advies is om hulp te zoeken bij het juist omzeilen van de Simplicate bug door een kort consult in te zetten. U kunt dit bestellen en plannen door telefonisch contact te zoeken.

Deze vraag is automatisch gesloten na 2 weken inactiviteit. Het laatste gegeven antwoord is gemarkeerd als oplossing.

Gelieve een nieuwe vraag te stellen via een apart topic als het probleem opnieuw optreedt. Gelieve in de nieuwe vraag een link naar dit topic op te nemen door de URL er van in de tekst te plakken.