Kapitoly kurzu
1. Licencování a režimy připojení 2. Sdílené pracovní prostory 3. Power BI Apps, Audiences a RLS 4. Gateway a aktualizace dat 5. Kapacita, pipelines, verzování 6. Sémantické modely, Dataflows, OneLake 7. Administrace a monitoring
Cvičení
8. Cvičení 1: Workspaces a sdílení 9. Cvičení 2: App a RLS 10. Cvičení 3: Sdílený model 11. Cvičení 4: Životní cyklus obsahu
🏠 Rozcestník kurzu
GOC686 · Kapitola 3

Power BI Apps, Audiences a RLS

Distribuce obsahu přes aplikace, audiences a zabezpečení dat na úrovni řádků i objektů
🗂 Kapitola kurzu

Cíle kapitoly

  • Vysvětlit princip Power BI App a její anatomii — navigation, audiences, permissions.
  • Rozlišit klasickou workspace app od nového typu org apps a jejich chování při aktualizaci.
  • Použít audiences pro distribuci různého obsahu různým skupinám z jednoho workspace.
  • Nastavit statickou i dynamickou Row-Level Security a správně ji otestovat.
  • Doplnit RLS o Object-Level Security (OLS) a rozumět, na koho se obě zabezpečení vztahují.
3.1

Power BI App — co to je a proč existuje

Power BI App je kurátorovaný balíček obsahu z jednoho workspace, určený pro koncové konzumenty. Uživatel vidí App, ne workspace — nemůže omylem smazat report, upravit model nebo narazit na rozpracovanou verzi.

💡
Tip: Workspace je kuchyně, App je restaurace. Uživatel dostane hotové jídlo na talíři — do kuchyně, kde se vaří a experimentuje, nemá přístup.

Tím se App přímo váže na architekturu z konce kapitoly 2: konzumenti jdou přes App, tvůrci zůstávají ve workspace s rolí Contributor nebo výše.

Praktický důsledek: produkční report se v ideálním případě mění dvakrát — jednou ve workspace, kde ho vývojář upraví a otestuje, podruhé v okamžiku, kdy autor rozhodne, že je hotový, a explicitně ho publikuje do App. Mezi těmito dvěma okamžiky konzument nevidí nic — pracuje jen s poslední publikovanou verzí. Tento krok navíc funguje jako přirozená pojistka proti tomu, aby se nedokončená změna náhodou dostala před oči byznysu.

3.2

Anatomie Power BI App

  • Navigation — co uživatel uvidí v levém panelu: reporty, dashboardy, sekce, případně externí odkazy.
  • Audiences — různý obsah nebo různá navigace pro různé skupiny uživatelů ze stejného workspace (viz sekce 3.4).
  • Permissions — kdo má k App přístup: konkrétní e-mail, bezpečnostní skupina, nebo celá organizace.

Postup je vždy stejný: nejdřív obsah ve workspace (reporty, dashboardy), teprve pak publikace App nad tímto obsahem.

Navigation nemusí kopírovat strukturu workspace jedna k jedné — lze reporty seskupit do sekcí, přejmenovat je pro konzumenta srozumitelněji, nebo doplnit externí odkaz mimo Power BI (např. na interní wiki nebo formulář pro zpětnou vazbu). Tato vrstva kurátorství je hlavní přidaná hodnota App oproti prostému sdílení workspace — konzument dostává promyšlenou navigaci, ne technický seznam artefaktů.

3.3

Klasická workspace app vs. org apps

Vedle klasické App existuje novější typ org apps jako samostatná položka typu Fabric item. Zásadní rozdíl je v poměru workspace : App.

Klasická workspace app Workspace 1 App 1 workspace = 1 App verzovaná kopie, krok Update app Org apps Workspace App A App B App C 1 workspace = více apps bez verzování, změna se projeví ihned
Klasická workspace app váže jeden workspace na jednu App a funguje jako verzovaná kopie aktualizovaná krokem Update app; org apps umožňují více aplikací na jeden workspace a nejsou verzované — změny v obsahu se projeví okamžitě.
ℹ️
Poznámka: Org apps jsou v dokumentaci popsány jako novější generace App, ale explicitní GA/preview stav nebyl v dostupných zdrojích potvrzen — přesný stav ověřte v aktuální dokumentaci před nasazením do produkce.

