{"id":334,"date":"2021-02-20T21:47:20","date_gmt":"2021-02-20T20:47:20","guid":{"rendered":"http:\/\/blog.dataengineer.at\/?p=334"},"modified":"2021-03-09T18:48:26","modified_gmt":"2021-03-09T17:48:26","slug":"near-realtime-refresh-in-power-bi-einzelne-tabelle","status":"publish","type":"post","link":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/","title":{"rendered":"Near Realtime Refresh in Power BI (single table)"},"content":{"rendered":"<p>A perfect data model, well designed and fast as an in-memory Power BI dataset, as a basis for standard and new self-service reports. The refresh for current data is carried out at night.<\/p>\n\n\n\n<p>But now you would also like to input other small data, e.g. Comments or a status is changed, this data goes back to the data warehouse, e.g. with PowerApps - but unfortunately we won't see them in the report until tomorrow ...<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>Of course, the user wants to see the data immediately!<\/p><\/blockquote><\/figure>\n\n\n\n<p>There is a very simple solution for this: the refreshes in the Power BI Service ...<br>But unfortunately only 8 times a day, with Premium at least 48.<\/p>\n\n\n\n<p>So another solution is needed!<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Inhalt<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69f222a566a93\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69f222a566a93\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Refresh_mit_REST_API\" >Refresh with REST API<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Refresh_mit_Power_Shell\" >Refresh with Power Shell<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Data_Factory_Aufruf_vom_Runbook\" >Data Factory call of the runbook<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Zeitsteuerung\" >Time control<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Trigger_fur_standiges_Refresh\" >Trigger for constant refresh<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Zusammenfassung\" >Summary<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#Conclusio\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Refresh_mit_REST_API\"><\/span>Refresh with REST API<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The refresh can also be triggered via an API and thus at a controlled point in time in a sequential overall process, typically as the last step in a loading chain.<\/p>\n\n\n\n<p>It's not that simple in the setup either, but works well with the Azure Datafactory with a service principal and looks something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"745\" height=\"389\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset_simple.png\" alt=\"\" class=\"wp-image-357\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset_simple.png 745w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset_simple-300x157.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset_simple-16x8.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset_simple-600x313.png 600w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/figure>\n\n\n\n<p>In the luxury version, the status and error are also queried with a loop, since this web call runs asynchronously.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"313\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-1024x313.png\" alt=\"\" class=\"wp-image-358\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-1024x313.png 1024w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-300x92.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-768x235.png 768w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-16x5.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-600x184.png 600w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset-945x289.png 945w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Dataset.png 1320w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Every 5 seconds it is checked whether the refresh is finished or an error is logged:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"260\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Datasetpipe__Status.png\" alt=\"\" class=\"wp-image-380\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Datasetpipe__Status.png 727w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Datasetpipe__Status-300x107.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Datasetpipe__Status-16x6.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Datasetpipe__Status-600x215.png 600w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<p>Naive and lazy as I am, I want to use this method to refresh a single table.<br>Das Refresh vom ganzen Modell mit 100 Tabellen und zahllosen Relations w\u00fcrde 40 Minuten dauern, obwohl sich die Daten nicht ge\u00e4ndert haben, also m\u00f6chte ich nur die Eingabetabelle der Benutzer processen, was in 3 Minuten fertig ist.<\/p>\n\n\n\n<p>But I am disappointed ...<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>Unfortunately there is no table refresh in the API!<\/p><\/blockquote><\/figure>\n\n\n\n<p>What AAS is providing, PBI can not handle, so a new approach is necessary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Refresh_mit_Power_Shell\"><\/span>Refresh with Power Shell<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The Power Shell cmdlet for AS can also be used for Power BI to process a single table.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"258\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil.png\" alt=\"\" class=\"wp-image-402\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil.png 936w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil-300x83.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil-768x212.png 768w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil-16x4.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Marker_Teil-600x165.png 600w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/figure>\n\n\n\n<p>If, as a programming grouch, I have to program for a standard task, then I imagine that at least I can simply call the script in the data factory, but here, too, I am disappointed, because that doesn't exist.<\/p>\n\n\n\n<p>So the power shell script goes to an automation account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"201\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-1024x201.png\" alt=\"\" class=\"wp-image-367\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-1024x201.png 1024w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-300x59.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-768x151.png 768w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-16x3.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-600x118.png 600w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation-945x185.png 945w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Automation.png 1050w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>The Power Shell is started via a web call in the automation account.<\/p><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Data_Factory_Aufruf_vom_Runbook\"><\/span>Data Factory call of the runbook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A webhook from the runbook is required for the call; the runbook can then be started with this url.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"497\" height=\"177\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Webhook_Marker.png\" alt=\"\" class=\"wp-image-371\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Webhook_Marker.png 497w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Webhook_Marker-300x107.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Webhook_Marker-16x6.png 16w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/figure>\n\n\n\n<p>In the data factory you only need this web call to start the runbook with the Powershell.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"392\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook.png\" alt=\"\" class=\"wp-image-373\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook.png 507w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook-300x232.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook-16x12.png 16w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure>\n\n\n\n<p>The parameters for the database, table, etc. are set and credentials are determined using a KeyVault.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"699\" height=\"460\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_base-1.png\" alt=\"\" class=\"wp-image-385\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_base-1.png 699w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_base-1-300x197.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_base-1-16x12.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_base-1-600x395.png 600w\" sizes=\"auto, (max-width: 699px) 100vw, 699px\" \/><\/figure>\n\n\n\n<p>The necessary parameters are transferred to the runbook as a complete JSON body and decoded there again.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"558\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook2.png\" alt=\"\" class=\"wp-image-375\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook2.png 516w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook2-277x300.png 277w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_WebHook2-11x12.png 11w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/figure>\n\n\n\n<p>The normal web call is asynchronous, thats why the webhook is used so that it waits until the refresh is finished.<br>Das funktioniert aber nur, wenn callback gesetzt ist, aber auch im Power Shell der Callback explizit aufgerufen wird als letzter Schritt!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"672\" height=\"106\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Callback_Marker_cut.png\" alt=\"\" class=\"wp-image-392\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Callback_Marker_cut.png 672w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Callback_Marker_cut-300x47.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Callback_Marker_cut-16x3.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_PowerShell_Callback_Marker_cut-600x95.png 600w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Zeitsteuerung\"><\/span>Time control<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The user entries are only relevant during the day and the table refresh shouldn't get in the way of the daily load, so there is an additional parameter control to determine whether the refresh should be carried out, depending on the time.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"75\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_time.png\" alt=\"\" class=\"wp-image-386\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_time.png 698w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_time-300x32.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_time-16x2.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_pipe_Parameter_time-600x64.png 600w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"227\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut.png\" alt=\"\" class=\"wp-image-409\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut.png 978w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut-300x70.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut-768x178.png 768w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut-16x4.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut-600x139.png 600w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_LogDetail_Cut-945x219.png 945w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Trigger_fur_standiges_Refresh\"><\/span>Trigger for constant refresh<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>To ensure that the table refresh is updated as often as possible, a trigger is fired every 15 minutes that executes the pipeline.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"428\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-1024x428.png\" alt=\"\" class=\"wp-image-378\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-1024x428.png 1024w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-300x125.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-768x321.png 768w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-16x7.png 16w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-600x251.png 600w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log-945x395.png 945w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Log.png 1476w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A metric shows the runs with the break in the night.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"438\" height=\"255\" src=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Monitor.png\" alt=\"\" class=\"wp-image-398\" srcset=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Monitor.png 438w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Monitor-300x175.png 300w, http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/ADF_PBIRefresh_Monitor-16x9.png 16w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Zusammenfassung\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The solution for a table refresh in Power BI looks like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Setup for App Registration, Service Principal, KeyVault access<\/li><li>Power Shell Script for the table refresh with parameters<\/li><li>Runbook with the Power Shell Script with a WebHook<\/li><li>Data Factory fetches credentials via a KeyVault and executes the runbook via a WebHook<\/li><li>A scheduled trigger regularly calls the refresh<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusio\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Refreshing individual tables is actually not intended, but is often desired and useful in practice.<\/p>\n\n\n\n<p>Mit dieser doch komplizierten L\u00f6sung aus verschiedenen Komponenten ist dies aber durchaus stabil umsetzbar und sogar m\u00f6glich, Daten aus dem Power BI Dataset &#8222;near realtime&#8220; anzuzeigen.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>Share your experience with a comment below!<\/p><\/blockquote><\/figure>","protected":false},"excerpt":{"rendered":"<p>A perfect data model, well designed and fast as an in-memory Power BI dataset.<\/p>\n<p>But now you would also like to input other small data, e.g. Comments, this data goes back to the data warehouse - but unfortunately we will not see it in the report until tomorrow ...<\/p>","protected":false},"author":1,"featured_media":421,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5,3,58,7],"tags":[17,16,44,62,60,13,63,59,61],"class_list":["post-334","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-power-bi","category-power-shell","category-tabular-analysis-services","tag-analysis-services","tag-azure","tag-data-factory","tag-near-realtime","tag-power-shell","tag-powerbi","tag-realtime","tag-refresh","tag-rest-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG<\/title>\n<meta name=\"description\" content=\"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG\" \/>\n<meta property=\"og:description\" content=\"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...\" \/>\n<meta property=\"og:url\" content=\"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/\" \/>\n<meta property=\"og:site_name\" content=\"Data.Engineer BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-20T20:47:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-09T17:48:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"data.engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"data.engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/\"},\"author\":{\"name\":\"data.engineer\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#\\\/schema\\\/person\\\/fe307e617b3de204775ffd3d9d8dc04a\"},\"headline\":\"Near Realtime Refresh in Power BI (Einzelne Tabelle)\",\"datePublished\":\"2021-02-20T20:47:20+00:00\",\"dateModified\":\"2021-03-09T17:48:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/\"},\"wordCount\":702,\"commentCount\":1,\"publisher\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#\\\/schema\\\/person\\\/fe307e617b3de204775ffd3d9d8dc04a\"},\"image\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg\",\"keywords\":[\"analysis services\",\"azure\",\"data factory\",\"near realtime\",\"power shell\",\"powerbi\",\"realtime\",\"refresh\",\"rest api\"],\"articleSection\":[\"Azure\",\"Power BI\",\"Power Shell\",\"Tabular \\\/ Analysis Services\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/\",\"url\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/\",\"name\":\"Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg\",\"datePublished\":\"2021-02-20T20:47:20+00:00\",\"dateModified\":\"2021-03-09T17:48:26+00:00\",\"description\":\"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#primaryimage\",\"url\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg\",\"contentUrl\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/near-realtime-refresh-in-power-bi-einzelne-tabelle\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\\\/\\\/blog.dataengineer.at\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Near Realtime Refresh in Power BI (Einzelne Tabelle)\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#website\",\"url\":\"http:\\\/\\\/blog.dataengineer.at\\\/\",\"name\":\"Data.Engineer BLOG\",\"description\":\"All about data...\",\"publisher\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#\\\/schema\\\/person\\\/fe307e617b3de204775ffd3d9d8dc04a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\\\/\\\/blog.dataengineer.at\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/#\\\/schema\\\/person\\\/fe307e617b3de204775ffd3d9d8dc04a\",\"name\":\"data.engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Oliver_Cartoon3_240x320-1-150x150.jpg\",\"url\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Oliver_Cartoon3_240x320-1-150x150.jpg\",\"contentUrl\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Oliver_Cartoon3_240x320-1-150x150.jpg\",\"caption\":\"data.engineer\"},\"logo\":{\"@id\":\"http:\\\/\\\/blog.dataengineer.at\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Oliver_Cartoon3_240x320-1-150x150.jpg\"},\"sameAs\":[\"http:\\\/\\\/dataengineer.at\"],\"url\":\"http:\\\/\\\/blog.dataengineer.at\\\/en\\\/author\\\/data-engineer\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG","description":"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/","og_locale":"en_US","og_type":"article","og_title":"Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG","og_description":"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...","og_url":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/","og_site_name":"Data.Engineer BLOG","article_published_time":"2021-02-20T20:47:20+00:00","article_modified_time":"2021-03-09T17:48:26+00:00","og_image":[{"width":640,"height":360,"url":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg","type":"image\/jpeg"}],"author":"data.engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"data.engineer","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#article","isPartOf":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/"},"author":{"name":"data.engineer","@id":"http:\/\/blog.dataengineer.at\/#\/schema\/person\/fe307e617b3de204775ffd3d9d8dc04a"},"headline":"Near Realtime Refresh in Power BI (Einzelne Tabelle)","datePublished":"2021-02-20T20:47:20+00:00","dateModified":"2021-03-09T17:48:26+00:00","mainEntityOfPage":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/"},"wordCount":702,"commentCount":1,"publisher":{"@id":"http:\/\/blog.dataengineer.at\/#\/schema\/person\/fe307e617b3de204775ffd3d9d8dc04a"},"image":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg","keywords":["analysis services","azure","data factory","near realtime","power shell","powerbi","realtime","refresh","rest api"],"articleSection":["Azure","Power BI","Power Shell","Tabular \/ Analysis Services"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/","url":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/","name":"Near Realtime Refresh in Power BI (Einzelne Tabelle) - Data.Engineer BLOG","isPartOf":{"@id":"http:\/\/blog.dataengineer.at\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#primaryimage"},"image":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg","datePublished":"2021-02-20T20:47:20+00:00","dateModified":"2021-03-09T17:48:26+00:00","description":"Ein perfektes Datenmodell, gut designt und schnell als in-memory Power BI Dataset. Nun m\u00f6chte man aber auch weitere kleine Daten erfassen, z.b. Kommentierungen, diese Daten gehen zur\u00fcck in das Data Warehouse - aber im Report sehen wir sie leider erst morgen...","breadcrumb":{"@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#primaryimage","url":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg","contentUrl":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2021\/02\/Near-Realtime-Refresh-in-Power-BI-640x360-1.jpg","width":640,"height":360},{"@type":"BreadcrumbList","@id":"http:\/\/blog.dataengineer.at\/en\/near-realtime-refresh-in-power-bi-einzelne-tabelle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/blog.dataengineer.at\/"},{"@type":"ListItem","position":2,"name":"Near Realtime Refresh in Power BI (Einzelne Tabelle)"}]},{"@type":"WebSite","@id":"http:\/\/blog.dataengineer.at\/#website","url":"http:\/\/blog.dataengineer.at\/","name":"Data.Engineer BLOG","description":"All about data...","publisher":{"@id":"http:\/\/blog.dataengineer.at\/#\/schema\/person\/fe307e617b3de204775ffd3d9d8dc04a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/blog.dataengineer.at\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"http:\/\/blog.dataengineer.at\/#\/schema\/person\/fe307e617b3de204775ffd3d9d8dc04a","name":"data.engineer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2020\/12\/Oliver_Cartoon3_240x320-1-150x150.jpg","url":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2020\/12\/Oliver_Cartoon3_240x320-1-150x150.jpg","contentUrl":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2020\/12\/Oliver_Cartoon3_240x320-1-150x150.jpg","caption":"data.engineer"},"logo":{"@id":"http:\/\/blog.dataengineer.at\/wp-content\/uploads\/2020\/12\/Oliver_Cartoon3_240x320-1-150x150.jpg"},"sameAs":["http:\/\/dataengineer.at"],"url":"http:\/\/blog.dataengineer.at\/en\/author\/data-engineer\/"}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/posts\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":46,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":427,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/posts\/334\/revisions\/427"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/media\/421"}],"wp:attachment":[{"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.dataengineer.at\/en\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}