Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Power Query M. List.Dates işlevini kullanabilirsiniz. Bu belgenin ilerleyen bölümlerinde bir örnek verilmiştir.
- DAX. Temel bir hesaplanan tarih tablosu oluşturmak için CALENDAR veya CALENDARAUTO işlevlerini kullanabilirsiniz. Tarih tablosu oluşturmak için daha gelişmiş bir DAX deyimi de kullanabilirsiniz. Bu belgenin ilerleyen bölümlerinde bir örnek verilmiştir.
- Dış araçlar.
- Kaynak sistem, dosya veya başka bir Power BI anlam modeli gibi bir kaynaktan yükleme.
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.
- Power BI Desktop'ta Dosya > Seçenekler ve ayarlar > Seçenekler > Önizleme özellikleri'ne gidin.
- Gelişmiş DAX Akıllı Zaman Gösterimi önizlemesini seçin.
- Tamam'ı seçin
- 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:
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:
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
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.
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.
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.
Ö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:
Ç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:
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:
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?
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.
- X'in tüm kategori bağımlılıkları . Bu, X'in üzerindeki tüm kategoriler olarak düşünülebilir.
- 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.
Zaman ile ilgili sütunlar
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.
İlk olarak, "Çeyrek" kategorisinin tüm bağımlılıkları dikkate alınır.
Bundan sonra, "Çeyrek" ve bağımlılıklarının tüm bağımlıları dikkate alınır.
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.
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:
Sales tablosundaki bazı örnek satırlar şunlardır:
Satış ve Tarih tabloları OrderDate ve Date ile ilişkilidir.
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:
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:
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ı.
İlgili içerik
Bu makaleyle ilgili daha fazla bilgi için aşağıdaki kaynaklara bakın: