Aracılığıyla paylaş


Power BI'da zamana dayalı hesaplamalar uygulama

Power BI, otomatik tarih tablolarını veya eklediğiniz tarih tablolarını kullanan zamana dayalı hesaplamalar gerçekleştirmek için birden çok araç sunar.

Herhangi bir takvimi karşılamak için en iyi performansı ve en yüksek esnekliği sağladığından takvim tabanlı akıllı zaman gösterimi (önizleme) kullanmanızı öneririz.

Bu tablo, sağlanan üç aracı karşılaştırır:

Tool Kurulum çabası gerekiyor Yönetim kolaylığı Esneklik Notes
Otomatik tarih/saat neredeyse sıfır sert alçak Birden çok gizli tarih tablosunun oluşturulması nedeniyle model boyutunu artırır.
Klasik zaman zekası medium kolay alçak Bir tarih tablosu oluşturulmasını gerektirir, Gregoryen veya kaydırılmış Gregoryen takvimi varsayar, bazı belirli senaryolarda performans sorunlarından muzdariptir
Takvim tabanlı akıllı zaman gösterimi yüksek medium yüksek En yüksek esneklik ve en iyi performansı sağladığı için, ancak daha yüksek kurulum maliyeti gerektirdiği halde, bir tarih tablosu oluşturmanız önerilir.

Uyarı

Alternatif zaman düzenleme tekniklerinin, özellikle belirli kullanım durumları dışında, uzaklıkları hesaplamak için tarih tablolarına ek sütunlar eklemeyi içerenlerin kullanılmamasını öneririz. Bu yaklaşımlar basit DAX formülleri nedeniyle yeni başlayanlar için cazip olsa da, anlamsal modelleri gereksiz yere şişirme eğilimindedir. Bu şişkinlik, veri kümeleri büyüdükçe veri yenilemelerinin yavaşlanmasına ve rapor performansının azalmasına neden olabilir.

Otomatik tarih/saat

Otomatik tarih/saat özelliği, veri modelinizdeki her tarih alanı için otomatik olarak gizli tarih tabloları oluşturur. Bu otomatik davranış hakkında daha fazla bilgi için bkz. Power BI Desktop'ta otomatik tarih/saat uygulama.

Uyarı

Otomatik tarih/saat, basit modeller için kullanışlı bir seçenek olsa da, daha karmaşık senaryolar ve daha büyük modeller için önerilmez. Bu modeller için daha fazla esneklik için ayrılmış bir tablo oluşturmak tercih edilir.

Tarih tablosu ekleme

Çoğu model için bir tarih tablosu (veya bazı senaryolarda daha fazlası) eklemeniz önerilir. Birçok veri analisti kendi tarih tablolarını oluşturmayı tercih eder ve bu sorun değildir.

Böyle bir tablo oluşturmanın birden çok yolu vardır, örneğin:

Sizin için en uygun seçenek çeşitli faktörlere bağlıdır ve bu öğreticinin kapsamının dışındadır.

Zamana dayalı hesaplamalarla çalışma

Otomatik tarih/saat kullanmadığınız varsayıldığında, Power BI'da zaman tabanlı hesaplamalar yapmak için akıllı zaman gösterimi işlevleriyle çalışmanın iki alternatif yolu vardır:

  • Klasik zaman zekası. En kolay seçenek ve Gregoryen veya kaydırılmış Gregoryen takvimler için harika çalışır, ancak farklı yapılandırılmış takvimler veya hafta tabanlı hesaplamalar için sınırlı esnekliğe sahiptir.
  • Takvim tabanlı akıllı zaman gösterimi (önizleme). Daha yeni bir seçenek, ancak ayarlamak için biraz daha fazla çalışma gerekir. Bununla birlikte, size daha iyi performans, Gregoryen olmayan takvimlerle çalışma esnekliği ve hafta tabanlı hesaplamalar yapma olanağı sağlar.

Uyarı

Tablonuzu belirli senaryolar için tarih tablosu olarak ayarlamanız gerekir.

Klasik zaman zekası

Bu seçenek, modelinizde bir tarih tablosu olmasını ve buna göre ayarlamanızı gerektirir. Daha sonra akıllı zaman gösterimi işlevlerini kullanabilir ve tarih tablonuza başvurabilirsiniz. Örneğin, modelinizde tarih tablosu olarak ayarladığınız ve Date sütunu içeren Date adlı bir tarih tablonuz varsa şunları kullanabilirsiniz:

SAMEPERIODLASTYEAR ( 'Date'[Date] )

Bu hızlı ve kolay bir yaklaşım olsa da , takvim tabanlı yaklaşımla karşılaştırıldığında birçok dezavantaj vardır:

  • tarih tablosunu ayarlamanız gerekir
  • yalnızca en az bir ayrılmış tarih tablosuna sahip modellerle çalışır
  • kullanılan tarih sütunlarında ilk ve son tarihler arasında eksik tarihler olmamalıdır. İlk ve son tarihler arasında eksik tarihler varsa bir hata oluşur.
  • Gregoryen veya kaydırılmış Gregoryen takvimler için iyileştirildiğinden daha az esnektir. Örneğin, 1 Temmuz'da başlayan ama yine de Gregoryen takvimi takip eden mali yıllar
  • hafta tabanlı hesaplamalar sağlamaz
  • belirli senaryolarda zamana bağlı hesaplamalar iyi performans göstermez.

Uyarı

Gelişmiş, takvim tabanlı yaklaşımı kullanmanızı öneririz.

Takvim tabanlı akıllı zaman gösterimi (önizleme)

Takvimler, o tablodan hangi sütunların zamanın hangi özniteliklerini temsil ettiğini göstermek için tabloya eklenen meta veri tanımlarıdır. Modelinizdeki herhangi bir tabloda bir veya daha fazla takvim tanımlayabilirsiniz. Takvimi modelinizde tanımladıktan sonra akıllı zaman gösterimi işlevlerinizde buna başvurabilirsiniz. Örneğin, tanımlanmış bir Mali takvim kullanarak Sales'in toplam yılı ile bugüne kadarki toplam değerinin nasıl hesaplandığı aşağıda açıklanmaktadır:

