Formel-, berechnete und Rollup-Spalten mithilfe von Code

Formel-, berechnete und Rollup-Spalten befreien den Anwender von der manuellen Durchführung von Berechnungen und ermöglichen ihm, sich auf seine Arbeit zu konzentrieren. Systemadministratoren können jetzt ein Feld definieren, das den Wert vieler allgemeiner Berechnungen enthält, ohne mit einem Entwickler arbeiten zu müssen. Entwickler können die Plattformfunktionen auch dazu verwenden, um diese Berechnungen anstatt mit Code durchzuführen.

Dieser Artikel konzentriert sich darauf, wie diese Spalten in den Spaltendefinitionen und APIs definiert sind, um mit Rollup-Spalten zu interagieren. Wir unterstützen die Definition der Formeln mit Code nicht. Sie müssen Power Apps verwenden, um die Formeln für den jeweiligen Spaltentyp festzulegen. Weitere Informationen:

Gemeinsame Elemente und Eigenschaften

Formel-, berechnete und Rollup-Spalten haben einige allgemeine Elemente und Eigenschaften gemeinsam, zum Beispiel:

  • Sie sind schreibgeschützt.
  • Sie sind nicht für den Benutzer spezifsich.
    Die Berechnung wird unter Verwendung eines Systembenutzerkontos durchgeführt, sodass die Werte auf Datensätzen basieren können, für die der Benutzer sonst keine Berechtigung zum Anzeigen hat, z. B. Spalten, für die die Feldebene-Sicherheit aktiviert ist.

Alle Spalten, die von AttributeMetadata erben, haben eine Eigenschaft SourceType, die die in der folgenden Tabelle gezeigten Werte enthalten kann.

Wert Beschreibung
Null Kein gültiger Typ von Spalte, um eine Formel-, berechnete oder Rollup-Spalte zu sein.
0 Einfache Spalte. Die Spalte ist nicht als Formel-, berechnete oder Rollup-Spalte definiert.
1 Berechnete Spalte
2 Rollup-Spalte
3 Formelspalte

Formel-, berechnete und Rollup-Spalten basieren auf bestehenden Spaltentypen, die von AttributeMetadata erben. Die folgenden Tabellen zeigen die verfügbaren Spaltentypen und welche Quelltypen unterstützt werden:

Type Unterstützte Quelltypen
BooleanAttributeMetadata Formel, berechnet und Rollup
DateTimeAttributeMetadata Formel, berechnet und Rollup
DecimalAttributeMetadata Formel, berechnet und Rollup
StringAttributeMetadata Formel, berechnet und Rollup
IntegerAttributeMetadata Nur berechnet und Rollup
MoneyAttributeMetadata Nur berechnet und Rollup
PicklistAttributeMetadata Nur berechnet und Rollup

Jeder dieser Spaltentypen hat die folgenden Eigenschaften, um Formeln, Berechnungen und Rollups zu unterstützen.

Eigenschaften Definition
FormulaDefinition Enthält die Definition der Formel, die verwendet wird, um die Berechnung oder den Rollup auszuführen. Formelspalten werden mit YAML definiert. Berechnete und Rollup-Spalten werden mithilfe von XAML definiert. Die einzige unterstützte Möglichkeit, diesen Wert zu ändern, ist durch den Power Apps-Editor.
SourceTypeMask Der Bitmaskenwert dieser schreibgeschützten Eigenschaft beschreibt die Typen von Quellen, die in der Formel der Spalte verwendet werden oder wenn die Formel der Spalte nicht gültig ist.

- 0: Undefined. Der Standardwert für einfache und Rollup-Spalten.
- 1: Simple. Die Formel- oder berechnete Spalte bezieht sich auf eine Spalte im selben Datensatz.
- 2: Related. Die Formel- oder berechnete Spalte bezieht sich auf eine Spalte in einem Bezugsdatensatz.
- 4: Logical. Die Formel- oder berechnete Spalte bezieht sich auf eine Spalte im selben Datensatz, der in einer anderen Datenbanktabelle gespeichert ist. Weitere Informationen: Logische Spalten
- 8: Calculated. Die Formel- oder berechnete Spalte verweist auf eine andere Formel- oder berechnete Spalte.
- 16: Rollup. Die Formel- oder berechnete Spalte verweist auf eine Rollup-Spalte.
- 32: Invalid. Die Formel-, berechnete oder Rollup-Spalte ist ungültig.
Typischerweise ist eine Spalte ungültig, wenn sie auf eine Spalte verweist, die nicht mehr existiert.

Hinweis: Eine oder mehrere dieser Bedingungen können für jede berechnete oder Rollup-Spalte zutreffen. Da dies ein Bitmaskenwert ist, finden Sie es möglicherweise hilfreich, SourceTypeMasks-Enumeration zu verwenden, wenn Sie bitweise Vorgänge ausführen.

Formel- und berechnete Spalten

Formel- und berechnete Spalten werden in Echtzeit berechnet, wenn sie abgerufen werden. Formel- und berechnete Spalten können aus verschiedenen Datentypen zusammengesetzt werden. Zum Beispiel kann eine berechnete Integer-Spalte Werte aus Dezimal- oder Währungsspalten referenzieren.

Nur berechnete Spaltenwerte sind in der Pipeline des Abruf-Plug-Ins verfügbar. Post-Image eines Tabellendatensatzes Update oder Create enthält den berechneten Spaltenwert in Stufe 40. Weitere Informationen: Ereignisausführungspipeline und Entitätsbilder

Einschränkungen

Für Formel- und berechnete Spalten gelten die folgenden Einschränkungen:

Formelspalten

  • Formelspalten haben keine Werte, wenn ein Benutzer mit mobilem Client offline ist.
  • MaxValue- und MinValue-Spaltendefinitionseigenschaften können nicht auf Formelspalten festgelegt werden. Mehr Informationen: Richtlinien und Einschränkungen

Berechnete Spalten

Sie können Werte in berechneten Spalten nicht auf einen logischen Wert in derselben Tabelle anwenden, um Daten zu sortieren, die von einer Abfrage zurückgegeben werden. Obwohl Ihre Abfrage angeben kann, dass die Ergebnisse anhand einer berechneten Spalte sortiert werden sollen, wird die Sortierrichtung ignoriert und führt nicht zu einem Fehler. Wenn die berechnete Spalte nur einfache Werte im selben Datensatz referenziert, funktioniert die Sortierung normal. Sie können die Quellen, die in einer berechneten Spalte verwendet werden, mit der Eigenschaft SourceTypeMask in den Spaltendefinitionen bestimmen.

  • In einer berechneten Spalte können nur Spalten aus einer unmittelbar übergeordneten Tabelle verwendet werden.
  • Gespeicherte Abfragen, Diagramme und Visualisierungen können über maximal 50 eindeutige berechnete Spalten verfügen.
  • Berechnete Spalten können in ihrer Formel auf andere berechnete Spalten verweisen, aber sie können nicht auf sich selbst verweisen.
  • Berechnete Spalten haben keine Werte, wenn ein Benutzer mit mobilem Client offline ist.
  • MaxValue- und MinValue-Spaltendefinitionseigenschaften können nicht auf berechnete Spalten festgelegt werden

Rollup-Spalten

Da Rollup-Spalten in der Datenbank bestehen bleiben, können sie genau wie reguläre Spalten zum Filtern oder Sortieren verwendet werden. Jede Art von Prozess oder Plug-In verwendet den zuletzt berechneten Wert der Spalte. Die Rollup-Spaltenwerte werden asynchron durch Systemaufträge berechnet. Administratoren legen fest, wann ein Auftrag ausgeführt wird, oder sie halten den Auftrag an. Standardmäßig wird jede Spalte stündlich aktualisiert.

Wenn eine Rollup-Spalte erstellt oder aktualisiert wird, wird ein Auftrag Massenberechnete Rollup-Felder geplant, der in 12 Stunden ausgeführt wird. Die 12-stündige Verzögerung dient dazu, diesen ressourcenintensiven Vorgang zu einer Zeit auszuführen, in der die Benutzer am wenigsten betroffen sind. Wenn der Auftrag abgeschlossen ist, wird automatisch geplant, ihn in 10 Jahren in der Zukunft auszuführen. Liegt ein Problem mit der Berechnung vor, wird das Problem mit dem Systemauftrag gemeldet. Suchen Sie den Systemauftrag, um Fehler mit Rollup-Feldern zu finden. Informationen zum Suchen des Systemauftrags finden Sie unter Rollup-Aufträge anzeigen.

Tipp

Als Entwickler, der eine Lösung in einer Entwicklungsumgebung testet, sollten Sie nicht 12 Stunden warten. Sie können dies beschleunigen. In der Liste Systemaufträge verwenden Sie die Ansicht Seriensystemaufträge, um die Liste zu feltern und den Auftrag Massenberechnen von Rollupfeldern zu suchen. Wenn der Auftrag ausgewählt ist, verwenden Sie Weitere Aktionen > Später durchführen, und legen Sie die Uhrzeit, die bald kommt, fest.

Wenn Sie die Erstellung eines neuen Massenberechnete Rollup-Felder-Jobs programmatisch auslösen wollen, rufen Sie die AttributeMetadata für die Rollup-Spalte mit RetrieveAttributeRequest ab und aktualisieren die Spalte mit UpdateAttributeRequest, ohne tatsächliche Änderungen vorzunehmen.

Der Auftrag Massenberechnete Rollup-Felder wird sofort ausgeführt, wenn eine Lösung importiert wird, die eine Rollup-Spalte enthält. Dies ist ein weiterer Grund, um Lösungen in Zeiten zu installieren, die sich auf Benutzer nicht nachteilig auswirken.

Jede Rollup-Spalte für eine Tabelle wird auch zwei unterstützende Spalten für die Rollup-Spalte enthalten:

  • <attribute SchemaName> _Date: DateTime – Wann das Rollup zuletzt berechnet wurde.
  • <attribute SchemaName> _State: Integer – Der Status der Rollup-Berechnung. Weitere Informationen: Rollupzustandswerte

Rollupstatuswerte

Der Status einer Rollup-Spaltenberechnung ist in der entsprechenden <attribute SchemaName>_State-Spalte und in den Spalten CalculateRollupFieldResponse.FieldState verfügbar Eigenschaft verfügbar sind. Werte, die den Status angeben, sind in der folgenden Tabelle aufgeführt.

Statuswert Beschreibung
0 NotCalculated: Der Wert der Spalte muss noch berechnet werden.
1 Calculated: Spaltenwert wurde zum letzten Aktualisierungszeitpunkt in der Spalte <attribute SchemaName>_Date berechnet.
2 OverflowError: Die Berechnung des Spaltenwertes führte zu einem Überlauffehler.
3 OtherError: Die Berechnung des Spaltenwerts ist aufgrund eines internen Fehlers fehlgeschlagen, das nächste Ausführen des Berechnungsauftrags wird das Problem wahrscheinlich beheben.
4 RetryLimitExceeded: Die Berechnung des Spaltenwerts ist fehlgeschlagen, weil die maximale Anzahl von Wiederholungsversuchen zur Berechnung des Werts überschritten wurde, wahrscheinlich aufgrund einer hohen Anzahl von Parallelitäts- und Sperrkonflikten.
5 HierarchicalRecursionLimitReached: Die Berechnung des Spaltenwerts ist fehlgeschlagen, weil die maximale Hierarchietiefengrenze für die Berechnung erreicht wurde.
6 LoopDetected: Die Berechnung des Spaltenwerts ist fehlgeschlagen, weil in der Hierarchie des Datensatzes eine rekursive Schleife entdeckt wurde.

Einen berechneten Wert einer Rollup-Spalte sofort abrufen

