{"id":539,"date":"2017-11-19T00:47:12","date_gmt":"2017-11-18T22:47:12","guid":{"rendered":"http:\/\/www.flip-design.de\/?p=539"},"modified":"2017-11-19T00:56:47","modified_gmt":"2017-11-18T22:56:47","slug":"dynamic-hierarchically-role-level-security-with-power-bi-ssas-tabular-using-sql-server-cte","status":"publish","type":"post","link":"https:\/\/www.flip-design.de\/?p=539","title":{"rendered":"Dynamic hierarchically Role Level Security with Power BI \/ SSAS Tabular using SQL Server CTE"},"content":{"rendered":"<p><strong>Introduction<\/strong><br \/>\nIf you have an organizational hierarchically view on your data, the need is often that every manager wants to view the data of his lower nodes and employees. This includes that the manager of a manager wants also to view the data of the next lower manager and his employees-<\/p>\n<p>Our example hierarchy:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/1.png\" rel=\"attachment wp-att-540\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-540\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/1-300x200.png\" alt=\"1\" width=\"300\" height=\"200\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/1-300x200.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/1.png 606w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>At this scenario, the fact data will be produced by the employees or any manager. If \u201cEmp 1\u201d will create a fact row, the need is that \u201cManager A1\u201d and \u201cManager A\u201d and the Top-Level Manager want to see the data in the hierarchy. The other employees and the Manager A2 does not able to see the data, because the hierarchy path is not to them connected.<\/p>\n<h1>Data Model<\/h1>\n<p>A typically data model at a SQL Server Database:<\/p>\n<p>A Table with the unique users \u2013 every user has his unique entry with an ID and a email address.<br \/>\n<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/2.png\" rel=\"attachment wp-att-542\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-542\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/2-300x111.png\" alt=\"2\" width=\"300\" height=\"111\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/2-300x111.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/2-768x284.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/2.png 994w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>A parent\/Child table \u2013 this table connects the hierarchy level<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/3.png\" rel=\"attachment wp-att-543\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-543\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/3-300x111.png\" alt=\"3\" width=\"300\" height=\"111\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/3-300x111.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/3-768x284.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/3.png 994w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>And finally, a fact table<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/4.png\" rel=\"attachment wp-att-544\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-544\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/4-300x151.png\" alt=\"4\" width=\"300\" height=\"151\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/4-300x151.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/4-768x386.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/4.png 994w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>The ERM Model<\/h2>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/5.png\" rel=\"attachment wp-att-545\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-545\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/5-300x265.png\" alt=\"5\" width=\"300\" height=\"265\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/5-300x265.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/5-768x678.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/5.png 776w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>The result of our fact table:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/6.png\" rel=\"attachment wp-att-546\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-546\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/6.png\" alt=\"6\" width=\"244\" height=\"235\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre lang=\"tsql\" line=\"1\" escaped=\"true\">SELECT\r\nUserName, Sum(Sales) As Sales\r\nFROM\r\ndbo.FactTable\r\nINNER JOIN dbo.UserNames on FactTable.UserId = UserNames.id\r\nGROUP BY UserName<\/pre>\n<p>&nbsp;<\/p>\n<p>If we query the data, we have only a direct way from the user to the facts as shown above. The data model gives us also a hierarchy table to get the next link. If we use a CTE to query the data, we get our organigram:<\/p>\n<p>Query:<\/p>\n<pre lang=\"tsql\" line=\"1\" escaped=\"true\">;WITH cte (child, parent, LEVEL, Path, idPath)\r\nAS (\r\n\tSELECT \r\n\t\tT.child\r\n\t\t, T.parent\r\n\t\t, 1 As Level\r\n\t\t, CAST(U.UserName AS VARCHAR(1024)) AS Path\r\n\t\t, CAST(T.child AS VARCHAR(1024)) AS idPath\r\n\tFROM \r\n\t\tdbo.Hirarchy As T\r\n\t\tINNER JOIN dbo.UserNames U ON U.id = T.child\r\n\tWHERE 1=1\r\n\t\tAND (parent Is Null)\r\n\tUNION ALL -- get the childrens\r\n\tSELECT \r\n\t\tC.child\r\n\t\t, C.parent\r\n\t\t, cte.Level + 1 As Level\r\n\t\t, CAST(cte.Path + ' -&gt; ' + CAST(U.eMail AS VARCHAR(1024)) AS VARCHAR(1024)) AS Path\r\n\t\t, CAST(cte.idPath + '|' + CAST(C.child AS VARCHAR(1024)) AS VARCHAR(1024)) AS idPath\r\n\tFROM\r\n\t\tdbo.Hirarchy As C\r\n\tINNER JOIN cte ON cte.child = C.parent\r\n\tINNER JOIN dbo.UserNames U ON U.id = C.child\r\n)\r\nSELECT * FROM cte\r\n<\/pre>\n<p>Result:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7.png\" rel=\"attachment wp-att-547\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-547\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7-300x84.png\" alt=\"7\" width=\"300\" height=\"84\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7-300x84.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7-768x215.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7-1024x286.png 1024w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/7.png 1277w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>This query works, but we can only join this with the facts and see which manager hierarchy does stand behind the user in a string, but we cannot query the hierarchy or filter this. An option will be to multiplicated the rows in the fact data and create every row with the full hierarchy, but this will be only works with the \u201cAdventure Works\u201d or something else and this does not meet the reality. If we have an organization with 1000 employess and over 100.000.000 fact rows, we will get tons of rows and we get performance troubles\u2026 So we need another solution.<\/p>\n<h1>Solution<\/h1>\n<p>If we create a CTE that will create a unique row with every combination from the hierarchy that belongs to the tree, and we join the result with the facts, we don\u2019t need to multiplicated the rows and we can query the hierarchy. Now we can implement a Row Level Security. Okay, let\u2019s try this \u2026<\/p>\n<p>Query:<\/p>\n<pre lang=\"sql\" line=\"1\" escaped=\"true\">CREATE view hierarchy as \r\nWITH Hierachy_cte (child, parent, LEVEL, HierarchyPath, HierachyIdPath)\r\nAS (\r\n\u00a0\u00a0 \u00a0SELECT \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0T.child\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, T.child As parent\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, 1 As Level\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, CAST(U.UserName AS VARCHAR(1024)) AS HierarchyPath\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, CAST(U.id AS VARCHAR(1024)) AS HierachyIdPath\r\n\u00a0\u00a0 \u00a0FROM \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dbo.Hirarchy As T\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0INNER JOIN dbo.UserNames U ON U.id = T.child\r\n\u00a0\u00a0 \u00a0WHERE 1=1\r\n\u00a0\u00a0 \u00a0UNION ALL\r\n\u00a0\u00a0 \u00a0SELECT \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0cte.child\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, h.parent\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, cte.Level + 1 As Level\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, CAST(cte.HierarchyPath + ' -&gt; ' + CAST(U.UserName AS VARCHAR(1024)) AS VARCHAR(1024)) AS HierarchyPath\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0, CAST(cte.HierachyIdPath + '|' + CAST(h.parent AS VARCHAR(1024)) AS VARCHAR(1024)) AS HierachyIdPath\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0--, U.eMail\r\n\u00a0\u00a0 \u00a0FROM\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dbo.Hirarchy As h\r\n\u00a0\u00a0 \u00a0INNER JOIN Hierachy_cte As Cte ON cte.parent = h.child\r\n\u00a0\u00a0 \u00a0INNER JOIN dbo.UserNames U ON U.id = h.parent\r\n)\r\nSELECT C.*, U.eMail FROM Hierachy_cte C\r\nleft JOIN dbo.UserNames U\r\nON U.id = C.parent\r\nGO\r\nSELECT * FROM dbo.hierarchy \r\nWHERE eMail Is Not Null\r\norder by HierarchyPath\r\n<\/pre>\n<p>Result<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/8.png\" rel=\"attachment wp-att-548\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-548\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/8-300x200.png\" alt=\"8\" width=\"300\" height=\"200\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/8-300x200.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/8-768x513.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/8.png 1013w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>The query gives us every combination in the hierarchy tree. If we filter by \u201cManager A1\u201d, we get his manager and his employees.<\/p>\n<h1><\/h1>\n<h1>Visualization<\/h1>\n<p>Okay, lets import the data into Microsoft Power BI. After the import, you must correct\/check the relationship between the Users and the Hierarchy:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/9.png\" rel=\"attachment wp-att-549\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-549\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/9-300x182.png\" alt=\"9\" width=\"300\" height=\"182\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/9-300x182.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/9.png 723w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Next, let us create a role based security to test what a manager will see:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10.png\" rel=\"attachment wp-att-550\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-550\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10-300x86.png\" alt=\"10\" width=\"300\" height=\"86\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10-300x86.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10-768x221.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10-1024x295.png 1024w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/10.png 1073w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Hm&#8230; we will only see the data from the current user and the manager does not see the data from the lower levels:<br \/>\n<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/11.png\" rel=\"attachment wp-att-551\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-551\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/11-300x93.png\" alt=\"11\" width=\"300\" height=\"93\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/11-300x93.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/11.png 655w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>To accomplish our goal, we must edit the relationship between the hierarchy and the user table (first you must remove the RLS Filter):<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12.png\" rel=\"attachment wp-att-552\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-552\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12-300x256.png\" alt=\"12\" width=\"300\" height=\"256\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12-300x256.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12-768x654.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12-1024x872.png 1024w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/12.png 1054w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Now let\u2019s re-create the RLS on<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13.png\" rel=\"attachment wp-att-553\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-553\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13-300x177.png\" alt=\"13\" width=\"300\" height=\"177\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13-300x177.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13-768x452.png 768w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13-1024x602.png 1024w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/13.png 1375w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> the hierarchy table:<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>And now let\u2019s test the role as a manager:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/14.png\" rel=\"attachment wp-att-554\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-554\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/14-300x184.png\" alt=\"14\" width=\"300\" height=\"184\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/14-300x184.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/14.png 616w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>And if we view the data by \u201cManager A1\u201d, he has Emp1 &amp; 2 with a Sales Amount from $750, we get following result:<\/p>\n<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/15.png\" rel=\"attachment wp-att-555\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-medium wp-image-555\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/15-300x134.png\" alt=\"15\" width=\"300\" height=\"134\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/15-300x134.png 300w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2017\/11\/15.png 487w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Conclusion<\/h1>\n<p>If you have a hierarchy table, this is the easiest way to create a RLS und an a hierarchy filter. You will only create some more rows in a mapping table. The RLS is quiet simple and works with Power BI and SSAS Tabular.<\/p>\n<h1>Further Information and resources:<\/h1>\n<ul>\n<li>Visualize Parent Child in PBI<br \/>\n<a href=\"http:\/\/www.daxpatterns.com\/parent-child-hierarchies\/\">http:\/\/www.daxpatterns.com\/parent-child-hierarchies\/<\/a><\/li>\n<li>SQL Server CTE<br \/>\n<a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/ms190766(v=sql.105).aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/ms190766(v=sql.105).aspx<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction If you have an organizational hierarchically view on your data, the need is often that every manager wants to view the data of his lower nodes and employees. This includes that the manager of a manager wants also to &hellip; <a href=\"https:\/\/www.flip-design.de\/?p=539\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":394,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[30,41],"tags":[],"_links":{"self":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/539"}],"collection":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=539"}],"version-history":[{"count":4,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/539\/revisions"}],"predecessor-version":[{"id":558,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/539\/revisions\/558"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/media\/394"}],"wp:attachment":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=539"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}