DAX: Zabránění převodu prázdných hodnot (BLANK) na hodnotyDAX: Avoid converting BLANKs to values

Když jako modelátor dat píšete výrazy měr, můžete se setkat s případy, kdy nelze vrátit smysluplnou hodnotu.As a data modeler, when writing measure expressions you might come across cases where a meaningful value can't be returned. V takových případech můžete být v pokušení místo toho vrátit hodnotu, například nulu.In these instances, you may be tempted to return a value—like zero—instead. Doporučujeme pečlivě zvážit, zda je tento návrh efektivní a praktický.We suggest you carefully determine whether this design is efficient and practical.

Podívejte se na následující definici míry, která explicitně převádí výsledky BLANK na nulu.Consider the following measure definition that explicitly converts BLANK results to zero.

Sales (No Blank) =
IF(
    ISBLANK([Sales]),
    0,
    [Sales]
)

Podívejte se na další definici míry, která také převádí výsledky BLANK na nulu.Consider another measure definition that also converts BLANK results to zero.

Profit Margin =
DIVIDE([Profit], [Sales], 0)

Funkce DIVIDE vydělí míru Profit mírou Sales.The DIVIDE function divides the Profit measure by the Sales measure. Pokud je výsledek nula nebo hodnota BLANK, vrátí se třetí argument – alternativní výsledek (který je volitelný).Should the result be zero or BLANK, the third argument—the alternate result (which is optional)—is returned. V tomto příkladu se nula předává jako alternativní výsledek, a proto je zaručeno, že míra vždy vrátí hodnotu.In this example, because zero is passed as the alternate result, the measure is guaranteed to always return a value.

Tyto návrhy měr jsou neefektivní a vedou ke špatným návrhům sestav.These measure designs are inefficient and lead to poor report designs.

Po přidání do vizuálu sestavy se Power BI pokusí načíst všechna seskupení v kontextu filtru.When they're added to a report visual, Power BI attempts to retrieve all groupings within the filter context. Vyhodnocení a načtení výsledků rozsáhlých dotazů často vede k pomalému vykreslování sestav.The evaluation and retrieval of large query results often leads to slow report rendering. Každá ukázková míra účinně promění řídký výpočet na hustý, což nutí Power BI používat více paměti, než je nutné.Each example measure effectively turns a sparse calculation into a dense one, forcing Power BI to use more memory than necessary.

Také příliš mnoho seskupení často uživatele sestavy zahlcuje.Also, too many groupings often overwhelm your report users.

Podívejme se, co se stane, když se míra Profit Margin přidá do vizuálu tabulky a seskupí podle zákazníka.Let's see what happens when the Profit Margin measure is added to a table visual, grouping by customer.

Snímek obrazovky Power BI Desktopu s vizuálem tabulky dat s jedním řádkem na zákazníkaScreenshot of Power B I Desktop showing table visual of data with one row per customer. Hodnoty Sales jsou BLANK a hodnoty Profit Margin jsou nula procent.Sales values are BLANK and Profit Margin values are zero per cent.

Tabulka vizuálu zobrazuje ohromující počet řádků.The table visual displays an overwhelming number of rows. (Ve skutečnosti je v modelu 18 484 zákazníků, a tak se tabulka pokusí všechny zobrazit.) Všimněte si, že zákazníci v zobrazení nedosáhli žádného prodeje.(There are in fact 18,484 customers in the model, and so the table attempts to display all of them.) Notice that the customers in view haven't achieved any sales. Zobrazí se ale, protože míra Profit Margin vždy vrací hodnotu.Yet, because the Profit Margin measure always returns a value, they are displayed.

Poznámka

Pokud pro zobrazení ve vizuálu existuje příliš mnoho datových bodů, může Power BI použít strategie redukce dat a odstranit nebo sumarizovat výsledky rozsáhlých dotazu.When there are too many data points to display in a visual, Power BI may use data reduction strategies to remove or summarize large query results. Další informace najdete v tématu Limity datových bodů a strategie podle typu vizuálu.For more information, see Data point limits and strategies by visual type.

Podívejme se, co se stane, když vylepšíme definici míry Profit Margin.Let's see what happens when the Profit Margin measure definition is improved. Nyní se vrátí hodnota, pouze pokud míra Sales není BLANK (nebo nula).It now returns a value only when the Sales measure isn't BLANK (or zero).

Profit Margin =
DIVIDE([Profit], [Sales])

Ve vizuálu tabulky se nyní zobrazují pouze zákazníci, kteří dosáhli prodeje v kontextu aktuálního filtru.The table visual now displays only customers who have made sales within the current filter context. Vylepšená míra je pro uživatele sestavy efektivnější a praktičtější.The improved measure results in a more efficient and practical experience for your report users.

Snímek obrazovky Power BI Desktopu s vizuálem tabulky dat s filtrovaným obsahem

Tip

V případě potřeby můžete povolením možnosti Zobrazit položky, které neobsahují data nakonfigurovat vizuál tak, aby v kontextu filtru zobrazil všechna seskupení (ta, která vracejí hodnoty, i ta, která jsou BLANK).When necessary, you can configure a visual to display all groupings (that return values or BLANK) within the filter context by enabling the Show Items With No Data option.

DoporučeníRecommendation

Doporučujeme, aby míry vracely hodnotu BLANK, pokud nelze vrátit smysluplnou hodnotu.We recommend that your measures return BLANK when a meaningful value cannot be returned.

Tento přístup k návrhu je efektivní a umožňuje službě Power BI vykreslit sestavu rychleji.This design approach is efficient, allowing Power BI to render reports faster. Vizuály sestavy ve výchozím nastavení také eliminují seskupení, když jsou sumarizace prázdné (BLANK).Also, returning BLANK is better because report visuals—by default—eliminate groupings when summarizations are BLANK.

Další krokyNext steps

Další informace k tomuto článku najdete v následujících tématech:For more information about this article, check out the following resources: