ForAll işlevi

Şunlar için geçerlidir: Tuval uygulamaları Masaüstü akışları Model temelli uygulamalar Power Platform CLI

Değerleri hesaplar ve bir tablonun tüm kayıtları için eylemleri gerçekleştirir.

Açıklama

ForAll işlevi, bir formülü bir tablodaki tüm kayıtlar için değerlendirir. Formül, bir değeri hesaplayabilir ve/veya veri değiştirme ya da bir bağlantıyla çalışma gibi eylemler gerçekleştirebilir. Tek bir kaydın formülünü değerlendirmek için With işlevini kullanın.

Bir sayıya göre yinelemek için Sequence işlevini ForAll işleviyle birlikte kullanın.

İşlenmekte olan kayıt alanları formül içinde bulunur. ThisRecord işlecini kullanın veya başka bir değere olduğu gibi yalnızca adla başvuruda bulunun. As işleci, formülünüzü daha anlaşılır ve iç içe geçmiş kayıtları erişilebilir hale getirmenizi kolaylaştıracak şekilde, işlenen kaydı adlandırmak için de kullanılabilir. Daha fazla bilgi için aşağıdaki örneklere ve kayıt kapsamıyla çalışma bölümüne bakın.

Dönüş değeri

Her formül değerlendirmesinin sonucu, giriş tablosundaki sıraya göre bir tabloda döndürülür.

Formülün sonucu tek bir değerden oluşuyorsa, sonuçta elde edilen tablo tek sütunlu bir tablo olur. Formülün sonucu bir kayıt ise, sonuçta elde edilen tablo sonuç kaydıyla aynı sütunların bulunduğu kayıtları içerir.

Formülün sonucu boş bir değerse söz konusu giriş kaydı için sonuç tablosunda kayıt yer almaz. Bu durumda sonuç tablosunda, kaynak tablosundan daha az sayıda kayıt yer alır.

Eylem gerçekleştirme

Formül, Patch ve Collect işlevleriyle bir veri kaynağının kayıtlarını değiştirme gibi eylemler gerçekleştiren işlevler içerebilir. Formül, bağlantılarda yöntemler de çağırabilir. ; işleci kullanılarak her kayıt için birden çok eylem gerçekleştirilebilir. ForAll işlevinin konusu olan tabloyu değiştiremezsiniz.

Formülünüzü yazarken kayıtların herhangi bir sırada ve mümkün olduğunda paralel olarak işlenebileceğini unutmayın. Tablonun ilk kaydı son kayıttan sonra işlenebilir.

Sıralama bağımlılıklarından kaçınmaya dikkat edin. Bu nedenle UpdateContext, Clear ve ClearCollect işlevleri bu etkiye duyarlı olacak değişkenler barındıracak şekilde kolayca kullanılabileceklerinden bunları bir ForAll işlevinin içinde kullanamazsınız. Collect işlevini kullanabilirsiniz ancak kayıtların eklenme sırası tanımlı olmaz.

Veri kaynaklarını değiştiren Collect, Remove ve Update de dahil olmak üzere çeşitli işlevler, döndürülen değer olarak, değiştirilen veri kaynağını döndürür. Döndürülen bu değerler büyük olabilir ve ForAll tablosunun her kaydı için döndürülmüşse önemli miktarda kaynak tüketebilir. ForAll paralel olarak çalışabildiğinden döndürülen bu değerlerin beklediğiniz gibi olmadığını görebilirsiniz ve bu işlevlerin yan etkilerini, elde edilen sonuçlarından ayırabilirsiniz. ForAll işlevinin döndürülen değeri kullanılmıyorsa (veri değişikliği konusunda durum genellikle bu şekildedir) döndürülen değer oluşturulmaz ve kaynak veya sıralama endişeleri de söz konusu olmaz. Ancak bir ForAll işlevinin ve bir veri kaynağı döndüren işlevlerden birinin sonucunu kullanıyorsanız sonucu yapılandırma biçiminiz konusunda dikkatli olun ve bunu öncelikle küçük veri kümeleri üzerinde deneyin.

Alternatifler

Power Apps'teki işlevlerin birçoğu tek sütunlu tablo kullanarak aynı anda birden çok değeri işleyebilir. Örneğin, Len işlevi bir metin değerleri tablosunu işleyerek ForAll işlevinin yapabileceği şekilde uzunlukları içeren bir tablo döndürebilir. Bu, birçok durumda ForAll işlevini kullanma gereksinimini ortadan kaldırabilir, daha etkili olabilir ve daha kolay okunur.

Göz önünde bulundurulması gereken diğer bir nokta da ForAll işlevinin diğer işlevler (örneğin, Filter) gibi temsilci olarak seçilememesidir.

Temsilci

Veri kaynağıyla birlikte kullanıldığında, bu işlev temsilci atanamaz. Veri kaynağının yalnızca ilk kısmı alınır ve işlev uygulanır. Sonuç, tüm hikayeyi temsil etmeyebilir. Yazma sırasında size bu sınırlamayı anımsatmak ve mümkün olduğunda temsilci atanabilir alternatiflere geçmenizi önermek üzere bir uyarı görüntülenebilir. Daha fazla bilgi edinmek için bkz. temsilci atamaya genel bakış.

Sözdizimi

ForAll( Tablo, Formül )

  • Tablo: Gerekli. Üzerinde işlem yapılması gereken tablo.
  • Formül: Gerekli. Tüm Tablo kayıtları için değerlendirilecek formül.

Örnekler

Hesaplamalar

Aşağıdaki örneklerde Squaresveri kaynağı kullanılmıştır:

Kare örneği.

Bu veri kaynağını koleksiyon olarak oluşturmak için bir Button denetiminin OnSelect özelliğini bu formüle ayarlayın, Önizleme modunu açın ve ardından düğmeyi seçin:

ClearCollect( Squares, [ "1", "4", "9" ] )

Formül Açıklama Sonuç
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Giriş tablosunun tüm kayıtları için Value sütununun karekökünü hesaplar. Ayrıca Sqrt işlevi de tek sütunlu tablo ile kullanılabilir ve bu, ForAll kullanılmadan bu örneğin gerçekleştirilmesini sağlar. Sqrt örneği.
ForAll( Squares, Power( Value, 3 ) ) Giriş tablosunun tüm kayıtları için Value sütununu üçüncü kuvvetine yükseltir. Power işlevi, tek sütunlu tabloları desteklemez. Bu nedenle, bu durumda ForAll kullanılmalıdır. Power örneği.

Bağlantı kullanma

Aşağıdaki örneklerde Expressionsveri kaynağı kullanılmıştır:

İfadeler örneği.

Bu veri kaynağını koleksiyon olarak oluşturmak için bir Button denetiminin OnSelect özelliğini bu formüle ayarlayın, Önizleme modunu açın ve ardından düğmeyi seçin:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

Bu örnek aynı zamanda bir Microsoft Translator bağlantısı da kullanır. Bu bağlantıyı uygulamanıza eklemek için bağlantıları yönetme makalesine bakın.

Formül Açıklama Sonuç
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Expressions tablosundaki tüm kayıtlar için Value sütununun içeriklerini İspanyolcaya (kısaltması "es") çevirir.
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Expressions tablosundaki tüm kayıtlar için Value sütununun içeriklerini Fransızcaya (kısaltması "fr") çevirir.

Bir tabloyu kopyalama

Bazen verileri filtrelemeniz, şekillendirmeniz, sıralamanız ve denetlemeniz gerekir. Power Apps, bunu yapmak için Filter, AddColumns ve Sort gibi birçok işlev sağlar. Power Apps, her tabloyu değer olarak değerlendirir, formüllerde akışının gerçekleşmesini ve kolayca kullanılabilmesini sağlar.

Ve bazen daha sonra kullanmak üzere bu sonucun bir kopyasını oluşturmak veya bilgileri bir veri kaynağından diğerine taşımak istersiniz. Power Apps, verileri kopyalamak için Collect işlevini sağlar.

Ancak bu kopyayı oluşturmadan önce gerekip gerekmediğini dikkatlice düşünün. Pek çok durumda; temel alınan, isteğe bağlı veri kaynağını bir formülle filtrelemek ve şekillendirmek işe yarar. Kopya oluşturmanın bazı olumsuz yanları şunlardır:

  • Aynı bilgilerin iki kopyası bunlardan birinin eşitlenmemiş hale gelebileceği anlamına gelir.
  • Kopya oluşturmak, bilgisayar belleği, ağ bant genişliği ve/veya zamanın büyük bir kısmının kullanımına neden olabilir.
  • Çoğu veri kaynağı için kopyalama, taşınabilecek veri miktarına sınırlama getirilecek şekilde temsilci seçilemez.

Aşağıdaki örneklerde Productsveri kaynağı kullanılmıştır:

