Funkce ALLEXCEPT slouží k tomu, že výpočet v DAXu bude ignorovat všechny filtrovací kontexty kromě vybraného.

Funguje tedy obdobně jako funkce ALL. Zatímco ale ALL “ignoruje” všechny filtry (pokud je argumentem celá tabulka) nebo filtry podle vybraných sloupců (pokud je argumentem sloupec), tak ALLEXCEPT ignoruje všechno kromě toho, co je v argumentu.

Jak to funguje prakticky?

Např. v tomto vizuálu sledujeme celkové ceny aut podle Brand, Model a Color.

Ve výpočtu potřebujeme získat pro každou z částek procento z celkové značky (Brand). Tedy např. u modré Alfy Fomeo 147 zjistit, kolika procenty se jejich ceny podílí na celkových cenách všech Alf Romeo – tak, jak to je ve druhém sloupci.

Je zřejmé, že toho dosáhneme tak, že budeme dělit hodnotu u konkrétní položky (např. Alfa Romeo 147 Blue) hodnotou celkovou (např. Alfa Romeo). 

A tu celkovou hodnotu právě spočteme tak, že budeme ignorovat všechny filtry kromě Brand (tedy ignorujeme Model a Color).

Zápis celkové částky je takto:

  • Total price for Brand = CALCULATE(
       SUM(Sheet1[Price]),
       ALLEXCEPT(Sheet1,Sheet1[Brand]))
a celkové procento se tedy spočte takto:
  • Percent of Brand total price = DIVIDE(
       SUM(Sheet1[Price]),
       CALCULATE(
          SUM(Sheet1[Price]),
          ALLEXCEPT(Sheet1,Sheet1[Brand])
       )
    )
Ano, šlo by to i takto, ale není to tak elegantní:
  • Percent of Brand total price = DIVIDE(
       SUM(Sheet1[Price]),
       CALCULATE(
          SUM(Sheet1[Price]),
          ALL(Sheet1[Color],Sheet1[Model])
       )
    )