Dva další praktické rozdíly oproti klasické App: uživatel s přístupem do org app vidí zahrnuté položky i při otevření přes přímý odkaz na položku, ne jen přes navigaci v App. A když uživatele z org app odeberete, org app mu zároveň automaticky odebere přístup k modelům a dalším položkám, které mu zpřístupnila — u klasické App je potřeba přístup k položkám řešit zvlášť.

3.4

Audiences — jeden workspace, různé pohledy

Audience je skupina uživatelů se specifickým výběrem obsahu a navigace v rámci jedné App. Každá audience má vlastní seznam oprávněných uživatelů nebo skupin.

Workspace sada reportů Power BI App 1 model, 1 pravda Audience: Finance 5 detailních reportů vlastní seznam uživatelů Audience: Management 2 souhrnné reporty vlastní seznam uživatelů
Audiences umožňují z jednoho workspace a jedné App zobrazit různým skupinám různý obsah a navigaci — jeden model, jedna pravda, jen jiné „okno“ do stejných dat.
LimitHodnota
Audiences na App25
Uživatelé a skupiny celkem na App10 000
Uživatelé a skupiny na jednu audience1 000

Limity se kombinují nešikovně: každý uživatel nebo skupina se počítá do celkových 10 000 za každou audience, do které je přidán. Čtyři uživatelé workspace v pěti audiences se tak počítají jako 4×5 = 20 proti celkovému limitu. Proto se v praxi vyplatí spravovat přístup přes bezpečnostní skupiny (viz kapitola 2), ne přidávat jednotlivce do více audiences zvlášť.

V pokročilém nastavení Manage audience access lze navíc povolit Allow users to share the semantic models in this app (odpovídá Share/Reshare oprávnění) a Allow users to build content with the semantic models in this app (odpovídá Build permission z kapitoly 6) — bez explicitního zapnutí těchto přepínačů uživatelé přístup k modelu navíc nezískají. Na rozdíl od zbytku audience nastavení tyto dva přepínače neplatí jen pro jednu audience, ale pro celou App najednou, včetně uživatelů, kteří k ní přistupují přes roli ve workspace. Build navíc funguje jen pro modely ve stejném workspace jako App — pro model v jiném workspace je nutné Build udělit zvlášť přímo na tom modelu.

⚠️
Pozor: Audience řídí viditelnost obsahu — kdo jakou App a jaké položky v ní vidí. Neřeší, jaká data uvnitř stejného reportu uživatel uvidí — to je doména RLS (sekce 3.7–3.9). Dvě audiences mohou sdílet stejný report; pokud chcete, aby v něm různí lidé viděli různá data, potřebujete RLS, ne další audience. A pamatujte na sekci 3.5: nově přidaný obsah do publikované App je pro všechny audiences ve výchozím stavu skrytý, dokud ho v každé z nich ručně neodkryjete.
3.5

Publikace a aktualizace App

První publikování App vyžaduje Pro licenci a roli Member ve workspace — samotný Contributor na to nestačí. Konzumenti App potřebují Pro nebo PPU licenci, pokud workspace neběží na kapacitě F64+ (pak podle pravidla z kapitoly 1 stačí Fabric Free + role Viewer/přístup k App).

  • Vytvoření: Create app → nastavení navigace, audiences, permissions → Publish.
  • Aktualizace obsahu: upravíte report nebo model ve workspace → krok Update app → uživatelé okamžitě vidí novou verzi.
  • Uživatelé pracují vždy s obsahem publikovaným v App, ne s aktuálním rozpracovaným stavem workspace.

Krok Update app smí standardně jen Admin a Member. Admin může ve workspace settings zapnout přepínač Allow contributors to update the app for this workspace (viz kapitola 2, sekce 2.5) a delegovat aktualizaci obsahu i na Contributora — ten ale ani pak nesmí App publikovat poprvé ani měnit, kdo k ní má přístup.

