PowerApps'teki ForAll işleviForAll function in PowerApps

Değerleri hesaplar ve bir tablonun tüm kayıtları için eylemler gerçekleştirir.Calculates values and performs actions for all records of a table.

AçıklamaDescription

ForAll işlevi bir formülü bir tablonun tüm kayıtları için değerlendirir.The ForAll function evaluates a formula for all records of a table. 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.The formula can calculate a value and/or perform actions, such as modifying data or working with a connection.

İşlenmekte olan kaydın alanları formül içinde de kullanılabilir.Fields of the record currently being processed are available within the formula. Bunun için, diğer tüm değerlerde olduğu gibi bunlara adlarıyla başvurmanız yeterlidir.You simply reference them by name as you would any other value. Ayrıca uygulamanızda denetim özelliklerine ve diğer değerlere de başvurabilirsiniz.You can also reference control properties and other values from throughout your app. Daha ayrıntılı bilgi için aşağıdaki örneklere ve kayıt kapsamı ile çalışma konusuna göz atın.For more details, see the examples below and working with record scope.

Döndürülen değerReturn value

Her formül değerlendirmesinin sonucu, giriş tablosundaki sıraya göre bir tabloda döndürülür.The result of each formula evaluation is returned in a table, in the same order as the input table.

Formülün sonucu tek bir değerden oluşuyorsa, sonuçta elde edilen tablo tek sütunlu bir tablo olur.If the result of the formula is a single value, the resulting table will be a single column table. 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.If the result of the formula is a record, the resulting table will contain records with the same columns as the result record.

Formülün sonucu boş bir değerse söz konusu giriş kaydı için sonuç tablosunda kayıt yer almaz.If the result of the formula is a blank value, then there will be no record in the result table for that input record. Bu durumda sonuç tablosunda, kaynak tablosundan daha az sayıda kayıt yer alır.In this case, there will be fewer records in the result table than the source table.

Eylem gerçekleştirmeTaking action

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.The formula can include functions that take action, such as modifying the records of a data source with the Patch and Collect functions. Formül, bağlantılarda yöntemler de çağırabilir.The formula can also call methods on connections. ; işleci kullanılarak her kayıt için birden çok eylem gerçekleştirilebilir.Multiple actions can be performed per record by using the ; operator. ForAll işlevinin konusu olan tabloyu değiştiremezsiniz.You can't modify the table that is the subject of the ForAll function.

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.When writing your formula, keep in mind that records can be processed in any order and, when possible, in parallel. Tablonun ilk kaydı son kayıttan sonra işlenebilir.The first record of the table may be processed after the last record. Sıralama bağımlılıklarından kaçınmaya dikkat edin.Take care to avoid ordering dependencies. Bu nedenle UpdateContext, Clear ve ClearCollect işlevleri bu etkiye duyarlı olacak değişkenler barındırmaları için kolayca kullanılabileceklerinden bunları bir ForAll işlevinin içinde kullanamazsınız.For this reason, you can't use the UpdateContext, Clear, and ClearCollect functions within a ForAll function because they could easily be used to hold variables that would be susceptible to this effect. Collect işlevini kullanabilirsiniz ancak kayıtların eklenme sırası tanımlı olmaz.You can use Collect, but the order in which records are added is undefined.

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.Several functions that modify data sources, including Collect, Remove, and Update, return the changed data source as their return value. 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.These return values can be large and consume significant resources if returned for every record of the ForAll table. 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.You may also find that these return values are not what you expect, because ForAll can operate in parallel and may separate the side effects of these functions from obtaining their result. ForAll işlevinin döndürülen değeri gerçekten 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.Fortunately, if the return value from ForAll is not actually used, which is often the case with data modification functions, then the return value will not be created and there are no resource or ordering concerns. 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.But if you are using the result of a ForAll and one of the functions that returns a data source, think carefully about how you structure the result and try it out first on small data sets.

AlternatiflerAlternatives

PowerApps'teki işlevlerin birçoğu tek sütunlu tablo kullanarak aynı anda birden çok değeri işleyebilir.Many functions in PowerApps can process more than one value at a time through the use of a single-column table. Ö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.For example, the Len function can process a table of text values, returning a table of lengths, in the same manner that ForAll could. Bu, birçok durumda ForAll işlevini kullanma gereksinimini ortadan kaldırabilir, daha etkili olabilir ve daha kolay okunur.This can eliminate the need to use ForAll in many cases, can be more efficient, and is easier to read.

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.Another consideration is that ForAll is not delegable while other functions may be, such as Filter.

TemsilciDelegation

Bu işlev, bir veri kaynağı ile kullanıldığında temsilci olarak seçilemez.When used with a data source, this function can't be delegated. Veri kaynağının yalnızca ilk bölümü alınır ve ardından işlev uygulanır.Only the first portion of the data source will be retrieved and then the function applied. Sonuç bütünüyle kapsayıcı olmayabilir.The result may not represent the complete story. Size bu sınırlamayı anımsatmak ve mümkün olduğunda, temsilci seçilebilen alternatiflere yönelmenizi önermek üzere yazma zamanında mavi bir nokta görünür.A blue dot will appear at authoring time to remind you of this limitation and to suggest switching to delegable alternatives where possible. Daha fazla bilgi için bkz. temsilci seçmeye genel bakış.For more information, see the delegation overview.

Söz dizimiSyntax

ForAll( Tablo, Formül )ForAll( Table, Formula )

  • Table - Gerekli.Table - Required. Üzerinde işlem yapılması gereken tablo.Table to be acted upon.
  • Formula - Gerekli.Formula - Required. Tüm Tablo kayıtları için değerlendirilecek formül.The formula to evaluate for all records of the Table.

ÖrneklerExamples

HesaplamalarCalculations

Aşağıdaki örneklerde Squares veri kaynağı kullanılmıştır:The following examples use the Squares data source:

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üğmeye tıklayın veya dokunun:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the button:

  • ClearCollect( Squares, [ "1", "4", "9" ] )ClearCollect( Squares, [ "1", "4", "9" ] )
FormülFormula AçıklamaDescription SonuçResult
ForAll( Squares, Sqrt( Value ) )ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )Sqrt( Squares )
Giriş tablosunun tüm kayıtları için Value sütununun karekökünü hesaplar.For all the records of the input table, calculates the square root of the Value column. 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.The Sqrt function can also be used with a single-column table, making it possible perform this example without using ForAll.
ForAll( Squares, Power( Value, 3 ) )ForAll( Squares, Power( Value, 3 ) ) Giriş tablosunun tüm kayıtları için Value sütununu üçüncü kuvvetine yükseltir.For all the records of the input table, raises the Value column to the third power. Power işlevi, tek sütunlu tabloları desteklemez.The Power function does not support single-column tables. Bu nedenle, bu durumda ForAll kullanılmalıdır.Therefore, ForAll must be used in this case.

Bağlantı kullanmaUsing a connection

Aşağıdaki örneklerde Expressions veri kaynağı kullanılmıştır:The following examples use the Expressions data source:

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üğmeye tıklayın veya dokunun:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the button:

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

Bu örnek aynı zamanda bir Microsoft Translator bağlantısı da kullanır.This example also uses a Microsoft Translator connection. Bu bağlantıyı uygulamanıza eklemek için bağlantıları yönetme ile ilgili konuya bakın.To add this connection to your app, see the topic about how to manage connections.

FormülFormula AçıklamaDescription SonuçResult
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) )ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Expressions tablosundaki tüm kayıtlar için Value sütununun içeriklerini İspanyolcaya (kısaltması "es") çevirir.For all the records in the Expressions table, translate the contents of the Value column into Spanish (abbreviated "es").
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) )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.For all the records in the Expressions table, translate the contents of the Value column into French (abbreviated "fr").

Bir tabloyu kopyalamaCopying a table

Bazen verileri filtrelemeniz, şekillendirmeniz, sıralamanız ve denetlemeniz gerekir.Sometimes you need to filter, shape, sort, and manipulate data. PowerApps bunu yapmak için Filter, AddColumns ve Sort gibi çok sayıda işlev sağlar.PowerApps provides a number of functions for doing this, such as Filter, AddColumns, and Sort. PowerApps her tabloyu değer olarak değerlendirir, formüllerde akışının gerçekleşmesini ve kolayca kullanılabilmesini sağlar.PowerApps treats each table as a value, allowing it to flow through formulas and be consumed easily.

Ayrıca daha sonra kullanmak üzere bu sonucun bir kopyasını oluşturmak isteyebilirsiniz.And sometime you will want to make a copy of this result for later use. Alternatif olarak, bir veri kaynağından diğerine bilgi taşımak da isteyebilirsiniz.Or you will want to move information from one data source to another. PowerApps, verileri kopyalamak için Collect işlevini sağlar.PowerApps provides the Collect function to copy data.

Ancak bu kopyayı oluşturmadan önce gerçekten gerekip gerekmediğini dikkatlice düşünün.But before you make that copy, think carefully if it is really needed. Pek çok durumda; temel alınan, isteğe bağlı veri kaynağını bir formülle filtrelemek ve şekillendirmek işe yarar.Many situations can be addressed by filtering and shaping the underlying data source on demand with a formula. Kopya oluşturmanın bazı olumsuz yanları şunlardır:Some of the downsides to making a copy include:

  • Aynı bilgilerin iki kopyası bunlardan birinin eşitlenmemiş hale gelebileceği anlamına gelir.Two copies of the same information means that one of them can fall out of sync.
  • Kopya oluşturmak, büyük miktarlarda bilgisayar belleği, ağ bant genişliği ve/veya zaman kullanımına neden olabilir.Making a copy can consume a lot of computer memory, network bandwidth, and/or time.
  • Çoğu veri kaynağı için kopyalama, taşınabilecek veri miktarına sınırlama getirilecek şekilde temsilci seçilemez.For most data sources, copying cannot be delegated, limiting how much data can be moved.

Aşağıdaki örneklerde Products veri kaynağı kullanılmıştır:The following examples use the Products data source:

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üğmeye tıklayın veya dokunun:To create this data source as a collection, set the OnSelect property of a Button control to this formula, open Preview mode, and then click or tap the button:

  • 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 } ) )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:Our goal is to work with a derivative table that includes only the items where more has been requested than is available, and for which we need to place an order:

Bu görevi, çeşitli artılar ve eksilerle tümü aynı sonucu veren birkaç farklı yöntemle gerçekleştirebiliriz.We can perform this task in a couple of different ways, all of which produce the same result, with various pros and cons.

İsteğe bağlı tablo şekillendirmeTable shaping on demand

Bu kopyayı oluşturmayın!Don't make that copy! İhtiyaç duyduğumuz her yerde aşağıdaki formülü kullanabiliriz:We can use the following formula anywhere we need:

  • ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )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 Filtre ve AddColumns işlevleri tarafından bir kayıt kapsamı oluşturulur.A record scope is created by the Filter and AddColumns functions to perform the comparison and subtraction operations, respectively, with the 'Quantity Requested' and 'Quantity Available' fields of each record.

Bu örnekte Filter işlevi temsilci olarak seçilebilir.In this example, the Filter function can be delegated. 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.This is important, as it can find all the products that meet the criteria, even if that is only a few records out of a table of millions. 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.At this time, ShowColumns and AddColumns cannot be delegated, so the actual number of products that needs to be ordered will be limited. Bu sonucun boyutunun her zaman daha küçük olacağını bildiğiniz sürece bu, iyi bir yaklaşımdır.If you know the size of this result will always be relatively small, this approach is fine.

Kopya oluşturmadığımızdan, yönetilecek veya tarih dışına denk gelecek ek bir bilgi kopyası bulunmaz.And because we didn't make a copy, there is no additional copy of the information to manage or fall out of date.

İsteğe bağlı ForAllForAll on demand

Diğer bir yaklaşım ise tablo şekillendirme işlevlerini değiştirmek için ForAll işlevini kullanmaktır:Another approach is to use the ForAll function to replace the table-shaping functions:

  • ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', { Product: Product, 'Quantity To Order': 'Quantity Requested' - 'Quantity Available' } ) )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.This formula may be simpler for some people to read and write.

ForAll işlevinin hiçbir bölümü temsilci olarak seçilemez.No part of the ForAll is delegable. Products tablosunun yalnızca ilk kısmı değerlendirilir, bu da söz konusu tablonun çok büyük olması durumunda sorun teşkil edebilir.Only the first portion of the Products table will be evaluated, which could be a problem if this table is very large. Önceki örnekte Filter işlevi temsilci olarak seçilebildiğinden büyük veri kümeleriyle daha iyi şekilde çalışabilir.Because Filter could be delegated in the previous example, it could work better with large data sets.

Sonucu toplamaCollect the result

Bazı durumlarda, verilerin bir kopyası gerekli olabilir.In some situations, a copy of data may be required. Bir veri kaynağından diğerine bilgi taşımanız gerekebilir.You may need to move information from one data source to another. Bu örnekte, siparişler bir satıcının sistemindeki NewOrder tablosu üzerinden verilir.In this example, orders are placed through a NewOrder table on a vendor's system. 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.For high-speed user interactions, you may want to cache a local copy of a table so that there is no server latency.

Önceki iki örnekle aynı tablo şekillendirmesini kullanır ancak sonucu yakalayıp bir koleksiyona alırız:We use the same table shaping as the previous two examples, but we capture the result into a collection:

  • ClearCollect( NewOrder, ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" ) )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( 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.ClearCollect and Collect can't be delegated. Sonuç olarak, bu şekilde taşınabilecek veri miktarı sınırlıdır.As a result the amount of data that can be moved in this manner is limited.

ForAll içinde CollectCollect within ForAll

Son olarak, Collect işlevini doğrudan ForAll içinde gerçekleştirebiliriz:Finally, we can perform the Collect directly within the ForAll:

  • Clear( ProductsToOrder ); ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', Collect( NewOrder, { Product: Product, 'Quantity To Order': 'Quantity Requested' - 'Quantity Available' } ) ) )Clear( ProductsToOrder ); 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.Again, the ForAll function can't be delegated at this time. Products tablomuz büyükse ForAll yalnızca ilk kayıt kümesine bakar ve sipariş edilmesi gereken bazı ürünleri kaçırabiliriz.If our Products table is large, ForAll will look at the first set of records only and we may miss some products that need to be ordered. Ancak bu yaklaşım, küçük kalacağını bildiğimiz tablolar için uygundur.But for tables that we know will remain small, this approach is fine.

ForAll işlevinin sonucunu yakalamadığımızı unutmayın.Note that we are not capturing the result of the ForAll. Bunun içinden yapılan Collect işlev çağrıları tüm kayıtlar için NewOrder verilerini döndürür; bu da, yakalama durumunda çok sayıda veriye denk gelebilir.The Collect function calls made from within it will return the NewOrder data source for all the records, which could add up to a lot of data if we were capturing it.