BerechnungsgruppenCalculation groups

gilt für:  Ja SQL Server 2019 und höher Analysis Services  Ja Azure Analysis Services  Ja Power BI PremiumAPPLIES TO: yesSQL Server 2019 and later Analysis Services yesAzure Analysis Services yesPower BI Premium

Berechnungsgruppen können die Anzahl der redundanten Measures deutlich reduzieren, indem sie gängige Measure-Ausdrücke als Berechnungselemente gruppieren.Calculation groups can significantly reduce the number of redundant measures by grouping common measure expressions as calculation items. Berechnungs Gruppen werden in tabellarischen Modellen mit dem Kompatibilitäts Grad1500 und höher unterstützt.Calculation groups are supported in tabular models at the 1500 and higher compatibility level.

Dieser Artikel beschreibt Folgendes:This article describes:

  • VorteileBenefits
  • Funktionsweise von Berechnungs GruppenHow calculation groups work
  • Dynamische Format ZeichenfolgenDynamic format strings
  • RangfolgePrecedence
  • Seitwärts RekursionSideways recursion
  • SortierenOrdering
  • Vorgehensweise: ErstellenHow to create
  • EinschränkungenLimitations

VorteileBenefits

Berechnungs Gruppen beheben ein Problem in komplexen Modellen, bei dem eine Verbreitung redundanter Measures mit denselben Berechnungen möglich ist, die am häufigsten bei Zeit Intelligenz Berechnungen verwendet werden.Calculation groups address an issue in complex models where there can be a proliferation of redundant measures using the same calculations - most common with time intelligence calculations. Ein Vertriebs Analyst möchte z. b. Umsatz Summen und Bestellungen nach Monat-bis-heute (MTD), Quartal-to-date (QTD), year-to-date (YTD), Aufträge Year-to-date für das vorherige Jahr (PY) usw. anzeigen.For example, a sales analyst wants to view sales totals and orders by month-to-date (MTD), quarter-to-date (QTD), year-to-date (YTD), orders year-to-date for the previous year (PY), and so on. Der Daten modelzierer muss separate Measures für jede Berechnung erstellen, was zu Dutzenden von Measures führen kann.The data modeler has to create separate measures for each calculation, which can lead to dozens of measures. Für den Benutzer kann dies bedeuten, dass Sie genau so viele Measures sortieren und Sie einzeln auf den Bericht anwenden müssen.For the user, this can mean having to sort through just as many measures, and apply them individually to their report.

Sehen wir uns zunächst an, wie Berechnungs Gruppen Benutzern in einem Bericht Erstellungs Tool wie Power BI angezeigt werden.Let's first take a look at how calculation groups appear to users in a reporting tool like Power BI. Wir sehen uns nun an, was eine Berechnungs Gruppe ausmacht und wie Sie in einem Modell erstellt werden.We'll then take a look at what makes up a calculation group, and how they're created in a model.

Berechnungsgruppen werden in Berichterstellungsclients als Tabelle mit einer einzigen Spalte angezeigt.Calculation groups are shown in reporting clients as a table with a single column. Die Spalte ist nicht wie eine typische Spalte oder Dimension, sondern stellt eine oder mehrere wiederverwendbare Berechnungen dar, oder Berechnungs Elemente , die auf jedes Measure angewendet werden können, das dem Filter Werte für eine Visualisierung bereits hinzugefügt wurde.The column isn't like a typical column or dimension, instead it represents one or more reusable calculations, or calculation items that can be applied to any measure already added to the Values filter for a visualization.

In der folgenden Animation analysiert ein Benutzer Umsatzdaten für die Jahre 2012 und 2013.In the following animation, a user is analyzing sales data for years 2012 and 2013. Vor dem Anwenden einer Berechnungs Gruppe berechnet der allgemeine basismeasure- Umsatz eine Summe der Gesamtumsätze für jeden Monat.Before applying a calculation group, the common base measure Sales calculates a sum of total sales for each month. Der Benutzer möchte dann Zeit Intelligenz Berechnungen anwenden, um Umsatz Summen für "Monat", "Quartal bis Datum", "Jahr bis Datum" usw. zu erhalten.The user then wants to apply time intelligence calculations to get sales totals for month to date, quarter to date, year to date, and so on. Ohne Berechnungs Gruppen müsste der Benutzer einzelne Zeit Intelligenz Measures auswählen.Without calculation groups, the user would have to select individual time intelligence measures.

Bei einer Berechnungs Gruppe wird in diesem Beispiel Zeit Intelligenz, wenn der Benutzer das Zeit Berechnungs Element in den Spalten Filterbereich zieht, jedes Berechnungs Element als separate Spalte angezeigt.With a calculation group, in this example named Time Intelligence, when the user drags the Time Calculation item to the Columns filter area, each calculation item appears as a separate column. Werte für jede Zeile werden aus dem basismeasure " Sales" berechnet.Values for each row are calculated from the base measure, Sales.

Die Berechnungs Gruppe wird in Power BI angewendet.

Berechnungs Gruppen können mit expliziten DAX-Measures verwendet werden.Calculation groups work with explicit DAX measures. In diesem Beispiel ist Sales ein explizites Measure, das bereits im Modell erstellt wurde.In this example, Sales is an explicit measure already created in the model. Berechnungs Gruppen können nicht mit impliziten DAX-Measures verwendet werden.Calculation groups do not work with implicit DAX measures. Beispielsweise werden in Power BI implizite Measures erstellt, wenn ein Benutzer Spalten auf visuelle Elemente zieht, um aggregierte Werte anzuzeigen, ohne ein explizites Measure zu erstellen.For example, in Power BI implicit measures are created when a user drags columns onto visuals to view aggregated values, without creating an explicit measure. Zu diesem Zeitpunkt generiert Power BI DAX für implizite Measures, die als Inline-DAX-Berechnungen geschrieben wurden. Dies bedeutet, dass implizite Measures nicht mit Berechnungs Gruppen funktionieren können.At this time, Power BI generates DAX for implicit measures written as inline DAX calculations - meaning implicit measures cannot work with calculation groups. Eine neue Modell Eigenschaft, die im tabellarischen Objektmodell (Tom) sichtbar ist, wurde in " entmuageimplicitmeasures" eingeführt.A new model property visible in the Tabular Object Model (TOM) has been introduced, DiscourageImplicitMeasures. Derzeit muss diese Eigenschaft auf truefestgelegt werden, damit Berechnungs Gruppen erstellt werden können.Currently, in order to create calculation groups this property must be set to true. Wenn der Wert auf true festgelegt ist, wird die Erstellung impliziter Measures im Live Connect-Modus Power BI Desktop deaktiviert.When set to true, Power BI Desktop in Live Connect mode disables creation of implicit measures.

Berechnungs Gruppen unterstützen auch MDX-Abfragen (Multidimensional Data Expressions).Calculation groups also support Multidimensional Data Expressions (MDX) queries. Dies bedeutet, dass Microsoft Excel-Benutzer, die tabellarische Datenmodelle mithilfe von MDX Abfragen, die Berechnungs Gruppen in Arbeitsblatt-PivotTables und-Diagrammen in vollem Umfang nutzen können.This means, Microsoft Excel users, which query tabular data models by using MDX, can take full advantage of calculation groups in worksheet PivotTables and charts.

FunktionsweiseHow they work

Nachdem Sie nun gesehen haben, wie Berechnungs Gruppen von Benutzern profitieren, sehen wir uns an, wie das Beispiel für die Zeit Intelligenz-Berechnungs Gruppe erstellt wird.Now that you've seen how calculation groups benefit users, let's take a look at how the Time Intelligence calculation group example shown is created.

Bevor wir uns mit den Details befassen, führen wir einige neue DAX-Funktionen speziell für Berechnungs Gruppen ein:Before we go into the details, let's introduce some new DAX functions specifically for calculation groups:

Selectedmeasure : wird von Ausdrücken für Berechnungs Elemente verwendet, um auf das Measure zu verweisen, das sich derzeit im Kontext befindet.SELECTEDMEASURE - Used by expressions for calculation items to reference the measure that is currently in context. In diesem Beispiel das Sales-Measure.In this example, the Sales measure.

Selectedmeasurename : wird von Ausdrücken für Berechnungs Elemente verwendet, um das Measure zu bestimmen, das sich im Kontext nach Namen befindet.SELECTEDMEASURENAME - Used by expressions for calculation items to determine the measure that is in context by name.

Isselectedmeasure : wird von Ausdrücken für Berechnungs Elemente verwendet, um zu bestimmen, ob das Measure, das sich im Kontext befindet, in einer Liste von Measures angegeben wird.ISSELECTEDMEASURE - Used by expressions for calculation items to determine the measure that is in context is specified in a list of measures.

Selectedmeasformatatstring : wird von Ausdrücken für Berechnungs Elemente verwendet, um die Format Zeichenfolge des Measures abzurufen, das sich im Kontext befindet.SELECTEDMEASUREFORMATSTRING - Used by expressions for calculation items to retrieve the format string of the measure that is in context.

Beispiel für Zeit IntelligenzTime Intelligence example

Tabellenname- Zeit Intelligenz Table name - Time Intelligence
Spaltenname- Zeitberechnung Column name - Time Calculation
Rangfolge- 20Precedence - 20

Zeit Intelligenz-Berechnungs ElementeTime Intelligence calculation items

AktuellCurrent

SELECTEDMEASURE()

MTDMTD

CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))

QTDQTD

CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))

YTDYTD

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

PYPY

CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))

PY-MTDPY MTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "MTD"
)

PY-QTDPY QTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "QTD"
)

PY YTDPY YTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

Im JahresvergleichYOY

SELECTEDMEASURE() –
CALCULATE(
    SELECTEDMEASURE(),
    'Time Intelligence'[Time Calculation] = "PY"
)

Im JahresvergleichYOY%

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    ),
)

Um diese Berechnungs Gruppe zu testen, führen Sie eine DAX-Abfrage in SSMS oder in Open-Source- DAX-Studioaus.To test this calculation group, execute a DAX query in SSMS or the open-source DAX Studio. Hinweis: in diesem Beispiel für die Abfrage sind YoY und YoY% ausgelassen.Note: YOY and YOY% are omitted from this query example.

Zeit Intelligenz AbfrageTime Intelligence query

EVALUATE
CALCULATETABLE (
    SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
        "QTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
        "YTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
        "PY",      CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
        "PY QTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
        "PY YTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
    ),
    DimDate[CalendarYear] IN { 2012, 2013 }
)

Zeit Intelligenz Abfrage RückgabeTime Intelligence query return

Die Rückgabe Tabelle zeigt Berechnungen für jedes angewendete Berechnungs Element an.The return table shows calculations for each calculation item applied. Beispielsweise ist QTD für März 2012 die Summe aus Januar, Februar und 2012.For example, see QTD for March 2012 is the sum of January, February and March 2012.

Abfrage Rückgabe

Dynamische Format ZeichenfolgenDynamic format strings

Dynamische Format Zeichenfolgen mit Berechnungs Gruppen ermöglichen die bedingte Anwendung von Format Zeichenfolgen, ohne dass Sie eine Zeichenfolge zurückgeben.Dynamic format strings with calculation groups allow conditional application of format strings to measures without forcing them to return strings.

Tabellarische Modelle unterstützen die dynamische Formatierung von Measures mithilfe der DAX- Format Funktion.Tabular models support dynamic formatting of measures by using DAX's FORMAT function. Die Format-Funktion hat jedoch den Nachteil, dass eine Zeichenfolge zurückgegeben wird, wodurch Measures erzwungen werden, die andernfalls numerisch wären, um auch als Zeichenfolge zurückgegeben zu werden.However, the FORMAT function has the disadvantage of returning a string, forcing measures that would otherwise be numeric to also be returned as a string. Dies kann einige Einschränkungen haben, z. b. die Verwendung der meisten Power BI visuellen Elemente, die von numerischen Werten wie Diagrammen abhängig sind.This can have some limitations, such as not working with most Power BI visuals depending on numeric values, like charts.

Dynamische Format Zeichenfolgen für Zeit IntelligenzDynamic format strings for time intelligence

Wenn wir uns das oben gezeigte Zeit Intelligenz Beispiel ansehen, sollten alle Berechnungs Elemente mit Ausnahme von YoY% das Format des aktuellen Measures im Kontext verwenden.If we look at the Time Intelligence example shown above, all the calculation items except YOY% should use the format of the current measure in context. Beispielsweise sollte für das Sales Base-Measure berechnetes YTD eine Währung sein.For example, YTD calculated on the Sales base measure should be currency. Wenn es sich hierbei um eine Berechnungs Gruppe handelt, die einem Order-basismeasure ähnelt, wäre das Format numerisch.If this were a calculation group for something like an Orders base measure, the format would be numeric. Der Wert für " YoY%" sollte jedoch unabhängig vom Format des Basismeasures ein Prozentsatz sein.YOY%, however, should be a percentage regardless of the format of the base measure.

Für " YoY%" können Sie die Format Zeichenfolge überschreiben, indem Sie die Format Zeichenfolgen-Ausdrucks Eigenschaft auf 0,00%;-0,00%; 0,00% festlegen.For YOY%, we can override the format string by setting the format string expression property to 0.00%;-0.00%;0.00%. Weitere Informationen zu Format Zeichenfolgen-Ausdrucks Eigenschaften finden Sie unter MDX-Zell Eigenschaften-Formatieren von Zeichen folgen Inhalten.To learn more about format string expression properties, see MDX Cell Properties - FORMAT STRING Contents.

In diesem matrixvisual in Power BI sehen Sie Sales Current/YoY , und Orders Current/YoY behalten ihre jeweiligen basismeasure-Format Zeichenfolgen bei.In this matrix visual in Power BI, you see Sales Current/YOY and Orders Current/YOY retain their respective base measure format strings. Sales YoY% und Order YoY% überschreibt jedoch die Format Zeichenfolge für die Verwendung des Prozent Formats.Sales YOY% and Orders YOY%, however, overrides the format string to use percentage format.

Zeit Intelligenz in Matrix Visualisierung

Dynamische Format Zeichenfolgen für die WährungsumrechnungDynamic format strings for currency conversion

Dynamische Format Zeichenfolgen ermöglichen eine einfache Währungsumrechnung.Dynamic format strings provide easy currency conversion. Sehen Sie sich das folgende Adventure Works-Datenmodell an.Consider the following Adventure Works data model. Sie wird für die 1: n-Währungsumrechnung modelliert, wie von Konvertierungs Typendefiniert.It's modeled for one-to-many currency conversion as defined by Conversion types.

Währungs Satz im tabellarischen Modell

Der DimCurrency -Tabelle wird eine FormatString -Spalte hinzugefügt und mit Format Zeichenfolgen für die jeweiligen Währungen aufgefüllt.A FormatString column is added to the DimCurrency table and populated with format strings for the respective currencies.

Zeichen folgen Spalte formatieren

In diesem Beispiel wird die folgende Berechnungs Gruppe als definiert:For this example, the following calculation group is then defined as:

Beispiel für WährungsumrechnungCurrency Conversion example

Tabellenname- Währungsumrechnung Table name - Currency Conversion
Spaltenname: Konvertierungs Berechnung Column name - Conversion Calculation
Rangfolge- 5Precedence - 5

Berechnungs Elemente für die WährungsumrechnungCalculation items for Currency Conversion

Keine KonvertierungNo Conversion

SELECTEDMEASURE()

Umgewandelte WährungConverted Currency

IF(
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
    SELECTEDMEASURE(),
    SUMX(
        VALUES(DimDate[Date]),
        CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
    )
)

Format Zeichen folgen AusdruckFormat string expression

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

Der Format Zeichenfolgen-Ausdruck muss eine skalare Zeichenfolge zurückgeben.The format string expression must return a scalar string. Er verwendet die neue selectedmeasformatatstring -Funktion, um die basismeasure-Format Zeichenfolge wiederherzustellen, wenn mehrere Währungen im Filter Kontext vorhanden sind.It uses the new SELECTEDMEASUREFORMATSTRING function to revert to the base measure format string if there are multiple currencies in filter context.

Die folgende Animation zeigt die Währungsumrechnung für das Sales -Measure (Dynamic Format) in einem Bericht.The following animation shows the dynamic format currency conversion of the Sales measure in a report.

Dynamische Format Zeichenfolge für Währungsumrechnung angewendet

RangfolgePrecedence

Die Rangfolge ist eine Eigenschaft, die für eine Berechnungs Gruppe definiert wurde.Precedence is a property defined for a calculation group. Gibt die Auswertungs Reihenfolge an, wenn mehr als eine Berechnungs Gruppe vorhanden ist.It specifies the order of evaluation when there is more than one calculation group. Eine höhere Zahl weist auf eine höhere Rangfolge hin. Dies bedeutet, dass Sie vor Berechnungs Gruppen mit niedrigerer Rangfolge ausgewertet wird.A higher number indicates greater precedence, meaning it will be evaluated before calculation groups with lower precedence.

In diesem Beispiel verwenden wir das gleiche Modell wie in der obigen Zeit Intelligenz, aber auch eine Berechnungs Gruppe mit Durchschnittswerten hinzufügen.For this example, we'll use same model as the time intelligence example above, but also add an Averages calculation group. Die Berechnungs Gruppe "Average" enthält durchschnittliche Berechnungen, die unabhängig von der herkömmlichen Zeit Intelligenz sind, da Sie den Datumsfilter Kontext nicht ändern, sondern nur die durchschnittlichen Berechnungen darin anwenden.The Averages calculation group contains average calculations that are independent of traditional time intelligence in that they don't change the date filter context - they just apply average calculations within it.

In diesem Beispiel wird eine tägliche durchschnittliche Berechnung definiert.In this example, a daily average calculation is defined. Berechnungen, wie z. b. durchschnittliche Barrel von Öl pro Tag, sind in Öl-und Gasanwendungen üblich.Calculations such as average barrels of oil per day are common in oil-and-gas applications. Weitere häufige Geschäfts Beispiele sind der durchschnittliche Umsatz im Einzelhandel.Other common business examples include store sales average in retail.

Obwohl solche Berechnungen unabhängig von Zeit Intelligenz Berechnungen berechnet werden, ist es möglicherweise erforderlich, diese zu kombinieren.While such calculations are calculated independently of time intelligence calculations, there may well be a requirement to combine them. Beispielsweise kann es vorkommen, dass ein Benutzer einen Strom von Öl pro Tag YTD sehen möchte, um den täglichen Ölpreis von Beginn des Jahres bis zum aktuellen Datum anzuzeigen.For example, a user might want to see barrels of oil per day YTD to view the daily oil rate from the beginning of the year to the current date. In diesem Szenario sollte die Rangfolge für Berechnungs Elemente festgelegt werden.In this scenario, precedence should be set for calculation items.

Beispiel für MittelwerteAverages example

Der Tabellenname ist Average.Table name is Averages.
Der Spaltenname ist die durchschnittliche Berechnung.Column name is Average Calculation.
Die Rangfolge ist 10.Precedence is 10.

Berechnungs Elemente für DurchschnittswerteCalculation items for Averages

Kein DurchschnittNo Average

SELECTEDMEASURE()

Täglicher DurchschnittDaily Average

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Im folgenden finden Sie ein Beispiel für eine DAX-Abfrage und eine Rückgabe Tabelle:Here's an example of a DAX query and return table:

Average-AbfrageAverages query

EVALUATE
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Sales", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "No Average"
        ),
        "YTD", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "No Average"
        ),
        "Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "Daily Average"
        ),
        "YTD Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "Daily Average"
        )
    ),
    DimDate[CalendarYear] = 2012
)

Durchschnittliche Abfrage RückgabeAverages query return

Abfrage Rückgabe

Die folgende Tabelle zeigt, wie die Werte von März 2012 berechnet werden.The following table shows how the March 2012 values are calculated.

SpaltennameColumn name BerechnungCalculation
YTDYTD Summe der Verkäufe für Jan, Feb, Mar 2012Sum of Sales for Jan, Feb, Mar 2012
= 495.364 + 506.994 + 373.483= 495,364 + 506,994 + 373,483
Täglicher DurchschnittDaily Average Umsätze für Mar 2012 dividiert durch Anzahl von Tagen im MärzSales for Mar 2012 divided by # of days in March
= 373.483/31= 373,483 / 31
Täglicher YTD-DurchschnittYTD Daily Average YTD für Mar 2012 dividiert durch Anzahl der Tage in Jan, Feb und MarYTD for Mar 2012 divided by # of days in Jan, Feb, and Mar
= 1.375.841/(31 + 29 + 31)= 1,375,841 / (31 + 29 + 31)

Hier ist die Definition des YTD-Berechnungs Elements, das mit der Rangfolge 20angewendet wird.Here's the definition of the YTD calculation item, applied with precedence of 20.

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

Dies ist der tägliche Durchschnitt, der mit einer Rangfolge von 10angewendet wird.Here's Daily Average, applied with a precedence of 10.

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Da die Rangfolge der Zeit Intelligenz-Berechnungs Gruppe höher als die der Berechnung der Durchschnittswerte ist, wird Sie so weit wie möglich angewendet.Since the precedence of the Time Intelligence calculation group is higher than that of the Averages calculation group, it's applied as broadly as possible. Die tägliche durchschnittliche Berechnung von YTD wendet YTD auf den Zähler und den Nenner (Anzahl der Tage) der täglichen durchschnittlichen Berechnung an.The YTD Daily Average calculation applies YTD to both the numerator and the denominator (count of days) of the daily average calculation.

Dies entspricht dem folgenden Ausdruck:This is equivalent to the following expression:

CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))

Nicht dieser Ausdruck:Not this expression:

DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))

Seitwärts RekursionSideways recursion

Im obigen Beispiel für die Zeit Intelligenz verweisen einige Berechnungs Elemente auf andere in derselben Berechnungs Gruppe.In the Time Intelligence example above, some of the calculation items refer to others in the same calculation group. Dies wird als " seitwärts Rekursion" bezeichnet.This is called sideways recursion. Beispielsweise verweist YoY% auf YoY und py.For example, YOY% references both YOY and PY.

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

In diesem Fall werden beide Ausdrücke separat ausgewertet, da Sie unterschiedliche berechnenden Anweisungen verwenden.In this case, both expressions are evaluated separately because they are using different calculate statements. Andere Rekursions Typen werden nicht unterstützt.Other types of recursion are not supported.

Einzelnes Berechnungs Element im Filter KontextSingle calculation item in filter context

In unserem Zeit Intelligenz Beispiel hat das Berechnungs Element py YTD einen einzelnen Berechnungs Ausdruck:In our Time Intelligence example, the PY YTD calculation item has a single calculate expression:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