TOTALYTD ( [Sales], 'Fiscal Calendar' )

Takvim tabanlı akıllı zaman gösteriminin avantajları

Takvim tabanlı akıllı zaman gösteriminin başlıca avantajları şunlardır:

Herhangi bir takvimle çalışır

Takvimler, zamanı yıllara, üç aylık dönemlere, aylara ve haftalara ayırma konusunda tam esneklik sağlar. Örneğin, şu desenleri izleyen takvimleri tanımlayabilirsiniz:

  • Gregorian
  • Kaydırılmış Gregoryen
  • Perakende (445, 454, 544 desenleri)
  • 13 ay
  • Ay

Power BI'dan takviminizin nasıl yapılandırıldığına ilişkin yerleşik bir varsayım olmadığından olasılıklar sonsuzdur. Takvim tabanlı akıllı zaman gösterimi, temel alınan tarihler hakkında hiçbir varsayımda bulunmaz. Tüm hesaplamalar, temel alınan verileri tam olarak olduğu gibi kullanır.

Seyrek tarihler

Klasik akıllı zaman gösterimi , sağlanan tarih sütununun tamamlanmasını gerektirir. İlk ve son tarihler arasında eksik tarihler varsa bir hata oluşur. Takvim tabanlı akıllı zaman gösterimi işlevlerinin böyle bir gereksinimi yoktur. Bunun yerine, tarihleri olduğu gibi işlerler. Eksiksiz ve ayrılmış bir takvim tablosuna sahip olmanız önerilir ancak artık bu tabloya sahip olmanız gerekmez. Örneğin, tüm perakende mağazalarınız hafta sonu kapalıysa, satışları olmadığından hafta sonu günlerini atlayabilirsiniz. Hafta sonunuzun Cumartesi ve Pazar olduğunu varsayarsak, artık pazartesiden cumaya atlamak için hafta sonu girişleri olmayan bir tabloyu temel alan bir takvim kullanabilirsiniz PREVIOUSDAY .

Hafta tabanlı hesaplamalar

Takvim tabanlı akıllı zaman gösterimi, bir haftalık ayrıntı düzeyinde çalışan DAX işlevlerini doğrudan sağlar. Örneğin, haftadan bugüne toplamlar doğrudan kullanılarak TOTALWTDhesaplanabilir:

TOTALWTD ( Expr, CalendarName )

Performans iyileştirmeleri

Bazı senaryolar, takvim tabanlı zaman zekası fonksiyonunu klasik karşılığıyla karşılaştırırken performansın iyileştirilmiş olduğunu gösterir. Örneğin, haftalara göre gruplandırılarak TOTALYTD ( ..., CalendarName ) kullanılarak yılbaşı itibarıyla hesaplama yapan bir görselin, genellikle klasik karşılığı olan TOTALYTD ( ..., TableName[DateColumnName] ) kullanıldığında daha hızlı çalışması gerekir. Bunun neden olabileceğine ilişkin içgörüler için Bağlam temizleme bölümüne bakın.

Gelişmiş DAX Akıllı Zaman Gösterimi önizlemesini etkinleştirme

Başlamak için öncelikle Gelişmiş DAX Akıllı Zaman Gösterimi önizleme özelliğini etkinleştirmeniz gerekir.

  1. Power BI Desktop'ta Dosya > Seçenekler ve ayarlar > Seçenekler > Önizleme özellikleri'ne gidin.
  2. Gelişmiş DAX Akıllı Zaman Gösterimi önizlemesini seçin.
  3. Tamam'ı seçin
  4. Power BI Desktop'i yeniden başlatma

Takvimleri yönetme

Takvimi yönetmek için takvimi içeren veya takvimi tanımlamak istediğiniz tabloya sağ tıklayın ve Takvim seçenekleri'ni seçin veya tabloyu seçtikten sonra Tablo araçları şeridinde Takvim seçenekleri'ni seçin:

Tabloda Takvim Seçenekleri'ni açmak için giriş noktalarını gösteren ekran görüntüsü.

Alternatif olarak, takvim tanımlamak için dış araçları veya TMDL görünümünü kullanabilirsiniz. Daha fazla bilgi için bkz. TMDL betiği.

Takvimler, model gezgininde tanımlandığı tablonun altında da gösterilir:

Anlamsal modelin model gezginini gösteren ekran görüntüsü. Tarih tablosu düğümü genişletilir ve takvimler vurgulanır.

Takvim seçenekleri ekranı

Takvim seçenekleri ekranında, seçili tabloda tanımlanan takvimler gösterilir. Burada şunları yapabilirsiniz:

  • Yeni takvim'i seçerek yeni takvim oluşturma
  • Düzenle'yi seçerek mevcut takvimi düzenleme
  • Sil'i seçerek var olan bir takvimi silme
  • Tabloyu tarih tablosu olarak ayarlamak için Tarih tablosu olarak işaretle'yi seçin

Tablodaki Takvim Seçeneklerini gösteren ekran görüntüsü.

Sütun kategorilerini atama

Takvim tanımlama, takvime bir ad vermeyi ve kategorilere sütun atamayı içerir. Her kategori bir zaman birimini temsil eder ve belirli sütun kategorileri kullanılabilir. Takviminizi kaydetmek için bir kategoriye en az bir birincil sütun atamanız gerekir. Her kategori bir birincil sütuna sahip olmalı ve sıfır veya daha fazla ilişkili sütuna sahip olabilir. Bir kategoriyle ilişkilendirilmiş sütunlar bağlam içinde olduğunda Power BI hangi zaman birimini sunduklarını bilir. Ayrıca, Power BI gibi TOTALMTD bazı işlevler için istenen hesaplamayı gerçekleştirmek için başvuruda bulunan takvimdeki ilgili kategoriye eşlenen birincil sütunu kullanır. Bir kategoriye sütun atamak için Kategori ekle menüsünden kategoriyi seçin ve ardından birincil ve isteğe bağlı ilişkili sütunları seçin.

