top of page

Komentuj a zapisuj přímo v Power BI (write-back ve Fabric preview)

  • Writer: Vojtěch Šíma
    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.

Povolení User Data Functions v Admin Portálu
Povolení User Data Functions 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.

Zapnutí TFT a vizuálu Text Slicer v náhledu funkcí Power BI Desktopu
Zapnutí TTF a vizuálu Text Slicer v náhledu funkcí (preview features) 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.

Přidej user data functions
Přidej user data functions

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

Manage connections
Manage connections

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

Vybrané připojení
Vybrané připojení
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š.

Publikuj user function
Publikuj user function

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

Run user function
Run user function
Run window
Run window

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

Vyber SQL databázi s Fabric ikonkou
Vyber SQL databázi s Fabric ikonkou
SQL Database
SQL Database
Select desired table
Select the desired table

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

Vyber Direct Query
Vyber Direct Query

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.

Insert -> Buttons -> Blank
Insert -> Buttons -> Blank
Insert / Build -> Text Slicer
Insert / Build -> Text Slicer

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

Tabulka s komentáři
Tabulka s komentáři

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.


Button setup
Button setup

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í:

  1. 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.

  2. Bez zrušení výběru napiš komentář do Text sliceru.

  3. Klikni na tlačítko Submit. (Šipku v sliceru ignoruj a žádné pole do něj nepřiřazuj.)


Okomentuj produkt
Okomentuj produkt

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

Vlastní okno Request submitted
Vlastní okno Request submitted

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


Nově přidaný komentář
Nově přidaný komentář

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í.

Uživatel interaguje s User Data Function skrze Power BI aplikaci.
Uživatel interaguje s User Data Function skrze Power BI aplikaci.
Výsledek
Výsledek

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

Beoordeeld met 0 uit 5 sterren.
Nog geen beoordelingen

Voeg een beoordeling toe
bottom of page