Komentuj a zapisuj přímo v Power BI (write-back ve Fabric preview)
- Vojtěch Šíma
- Jun 16
- 6 min read
Updated: Jun 17
tl;dr: Microsoft nedávno vypustil dvě nové preview funkce – Translytical Tasks Flow v Power BI a User Data Functions ve Fabricu. Tato dvojka konečně otevírá dveře k dynamickým, realtime akcím, díky kterým můžeš upravovat tabulky v SQL Serveru (a nejen tam) přímo z Power BI reportu. V tomhle článku ti ukážu, jak s jejich pomocí zapisovat komentáře zpátky do zdroje. Žádné workaroundy a složitosti. Všechno hezky skrz Power BI Report.
Požadavky:
Microsoft Fabric (může být Trial); User Data Functions (povoleno ve Fabricu); Translytical Tasks Flow (povoleno v Power BI Desktop May 25 + verze)
Disclaimer:
Tohle je jen první ochutnávka, takže se nepouštíme do detailů všech zmíněných komponent. I tak by ti ale tenhle průchod měl bohatě stačit k tomu, abys si postavil svou první write-back funkci úplně sám.
Funkce, na kterou jsme všichni čekali
Vsadím se, že už nějakou dobu pokukuješ po možnosti přidávat komentáře přímo v Power BI reportu – stejně jako v OG Excelu. Doteď to šlo jen přes všemožné obcházení pomocí Power Apps, Power Automate nebo jiných vychytávek.
Teď už to ale zvládneš rovnou ze svého krásného reportu. Stačí jen trochu nastavení a máš hotovson.
User Data Functions (UDF)
User Data Functions jsou v podstatě motor všech těch nových možností. Jde o nový typ položky ve Fabricu, ve které si můžeš nadefinovat vlastní funkce napsané v Pythonu. Tyhle funkce se pak používají hlavně k interakci s dalšími komponentami ve Fabricu – třeba se SQL databázemi a podobně. Funkce je momentálně v režimu Preview, takže ji nejdřív musíš povolit v Admin Portálu.

Nebudeme úplně zabrušovat do detailu a nastavení UDF. Tento článek je primárně o write-back funkci, která je jen jedna z milionu možností, co UDF dokáže.
Translytical Task Flows (TTF)
Translytical Task Flows jsou v podstatě „play tlačítko“ pro User Data Functions. Umožňují spustit UDF přímo z Power BI reportu, takže různé akce a úpravy dat můžeš řešit rovnou tam, kde uživatelé pracují – bez zbytečného přepínání do jiných nástrojů.
TTF samo o sobě nepřináší žádný nový vizuál ani nic extra na efekt. Jen rozšiřuje starý dobrý Button o novou akci s názvem Data function. Když k tomu ale přidáš ještě nový Text slicer, vznikne ti ve výsledku úplně nový typ interakce – slicer pro zadávání hodnot a tlačítko pro spuštění akce.
Obojí je v době psaní článku pořád v režimu preview, takže si to musíš nejdřív ručně zapnout v Power BI Desktopu.

Jak postavit write-back akci v Power BI
Náš setup bude úplně jednoduchý:
Máme SQL Server ve Fabricu a v něm základní tabulku pro ukládání komentářů k produktům. Nic složitého – jen sloupce product_id a comment. Cílem je upravit komentář pro vybraný produkt podle toho, co uživatel napíše, a hned jej zobrazit v reportu.
Je to dost primitivní příklad, ale pro účely preview naprosto dostačující a skvěle ukáže, jak TFT a UDF fungují.
Vytvoření User Data Function
Začneme tím hlavním – logikou celé akce. Ve svém Fabric workspace vytvoř novou položku typu User Data Function a otevři ji pro editaci.

Klikni New Function, a pak v editoru klikni na Manage connections.

Klikni na Add data connection, a vyber databázi, kde budeš updatovat komentáře.

Nemusíš přesouvat celý svůj datový zdroj do Fabricu. Stačí malý comment store – jednoduchá tabulka, která bude držet komentáře. Na svůj semantic model ji napojíš přes primární klíč, třeba product_id. Díky tomu zůstanou komentáře ve Fabricu, ale zbytek dat může zůstat tam, kde už je.
A teď ta zábavnější část. Potřebujeme napsat funkci, která to celé obslouží. Píšeme ji v Pythonu a využívá pár knihoven specifických pro Fabric. Ale žádný strach – pokud nejsi v Pythonu úplně doma a logika je jednoduchá jako tady, klidně si to můžeš vibe-codovat.
Tvoje funkce může vypadat nějak takto:
import fabric.functions as fn
import logging
udf = fn.UserDataFunctions()
@udf.connection(argName="sqlDB", alias="writebacksql") # alias equals alias in Manage connections
@udf.function()
# watch out for underscores, they are not allowed in the definition
def UpdateProductComment(
sqlDB: fn.FabricSqlConnection,
productId: int,
comment: str
) -> str:
logging.info("Processing UpdateProductComment")
# Validation
if not comment or not comment.strip():
raise fn.UserThrownError("Comment cannot be empty.")
# Parameterized update
# Here you write actual SQL Query with actual column names
query = """
UPDATE [dbo].[product_info]
SET [comment] = ?
WHERE [product_id] = ?
"""
params = (comment, productId)
# Debug logging (fully-expanded T-SQL)
tsql = query.replace("?", "{}").format(
*[f"'{p}'" if isinstance(p, str) else p for p in params]
)
logging.info(f"Executing SQL: {tsql}")
# Execute
conn = sqlDB.connect()
cur = conn.cursor()
cur.execute(query, params)
conn.commit()
conn.close()
# Some nice message about the execution
return f"Product {productId} comment updated with text '{comment}'."
Tahle funkce vezme productId a comment, a pak pomocí parametrizovaného SQL dotazu aktualizuje odpovídající řádek v tabulce product_info. Obsahuje základní validaci, zapisuje akci do logu a po dokončení vrací potvrzovací zprávu.
Mrkni pořádně na proměnnou query – právě tam musíš zadat skutečné názvy sloupců a tabulky. A taky si dej pozor na dekorátor @udf.connection. Alias, který tam uvedeš, musí přesně odpovídat tomu, co máš v Manage connections, jinak spojení selže.
Jedna důležitá věc – ve funkci UpdateProductComment nesmíš používat podtržítka v názvech parametrů. Ale žádný stres – názvy parametrů ve funkci nemusí odpovídat názvům sloupců v databázi. Stačí, když to správně namapuješ v samotném SQL dotazu.
Tahle verze kódu je už v podstatě co nejúspornější. Pokud chceš být ještě minimalističtější, klidně vyhoď debug část s logováním SQL – je fajn na ladění, ale není nutná pro běh funkce.
Teď už jen funkci publikuješ.

