Aracılığıyla paylaş


Tablolar

Not

Microsoft Power Fx, tuval uygulamaları formül dilinin yeni adıdır. Dili tuval uygulamalarından ayırdığımız, Microsoft Power Platform ürünlerine entegre ettiğimiz ve açık kaynak olarak sunduğumuz bu süreçte bu makaleler geliştirilmeye devam eder. Dilin tanıtımı için Microsoft Power Fx Genel Bakış makalesiyle başlayın.

Microsoft Power Fx'te, verileri kayıtlar ve tablolar halinde depolayan Microsoft Excel, SharePoint, SQL Server ve diğer birçok kaynaktaki bilgilere erişen bir formül yazabilirsiniz. Bu türdeki verilerle verimli bir şekilde çalışmak için bu yapıların temelini oluşturan kavramları gözden geçirin.

  • Kayıt bir kişi, yer veya nesne hakkında bir veya birden fazla bilgi kategorisi içerir. Örneğin, bir kayıtta tek bir müşterinin adı, e-posta adresi ve telefon numarası olabilir. Diğer araçlar kaydı "satır" veya "öğe" olarak adlandırır.
  • Tablo, aynı bilgi kategorisine sahip bir veya daha fazla kayıt tutar. Örneğin, bir tabloda 50 müşterinin adı, e-posta adresi ve telefon numarası bulunabilir.

Excel'deki bir formülde bağımsız değişken olarak bir veya daha fazla hücre başvurusu kullanıldığı gibi, bağımsız değişken olarak tablo adı kullanan çeşitli formüller oluşturabilirsiniz. Power Fx'teki bazı formüller, belirttiğiniz diğer bağımsız değişkenleri yansıtan bir tablo döndürür. Örnek olarak aşağıdaki amaçlar için formül oluşturabilirsiniz:

  • Patch işlevinin birden fazla bağımsız değişkeninden biri olacak şekilde belirterek bir tablodaki kayıtlardan birini güncelleştirme
  • AddColumns, DropColumns veya RenameColumns işlevinin bağımsız değişkenlerinden biri olacak şekilde belirterek bir tabloda sütun ekleme, kaldırma ve yeniden adlandırma işlemlerini gerçekleştirme. Bu işlevlerin hiçbiri özgün tabloyu değiştirmez. Bunun yerine işlevler, belirttiğiniz diğer bağımsız değişkenleri temel alan farklı bir tablo döndürür.

Bir tablonun öğeleri

Tablo öğeleri

Kayıtlar

Her kayıtta bir kişi, yer veya nesne için en az bir bilgi kategorisi bulunur. Yukarıdaki örnekte her ürün (Chocolate, Bread ve Water) için bir kayıt ve her bilgi kategorisi (Price, Quantity on Hand ve Quantity on Order) için bir sütun gösterilmektedir.

Formülde küme ayracı kullanarak tablo bağlamının dışında bir kaydın kendisine başvurabilirsiniz. Örneğin, bu {Name: "Strawberries", Price: 7.99 } kaydı tabloyla ilişkili değildir. Bu örnekteki Ad ve Fiyat gibi alan adlarının çift tırnak işareti içinde olmadığını unutmayın.

Alanlar

Alan, bir kayıt içindeki her bir bilgi parçasıdır. Bu alan kavramını belirli bir kaydın sütun değeri olarak düşünebilirsiniz.

Denetimde olduğu gibi kayıtta da . işlecini kullanarak kayıt alanına başvurursunuz. Örneğin, First(Products).Name formülü Products tablosundaki ilk kaydın Name alanını döndürür.

GroupBy işleviyle ilgili örnekte gösterildiği gibi, bir alanda başka bir kayıt veya tablo bulunabilir. İstediğiniz sayıda kaydı ve tabloyu iç içe geçirebilirsiniz.

Sütunlar

Sütun, tablodaki bir veya daha fazla kaydın aynı alanını belirtir. Yukarıdaki örnekte her ürünün bir fiyat alanı vardır ve bu fiyat, tüm ürünler için aynı sütundadır. Yukarıdaki tabloda dört sütun vardır:

  • Ad
  • Fiyat
  • Eldeki Miktar
  • Siparişteki Miktar

Bir sütunun adı, ilgili sütundaki alanları yansıtır.

Bir sütundaki tüm değerler aynı veri türündedir. Yukarıdaki örnekte "Eldeki Miktar" sütununda her zaman bir sayı bulunur ve herhangi bir kayıtta "12 adet" gibi bir dize bulunamaz. Herhangi bir alanın değeri boş da olabilir.

Diğer araçlarda sütun için "alanları" kullanmış olabilirsiniz.

Tablo

Tablo, her biri tüm kayıtlarda aynı ada sahip birden fazla alan içeren bir veya daha fazla kayıttan oluşur.

Bir veri kaynağında veya koleksiyonda depolanan tüm tabloların bir adı vardır. Bu adı, söz konusu tabloya başvurmak ve bağımsız değişken olarak tablo kabul eden işlevlere geçirmek için kullanabilirsiniz. Tablolar bir işlevin veya formülün sonucu olarak da oluşturulabilir.

Aşağıdaki örnekte olduğu gibi, Table işlevini belirli kayıtlarla (küme ayraçları içinde) kullanarak bir tabloyu formül içinde ifade edebilirsiniz:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Köşeli ayraç kullanarak tek sütunlu bir tablo da tanımlayabilirsiniz. Yukarıdaki kodu şu şekilde de yazabilirsiniz:

[ "Strawberry", "Vanilla" ]

Tablo formülleri

Excel ve Power Fx uygulamalarında sayıları ve metin dizelerini işlemek için formülleri benzer şekillerde kullanırsınız:

  • Excel'de A1 hücresine 42 değerini yazıp başka bir hücreye A1+2 formülünü girdiğinizde 44 değerini elde edersiniz.
  • Power Apps'te ise Slider1 öğesinin Varsayılan özelliğini 42 olarak ayarlayıp bir etiketin Metin özelliğini Slider1.Value + 2 olarak belirlediğinizde 44 değerini elde edersiniz.

Her iki durumda da bağımsız değişkenlerin değerini (örneğin, A1 hücresindeki sayıyı veya Slider1 değerini) değiştirdiğinizde, hesaplanan değer otomatik olarak değiştirilir.

Benzer şekilde, formülleri kullanarak tablo ve kayıtlardaki verilere erişebilir ve bu verileri işleyebilirsiniz. Bazı formüllerde tablo adlarını bağımsız değişken olarak kullanabilirsiniz. Örneğin, Min(Catalog, Price) gibi bir formülle Catalog tablosunun Price sütunundaki en düşük değeri gösterebilirsiniz. Bazı formüller ise değer olarak tablonun tamamını döndürür. Örneğin, RenameColumns(Catalog, "Price", "Cost") gibi bir formülle Catalog tablosundaki tüm kayıtlar döndürülür ancak Price sütununun adı Cost olarak değiştirilir.

Sayılar gibi, tablo ve kayıt içeren formüller de temel alınan tablo veya kayıt değiştiğinde otomatik olarak yeniden hesaplanır. Catalog tablosundaki bir ürünün maliyeti önceki minimum değerin altına düşerse Min formülünün değeri bu değişikliği yansıtacak şekilde otomatik olarak değiştirilir.

Tablo işlevleri ve denetim özellikleri

Lower işlevini kullanmayı düşünün. Hoş geldiniz değişkeninin "Hello, World" metin dizesini içermesi durumunda , Lower (welcome) "hello, world" sonucunu verir. Bu işlev hiçbir şekilde bu değişkendeki değeri değiştirmez. Lower, yalnızca girişi işleyen ve çıktıyı üreten saf bir işlevdir. Hepsi bu kadar; yan etkileri yoktur. Excel'deki tüm işlevler ve Power Fx'teki çoğu işlev, çalışma kitabı veya uygulamanın otomatik olarak yeniden hesaplanmasını sağlayan saf işlevlerdir.

Power Fx, tablolarda aynı şekilde çalışan bir dizi işlev sunar. Bu işlevler tabloları giriş olarak alır ve tüm veri tablolarını filtreler, sıralar, dönüştürür, küçültür ve özetler. Aslında, Lower ve tek bir değeri alan diğer birçok işlev giriş olarak tek sütunlu bir tabloyu da alabilir.

Birçok işlev, giriş olarak tek sütunlu bir tablo alır. Tüm tabloda tek bir sütun varsa, bunu adıyla belirtebilirsiniz. Bir tablonun birden çok sütunu varsa, Table.Column sözdizimini kullanarak bu sütunlardan birini belirtebilirsiniz. Örneğin, Products.Name Ürünler tablosundan yalnızca Ad değerlerinin tek sütunlu tablosunu verir .

Bir tabloyu istediğiniz gibi yeniden şekillendirebilirsiniz. Bunun için şu işlevleri kullanırsınız: AddColumns, RenameColumns, ShowColumns veya DropColumns. Bu işlevler yalnızca çıkışı değiştirir, kaynaklarını değil.

