Excel Hücrelerini Metne Sığdırma: 4 Kolay Çözüm
Excel hücrelerini metne sığdırmak için güncel bilgileri ve 4 kolay çözümü keşfedin.
Bu öğreticide, bir DAX kodu parçasına göz atacağız. Zaten böyle bir şey kullanmış olabilirsiniz. Veya bununla karşılaşabilir ve bu kodun nasıl çalıştığı ve hem Satır İçeriği hem de Filtre İçeriğinin yalnızca tek bir DAX kodunda birbirleriyle nasıl etkileşime girdiği konusunda kafanız karışabilir. Her iki durumda da, bu eğitimde yukarıdakilerin tümüne ayrıntılı olarak bakılacaktır. Bu eğitimin tam videosunu bu blogun alt kısmından izleyebilirsiniz.
İlk olarak, kodun kendisine bakacağız. Daha sonra daha iyi anlamak için teori kısmına geçeceğiz. Son olarak, DAX Studio'yu kullanarak her şeyin perde arkasına bakacağız .
Kullanacağımız veri modeli temelde Tarihler, Satışlar ve Ürünler tablosunu içeren basit bir satış verisi modelidir. Satış tablosu, verilen her gün için işlemleri içerir. Ürünler tablosu, belirli bir gündeki ürünlerle ilgili satış bilgileri hakkında bilgi içerir. Tarihler tablosu, bu eğitimin amacı için yalnızca birkaç sütun içerir.
Yalnızca Tarihler tablosuyla ilgileniyoruz, ancak filtre bağlamı ve satır bağlamının ilişkilerin yardımıyla nasıl yayıldığını açıklamak için Satış tablosunu ve Ürünler tablosunu kullanacağız.
İçindekiler
Çalışan Toplam Ölçüde Satır Bağlamı ve Filtre Bağlamı
Şimdi, hem satır hem de filtre bağlamlarını içerdiğinden çalışan bir toplam ölçü oluşturalım. Bu, FILTER üzerinde COUNTROWS kullandığım ve Date tablosunda sahip olduğum tüm yılları döndürmek için ALL işlevini kullandığım temel bir çalışan toplam ölçüdür. O ölçüyü aşağıdaki tablonun içine getirdiğimde beklediğimiz sonucu aldığımızı görebilirsiniz.
Şimdi bu DAX kodunun nasıl çalıştığını analiz etmeye çalışalım.
Ölçüde, ilk önce COUNTROWS'a sahip olduğumuzu görebilirsiniz, ancak bu, değerlendirilen veya yürütülen ilk işlev değildir. Ardından, FILTER işlevine ve ardından ALL işlevine sahibiz. Değerlendirme sırasındaki ilk şey ALL'dir. ALL, ALL işlevinin dışında var olan herhangi bir filtre bağlamını yok sayarak Dates Calendar Year Number'ın tüm benzersiz değerlerini döndürür.
Yani metriklerde Takvim Yılı Numarası sütunumuz var ve o sütunu aktif olarak filtreliyor. Ancak ALL mevcut filtre içeriğini yok sayacağından, o sütunun tüm benzersiz değerlerini alacağız.
İkinci argümanda satır bağlamında Dates Calendar Year Number'ın MAX Dates Calendar Year Number'dan küçük olması gerektiğini yazdık. Şimdi, yeni başlayan biriyseniz ve hala DAX'i anlamaya ve öğrenmeye çalışıyorsanız, hem sol taraftaki hem de MAX işlevinin içindeki referansların aynı sütuna ait olduğunu ve içindeki tabloyla aynı olduğunu düşünebilirsiniz. TÜM işlevi.
Ama bu doğru değil. Satır içeriğinin ALL işlevine ait olan tek kısmı, sol tarafta sahip olduğumuz kısımdır. MAX'ta sahip olduğumuz, satır bağlamında değil, bir filtre bağlamında değerlendiriliyor.
Bu nedenle, FILTER, tablo üzerinde ilk bağımsız değişkende sağladığınız bir satır bağlamı oluşturmaya çalışır ve kodun bu kısmı aslında söz konusu satır bağlamından alınır. Böylece her satır, FILTER, ALL içinde sahip olduğumuz tabloyu yineler ve ardından şu anda yinelemekte olduğumuz tüm değerlere erişebiliriz.
Yani, ilk iterasyonda sadece bir değerimiz var. İkinci yinelemede, ikinci değere sahibiz. Ancak MAX yazdığımızda, FİLTRE işlevini kullanarak oluşturduğumuz satır bağlamından bağımsızdır. Yani MAX, o matriste kullandığımız Cari Yıl Numarası tarafından oluşturulan filtre bağlamında değerlendiriliyor.
2006'dayken MAX, 2006'yı döndürürken, şu anki satır 2006, 2007 veya 2008 olabilir. FİLTRE, ikinci argümanda belirttiğimiz kriterleri karşılayan tabloyu döndürür. 2007'ye geçtiğimizde MAX 2007'yi döndürecek. 2008'de ise 2008'i döndürecek. Ve MAX işlevinin döndürdüğü değerden küçük olan tüm değerlere bağlı olarak FILTER bir a döndürecek masa.
MAX'ın satır içeriğine bağlı olmadığını kanıtlamak için bu DAX kodunu birkaç değişkene ayırabiliriz. O zaman sol taraftaki sütun referansının sağ taraftaki sütun referansının aynı olmadığını anlayabileceğiz.
O halde bir değişken oluşturalım.
Aşağıdaki ölçümde görebileceğiniz gibi, üç değişken ( ) oluşturdum. Daha sonra FILTER kodunu son olarak COUNTROWS kullanan Result değişkeniyle ekledim . Aşağıdaki tabloda bu ölçüyü kullandığımda hiçbir şeyin değişmediğini göreceksiniz. Sonuçlar hala aynı. Hala daha önce aldığımız aynı toplam tutarı alıyoruz.
Koda geri dönüp ilk değişkenin değerini almaya çalışırsak ve bunu onaylarsak, her satır için aynı yılı aldığımızı görebilirsiniz.
Umarım, size bu özel koddaki MAX işlevinin değerleri için gerçek bağlama bağlı olmadığını açıklayabilmişimdir. Ve değerlendirme bağlamını anlayışınızı basitleştirmek istiyorsanız, değerlendirme sırasını ve kodun nasıl yürütüldüğünü anlayabilmeniz için kodu her zaman birkaç değişkene bölebilirsiniz.
Şimdi size, MAX işlevinin FILTER işlevi tarafından oluşturulan satır içeriğine bağlı olacağı bir senaryo göstermek istiyorum .
Öyleyse, bu ölçüme geri dönelim. Tarihleri HESAPLA Takvim Yılı Numarasını alacağım . Bunu matrise getirdiğimde, bir boşluk elde ettiğimizi görebilirsiniz.
Neden?
Mesele şu ki, tüm yılları yineliyoruz ve HESAPLAMA'nın yaptığı, şu anda yinelenen satırı eşdeğer bir filtre bağlamına dönüştürmesidir.
Buraya eşittir işareti yazarsam yedi, yedi ve yedi elde ettiğimizi görebilirsiniz.
Neden?
Neler olduğunu kolayca anlayabilmeniz için yeni bir hesaplanmış tablo oluşturayım.
Gidip yeni bir tablo oluşturacağım. Sonra, TÜM Tarihler Takvim Yılı Numarasının üzerine yazacağım . Ardından, Max Year yazacağım ve ardından Tarihler Takvim Yılı Numarasının MAX'ı üzerinde HESAPLA kullanacağım. Ve şimdi her satır için aynı değeri tekrarladığımızı görebilirsiniz.
Bu sayılar kesinlikle kendilerinden az olmadığı için bir boşluk alıyoruz. Ama eşit (=) kullandığımızda, 2011'den küçük olan tüm değerlerin yedi aldığını söylüyoruz.
Ayrıca, Max Year gibi bir ölçüm referansı kullanıyor olsanız bile bu kod çalışmayacaktır.
Onayla'yı tıklarsam, hala bir şey alamadığımızı görebilirsiniz. Bunun nedeni, Max Year yazarken, sadece MAX HESAPLA Tarihleri Takvim Yılı Numarası yazıyoruz.
Bir ölçü referansının dışında her zaman bir HESAPLA vardır. Dolayısıyla, bu önlem, halihazırda yinelenen satırı bir filtre içeriğine dönüştüren bir bağlam geçişini başlatıyor.
Ancak bağlıysanız ve bir ölçü referansı kullanmanız gerekiyorsa, yapabileceğiniz şey bu ölçüyü bir değişkende saklamaktır. Bildiğiniz gibi, değişkenler sabittir ve bağlam geçişi oluşturamazlar. Bu nedenle, satır içeriğini bir filtre içeriğine dönüştüremez.
Bu, bir satır içeriğinin ve bir filtre içeriğinin bir DAX kodunda birbirleriyle nasıl etkileşime girdiğinin hızlı bir gösterimidir.
Şimdi perde arkasında neler olduğunu anlamak için DAX Studio'ya geçelim.
Satır İçeriğini ve Filtre İçeriğini Anlamak için DAX Studio'yu Kullanma
Harici Araçlara gidip DAX Studio'yu başlatalım. Query Plan ve Server Timings yardımıyla LuckyTemplates dosyasına bağlanmamız gerekiyor .
Ardından, bir sorgu ölçüsü oluşturacağım. Dates tablosuna, Dates Running Total'e DEFINE MEASURE yazacağım. Ve sonra, sahip olduğumuz orijinal kodu kullanacağım.
Bir tablo döndürmemiz gerektiği için DEĞERLENDİRME yazabiliriz. Son olarak SUMMARIZECOLUMNS kullanarak tabloyu oluşturacağız. Böylece, Tarihler Takvim Yılı Numarasını ve Çalışan Toplam olacak sanal sütunu yazacağız. Ve sonra, DAX Studio anahtar sözcüğü olarak DT gibi bir şey yazabilirim.
Bu kodu çalıştırırsam, kodun tamamlandığını ve LuckyTemplates'da gördüğümüz sonucu almaya devam ettiğimizi görebilirsiniz.
Şimdi perde arkasında neler olduğunu anlamak için Sorgu Planına geçelim. Şimdi MAX işlevinin aslında satır içeriğine bağlı olup olmadığını görelim. Mantıksal Sorgu Planına geçelim çünkü fiziksel Sorgu Planı genellikle daha karmaşıktır ve okunması biraz zordur.
İlk satırdaki ilk operatörün GroupSemiJoin olduğunu ve SUMMARIZECOLUMNS tarafından iki sütun arasında bir iç eklem oluşturmak için kullanıldığını görebilirsiniz.
Ardından, bu sütunları birleştirmek için, analiz servislerinin içinde sahip olduğumuz depolama motoru olan Scan_Vertipaq var . Tarihler Takvim Yılı Numarası olan bir sütuna ihtiyacımız olduğunu söylediğini görebiliriz. LuckyTemplates'da, matriste, raporumuza erişim işlevi gören bu Takvim Yılı Numarası sütununa sahip olduğumuzu görebilirsiniz.
Ardından, ölçümümüzde üst düzey bir operatör olarak COUNTROWS işlevine sahibiz , ardından COUNTROWS, filtre için FILTER işlevini çağırır. Yine RequiredCols'un Dates Calendar Year Number olduğunu söyleyen bir Scan_Vertipaq var .
2. ve 5. satırlar aynıdır, ancak ilk Scan_Vertipaq sıfır, ikincisi bir ile işaretlenmiştir. Bu, ALL işlevinin yardımıyla eriştiğimiz sütunun, SUMMARIZECOLUMNS işlevinde sahip olduğumuz sütundan ayrı olarak çıkarıldığı anlamına gelir.
Ardından, bir LessThan işleci vardır . Bir sonraki satırda, satır bağlamı ile MAX işlevi arasında bir karşılaştırma olduğunu görebiliriz .
Bunu Max_Vertipaq takip eder . Yani, aslında Max değerini depolama motorundan çıkarıyoruz. Sağa doğru, DependOnCols Dates Calendar Year Number yazdığını görebilirsiniz. Hatırlamamız gereken en önemli şey bu. Daha önce, MAX işlevinin satır bağlamına bağımlılığı olmadığını söylemiştim ve bu aslında bunu kanıtlıyor.
Ve böylece, burada sıfır yazıyor.
Sıfırı nerede bulduk?
SUMMARIZECOLUMNS için çıkarılan üstte (ikinci satır). Bu, MAX işlevinin satır içeriğine bağlı olmadığı, ancak aslında o tablonun içindeki sütuna (Takvim Yılı Numarası) bağlı olduğu anlamına gelir. Böylece bu tablo aslında filtre içeriğini oluşturuyor.
Kısacası, MAX işlevi satır içeriğine değil filtre içeriğine bağlıdır.
Ardından, Max_Vertipaq'ı hesaplamak için, DependOnCols'un sıfır (0) Tarih Takvim Yılı Numarası olduğunu söyleyen bir Scan_Vertipaq'a sahip olduğumuzu görebilirsiniz . Ve sonra, sütun gerektiren birkaç sütun daha var.
Şimdi kodun değişken versiyonuna bakalım. LastVisibleYear'ı döndürmek yerine COUNTROWS sürümünü veya Result değişkenini döndüreceğim ve yine aynı sonucu aldığımızı görebilirsiniz.
Sorgu Planına bakarsak, biraz daha uzun olduğunu ancak okumasının çok daha kolay olduğunu görebilirsiniz.
Son olarak, işte kodun hesaplanmış versiyonu da
Mantıksal Sorgu Planı da böyle görünüyor.
DAX LuckyTemplates: Satır Bağlamı Nedir
LuckyTemplates'da Filtre İçeriğine Giriş
Bağlam Geçişi Nedir ve Neden Önemlidir?
Çözüm
Bu öğreticide, belirli bir işlevin satır içeriğiyle nasıl etkileşimde bulunabileceğini ve etkileşimde bulunamayacağını açıkladım. Bu durumda MAX'ın satır bağlamında değil de filtre bağlamında nasıl değerlendirildiğini de size gösterdim.
Filtre bağlamının tüm modeli filtrelediğini ve satır bağlamının yalnızca verilen tabloyu yinelediğini ve modeli asla filtrelemediğini her zaman hatırlamak önemlidir. Filtre bağlamı bir tabloyu yinelemez.
Umarım bu öğreticiyi faydalı bulmuşsunuzdur. Çok yakında yayınlayacağımız DAX Studio kodumuz için bizi izlemeye devam edin . Benzer senaryoların çok daha derinlerine ineceğiz. DAX kodunuzu nasıl optimize edebileceğinizi de size öğreteceğiz.
Excel hücrelerini metne sığdırmak için güncel bilgileri ve 4 kolay çözümü keşfedin.
Bir Excel Dosyasının Boyutunu Küçültmek için 6 Etkili Yöntem. Hızlı ve kolay yöntemler ile verilerinizi kaybetmeden yer açın.
Python'da Self Nedir: Gerçek Dünyadan Örnekler
R'de bir .rds dosyasındaki nesneleri nasıl kaydedeceğinizi ve yükleyeceğinizi öğreneceksiniz. Bu blog aynı zamanda R'den LuckyTemplates'a nesnelerin nasıl içe aktarılacağını da ele alacaktır.
Bu DAX kodlama dili eğitiminde, GENERATE işlevinin nasıl kullanılacağını ve bir ölçü başlığının dinamik olarak nasıl değiştirileceğini öğrenin.
Bu eğitici, raporlarınızdaki dinamik veri görselleştirmelerinden içgörüler oluşturmak için Çok Kanallı Dinamik Görseller tekniğinin nasıl kullanılacağını kapsayacaktır.
Bu yazıda, filtre bağlamından geçeceğim. Filtre bağlamı, herhangi bir LuckyTemplates kullanıcısının başlangıçta öğrenmesi gereken en önemli konulardan biridir.
LuckyTemplates Apps çevrimiçi hizmetinin çeşitli kaynaklardan oluşturulan farklı raporların ve içgörülerin yönetilmesine nasıl yardımcı olabileceğini göstermek istiyorum.
LuckyTemplates'da ölçü dallandırma ve DAX formüllerini birleştirme gibi teknikleri kullanarak kâr marjı değişikliklerinizi nasıl hesaplayacağınızı öğrenin.
Bu öğreticide, veri önbelleklerini gerçekleştirme fikirleri ve bunların DAX'ın sonuç sağlama performansını nasıl etkilediği tartışılacaktır.