Ürünler veri kaynağı örneği.

Bu veri kaynağını koleksiyon olarak oluşturmak için bir Button denetiminin OnSelect özelliğini bu formüle ayarlayın, Önizleme modunu açın ve ardından düğmeyi seçin:

ClearCollect( 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 }
    )
)

Amacımız yalnızca mevcut olanından daha fazlası istenen ve sipariş vermemiz gereken öğeleri içeren bir türev tablosu ile çalışmaktır:

Türev tablo örneği.

Bu görevi, çeşitli artılar ve eksilerle tümü aynı sonucu veren birkaç farklı yöntemle gerçekleştirebiliriz.

İsteğe bağlı tablo şekillendirme

Bu kopyayı oluşturmayın! İhtiyaç duyduğumuz her yerde aşağıdaki formülü kullanabiliriz:

// Table shaping on demand, no need for a copy of the result
ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Her kaydın 'Quantity Requested' ve 'Quantity Available' alanlarıyla, sırasıyla karşılaştırma ve çıkarma işlemlerinin gerçekleştirilmesi için Filter ve AddColumns işlevleri tarafından bir kayıt kapsamı oluşturulur.

Bu örnekte Filter işlevi temsilci olarak seçilebilir. Milyonlarca kayıt içeren bir tablodaki yalnızca birkaç kayıt dahi olsa ölçütlerle eşleşen tüm ürünleri bulabileceğinden bu oldukça önemlidir. ShowColumns ve AddColumns işlevleri şu an için temsilci olarak seçilemez; bu nedenle, sipariş edilmesi gereken ürünlerin gerçek sayısı sınırlı olacaktır. Bu sonucun boyutunun her zaman daha küçük olacağını bildiğiniz sürece bu, iyi bir yaklaşımdır.

Kopya oluşturmadığımızdan, yönetilecek veya tarih dışına denk gelecek ek bir bilgi kopyası bulunmaz.

İsteğe bağlı ForAll

Diğer bir yaklaşım ise tablo şekillendirme işlevlerini değiştirmek için ForAll işlevini kullanmaktır:

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

Bu formülü okumak ve yazmak bazı kişiler için daha basit olabilir.

ForAll işlevinin hiçbir bölümü temsilci olarak seçilemez. Products tablosunun yalnızca ilk kısmı değerlendirilir, bu da söz konusu tablonun büyük olması durumunda sorun teşkil edebilir. Önceki örnekte Filter işlevi temsilci olarak seçilebildiğinden büyük veri kümeleriyle daha iyi şekilde çalışabilir.

Sonucu toplama

Bazı durumlarda, verilerin bir kopyası gerekli olabilir. Bir veri kaynağından diğerine bilgi taşımanız gerekebilir. Bu örnekte, siparişler bir satıcının sistemindeki NewOrder tablosu üzerinden verilir. Yüksek hızlı kullanıcı etkileşimlerine yönelik olarak, sunucu gecikmesi yaşanmaması için tablonun yerel bir kopyasını önbelleğe almak isteyebilirsiniz.

Önceki iki örnekle aynı tablo şekillendirmesini kullanır ancak sonucu yakalayıp bir koleksiyona alırız:

ClearCollect( NewOrder,
    ShowColumns(
        AddColumns(
            Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
            "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
        ),
        "Product",
        "Quantity To Order"
    )
)
ClearCollect( NewOrder,
    ForAll( Products,
        If( 'Quantity Requested' > 'Quantity Available',
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

ClearCollect ve Collect işlevleri temsilci olarak seçilemez. Sonuç olarak, bu şekilde taşınabilecek veri miktarı sınırlıdır.

ForAll içinde Collect

Son olarak, Collect işlevini doğrudan ForAll içinde gerçekleştirebiliriz:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

Tekrar belirtmek gerekirse ForAll işlevi şu an için temsilci olarak seçilemez. Products tablomuz büyükse ForAll yalnızca ilk kayıt kümesine bakar ve sipariş edilmesi gereken bazı ürünleri kaçırabiliriz. Ancak bu yaklaşım, küçük kalacağını bildiğimiz tablolar için uygundur.

ForAll işlevinin sonucunu yakalamadığımızı unutmayın. Bunun içinden yapılan Collect işlev çağrıları tüm kayıtlar için NewOrder veri kaynağını döndürür; bu da, yakalama durumunda çok sayıda veriye denk gelebilir.

Bileşen içindeki tabloyu eşleme

Bkz. Tabloları eşleme.