Круговая зависимость в рассчитанном столбце DAX :: модель AAS - PullRequest
1 голос
/ 10 апреля 2020

Я застрял в ситуации, когда добавляю новый вычисляемый столбец, но он вызывает круговую зависимость. Первый столбец рассчитывается так:

=VAR Denominator = ( Validation_Accounts_Agreements[CalculatedClosedDateVsFirstPurchaseDate] + 1 )
VAR Sales =
    CALCULATE (
        SUM ( SalesR48NBVBySolution[TotalSales] ),
        FILTER (
            SalesR48NBVBySolution,
            SalesR48NBVBySolution[invoicedate] >= Validation_Accounts_Agreements[CalculatedFirstAnchorPurchaseDateAfterGTWClosedDate]
        )
    )
VAR R6AnchorSales =
    CALCULATE (
        SUM ( SalesR48NBVBySolution[TotalSales] ),
        FILTER (
            SalesR48NBVBySolution,
            SalesR48NBVBySolution[invoicedate]
                >= EDATE (
                    Validation_Accounts_Agreements[CalculatedFirstAnchorPurchaseDateAfterGTWClosedDate],
                    -6
                )
                && SalesR48NBVBySolution[invoicedate] < Validation_Accounts_Agreements[CalculatedFirstAnchorPurchaseDateAfterGTWClosedDate]
                && SalesR48NBVBySolution[ClensedAnchorDesignation] = "Y"
        )
    )
RETURN
    IF ( ISBLANK ( R6AnchorSales ),
        IF ( NOT (ISBLANK ( Validation_Accounts_Agreements[CalculatedFirstAnchorPurchaseDateAfterGTWClosedDate] )
            )
                && ISBLANK ( R6AnchorSales ),
            DIVIDE ( Sales, Denominator ) * 12
        )
    )

Следующий столбец, который я хочу создать здесь:

=VAR Denominator = ( Validation_Accounts_Agreements[CalculatedClosedDateVsFirstPurchaseDate_SLN] + 1 )
VAR Sales =
    CALCULATE (
        SUM ( SalesR48NBVBySolution[TotalSales] ),
        FILTER (
            SalesR48NBVBySolution,
            SalesR48NBVBySolution[invoicedate] >= Validation_Accounts_Agreements[CalculatedFirstPurchasedateAfterGTWClosedDate_SLN]
        )
    )
VAR R6AnchorSales =
    CALCULATE (
        SUM ( SalesR48NBVBySolution[TotalSales] ),
        FILTER (
            SalesR48NBVBySolution,
            SalesR48NBVBySolution[invoicedate]
                >= EDATE (
                    Validation_Accounts_Agreements[CalculatedFirstPurchasedateAfterGTWClosedDate_SLN],
                    -6
                )
                && SalesR48NBVBySolution[invoicedate] < Validation_Accounts_Agreements[CalculatedFirstPurchasedateAfterGTWClosedDate_SLN]
                && SalesR48NBVBySolution[ClensedAnchorDesignation] = "N"  &&  CALCULATE(MAX('CAM Alignment'[NodeCd_L3])=="C3-10-00015")

        )
    )
RETURN
    IF ( ISBLANK ( R6AnchorSales ),
        IF ( NOT (ISBLANK ( Validation_Accounts_Agreements[CalculatedFirstPurchasedateAfterGTWClosedDate_SLN] )
            )
                && ISBLANK ( R6AnchorSales ),
            DIVIDE ( Sales, Denominator ) * 12
        )
    )

Вот больше информации о моей модели ::

enter image description here

enter image description here

enter image description here

На изображении выше, желтые выделенные столбцы, которые я использую для создания вычисляемого столбца 1 (рассчитанная годовая сумма). Красные столбцы в кружках используются для создания столбца 2 (вычисляемый Annualization_SLN). Оба набора столбцов почти одинаковы (изменения в фильтре). Но когда Я пытаюсь создать столбец 2 (рассчитанный Annualization_SLN), в этот раз я получаю эту ошибку циклической зависимости; который зависит от столбца 1.

1 Ответ

1 голос
/ 11 апреля 2020

В целом, в соответствии с передовой практикой, избегайте интенсивного использования вычисляемых столбцов. Вместо этого добавьте их в свой источник данных (back-end) или используйте M-Query.

Чтобы точно ответить на ваш вопрос, вам необходимо поделиться дополнительной информацией о вашей модели (то есть отношениях). Тем не менее, мы можем предоставить вам некоторые рекомендации, относящиеся к этой статье, чтобы избежать циклических зависимостей.

Цитируя заключение статьи:

Большинство из Время, циклические зависимости возникают при использовании вычисляемых таблиц. Вы можете легко избежать их, обращая внимание на выбор функций. Разница между DISTINCT и VALUES или между ALL и ALLNOBLANKROW является тонкой разницей. Но как только вы к этому привыкнете, ваш код станет более безопасным, когда дело доходит до отношений и циклических ссылок.

...