Rollup-Spalten unterstützen eine CalculateRollupField-Nachricht, die Entwickler verwenden können, um einen Rollup-Spaltenwert bei Bedarf zu berechnen. Verwenden Sie für das SDK die CalculateRollupFieldRequest-Klasse und für die Web-API die CalculateRollupField-Funktion

Diese Nachricht ist eine synchrone Operation für nur die in der Anfrage identifizierte Spalte. Wenn der Wert dieses Datensatzes als Teil anderer Rollup-Spalten enthalten ist, werden die Werte dieser Spalten die mögliche Wertänderung, die durch den Aufruf dieser Methode verursacht wird, erst bei den regelmäßig geplanten asynchronen Aufträgen berücksichtigen, die diese Berechnungen durchführen.

Einschränkungen

  • Rollup-Spalten können nicht als Workflow-Ereignis oder Wartebedingung verwendet werden. Diese Spalten lösen kein Ereignis zum Auslösen von Workflows aus.
  • Die Spalten ModifiedBy und ModifiedOn für die Tabelle werden nicht aktualisiert, wenn die Rollup-Spalte aktualisiert wird.
  • Es können maximal 100 Rollup-Spalten innerhalb einer Organisation definiert werden. Jede Tabelle kann nicht mehr als 10 Rollup-Spalten haben.
  • Eine Rollup-Spaltenformel kann nicht auf eine andere Rollup-Spalte verweisen.
  • Eine Rollup-Spaltenformel kann nicht auf eine komplexe berechnete oder Formelspalte verweisen. Nur berechnete oder Formelspalten, die auf einfache Spalten in demselben Datensatz verweisen, können mit Rollups verwendet werden.
  • Eine Rollup-Spaltenformel kann keine Datensätze in N:N-Beziehungen einschließen. Es kann nur Datensätze in 1: n-Beziehungen enthalten.
  • Rollup-Spaltenformeln können keine 1:N-Beziehungen mit der Tabelle ActivityPointer oder ActivityParty verwenden.

SourceTypeMasks-Enumeration

Die Eigenschaft SourceTypeMask für die Spalten, die berechnete und Rollup-Spalten unterstützen, enthält einen Bitmaskenwert. Um die relevanten Informationen vo dem Wert zu extrahieren, ist es hilfreich, diese Enumeration zu besitzen, wenn Sie bitweise Vorgänge ausführen. Verwenden Sie die folgende SourceTypeMasks-Enumeration, wenn Sie den SourceTypeMask-Eigenschaftswert vergleichen.

 public enum SourceTypeMasks  
{  
    /// <summary>  
    /// Undefined: 0 - The default value for simple and rollup columns.  
    /// </summary>  
    Undefined = 0,  
    /// <summary>  
    /// Simple: 1 - The calculated or formula column refers to a column in the same record.  
    /// </summary>  
    Simple = 1,  
    /// <summary>  
    /// Related: 2 - The calculated or formula column refers to a column in a related record.  
    /// </summary>  
    Related = 2,  
    /// <summary>  
    /// Logical: 4 - The calculated or formula column refers to a logical column.  
    /// </summary>  
    Logical = 4,  
    /// <summary>  
    /// Calculated: 8 - The calculated or formula column refers to another calculated column.  
    /// </summary>  
    Calculated = 8,  
    /// <summary>  
    /// Rollup: 16 - The calculated or formula column refers a rollup column.   
    /// </summary>  
    Rollup = 16,  
    /// <summary>  
    /// Invalid: 32 - The calculated,formula, or rollup column is invalid.  
    /// Typically this would be where a field refers to a column that no longer exists.   
    /// </summary>  
    Invalid = 32  
}  

Siehe auch

Spaltendefinitionen
Mit Formelspalten arbeiten (Vorschauversion)
Berechnete Spalten definieren
Rollup-Spalten definieren
Beispiel: Mit einem bestimmten Datensatz verknüpfte Rollupdatensätze

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).