Takvim oluşturma ve düzenleme ekranını gösteren ekran görüntüsü.

Kullanılabilir sütun kategorileri

Aşağıdaki tabloda kullanılabilir kategoriler gösterilmektedir. Tablo, Gregoryen takvimler için örnek değerler ve kardinaliteler de verir.

Kategoriler iki gruba ayrılır:

  • Tamamlandı. Tam kategorilere atanan sütunlardaki veriler, zaman aralığını benzersiz olarak tanımlamak için yeterlidir.
  • Kısmi. Kısmi kategorilere atanan sütunlardaki veriler, zaman aralığını benzersiz olarak tanımlamak için yeterli değildir.
Kategori Description Türü Gregoryen takvimde örnek kardinalite Gregoryen takvimdeki örnek sütun değerleri
Yıl Yıl Complete Y = yıl sayısı 2024, 2025
Üç aylık dönem Yıl da dahil olmak üzere üç aylık dönem Complete 4*Y 1. Çeyrek 2024, 2. Çeyrek 2025
Yılın Çeyreği Yılın üç aylık dönemi Kısmi 4 Birinci Çeyrek, YÇ1, Q1, İkinci Çeyrek
Ay Yılı içeren ay Complete 12*Y ≤ value ≤ 13*Y Ocak 2023, 2024 Şubat
Yılın Ayları Yılın ayı Kısmi 12 Ocak, Yıl Ay 11, YM11, M11, 11
Çeyrek Ayı Üç aylık dönem ayı Kısmi 3 1, QM2
Week Yılın dahil olduğu hafta Complete 52 ≤ value ≤ 53 Hafta 50 2023, W50-2023, 2023-W50
Yılın Haftası Yılın haftası Kısmi 52 Hafta 50, W50, 50
Çeyrek Yıl Haftası Üç aylık dönem haftası Kısmi 13 Çeyrek Hafta 10, QW10, 10
Ayın Haftası Ayın haftası Kısmi 5 Ayın 2. Haftası, MW2, 2
Date Tarih Complete 365*Y ≤ value ≤ 366*Y 12/31/2025
Yılın Günü Yılın günü Kısmi 365 ≤ value ≤366 365, D1
Çeyrek Günü Üç aylık dönem günü Kısmi 92 Çeyrek Gün 10, ÇD2, 50
Ayın Günü Ayın günü Kısmi 31 Ay Günü 30, MD10, 30
Haftanın Günü Haftanın günü Kısmi 7 Hafta içi Gün 5, WD5, 5

Bu kategorilere ek olarak, tablonuzdaki herhangi bir sayıda sütunu Zaman ile ilgili kategoriyle ilişkilendirebilirsiniz. Bu, şu anda takvim seçeneklerinde mümkün değildir, ancak bunun yerine yalnızca dış araçlar veya TMDL kullanılarak yapılabilir.

Uyarı

ve DATEADD dışındaki tüm işlevlerde hesaplamalar yapılırken, SAMEPERIODLASTYEAR kategoriye atanan sütunlardaki bağlam kaldırılır. Takvimin tanımlandığı ancak bu takvimde etiketlenmemiş olan tablonun parçası olan sütunlardaki bağlamlar korunur.

Uyarı

Yalnızca takviminizdeki akıllı zaman gösterimi hesaplamalarında kullanmak istediğiniz sütunları ilişkilendirmenizi öneririz.

Birincil ve ilişkili sütunlar karşılaştırması

Birincil sütun her kategori için gereklidir. Başvuruda bulunan takvimde aynı kategoriye atanan sütun veya ilişkili sütunlar bağlam içinde olduğunda veya hesaplama yapmak için kategori gerektiğinde Power BI birincil sütunu kullanır. Ayrıca, birincil sütunlar sıralama için kullanılır. Birincil sütundaki değerler beklendiği gibi sıralanabilir olmasını sağlamazsa , birincil sütunu başka bir sütuna göre sıralanacak şekilde yapılandırabilir veya başka bir sütun kullanıp özgün sütunu ilişkili sütun yapabilirsiniz. Örneğin, ay numarası ve yılı mm-yyyy biçiminde içeren metin verilerine sahip bir sütun (, 01-2024, 02-2024 vb.) birden fazla yıl boyunca doğru sıralanmaz. Ancak, yyyy-mm formatını kullanan bir sütun doğru bir şekilde sıralanacaktır.

İki tabloyu gösteren ekran görüntüsü. Her tablonun bir sütunu vardır. İlk tablo, aa-yyyy biçiminde metin ay numarası ve yıl bilgilerini içeren bir sütun içerir ve ikincisi de aynı bilgileri yy-mm biçiminde içerir. aa-yyyy biçim verilerini içeren sütun doğru sıralanmamıştır.

Kategoriye sıfır veya daha fazla ilişkili sütun atanabilir.

Validation

Gereksinimlerinizi karşıladığından emin olmak için takviminizi doğrulamak ve test etmek önemlidir. Power BI'da sunulan doğrulamalar hem gerçek zamanlı doğrulamaları hem de çevrimdışı doğrulamaları içerir.

Uyarı

Çevrimdışı doğrulama hatalarına rağmen takviminizi kaydedebilirsiniz, ancak önce bunları çözümlemeniz önerilir. Kaydedebilmek için gerçek zamanlı doğrulama hatalarının düzeltilmesi gerekir.

Gerçek zamanlı doğrulamalar

Takvimlerde gerçekleştirilen gerçek zamanlı doğrulamalar şunlardır:

  • Benzersiz takvim adı. Her takvimin anlam modelinde benzersiz bir adı olması gerekir.
  • Takvim başına tek ilişkilendirme. Bir sütun aynı takvimde birden fazla kategoriye ait olamaz.
  • Dönem Benzersizliği. Atanan kategoriler dönemi benzersiz olarak tanımlamalıdır.
  • Tutarlı kategorilere ayırma. Bu, sütunların takvimler arasında aynı kategoriyle ilişkilendirilmesini sağlar.

Dönem Benzersizliği

Atanan kategorilerin dönemini benzersiz olarak tanımlamak için her zaman bir yol olmalıdır.

Kısmi kategori eklediğinizde Power BI, tam veya kısmi kategorilerin eşleşen bir bileşiminin de aynı takvimde etiketlendiğini doğrular. Böyle bir durum söz konusu değilse bir uyarı gösterilir.

Gerçek zamanlı doğrulama hatasıyla takvim oluşturma ve düzenleme ekranını gösteren ekran görüntüsü.

Örneğin, hafta tabanlı hesaplamalar için bir takvim ayarlarken, aşağıdaki kategori kümelerinden birine en az bir birincil sütun atadığınızdan emin olun:

  • Week
  • Yılın Haftası, Yıl
  • Çeyrek Haftası, Çeyrek
  • Çeyrek Haftası, Yılın Çeyreği, Yıl
  • Ayın Haftası, Ay
  • Ayın Haftası, Yılın Ayı, Yıl
  • Ayın Haftası, Çeyreğin Ayı, Çeyrek
  • Ayın Haftası, Üç Aylık Ay, Yılın Çeyreği, Yıl

Tutarlı kategorilere ayırma

Sütunlar, takvimler arasında aynı kategoriyi içermelidir. Aynı sütunu Year, Quarter of Year veya time-related gibi farklı kategorilere ayrı takvimlerde atayamazsınız.

Çevrimdışı doğrulamalar

Çevrimdışı doğrulamalar, tablo verilerine eriştıkça zaman alabilir. Bu nedenle, gerçek zamanlı doğrulamaların aksine otomatik olarak çalışmazlar. Doğrulamaları çalıştırmak için Verileri doğrula'yı seçin:

Takvim oluşturma ve düzenleme ekranını gösteren ekran görüntüsü. Verileri doğrula düğmesi vurgulanır.

Çevrimdışı doğrulamalar aşağıdaki kuralları denetler ve takviminizde herhangi bir kural geçersiz kılınırsa bir uyarı döndürür:

  • bir kategoriyle ilişkilendirilmiş bir sütunda boş değerler yoktur.
  • üst düzey ve alt düzey kategorileri bire çok kardinalite oranına sahiptir. Örneğin, Yıl kategorisiyle ilişkilendirilmiş sütunların Ay kategorisiyle ilişkilendirilmiş sütunlarla birçok kardinaliteye sahip olması gerekir.
  • aynı düzeydeki kategorilerle ilişkilendirilmiş sütunların kardinalite oranı bire birdir. Örneğin, Ay kategorisiyle ilişkilendirilmiş sütunlar, Yılın Ayı ve Yıl kategorileriyle ilişkili sütunların birleşimleriyle bire bir kardinaliteye sahip olmalıdır.
  • aynı kategoriye atanan birincil ve ilişkili sütunların kardinalite oranı bire birdir. Örneğin, Ay kategorisine atandığında, birincil bir month sütunu ve ilişkili bir EnglishMonthName sütunu bire bir kardinaliteye sahip olmalıdır.

Takvimlerle çalışma

Bir takvim tanımlandıktan sonra akıllı zaman gösterimi işlevlerinde bu takvime başvurabilirsiniz. Örneğin, aşağıdaki ölçü ISO-454 takvimine göre Toplam Miktar'ın toplam aydan bugüne değerini hesaplar:

Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )

Takvim tanımlanmamışsa ve hata döndürülürse:

Var olmayan bir takvime TOTALMTD takvim parametresiyle işlevini kullanan ölçüyü gösteren ekran görüntüsü.

Ancak takvim tanımlansa bile ölçü yine de hata döndürebilir. Kullanılan işlev bir kategorinin takvimde bulunmasını bekliyorsa ve takvimde bu kategori yoksa bu durum ortaya çıkar. Örneğin, TOTALWTD takvimde belirli kategorilerin bulunmasını bekler. Aksi takdirde bir hata döndürülür:

Gerekli kategorileri tanımlamayan geçerli bir takvim referansı ile TOTALWTD işlevini kullanan bir ölçüyü gösteren ekran görüntüsü.

Akıllı zaman gösterimi işlevleri ve gerekli kategoriler

Akıllı zaman gösterimi işlevlerinin çoğu, Power BI'ın benzersiz olarak belirli bir zaman birimini tanımlayabilmesi için işlev çağrısına başvuruda bulunan takvime yeterli kategori eklenmesini gerektirir. Başka bir deyişle, Power BI'ın hesaplamanın yapıldığı düzeyden tek bir yıla kadar "adım adım" izleyebilmesi gerekir. Örneğin, üç aylık dönemlerde hesaplama yaparken, örneğin TOTALQTDÜç Aylık Dönem kategorisini atayın veya Dönem benzersizliği doğrulaması tarafından dikte edilen şekilde takvimde hem Yılın Çeyreğini hem de Yılı atayın.

Uyarı

Bazı işlevler için adları hesaplamanın hangi düzeyde çalıştığını (örneğin, ) belirtirken, TOTALYTDdiğerleri için parametrelere ve bağlama (örneğin, DATEADD) bağlıdır.

Bağlam temizleme

Akıllı zaman gösterimi işlevleri, belirli bir noktada başlayıp farklı bir zaman noktası elde etmek için üzerinde işlem gerçekleştirerek çalışır. Doğal olarak, başlangıçtaki nokta bu sonuçla çakışabilir, bu nedenle varsayılan olarak kısmi veya boş sonuçlar veren bir filtre bağlamı kesişimine neden olur. Örneğin aşağıdaki senaryoları düşünün.

Takvim tanımı

