Wpis z mikrobloga

Za pomocą DAX możesz tworzyć zarówno kolumny kalkulowane jak i miary. Ale czy zastanawiałeś się kiedyś, po co komu dwa twory, skoro ich wynik może być taki sam?

No właśnie. Może, ale wcale nie musi. Dodatkowo – sposób działania miar i kolumn kalkulowanych (pomimo tego, że składnia kodu jest podobna) jest diametralnie różny.

Jeżeli miałeś wcześniej do czynienia z arkuszami kalkulacyjnymi, to kolumna kalkulowana jest dla Ciebie najbardziej naturalną rzeczą na świecie.
Ot, wpisujesz po prostu w pasku formuły **=A1 * B1 i w efekcie otrzymujesz w wybranej komórce wynik mnożenia. Proste jak budowa cepa.
No i to samo możemy zrobić w Power BI. Z tą różnicą, że nie na poziomie pojedynczej komórki a całych kolumn.
Po prostu zmieniamy trochę kod
Nazwa kolumny = 'Tabela'[Wartosc1] * 'Tabela'[Wartosc2]
I mamy cała kolumnę pełną wyników mnożenia.
Obliczenie wykonywane jest dla każdego wiersza tabeli niezależnie od filtrów w raporcie. Co istotne – to obliczenie jest wykonywane w trakcie odświeżania danych i jego wynik będzie przechowywany w pamięci.
Robota zrobiona, czas na CS'a.
Tja... Nie ma tak łatwo.
Każda kolumna kalkulowana będzie wpływać na fizyczną wielkość Twojego raportu i czas odświeżania. I o ile mówimy o prostych tabelach, w których masz kilkaset, czy nawet kilka tysięcy wierszy a obliczenia, których dokonujesz są stosunkowo proste – pewnie nawet nie zauważysz różnicy. Ale w momencie, gdy zaczniesz pracować z większymi modelami danych, gdzie liczbę wierszy będziesz już liczyć w milionach – przekonasz się, że kolumny kalkulowane potrafią znacząco utrudnić życie.
I tutaj wchodzą całe na biało one -
Miary.
Najprościej mówiąc – miara jest obliczeniem wykonywane nie na poziomie każdego wiersza, tylko na zagregowanych wartościach. To obliczenie może być prostym mnożeniem jak w naszym przykładzie, albo bardziej złożonym, biorącym pod uwagę inne czynniki jak chociażby obliczenie sprzedaży rosnąco, albo uwzględniającym wyłączenia.

Co istotne – obliczenie
nie jest** wykonywane tylko raz, dla każdego wiersza tabeli. Miary obliczane są na bieżąco i biorą pod uwagę filtry ustawione w raporcie/wizualizacji. Co za tym idzie – są obliczane tylko wtedy, gdy faktycznie są wykorzystywane i nie zajmują dodatkowej przestrzeni ani pamięci RAM. W zamian za to, aby obliczenia były jak najszybsze – wykorzystywana jest do tego moc CPU.

No i biorą pod uwagę ten cały kontekst filtru.
Co to jest?
W skrócie - jeżeli w raporcie masz slicer z latami - 2019, 2020, 2021, 2022 i na tym slicerze zaznaczysz konkretny rok to miara dokona obliczeń w oparciu o zbiór danych zawężony tylko do wybranego roku.
Sprytne, prawda?

Więc z czego korzystać?
Jak zawsze - to zależy i nie ma jedynej, właściwej i do tego jeszcze prostej odpowiedzi na to pytanie.
Najlepszym wskaźnikiem tego, czy potrzebujesz kolumny czy miary wydaje się być pytanie „Czy wynikiem będzie pojedyncza wartość liczbowa”. Jeżeli odpowiedź jest twierdząca – to prawdopodobnie potrzebujesz właśnie miary.

Jeżeli z drugiej strony potrzebujesz wartości, które będą używane we fragmentatorach, osiach wykresu, legendach etc. – wtedy musisz skorzystać z kolumn.
#powerbi #analizadanych #wizualizacjadanych #dax
K.....I - Za pomocą DAX możesz tworzyć zarówno kolumny kalkulowane jak i miary. Ale c...

źródło: miaryvskolumny

Pobierz
  • 3
@KrzysiekZcleverBI:
Dobry wpis!
ale mam drobne uwagi - niektóre stwierdzania są zbyt dużymi uproszeniami które mogą wprowadzać w błąd :)

Najprościej mówiąc – miara jest obliczeniem wykonywane nie na poziomie każdego wiersza, tylko na zagregowanych wartościach.


Dax ma sporą rodzinę funkcji- iteratorów (funkcje kończące się na X np. SUMX) które charakteryzują się tym, że wykonują obliczenia na poziomie wiersza, a agregacja następuje na samym końcu.

gdy faktycznie są wykorzystywane i nie
@Sad_poyato: I bardzo dobre uwagi :)
Ale piszę i nagrywam głównie dla ludzi, którzy dopiero zaczynają pracować z Power BI. Stąd też pewne uproszczenia. Iteratory to w ogóle temat - rzeka. Co nie zmienia faktu, że nadal jeżeli mówimy o iteratorach to wykonują one obliczenia owszem - na poziomie wiersza, ale w kontekście filtru a nie dla całej tabeli.

Podobnie kwestia wykorzystania RAMu. Celowo nie wchodzę tak głęboko w temat, żeby