Power BI Kopya Kâğıdı
Son güncelleme
Ölçüler, sütunlar ve tablolar
Ölçü, bir görselin her hücresi için hesaplanır; hesaplanmış sütun ise her satır için bir kez hesaplanır ve saklanır.
| Ne yapar | DAX |
|---|---|
| Ölçü oluşturmak | Total Sales = SUM ( Sales[Amount] ) |
| Hesaplanmış sütun oluşturmak (satır başına bir değer) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Hesaplanmış tablo oluşturmak | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Bir sütuna başvurmak: tablo adı, ardından köşeli parantez içinde sütun | Sales[Amount] |
| Boşluk içeren veya ayrılmış bir sözcük olan tablo adını tırnak içine almak | 'Date'[Date] |
| Bir ölçüye başvurmak: yalnızca köşeli parantez | [Total Sales] |
| Bir ölçüyü başka bir ölçünün içinde kullanmak | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Toplama fonksiyonları
Her biri, geçerli filtre bağlamında bir sütunu özetler.
| Ne yapar | DAX |
|---|---|
| Bir sütunu toplamak | SUM ( Sales[Amount] ) |
| Bir sütunun ortalaması | AVERAGE ( Sales[Amount] ) |
| En küçük değer | MIN ( Sales[Order Date] ) |
| En büyük değer | MAX ( Sales[Order Date] ) |
| Bir tablonun satırlarını saymak | COUNTROWS ( Sales ) |
| Bir sütundaki boş olmayan değerleri saymak | COUNT ( Sales[Amount] ) |
| Benzersiz değerleri saymak | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Güvenli bölme: payda 0 olduğunda hata yerine boş değer | DIVIDE ( [Total Sales], [Total Units] ) |
| Payda 0 olduğunda gösterilecek bir değerle bölmek | DIVIDE ( [Profit], [Total Sales], 0 ) |
Yineleyiciler (X fonksiyonları)
Bir tabloyu satır satır dolaşır, her satır için bir ifadeyi hesaplar, ardından sonuçları özetlerler.
| Ne yapar | DAX |
|---|---|
| Her satırda çarpmak, sonra toplamak | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Satır başına hesaplanan sonucun ortalaması | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Satır başına hesaplanan en büyük sonuç | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Müşteri başına bir ölçünün ortalaması | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| İfadede ilişkili bir tablonun sütununu kullanmak | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Bir koşulu sağlayan satırları saymak | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Her ürünü bir ölçüye göre sıralamak | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Eşit değerlerden sonra boşluk bırakmadan sıralamak (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Değerleri tek bir metinde birleştirmek | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE ve filtre fonksiyonları
CALCULATE bir ifadeyi değiştirilmiş filtrelerle hesaplar. Aynı sütundaki bir filtre eskisinin yerini alır; farklı sütunlardaki filtreler AND ile birleşir.
| Ne yapar | DAX |
|---|---|
| Tek bir değere göre filtrelemek | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Bir değer listesine göre filtrelemek | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| İki filtre (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| İki sütun arasında OR | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Bir ölçüye göre filtrelemek | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Mevcut filtreyi korumak ve onunla kesiştirmek | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Bir sütundaki filtreleri kaldırmak | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Bir tablodaki tüm filtreleri kaldırmak | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Bazı sütunlar dışında bir tablodaki tüm filtreleri kaldırmak | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Dilimleyici seçimini korumak, görselin kendi satırlarını yok saymak | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Etkin olmayan bir ilişkiyi kullanmak | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Tek bir ölçü için filtrenin iki yönde de akmasını sağlamak | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| İlişkisi olmayan bir tabloya göre filtrelemek | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Zaman zekâsı
Bunlar bir tarih tablosu gerektirir: her gün için bir satır, eksik gün yok ve tarih tablosu olarak işaretlenmiş.
| Ne yapar | DAX |
|---|---|
| Yılbaşından bugüne | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Yılbaşından bugüne, 30 Haziran'da biten mali yıl | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| CALCULATE içinde yılbaşından bugüne | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Çeyrek başından bugüne | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Ay başından bugüne | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Geçen yılın aynı dönemi | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Tarihleri bir aralık kadar kaydırmak (burada bir ay geri) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| Önceki ayın tamamı | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| Bir yıl önceki dönemin tamamı | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| Görünen son tarihe kadar son 12 ay | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Sabit bir tarih aralığı | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Sık kullanılan ölçü kalıpları
Kopyalayın, sonra tabloları ve sütunları kendi modelinize göre yeniden adlandırın.
| Ne yapar | DAX |
|---|---|
| Tüm kategorilerin içindeki yüzde | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Dilimleyicilerin bıraktığı kısmın içindeki yüzde | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Yıldan yıla büyüme | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Tüm zamanlar boyunca kümülatif toplam | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| 7 günlük hareketli ortalama (satış olan günlere göre) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Değeri yalnızca ilk 5 için göstermek | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Bir eşiğin üzerindeki müşterileri saymak | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Toplamın, satırlarının toplamına eşit olmasını sağlamak | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Değeri bir matrisin yalnızca tek bir düzeyinde göstermek | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Dönem sonu bakiyesi: değeri olan son tarih | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Mantıksal ve bilgi fonksiyonları
Koşullar için ve filtre bağlamında ne olduğunu sormak için.
| Ne yapar | DAX |
|---|---|
| Tek koşul | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Tek bir ifadenin birkaç değeri | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Yukarıdan aşağıya kontrol edilen aralıklar | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND ve OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| Değer boş mu? | ISBLANK ( [Total Sales] ) |
| Boş olmayan ilk değer | COALESCE ( [Total Sales], 0 ) |
| Filtre tam olarak tek bir değer bırakıyor mu? | HASONEVALUE ( Product[Category] ) |
| O tek değer ya da bir varsayılan | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Görselin bu satırı bu sütuna göre gruplanmış mı? | ISINSCOPE ( Product[Category] ) |
| Boş değer döndürmek | BLANK () |
Metin fonksiyonları
& operatörü metinleri birleştirir; FORMAT bir sayıyı veya tarihi metne çevirir.
| Ne yapar | DAX |
|---|---|
| Metin birleştirmek | Customer[First Name] & " " & Customer[Last Name] |
| Sayı biçimlendirmek | FORMAT ( [Total Sales], "#,0.00" ) |
| Tarih biçimlendirmek | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| İlk karakterler | LEFT ( Product[Code], 3 ) |
| Bir konumdan itibaren karakterler | MID ( Product[Code], 4, 2 ) |
| Uzunluk | LEN ( Product[Name] ) |
| Büyük harf | UPPER ( Store[City] ) |
| Fazla boşlukları kaldırmak | TRIM ( Customer[Name] ) |
| Metin değiştirmek | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Büyük ve küçük harfe bakmadan bir metnin konumu (bulunamazsa 0) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Tarih fonksiyonları
Tarihler arka planda sayıdır, bu yüzden gün sayısını bulmak için birbirinden çıkarabilirsiniz.
| Ne yapar | DAX |
|---|---|
| Bugünün tarihi | TODAY () |
| Tarih oluşturmak | DATE ( 2025, 12, 31 ) |
| Bir tarihin yılı | YEAR ( 'Date'[Date] ) |
| Ay numarası | MONTH ( 'Date'[Date] ) |
| Haftanın günü, pazartesi 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Hafta numarası, haftalar pazartesi başlar | WEEKNUM ( 'Date'[Date], 2 ) |
| Ayın son günü | EOMONTH ( 'Date'[Date], 0 ) |
| Bir ay önceki aynı gün | EDATE ( 'Date'[Date], -1 ) |
| İki tarih arasındaki gün sayısı | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Sabit tarihlerden bir tarih tablosu | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Modeldeki tarihlerden bir tarih tablosu | CALENDARAUTO () |
İlişkiler ve arama
RELATED bir ilişkiyi çok tarafından bir tarafına doğru izler.
| Ne yapar | DAX |
|---|---|
| Bir tarafındaki değer (Sales tablosundaki bir sütunda) | RELATED ( Product[Category] ) |
| Geçerli satırın çok tarafındaki satırları (Customer tablosundaki bir sütunda) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| İlişki olmadan bir değer aramak | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Üst ve alt öğe yolu (hiyerarşiler ve satır düzeyi güvenlik için) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| Oturum açmış kullanıcı, dinamik satır düzeyi güvenlik için | USERPRINCIPALNAME () |
Tablo fonksiyonları
Tablo döndürürler: bunları hesaplanmış bir tabloda, CALCULATE içinde veya bir yineleyicide kullanın.
| Ne yapar | DAX |
|---|---|
| Geçerli filtredeki benzersiz değerler | VALUES ( Product[Category] ) |
| Bir koşulu sağlayan satırlar | FILTER ( Product, Product[Price] > 100 ) |
| Bir ölçüye göre ilk N satır | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Sütunlara göre gruplamak ve ölçü eklemek | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Bir tabloya sütun eklemek | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Sütun seçmek ve yeniden adlandırmak | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Bir sayı listesi | GENERATESERIES ( 1, 10, 1 ) |
| İki tablonun tüm kombinasyonları | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Aynı sütunlara sahip iki tabloyu alt alta eklemek | UNION ( 'Sales 2024', 'Sales 2025' ) |
Değişkenler
VAR bir adıma ad verir ve onu bir kez hesaplar; RETURN sonucu verir.
| Ne yapar | DAX |
|---|---|
| Tek değişken | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Birkaç değişken | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Değişkende bir tablo | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Power Query (M) adımları
Power Query verileri yüklenmeden önce düzenler. Bunlar sık kullanılan düğmelerin arkasındaki M formülleridir.
| Ne yapar | M |
|---|---|
| Eşleşen satırları tutmak | Table.SelectRows(Source, each [Status] = "Paid") |
| Sütunları kaldırmak | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Sütun türlerini ayarlamak | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Bir sütunu yeniden adlandırmak | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Sütun eklemek | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| İki sorguyu birleştirmek (join) | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Sorguları alt alta eklemek | Table.Combine({Sales2024, Sales2025}) |
| Sütunları satırlara dönüştürmek (unpivot) | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Gruplamak ve özetlemek | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Hataları bir değerle değiştirmek | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Bu Power BI kopya kâğıdı, en sık yazdığınız DAX'i tek sayfada toplar: toplama fonksiyonları, X yineleyicileri, CALCULATE ve filtreleri değiştiren fonksiyonlar, zaman zekâsı, metin ve tarih fonksiyonları, ayrıca kopyalayabileceğiniz ölçü kalıpları: toplamın yüzdesi, yıldan yıla büyüme ve kümülatif toplam.
Örnekler Sales, Product, Customer ve bir 'Date' tablosu içeren bir satış modeli kullanır; bunları kendi modelinize göre yeniden adlandırın. Buradaki DAX, Coddy'nin Power BI kursunun arkasındaki motorla ayrıştırıldı. O kursta DAX'i tarayıcınızdaki bir Power BI çalışma alanında yazabilir ve kontrol ettirebilirsiniz.
Power BI kopya kâğıdı hakkında sık sorulan sorular
Bu Power BI kopya kâğıdı ücretsiz mi?
Evet. Burada okuyabilir veya yer işaretlerinize ekleyebilirsiniz; kayıt gerekmez.
Ölçü ile hesaplanmış sütun arasındaki fark nedir?
Hesaplanmış sütun, yenileme sırasında her satır için bir kez hesaplanır ve saklanır, böylece ona göre dilimleyebilirsiniz. Ölçü ise bir görselin her hücresi için, o hücrenin filtreleriyle hesaplanır ve hiçbir şey saklamaz. Toplamlar ve oranlar ölçü olarak yazılmalıdır.
CALCULATE ne yapar?
Bir ifadeyi değiştirilmiş filtrelerle hesaplar: filtre ekler, değiştirir veya kaldırır, sonra sonucu hesaplar. Basit toplamların ötesindeki DAX'in çoğu, doğru filtre argümanlarıyla yazılmış bir CALCULATE'tir.
Neden / operatörü yerine DIVIDE kullanılır?
DIVIDE, payda sıfır veya boş olduğunda boş bir değer (ya da seçtiğiniz bir değer) döndürür. / operatörü ise sonsuz veya bir hata değeri döndürür ve bu değer görsellerde görünür.Zaman zekâsı için tarih tablosu gerekir mi?
TOTALYTD ve SAMEPERIODLASTYEAR gibi fonksiyonlar her gün için bir satırı olan, eksik günü olmayan ve tam yılları kapsayan, olgu tablolarınızla ilişkili ve tarih tablosu olarak işaretlenmiş bir tablo gerektirir.Bu DAX, Excel Power Pivot ve Analysis Services'te çalışır mı?
DAX dili ortaktır, bu yüzden neredeyse tamamı orada da çalışır. Bazı yeni fonksiyonlar önce Power BI'a gelir.
DAX alıştırmasını nerede yapabilirim?
Coddy'nin Power BI kursunda: her ders size tarayıcıda bir Power BI çalışma alanı verir ve ölçünüzü dersin verisinde ve onun gizli kopyalarında kontrol eder.