4. dubna 2016

Power BI Role a zabezpečení

Minulý týden jsem psal o novinkách, které byly a co se chystá. Krátce po vydání článku byla zpřístupněna možnost řídit ze strany Power BI práva, který uživatel uvidí jaká data. V minulosti platilo, že jsme byli schopni řídit pouze přístupy k jednotlivým Dashboardům. Data v Dashboardu v řežimu import omezit nešla. Pro omezení dat jste museli využívat živé připojení a řídit práva na straně databáze u Vás ve firmě. Což není možné ve všech případech. Jak to funguje se dozvíte v dnešním článku. Funkce je zatím ve fázi preview.
V prvé řadě si můžete stáhnout ukázkový report postavený nad Adventure Works DW databází https://drive.google.com/open?id=0B9ZohZ1CALKZTVpwQWMtWHlUNFk
Obsahuje tabulku prodejů Reseller Sales, 3 dimenze – Date, Geography a Product. Obsahuje taky mapovací tabulku Security, kde je ručně zadáno mapování uživatel a kategorie produktů.
Před aplikací zabezpečení uživatel vidí
Zabezpečení se nastavuje u datasetů kliknutím na trojtečku, security.


Vyskočí upozornění, že pokud dataset/report znovu vypublikujete, budete muset znovu nastavovat práva. To je trochu otrava, ale toho se v ostré verzi snad zbavíme (ptal jsem se na Yammeru členů produktového týmu a už na tom už pracují)
Pojmenujete roli, přidáte členy formou emailové adresy
A DAX výrazem můžete nastavit pravidla pro danou tabulku. Pokud bych chtěl například omezi práva pro kategorii produktů, aby uživatel viděl pouze Bikes, napsal bych
DimProduct[Category] = “Bikes”
Pokud bych chtěl, aby viděl Bikes, nebo Clothing. Logická spojka v nebo se v DAX píše jako ||
Tedy DimProduct[Category] = “Bikes” || DimProduct[Category] = “Clothing” Viz obrázek


Natvrdo zadaná podmínka funguje pěkně. Byť výrazy zatím postrádají intellisense. Jak si poradit s mapovací tabulkou?
Ručně zadana mapovací tabulka obsahuje následující hodnoty
Potřebuji zafiltrovat tabulku DimProduct, jeslti náhodou neexistuje záznam pro danou kategorii v tabulce Security. To nejjednoduššeji zjistím funkcí lookupvalue. Co chci vrátit, který sloupec prohledávám, kterou hodnotu chci najít.
Jak vidíte na obrázku výše, pokud nenašel, vrátí prázdnou buňku. To že našel znamená, vřátil buňku neprázdnou. Tj isblank = false
Dostanu následující výsledek, bez components
Zatím jsem do toho žádným způsobem nezakomponoval aktuálně přihlášeného uživatele. Bude stačit rozšířit funcki lookup jestli sloupec User v security je stejný jako DAX funkce vracející aktuálně přihlášeného uživatele


Zbydou bikes a clothing přesně jak mají.


Závěr

Zabezpečení dat na úrovni jednotlivých uživatelských skupin je kritická funkce pro produkční nasazení. Doteď šlo zabezpečit data v reportu pouze při použití živého připojení a řízení zabezpečení ze strany podkladového zdroje. Nyní máme možnost omezit data i při použití režimu import a to včetně dynamického zabezpečení řízeného konfigurační tabulkou. Funguje to jako víno. Jediné drobné problémy na které jsem narazil jsou chybějící intellisense. Když DAX výraz napíšete špatně, nespadne potvrzení práv na chybě syntaxe, jen uživatel uvidí prázdné objekty. Druhý problém je pokaždé přenastavit práva při přepisu souboru. Těchto drobných nedostatků se ale určitě v krátké budoucnosti zbavíme.

2 komentáře:

  1. Odpovědi
    1. nj, musel jsem nekoho pouzit, syna sice zatim zajima vic flaska se sunarem, jak Power BI, ale to se treba casem zmeni :)

      Vymazat