⚠️
Pozor: Pokud report z workspace odeberete a spustíte Update app, uživatelé App nevratně ztratí personalizace nad tímto reportem (bookmarky, komentáře) — obnovit je nejde, ani když report do workspace vrátíte zpátky. Naopak nový obsah, který do už publikované App přidáte, je po Update app pro všechny audiences ve výchozím stavu skrytý — musíte ho v každé audience ručně odkrýt (viz sekce 3.4), jinak ho konzumenti neuvidí, přestože je technicky součástí App.
3.6

App vs. přímý přístup — kdy co

SituaceDoporučení
Produkční reporty pro business uživatelePower BI App
Rychlé sdílení s jedním člověkemPřímé sdílení reportu
Tým vývojářů pracující na datechWorkspace role (Contributor)
Stovky uživatelů, různé roleApp s Audiences
Uživatel potřebuje vidět všechny artefakty workspaceWorkspace role (Viewer)
3.7

Co je RLS a jak funguje

Row-Level Security (RLS) filtruje data na úrovni řádků podle identity přihlášeného uživatele. Jeden sémantický model → různí uživatelé vidí různá data, ne různé reporty. Bez RLS vidí každý uživatel s přístupem k modelu všechna data.

Typické použití: regionální manažer vidí jen data svého regionu, ředitel vidí vše. Bez RLS by šlo tento rozdíl vyřešit jen duplikací reportů nebo modelů pro každou skupinu zvlášť — což znamená víc údržby, víc míst pro chybu a rozcházející se čísla mezi verzemi. RLS řeší stejný problém v jednom modelu, jednou definicí pravidla.

Power BI Desktop Manage roles DAX filtr na roli publikace Power BI service Semantic model → Security přiřazení uživatelů k roli otevření reportu Uživatel vidí jen povolená data podle DAX filtru role
RLS: role s DAX filtrem se definuje v Power BI Desktop, po publikaci se uživatelé přiřazují k rolím na stránce Security sémantického modelu ve službě, a při otevření reportu service aplikuje filtr podle role přihlášeného uživatele.
3.8

Statická vs. dynamická RLS

Statická RLSDynamická RLS
DAX výraz[Region] = "West"[UserEmail] = USERPRINCIPALNAME()
PřiřazeníUživatel → konkrétní roleVšichni do jedné role
SprávaNová role pro každou skupinuMapovací tabulka v modelu
Vhodné proMalý počet pevných skupinVelký počet uživatelů, dynamické skupiny
DAX
-- staticka RLS, role napr. "Region_West"
'Sales'[Region] = "West"

-- dynamicka RLS, role napr. "UserRegion"
-- filtr na DimUserRegion se pres vztah AllowedRegion -> Region propaguje do faktu
'DimUserRegion'[UserEmail] = USERPRINCIPALNAME()

Dynamická RLS potřebuje v modelu mapovací tabulku uživatelů, např. DimUserRegion [UserEmail, AllowedRegion]. Filtr se definuje na sloupci UserEmail proti USERPRINCIPALNAME() — samotný DimUserRegion pak musí mít vztah AllowedRegion → Region na dimenzi regionu (případně obousměrný filtr nebo bridge tabulku), aby se omezení propagovalo dál do faktové tabulky. Výhoda: nového uživatele přidáte do mapovací tabulky, ne do Power BI role. Nevýhoda: tabulka musí být aktuální — bez refreshe vidí nový uživatel prázdný report.

Dynamické funkce dostupné v DAX pro tento účel: USERPRINCIPALNAME(), USERNAME(), CUSTOMDATA().

Volba mezi statickou a dynamickou RLS je vlastně otázka škálování. U pár pevných skupin (např. tři regiony, pět poboček) je statická role rychlejší na pochopení i ladění — každá role má jednu podmínku a dá se snadno otestovat. Jakmile ale počet skupin roste do desítek nebo se mění dynamicky (noví zaměstnanci, reorganizace), statický přístup znamená neustálé přidávání a mazání rolí. Dynamická RLS s mapovací tabulkou přesune tuto správu z modelu do dat — což je udržitelnější, ale vyžaduje disciplínu v tom, aby mapovací tabulka byla vždy aktuální.

3.9