Davranış formülleri

Diğer işlevler özellikle verileri değiştirmek ve yan etkileri sağlamak için tasarlanmıştır. Bu işlevler saf olmadığından, bunları dikkatlice oluşturmalısınız; bu işlevler uygulamadaki değerleri otomatik olarak yeniden hesaplayarak katılamaz. Bu işlevleri yalnızca davranış formülleri içinde kullanabilirsiniz.

Kayıt kapsamı

Bazı işlevler bir formülü belirli bir tablonun tüm kayıtlarında ayrı ayrı değerlendirerek çalışır. Formülün sonucu farklı şekillerde kullanılır:

  • AddColumns: Formül, eklenen alanın değerini sağlar.
  • Ortalama, Maks, Min, Toplam, StdevP, VarP: Formül, toplanacak değeri sağlar.
  • Filter, Lookup: Formül, kaydın çıkışa dahil edilip edilmeyeceğini belirler.
  • Bitiştir: Formül, birleştirilecek dizeleri belirler.
  • Ayrı: Formül, yinelenen kayıtların tanımlanması için kullanılacak bir değer döndürür.
  • ForAll: Formül, yan etkileri olabilecek herhangi bir değer döndürebilir.
  • Sırala: Formül, kayıtların sıralanacağı değeri sağlar.
  • İle: Formül, yan etkileri olabilecek herhangi bir değer döndürebilir.

Bu formüllerin içinde, işlenen kaydın belirli alanlarına başvurabilirsiniz. Bu işlevlerin her biri formülün değerlendirildiği bir "kayıt kapsamı" oluşturur ve kaydın alanları üst düzey tanımlayıcı olarak kullanılabilir. Ayrıca uygulamanız içinden denetim özelliklerine ve diğer değerlere başvuruda bulunabilirsiniz.

Örneğin, genel değişkene yerleştirilmiş Ürünler tablosunu alın:

İstenen tablolar