Das YTD-Argument der Compu()-Funktion überschreibt den Filter Kontext, um die bereits im YTD-Berechnungs Element definierte Logik wiederzuverwenden.The YTD argument to the CALCULATE() function overrides the filter context to reuse the logic already defined in the YTD calculation item. Es ist nicht möglich, "py" und "YTD" in einer einzelnen Auswertung anzuwenden.It's not possible to apply both PY and YTD in a single evaluation. Berechnungs Gruppen werden nur angewendet , wenn sich ein einzelnes Berechnungs Element aus der Berechnungs Gruppe im Filter Kontext befindet.Calculation groups are only applied if a single calculation item from the calculation group is in filter context.

SortierenOrdering

Wenn eine Spalte aus einer Berechnungs Gruppe in einen Bericht eingefügt wird, werden Berechnungs Elemente standardmäßig alphabetisch nach dem Namen im Bericht sortiert.By default, when a column from a calculation group is placed in a report, calculation items are ordered alphabetically by name in the report. Die Reihenfolge, in der die Berechnungs Elemente in einem Bericht angezeigt werden, kann durch Angabe der Ordinal-Eigenschaft geändert werden.The order in which calculation items appear in a report can be changed by specifying the Ordinal property. Das Angeben der Reihenfolge der Berechnungs Elemente mit der Ordinal-Eigenschaft ändert nicht die Rangfolge, die Reihenfolge, in der Berechnungs Elemente ausgewertet werden.Specifying calculation item order with the Ordinal property does not change precedence, the order in which calculation items are evaluated. Außerdem wird nicht die Reihenfolge geändert, in der Berechnungs Elemente im tabellarischen Modell-Explorer angezeigt werden.It also does not change the order in which calculation items appear in Tabular Model Explorer.

Um die ordinaleigenschaft für Berechnungs Elemente anzugeben, müssen Sie der Berechnungs Gruppe eine zweite Spalte hinzufügen.To specify the ordinal property for calculation items, you must add a second column to the calculation group. Anders als bei der Standard Spalte, bei der der Datentyp Text ist, hat eine zweite Spalte, die zum Anordnen von Berechnungs Elementen verwendet wird, einen ganzzahligenUnlike the default column where Data Type is Text, a second column used for ordering calculation items has a Whole Number data type. Der einzige Zweck dieser Spalte besteht darin, die numerische Reihenfolge anzugeben, in der Berechnungs Elemente in der Berechnungs Gruppe angezeigt werden.The only purpose for this column is to specify the numeric order in which calculation items in the calculation group appear. Da diese Spalte keinen Wert in einem Bericht bereitstellt, empfiehlt es sich, die Hidden -Eigenschaft auf true festzulegen.Because this column provides no value in a report, it's best to set the Hidden property to True.

Spalte für die Reihenfolge

Nachdem der Berechnungs Gruppe eine zweite Spalte hinzugefügt wurde, können Sie den ordinaleigenschaftswert für Berechnungs Elemente angeben, die Sie sortieren möchten.After a second column is added to the calculation group, you can specify the Ordinal property value for calculation items you want to order.

Ordinal-Eigenschaft

Weitere Informationen finden Sie unter to Order Berechnungs Items.To learn more, see To order calculation items.

Erstellen einer Berechnungs GruppeCreate a calculation group

Berechnungs Gruppen werden in Visual Studio mit Analysis Services Projekten VSIX-Update 2.9.2 und höher unterstützt.Calculation groups are supported in Visual Studio with Analysis Services Projects VSIX update 2.9.2 and later. Berechnungs Gruppen können auch mithilfe von tmsl (tabellarische Modell Skriptsprache) oder dem tabellarischenOpen Source-Editor erstellt werden.Calculation groups can also be created by using Tabular Model Scripting Language (TMSL) or the open source Tabular Editor.

So erstellen Sie eine Berechnungs Gruppe mithilfe von Visual StudioTo create a calculation group by using Visual Studio

  1. Klicken Sie im tabellarischen Modell-Explorer mit der rechten Maustaste auf Berechnungs Gruppen, und klicken Sie dann auf neue Berechnungs Gruppe.In Tabular Model Explorer, right-click Calculation Groups, and then click New Calculation Group. Standardmäßig enthält eine neue Berechnungs Gruppe eine einzelne Spalte und ein einzelnes Berechnungs Element.By default, a new calculation group will have a single column and a single calculation item.

  2. Verwenden Sie die Eigenschaften , um den Namen zu ändern, und geben Sie eine Beschreibung für die Berechnungs Gruppe, die Spalte und das Standard Berechnungs Element ein.Use Properties to change the name and enter a description for the calculation group, column, and default calculation item.

  3. Um einen DAX-Formel Ausdruck für das Standard Berechnungs Element einzugeben, klicken Sie mit der rechten Maustaste und klicken dann auf Formel bearbeiten , um den DAX-Editor zu öffnen.To enter a DAX formula expression for the default calculation item, right-click and then click Edit Formula to open DAX Editor. Geben Sie einen gültigen Ausdruck ein.Enter a valid expression.

  4. Um zusätzliche Berechnungs Elemente hinzuzufügen, klicken Sie mit der rechten Maustaste auf Berechnungs Elemente, und klicken Sie dann auf Neues Berechnungs Element.To add additional calculation items, right-click Calculation Items, and then click New Calculation Item.

So ordnen Sie Berechnungs Elemente anTo order calculation items

  1. Klicken Sie im Tabellen Modell-Explorer mit der rechten Maustaste auf eine Berechnungs Gruppe, und klicken Sie dann auf Spalte hinzufügen.In Tabular Model Explorer, right-click a calculation group, and then click Add column.

  2. Benennen Sie die Spalten Ordnungszahl (oder ähnliches), geben Sie eine Beschreibung ein, und legen Sie dann die Hidden -Eigenschaft auf true fest.Name the column Ordinal (or something similar), enter a description, and then set the Hidden property to True.

  3. Legen Sie für jedes Berechnungs Element, das Sie sortieren möchten, die Ordinal -Eigenschaft auf eine positive Zahl fest.For each calculation item you want to order, set the Ordinal property to a positive number. Jede Zahl ist sequenziell, z. b. wird ein Berechnungs Element mit einer ordinaleigenschaft von 1 zuerst angezeigt, eine Eigenschaft von 2 wird als zweites angezeigt usw.Each number is sequential, for example, a calculation item with an Ordinal property of 1 will appear first, a property of 2 will appear second, and so on. Berechnungs Elemente mit dem Standardwert "-1" sind nicht in der Reihenfolge enthalten, werden jedoch vor geordneten Elementen in einem Bericht angezeigt.Calculation items with the default -1 are not included in the ordering, but will appear before ordered items in a report.

EinschränkungenLimitations

Auf Objektebene (OLS), die für Berechnungs Gruppen Tabellen definiert ist, wird nicht unterstützt.Object level security (OLS) defined on calculation group tables is not supported. Allerdings können die OLE in anderen Tabellen im gleichen Modell definiert werden.However, OLS can be defined on other tables in the same model. Wenn ein Berechnungs Element auf ein gesichertes OLE-Objekt verweist, wird ein generischer Fehler zurückgegeben.If a calculation item refers to an OLS secured object, a generic error is returned.

Zeilenebene (Row Level Security , RLS) wird nicht unterstützt.Row level security (RLS) is not supported. Definieren von RLS für Tabellen im gleichen Modell, jedoch nicht für Berechnungs Gruppen selbst (direkt oder indirekt).Define RLS on tables in the same model, but not on calculation groups themselves (directly or indirectly).

Detail Zeilen Ausdrücke werden für Berechnungs Gruppen nicht unterstützt.Detail Rows Expressions are not supported with calculation groups.

Weitere InformationenSee also

DAX in tabellarischen Modellen DAX in tabular models
DAX-ReferenzDAX Reference