Testování RLS — Desktop vs. Service

  • Definice role: Power BI Desktop → Modeling → Manage roles.
  • Přiřazení uživatelů: Power BI service → workspace → Semantic model → … → Security.
  • Test v Desktopu: Modeling → View as → vyberte roli, případně přes „Other user“ zadejte konkrétního uživatele pro simulaci.
  • Test v Service: workspace → Semantic model → … → Test as role → Now viewing as → vyberte roli, kombinaci rolí, nebo konkrétní osobu.
Co přesně vrací USERNAME() a USERPRINCIPALNAME() v Desktopu▼

V Power BI Desktop vrací USERNAME() formát DOMAIN\User, kdežto USERPRINCIPALNAME() vrací rovnou UPN (user@contoso.com) — už v Desktopu, ne až ve službě. Ve službě vracejí obě funkce UPN. Proto v mapovacích tabulkách pro dynamickou RLS používejte USERPRINCIPALNAME(), ne USERNAME() — jen USERPRINCIPALNAME() vrací stejný formát (UPN) v Desktopu i ve službě, takže se dá spolehlivě otestovat už lokálně. Přes volbu „Other user“ lze v Desktopu zadat konkrétní identitu pro simulaci, ale doporučeným postupem zůstává reálný test ve službě.

⚠️
Pozor: Test as role v základu vyhodnocuje dynamickou RLS pod vaší vlastní identitou. Pro konkrétního interního uživatele zvolte v hlavičce Now viewing as danou osobu — výsledek pak odpovídá identitě zobrazené v hlavičce, ne vaší. U B2B guestů a service principalů ale Now viewing as neodráží skutečný formát UPN ani autentizační kontext, takže se přihlaste jako daný uživatel a otestujte přímo. Test as role navíc nefunguje pro DirectQuery semantické modely se zapnutým single sign-on (SSO).
3.10

Object-Level Security (OLS)

RLS filtruje řádky — uživatel tabulku vidí, ale jen její část. Object-Level Security (OLS) jde dál: skrývá celé tabulky nebo sloupce včetně metadat, takže uživatel objekt vůbec neuvidí ani v seznamu polí.

  • Nastavuje se přes TMDL view (nově přímo v Power BI Desktop) nebo přes Tabular Editor / XMLA endpoint.
  • OLS platí jen pro roli Viewer — stejně jako u RLS ji Admin, Member a Contributor obchází.
  • Praktický příklad: RLS omezí data na konkrétní region, OLS zároveň skryje sloupec Salary pro uživatele mimo finanční oddělení.
✓
Shrnutí: Kombinace RLS + OLS dává kompletní zabezpečení modelu na úrovni řádků i objektů — ale obojí funguje spolehlivě jen pro produkční konzumenty s rolí Viewer (typicky přes App), ne pro vývojáře s vyšší rolí.
3.11

Časté chyby s RLS a workspace rolemi

Produkční uživatelé mají roli ve workspace místo přístupu přes App▼

Admin, Member i Contributor RLS obchází — vidí vše bez ohledu na definovanou roli. Produkční konzumenti proto nesmí mít workspace roli vyšší než Viewer; bezpečnější je přístup výhradně přes App.

Testování jen v Desktopu▼

USERNAME() se v Desktopu a ve službě liší (DOMAIN\User vs. UPN) — kdo testuje filtr nad USERNAME() jen v Desktopu, chování ve službě tím neověří. I když v Desktopu USERPRINCIPALNAME() vrací UPN správně, Test as role ve službě u B2B guestů a service principalů skutečnou identitu simulovaného uživatele nereplikuje — vždy otestujte dynamickou RLS přihlášením jako konkrétní uživatel.

Zapomenutý refresh mapovací tabulky u dynamické RLS▼

Nový uživatel přidaný do mapovací tabulky, ale bez refreshe modelu, uvidí prázdný report — model má stále stará data.

RLS definovaná na Fact tabulce místo Dimension tabulky▼

Filtr na faktové tabulce se přes standardní vztahy 1:N nepropaguje do dimenzí (propagace jde od strany „1“ k „N“, ne obráceně) a bývá i výkonově dražší, protože se vyhodnocuje nad řádově větší tabulkou. Pravidla proto dávejte na dimenzní tabulky, odkud se filtr přirozeně propaguje na související fakta.