Set( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

Bu ürünlerden herhangi biri için mevcut olan sayıdan fazla talep olup olmadığını belirlemek için:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Filter işlevinin ilk bağımsız değişkeni, üzerinde çalışılacak kayıt tablosu; ikinci bağımsız değişkeni ise bir formüldür. Filter işlevi bu formülü değerlendirmek için her bir kayda ait alanların yer aldığı bir kayıt kapsamı oluşturur. Bu örnekte Ürün, İstenen Miktar ve Kullanılabilir Miktar alanları kullanılmıştır. Karşılaştırma işleminin sonucu her bir kaydın işlev sonucuna dahil edilip edilmeyeceğini belirler:

Gerekli tablolar

Bu örneğe ekleme yaparak her üründen kaç adet sipariş edileceğini hesaplayabiliriz:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

Burada sonuca hesaplanmış sütun ekliyoruz. AddColumns işlevi, talep edilen ve mevcut olan ürün sayısı arasındaki farkı hesaplamak için kendi kayıt kapsamını kullanır.

Sütun ekleyin.

Son olarak, sonuç tablosunu yalnızca istediğimiz sütunları içerecek şekilde sınırlandırabiliriz:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Yalnızca sipariş için.

Yukarıdaki formülde bazı yerlerde çift tırnak ("), bazı yerlerde ise tek tırnak (') kullanıldığına dikkat edin. Tek tırnak, alan veya tablo gibi adında boşluk bulunan bir nesnenin değerine başvururken kullanılır. Çift tırnak ise bir nesnenin değerine başvurulmadığı ancak nesneden bahsedildiği durumlarda (AddColumns işlevinde olduğu üzere özellikle de nesnenin henüz mevcut olmadığı durumlar gibi) kullanılır.

Kesinleştirme

Kayıt kapsamıyla eklenen alan adları, uygulamanın başka yerlerindeki aynı adları geçersiz kılar. Bu durumda @ kesinleştirme işlecini kullanarak kayıt kapsamının dışındaki değerlere erişebilirsiniz:

  • İç içe kayıt kapsamlarındaki değerlere erişmek için şu deseni kullanarak üzerinde çalışılan tablonun adıyla birlikte @ işlecini kullanın:
    Table[@FieldName]
  • Veri kaynakları, koleksiyonlar ve bağlam değişkenleri gibi genel değerlere erişmek için [@ObjectName] desenini (tablo gösterimi olmadan) kullanın.

Üzerinde işlem yapılan tablo Filter(Table, ... ) işlevinde olduğu gibi bir ifadeyse kesinleştirme işleci kullanılamaz. Kesinleştirme işleci kullanılmadığında bu tablo ifadesindeki alanlara yalnızca en içteki kayıt kapsamı erişebilir.

Örneğin, X adlı bir koleksiyona sahip olduğunuzu düşünelim:

X değeri.

Bu koleksiyonu ClearCollect( X, [1, 2] ) formülüyle oluşturabilirsiniz.

Y adlı bir formül ekleyelim:

Y değeri.

Bu koleksiyonu ClearCollect( Y, ["A", "B"] ) formülüyle oluşturabilirsiniz.

Ek olarak şu formülle Değer adlı bir bağlam değişkeni tanımlayabilirsiniz: UpdateContext( {Değer: "!"} )

Şimdi parçaları bir araya getirelim. Bu bağlamda şu formül:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

şu tabloyu oluşturur:

XY değeri.

Bu ne anlama geliyor? En dıştaki ForAll işlevi, X için bir kayıt kapsamı tanımlayarak işlenen her kaydın Değer alanına erişim sağlıyor. Erişim için Değer sözcüğünün veya X[@Değer] ifadesinin kullanılması yeterlidir.

En içteki ForAll işlevi, Y. için başka bir kayıt kapsamı tanımlıyor. Bu tabloda da bir Değer alanı tanımlanmış olduğundan, Değer kullanıldığında artık X'in değil, Y'nin kaydındaki alana başvurulur. Burada X. Değer alanına erişmek için kesinleştirme işlecinin uzun halini kullanmamız gerekir.

Y en içteki kayıt kapsamı olduğundan bu tablonun alanlarına erişmek için kesinleştirmeye gerek yoktur ve şu formülle de aynı sonuca ulaşabilirsiniz:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

ForAll kayıt kapsamlarının tümü genel kapsamı geçersiz kılar. Tanımladığımız Value bağlam değişkeni kesinleştirme işleci olmadan yalnızca adla kullanılamaz. Bu değere erişmek için [@Değer] kullanın.

İç içe olan ForAll işlevleri sonucunda, sonuç tablosu da iç içe geçmiş olacağından Ungroup işlevi sonucu düz hale getirir.

Tek sütunlu tablolar

Bir tablodan tek bir sütun üzerinde çalışmak için, bu örnekte olduğu gibi ShowColumns işlevini kullanın:

ShowColumns( Products, "Product" )

Bu formül tek sütunlu tablo oluşturur:

Tek sütun.

Daha kısa bir alternatif için, Tablo'dan yalnızca Sütun'un tek sütunlu tablosunu çıkaran Table.Column öğesini belirtin. Örneğin, bu formül ShowColumns kullanarak tam olarak aynı sonucu oluşturur.

Products.Product

Satır içi kayıtlar

Kayıtları ifade etmek için, adlandırılmış alan değerlerini içeren küme ayraçları kullanabilirsiniz. Örneğin, bu konu başlığının ilk kısmındaki tablonun ilk kaydını şu formülle ifade edebilirsiniz:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Şu örnekte gösterilen şekilde, formülleri başka formüllerin içine de ekleyebilirsiniz:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Şu örnekte gösterilen şekilde, küme ayraçlarını iç içe kullanarak kayıtları iç içe geçirebilirsiniz:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Boşluk veya iki nokta üst üste gibi özel karakter içeren sütun adlarını tek tırnak içine almanız gerekir. Sütun adlarında iki adet tek tırnak kullanın.

Fiyat sütunundaki değerin, dolar işareti gibi bir para birimi simgesi içermediğine dikkat edin. Biçimlendirme değer gösterildiğinde gerçekleştirilir.

Satır içi tablolar

Table işlevini ve bir kayıt kümesini kullanarak tablo oluşturabilirsiniz. Bu konu başlığının ilk kısmındaki tabloyu şu formülle ifade edebilirsiniz:

Table( 
	{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
	{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
	{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } 
)

Tabloları iç içe de geçirebilirsiniz:

Table( 
	{ Name: "Chocolate", 
	  'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
	                             { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
	}
)

Satır içi değer tabloları

Değerleri köşeli ayraçların içine yerleştirerek tek sütunlu tablolar oluşturabilirsiniz. Sonuç tablosunda Değer adlı tek bir sütun bulunur.

Örneğin, [ 1, 2, 3, 4 ] Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) ile eşdeğerdir ve bu tabloyu döndürür:

Satır içi tablo.