Şu şekilde tanımlanan üç kategoriyi etiketleyen basit bir Gregoryen takvimimiz var:

Kategori Birincil Sütun
Yıl Yıl
Yılın Ayları Yılın Ayı
Üç aylık dönem Üç aylık dönem

Ölçü tanımları

İki temel ölçü tanımlanır: biri toplam satışları hesaplamak için, diğeri de önceki üç aylık dönemdeki toplam satışları hesaplamak için:

[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )

Örnek: Bağlam temizleme nasıl çalışır?

Tablo görselimiz Year ve MonthOfYear sütunlarını kullanarak bir aylık ayrıntı düzeyine göz atar:

Yıl Yılın Ayı Toplam Satışlar SonÇeyrekSatışları
2011 1 10
2011 2 20
2011 3 30
2011 4 40 10
2011 5 50 20

Bu tablodaki kalın yazılmış satır, 2011 yılı Nisan ayına ait ay bazında göz atmayı temsil eder. Bu nedenle, bu satırdaki tüm ölçüler [Year] == 2011 ve [MonthOfYear] == 4 filtre bağlamı altında değerlendirilir.
Beklendiği gibi, buradaki TotalSales , Nisan 2011'in toplam satışları olarak hesaplanır.

LastQuarterSales benzer şekilde TotalSales'i hesaplar, ancak takvim tabanlı işlev tarafından DATEADD sağlanan ek bir filtre verilir. Bu satır için, DATEADD Nisan 2011'in ilk başlangıç noktası olacaktır ve tam olarak çeyrek önce olan zaman noktasını verir: Ocak 2011. Sonuç olarak, bu TotalSales değerinin aşağıdaki iki filtre bağlamı altında hesaplanması beklenebilir:

  • Mevcut satırın gezinti sütunları tarafından sağlanan: { [Year] == 2011, [MonthOfYear] == 4 } (Eşdeğeri Nisan 2011)
  • Filtre tarafından DATEADD sağlanır: { [Year] == 2011, [MonthOfYear] == 1 } (Eşdeğeri, Ocak 2011)

Bu iki filtre bağlamı çakışmaya neden olabilir. Geçerli aydaki toplam satışları hem Ocak 2011 hem de Nisan 2011 olarak değerlendiremiyoruz. Böyle bir kesişim sonuç vermez. Ancak, bu gerçekleşmez. Bunun yerine, takvim tanımına bağlı olarak, takvim tabanlı akıllı zaman gösterimi işlevleri, işlevin gerçekleştirdiği zaman işleminin ardından hangi kategorilerin sütunlarının çakışmalara neden olabileceğini belirler. Bu durumda, DATEADDÇeyrek düzeyinde bir kaydırma yapar. işlevi, Çeyrek kategorisinin sütunlarındaki bir değişikliğin sonucu olarak hem Year hem de Month of Year kategorilerinin değişebileceğini tanımlar. Bu nedenle işlev, bu kategorilere etiketlenmiş tüm (hem birincil hem de ilişkili) sütunlarda filtre bağlamını temizler.

Başka bir deyişle Year ve Month of Year kategorilerininQuarter kategorisinin bağımlılıkları olduğunu söyleyebiliriz. Buna karşılık, Çeyrek kategorisinin Year ve Month of Year kategorilerine bağımlı olduğunu söyleyebiliriz.

Bağlam temizleme nasıl çalışır?

Tüm takvim kategorilerinin kafes yapısı diyagramı.

Bu diyagram, farklı zaman kategorileri arasındaki bağımlılıkları daha iyi görselleştirmek için sağlanır. Bu kafesteki her kategori, bu kategoriye etiketlenmiş tüm sütunları (birincil ve ilişkili) temsil eder. Kategoriler, bağımlılıklarına oklarla bağlanır. Örneğin, "Ay" "Yıl", "Yılın Çeyreği", "Çeyreğin Ayı", "Çeyrek" ve "Yılın Ayı" değerlerine bağlıdır.

Bağlam, bir sütun veya takvimde etiketlenmiş ilişkili sıralama sütununa ayarlandığında, önceden belirlenen filtre bağlamı temizlenir.

  1. X'in tüm kategori bağımlılıkları . Bu, X'in üzerindeki tüm kategoriler olarak düşünülebilir.
  2. Hem X'in hem de bağımlılıklarının tüm kategori bağımlıları (yani yukarıdaki 1. kategori). Bu, X'in altındaki tüm kategoriler ve yukarıdaki 1'deki tüm kategoriler olarak düşünülebilir.

Uyarı

Bağlam temizleme, bir takvimde etiketlenmiş sütunlarda veya bağlamın akıllı zaman gösterimi işlevleri kullanılarak ayarlanmış olup olmadığına bakılmaksızın ilişkili sıralamaya göre sütunlarda gerçekleşir.

DATEADD ve SAMEPERIODLASTYEAR dışındaki zaman zekâsı işlevlerinin çoğu, zamanla ilgili tüm sütunlarda ve ilişkili sıralama ölçütü sütunlarında bağlamı temizler.

Takvimler arası davranış

Aynı tabloda tanımlanmış birden çok takvim varsa, bu işlemler tabloda tanımlanan her takvim için tamamlanır. Bu, zamanla ilgili sütunların bağlamını temizlemeyle ilgili açıklamayı içerir. Başka bir deyişle, bir tablonun üç takvim tanımladığı varsayılır: Takvim1, Takvim2 ve Takvim3. Takvim1'de filtre bağlamı "X" kategorisine ayarlandıysa, yukarıdaki işlemler üç takvimde de gerçekleştirilir.

Örnek: Filtre "Çeyrek" olarak ayarlandı