Nezapomeň nejdřív spustit/testovat svoji funkci.


Spuštění User Data Function v Power BI Desktopu
Teď už máme funkční User Data Function, takže si k tomu postavíme pár jednoduchých vizuálů, kterými ji spustíme.
Připoj svoji komentářovou tabulku k tvému semantickému modelu



Doporučuji si vybrat typ připojení DirectQuery, jelikož je naše tabulka poměrně kompaktní, takže uvidíš změny okamžitě.

Teď udělej všechny potřebné úpravy v modelu, aby bylo možné zobrazit komentáře společně s produktovou dimenzí.
A protože už máš zapnuté funkce v preview, vytvoříme si prázdný Button a Text slicer vizuál.


Podle toho, jak hodláš report používat, vyrob si třeba tabulku, abys zobrazil komentáře.

Nastavíme Button vizuál.
V panelu Format přejdi do sekce Actions, zapni ji a jako typ akce vyber Data function.
Teď vyplň požadované informace:
Workspace – Workspace, ve kterém máš svou User Data Function
Function set – Název položky s tvou User Data Function
Data function – Konkrétní funkce, kterou chceš spustit
A teď namapuj parametry funkce:
productId – Spojuje komentář s konkrétním produktem. Doporučuju si vytvořit measure jako SELECTEDVALUE('table'[product_id]), kliknout na ikonu fx, zvolit Field value a vybrat svůj/svou measure.
comment – Tady vyber svůj Text slicer vizuál. Aby sis to ulehčil, běž do panelu Selection, přejmenuj slicer třeba na „input“ a pak ho jednoduše vybereš v rozbalovacím seznamu. Pokud ho nepřejmenuješ, budeš muset vybírat z nějakého náhodně generovaného ID – a to není vončo.

Doporučuju si ponechat volitelné přepínače tak, jak to mám i já.
Volitelně můžeš v sekci Button style přidat text jako Submit, aby bylo jasnější, co má tlačítko dělat – ale není to povinné. Kromě nastavení Data function si tlačítko můžeš upravit podle sebe, včetně nové Loading varianty, která hezky pomůže s odezvou pro uživatele.
Rychlý tip – po nastavení Data function se většina úprav vzhledu provádí ve stavu Disabled. Takže pokud se změny neprojevují, koukni právě tam.
Mno a máme hotovo.
Spuštění User Data Function z Power BI
Podle toho, jak máš funkci nastavenou, se může celý proces trochu lišit. V našem případě chceme vybrat produkt, napsat komentář a odeslat ho.
Postup je následující:
Vyber jeden konkrétní produkt, třeba kliknutím na řádek v tabulce. Tím se aktivuje measure, která se používá jako parametr productId.
Bez zrušení výběru napiš komentář do Text sliceru.
Klikni na tlačítko Submit. (Šipku v sliceru ignoruj a žádné pole do něj nepřiřazuj.)

Po odeslání se zobrazí okno Request submitted, kde uvidíš, jaká akce byla spuštěna.

Zavři ho a tvůj komentář by se měl okamžitě zobrazit u vybraného product_id.

Zabezpečení a oprávnění
Přirozeně, když do celého řešení přidáš další vrstvu, jako je tahle, přichází na řadu oprávnění. Ale žádný stres – nastavení je ve skutečnosti docela jednoduché. Pojďme si ukázat scénář, který chceme:
Report publikujeme přes Power BI aplikaci a uživatelé nemají přístup k workspace, kde je SQL Server, semantic model, report ani User Data Function.
Co je potřeba nastavit, aby to fungovalo:
SQL Server – Přiřaď oprávnění Read all data using SQL database. Detailnější oprávnění můžeš případně přidělit ručně pomocí příkazu GRANT v SQL.
User Data Functions – Přiřaď roli Execute Functions and View Function Logs (je to jedna volba)
Power BI App – Uživatelům stačí běžný přístup k publikovanému reportu v rámci aplikace
S tímto nastavením budou moct uživatelé prohlížet report a používat komentářovou funkcionalitu, aniž by potřebovali přístup k samotnému workspace, kde všechno bydlí.


Shrnutí
Takže si to shrneme – s minimem nastavení si dneska v Power BI zvládneš postavit plně funkční write-back. Díky User Data Functions a Translytical Task Flows už můžeš zapomenout na všemožné externí nástroje a kreativní workaroundy. Komentáře, zpětný zápis do SQL, nebo cokoliv mezi tím? Všechno pěkně v rámci reportu. Když k tomu přihodíš správná oprávnění, máš hotovo. Čisté, svižné, interaktivní, a tvoji uživatelé třeba přestanou psát komentáře do Excelu.
Opmerkingen