Filtre bağlamı "Çeyrek" kategorisinde ayarlanmışsa, işlem aşağıdaki gibi olacaktır.

  1. İlk olarak, "Çeyrek" kategorisinin tüm bağımlılıkları dikkate alınır.

    Çeyrek: Bağımlılıklar kategorisinden başlayarak filtre bağlamı temizleme davranışı örneği.

  2. Bundan sonra, "Çeyrek" ve bağımlılıklarının tüm bağımlıları dikkate alınır.

    Çeyrek: Bağımlılar kategorisinden başlayarak filtre bağlamı temizleme davranışı örneği.

  3. Son olarak, sonuç aşağıdaki gibi olacaktır. Tüm kırmızı renkli kategorilerin önceki filtre bağlamları kaldırılır ve yeni bağlam Çeyrek olarak ayarlanır.

    Üç Aylık Dönem: Sonuçlar kategorisinden başlayarak filtre bağlamı temizleme davranışı örneği

Takvimler için TMDL betiği

createOrReplace

	table Date
		lineageTag: xyz

		column Date
			dataType: dateTime
			formatString: Long Date
			lineageTag: abc
			summarizeBy: none
			sourceColumn: Date

        column Year
			dataType: string
			lineageTag: abc
			summarizeBy: none
			sourceColumn: Year

			annotation SummarizationSetBy = Automatic
        
        column Month
			dataType: string
			lineageTag: def
			summarizeBy: none
			sourceColumn: Month

			annotation SummarizationSetBy = Automatic

        column MonthName
			dataType: string
			lineageTag: ghi
			summarizeBy: none
			sourceColumn: MonthName
			sortByColumn: SortByMonth

			changedProperty = SortByColumn

			annotation SummarizationSetBy = Automatic

        column DutchMonthName
			dataType: string
			lineageTag: jkl
			summarizeBy: none
			sourceColumn: DutchMonthName

			annotation SummarizationSetBy = Automatic

        column 'Holiday Name'
			dataType: string
			lineageTag: mno
			summarizeBy: none
			sourceColumn: Holiday Name

			annotation SummarizationSetBy = Automatic
        
        column IsWorkingDay
			dataType: string
			lineageTag: pqr
			summarizeBy: none
			sourceColumn: IsWorkingDay

			annotation SummarizationSetBy = Automatic
		...	
		
		calendar 'Demo Calendar'
			lineageTag: def

			calendarColumnGroup = year
				primaryColumn: Year

			calendarColumnGroup = month
				primaryColumn: Month
				associatedColumn: DutchMonthName
				associatedColumn: MonthName
			
			calendarColumnGroup
                column: 'Holiday Name'
                column: isWorkingDay

Uyarı

TMDL'de için calendarColumnGroup herhangi bir kategori belirtmezseniz sütunların zaman ile ilgili olarak etiketlendiğini fark edin. Bu örnekte Holiday Name ve isWorkingDay , Tanıtım Takvimi'ndeki zaman ile ilgili sütunlardır.

Hepsini bir araya getirin: Zaman kaydırma örnekleri

Bazı zaman istihbarat işlevleri, tüm sütunları dikkate alarak bağlamı yalnızca yatay olarak kaydırırken, diğerleri hiyerarşik kaydırmalar gerçekleştirir; sütunların takvimde etikete sahip olup olmamasına bağlı olarak bağlamı tutar veya temizler. Akıllı zaman gösterimi işlevleri, hiyerarşik geçişlere izin verip vermediklerine bağlı olarak iki gruba ayrılabilir:

  • Düzeltildi. Bu gruptaki işlevler DATEADD ve SAMEPERIODLASTYEAR şeklindedir. Bu işlevler yalnızca yanal zaman kaydırmalarına izin verir ve farklı bir ayrıntı düzeyinden değer döndürmez.
  • Esnek. Bu grup diğer tüm zaman zekası işlevlerini içerir. Bu işlevler hiyerarşik zaman kaydırmalarına izin verir ve takvim kurulumuna bağlı olarak farklı bir ayrıntı düzeyinden sonuç döndürebilir.

Bu davranışları göstermek için iki tablo, iki takvim ve beş ölçüden oluşan basit bir veri modelini kullanarak bir örneği inceleyelim.

Tablolar ve ilişkiler

Bu örnekte aşağıdaki basit veri modeline sahibiz:

Tablo Kolonlar
Date Yıl, ÇalışmaGünü, Tarih
Satışlar OrderKey, Miktar, OrderDate

Tarih tablosundaki bazı örnek satırlar şunlardır: Örnek Tarih tablosunun ilk 14 satırını gösteren ekran görüntüsü. Tabloda Date, Year ve IsWorkingDay tanımlanmaktadır. Date sütunu bir tarih, Year sütunu yıl değerini içerir ve IsWorkingDay sütunu, tarihin çalışma günü olup olmadığını gösteren boole (True/False) sütunudur.

Sales tablosundaki bazı örnek satırlar şunlardır: Örnek Sales tablosunun ilk dokuz satırını gösteren ekran görüntüsü. Tablo OrderKey, OrderDate ve Order Quantity değerlerini tanımlar. OrderKey sütunu her satış siparişi için benzersiz bir sayı içerir; SiparişTarihi, Satış ile Tarih arasındaki ilişkiyi gösteren bir tarihtir ve Sipariş Miktarı her siparişin ürün sayısını temsil eden sayısal bir sütundur.

Satış ve Tarih tabloları OrderDate ve Date ile ilişkilidir.

Örnek modelin model görünümünü gösteren ekran görüntüsü. Sales ve Date tablolarının yanı sıra SiparişTarihi ile Tarih alanları arasında bire çok ilişkiyi gösterir.

Calendars

Date tablosunda takvimleri şu eşlemelerle tanımladık:

Takvim Adı Kategori Birincil Sütun
Miladi Yıl Yıl
Date Date
GregorianWithWorkingDay Yıl Yıl
Date Date
Zaman ile ilgili IsWorkingDay

Bu iki takvimin eşdeğer TMDL tanımı şunlardır:

ref table Date
    calendar 'Gregorian'
        lineageTag: xyz
    
        calendarColumnGroup = year
    	    primaryColumn: Year
    
    	calendarColumnGroup = date
    		primaryColumn: Date
    
    calendar 'GregorianWithWorkingDay'
    	lineageTag: dc4fc383-1661-4112-8afb-930d324fbb6e
    
    	calendarColumnGroup = year
    		primaryColumn: Year
    
    	calendarColumnGroup = date
    		primaryColumn: Date
    
    	calendarColumnGroup
    		column: IsWorkingDay   

Ölçümler

Satış tablosunda aşağıdaki ölçüleri tanımlarız:

Total Quantity = SUM ( 'Sales'[Order Quantity] )

OneYearAgoQuantity =
CALCULATE ( [Total Quantity], DATEADD ( 'Gregorian', -1, YEAR ) )

OneYearAgoQuantityTimeRelated =
CALCULATE ( [Total Quantity], DATEADD ( 'GregorianWithWorkingDay', -1, YEAR ) )

FullLastYearQuantity =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'Gregorian', -1, YEAR ) )

FullLastYearQuantityTimeRelated =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR )
)

Yan yana kaydırma örneği

Şimdi 2024 ve 2025 için Year, MonthOfYear, IsWorkingDay, Total Quantity, OneYearAgoQuantity ve OneYearAgoQuantityTimeRelated değerlerini gösteren bir görsel oluşturalım:

Year, IsWorkingDay, Total Quantity, OneYearAgoQuantity ve OneYearAgoQuantityTimeRelated değerlerini gösteren tablo görselini gösteren ekran görüntüsü. 2025 için OneYearAgoQuantity ve OneYearAgoQuantityTimeRelated değerleri, aynı IsWorkingDay değerleri için 2024 değerleriyle eşleşir.

2025 için OneYearAgoQuantity ve OneYearAgoQuantityTimeRelated değerlerinin tümü, aynı IsWorkingDay değeri için tam olarak bir yıl önceki (2024) Total Quantity değeriyle eşleşir.

Bu, herhangi bir takvim ile ilgili etiketlenmiş olup olmamasına bakılmaksızın, kullanılan takvimi içeren Date tablosundaki herhangi bir sütunda bağlamı koruduğunu gösterir DATEADD. Ölçü tanımlarımızda bir DATEADD geri kaydırma talimatını aldığımızdan, bağlamı kaydırılan tek sütun Year kategorisiyle ilişkili sütundu. IsWorkingDay sütununun takvimde zaman ile ilgili olarak etiketlenip etiketlenmediği sonucu değiştirmedi. Bu davranışı gösteren diğer tek işlevdir SAMEPERIODLASTYEAR.

Hiyerarşik kaydırma örneği

Şimdi bir sütunun zaman ile ilgili olarak etiketlenip etiketlenmediğinin sonucu gerçekten değiştirip değiştirmediği bir örneğe bakalım.

Bunun için önceki örnektekiyle aynı görseli yeniden oluşturacağız, ancak bu kez FullLastYearQuantity ve FullLastYearQuantityTimeRelated ölçülerini kullanacağız: Year, IsWorkingDay, Total Quantity, FullLastYearQuantity ve FullLastYearQuantityTimeRelated değerlerini gösteren tablo görselini gösteren ekran görüntüsü. FullLastYearQuantity 2025 değerleri aynı IsWorkingDay değerleri için 2024 değerleriyle eşleşir, ancak FullLastYearQuantityTimeRelated değerleri, IsWorkingDay değerlerine bakılmaksızın toplam miktar değerine eşittir.

Takvimde etiketlenmemiş sütunların bağlamını koruduğunu, ancak zamanla ilgili olarak etiketlenenlerin bağlamını sildiğini PARALLELPERIOD gösterir. FullLastYearQuantity , IsWorkingDay'in takvimde etiketlenmemiş olduğu Gregoryen takvimi kullanırken , FullLastYearQuantityTimeRelated ise IsWorkingDay'in zaman ile ilgili olarak etiketlendiği GregoryenWithWorkingDay takvimini kullandı. DATEADD ve SAMEPERIODLASTYEAR dışında tüm zaman bilgi işlevleri bu şekilde davranır.

Bonus: Bu işlevleri zaman ile ilgili sütunlar için bağlamı korumaya zorlamak istiyorsanız, kullanabilirsiniz VALUES:

FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )

Bu durumda, FullLastYearQuantityTimeRelatedOverride ile aynı sonuçları FullLastYearQuantitydöndürür.

Sonuç

Yukarıdaki ayrıntılı örnekte, sütunların takvimde zaman ile ilgili olarak etiketlenip etiket edilmediğine bağlı olarak farklı akıllı zaman gösterimi işlevlerinin farklı davrandığı gösterilmektedir. DATEADD ve SAMEPERIODLASTYEAR yalnızca yatay zaman kaydırmaları yapar. Diğer tüm akıllı zaman gösterimi işlevleri hiyerarşik zaman kaydırmalarına olanak sağlar.

Takvimlerle DATEADD kullanın

DATEADD işlevinin, seçim interval parametresiyle belirtilen kaydırma seviyesinden daha ayrıntılı bir seviyede olduğunda, kaydırmaların nasıl gerçekleştirileceği üzerinde ince ayar yapmaya olanak tanıyan spesifik parametreleri vardır DATEADD. Örneğin, verileri tarih düzeyinde gösteriyorsanız, ancak parametreyi intervalDATEADDMONTH olarak ayarladıysanız bu durum ortaya çıkar. Örneğin, Gregoryen takvimde, 3 Mart'tan 10 Mart'a kadar uzanan bir dönemi bir ay kaydırmak, 3 Nisan'dan 10 Nisan'a kadar ile sonuçlanır. Ancak Gregoryen takvimlerdeki aylar uzunluğa göre değiştiğinden, bu durum geçiş sırasında belirsizliklere yol açabilir. Gregoryen takvimi temel alan örnek senaryolar aşağıda verilmiştir:

Daha kısa bir süreden daha uzun bir süreye geçiş

Örneğin, Şubat ayındaki bir seçimle bir ay ileri kaydırarak hedef ay Mart olur. extension parametresini, değişimin/kaymanın nasıl gerçekleştirildiğini etkilemek için kullanabilirsiniz.

Uzantı parametresi değeri Description Result
precise Bu, özgün tarih aralığını kesinlikle korur. 25-28 Şubat 25-28 Mart'a kaydırılır.
extended Pencerenin ay sonuna doğru genişletilmesine izin verir. 25-28 Şubat 25-31 Mart'a kaydırılır.

Daha uzun bir süreden daha kısa bir süreye geçiş

Örneğin, Mart ayında bir seçimle bir ay geriye doğru geçiş yaparak hedef ay Şubat olur.

truncation parametresini, değişimin/kaymanın nasıl gerçekleştirildiğini etkilemek için kullanabilirsiniz.

Kesme parametresi değeri Description Result
anchored Sonucu daha küçük ayın son geçerli tarihine sabitler. 31 Mart 28 Şubat'a (veya artık yılda 29' a) kaydırılır.
blank Kaydırılmış bir tarih olmadığında boş döndürün. 31 Mart'ın bir ay geriye kaydırılması boş değer döndürür (31 Şubat mevcut olmadığından).

Takvim tabanlı akıllı zaman gösterimiyle çalışma konusunda dikkat edilmesi gerekenler

  • Takvimi tanımlayan ve Satır düzeyi güvenlik (RLS) kurallarına tabi olan olgu tablosunda akıllı zaman gösterimi hesaplaması yapmak beklenmeyen sonuçlara yol açabilir.
  • Bu önizleme özelliğinin performansı, son ürünün temsili değildir.
  • Henüz Power BI Hizmetinde takvim yazamazsınız.
  • Otomatik tarih/saat tablolarını özel takvimlerle kullanmamalısınız.
  • Takvimleri canlı bağlı veya bileşik modellerle kullanamazsınız.
  • Yalnızca takviminizdeki akıllı zaman gösterimi hesaplamalarında kullanmak istediğiniz sütunları ilişkilendirmenizi öneririz.
  • Takvimler hem gerçek zamanlı hem de çevrimdışı doğrulamalara tabidir. Çevrimdışı doğrulama hatalarına rağmen takviminizi kaydedebilirsiniz, ancak önce bunları çözümlemeniz önerilir. Kaydedebilmek için gerçek zamanlı doğrulama hatalarının düzeltilmesi gerekir.
  • Her takvimin veri modelinde benzersiz bir adı olmalıdır
  • Tek bir tablo birden çok takvim içerebilir
  • Takvimi içeren tabloda 200'den az sütun olmalıdır. Tabloda 20.000'den fazla satır varsa doğrulamalar kullanılamaz, ancak yine de takvim ekleyebilirsiniz.
  • Bir takvimin bir kategoriye en az bir birincil sütun ataması gerekir
  • Takvim yalnızca kendi tablosundaki sütunları kategorilere atayabilir
  • Her kategorinin birincil sütunu olmalıdır ve sıfır veya daha fazla ilişkili sütun atanabilir
  • , IntelliSense'te tanınmayan uzantı ve uzantı davranışını denetlemek için yeni parametrelere sahiptir.DATEADD
  • Belirli bir sütun yalnızca bir kategoriye eşlenebilir
  • Takvimleri kullanan akıllı zaman gösterimi işlevlerini iç içe yerleştiremezsiniz. Örneğin, aşağıdaki DAX deyimi desteklenmez:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )

Bunun yerine şunları yapabilirsiniz:

ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )

Yerleşik araçları kullanarak tarih tablosu oluşturma

Aşağıdaki örnekler Power Query M veya DAX kullanarak 1 Ocak 2010 ile 31 Aralık 2030 arasında bir tarih tablosu oluşturur. Şu sütunları içerir: Yıl, Ay Numarası, Ay Adı, Ay Yılı, Çeyrek, Yıl Çeyreği, Gün ve Tarih.

Power Query M (Microsoft veri sorgulama dili)

let
    StartDate = #date(2010, 1, 1),
    EndDate = #date(2030, 12, 31),
    NumberOfDays = Duration.Days(EndDate - StartDate) + 1,
    DateList = List.Dates(StartDate, NumberOfDays, #duration(1,0,0,0)),
    DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
    AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
    AddMonthNumber = Table.AddColumn(AddYear, "Month Number", each Date.Month([Date]), Int64.Type),
    AddMonthName = Table.AddColumn(AddMonthNumber, "Month Name", each Date.ToText([Date], "MMMM"), type text),
    AddMonthYear = Table.AddColumn(AddMonthName, "Month Year", each Date.ToText([Date], "MMM yyyy"), type text),
    AddQuarter = Table.AddColumn(AddMonthYear, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text),
    AddYearQuarter = Table.AddColumn(AddQuarter, "Year Quarter", each Text.From(Date.Year([Date])) & " Q" & Text.From(Date.QuarterOfYear([Date])), type text),
    AddDay = Table.AddColumn(AddYearQuarter, "Day", each Date.Day([Date]), Int64.Type)
in
    AddDay

DAX

DateTable =
ADDCOLUMNS (
    CALENDAR ( DATE ( 2010, 1, 1 ), DATE ( 2030, 12, 31 ) ),
    "Year", YEAR ( [Date] ),
    "Month Number", MONTH ( [Date] ),
    "Month Name", FORMAT ( [Date], "MMMM" ),
    "Month Year", FORMAT ( [Date], "MMM YYYY" ),
    "Quarter", "Q" & FORMAT ( [Date], "Q" ),
    "Year Quarter",
        FORMAT ( [Date], "YYYY" ) & " Q"
            & FORMAT ( [Date], "Q" ),
    "Day", DAY ( [Date] ),
    "Date", [Date]
)

Daha fazla bilgi ve daha fazla seçenek için bkz . Tarih tabloları.

Bu makaleyle ilgili daha fazla bilgi için aşağıdaki kaynaklara bakın: