0
votes

Dax Time Intelligence fonctionne avec des filtres imbriqués

J'ai une structure de données comme celle-ci xxx pré>

Je dois calculer la valeur trimestre précédente, j'ai essayé de différentes manières, mais cela ne fonctionne pas p>

1 - ne pas retourner une valeur . P>

CALCULATE (
        CALCULATE (
            SUM ( 'Data_Rollup_KPI_DNR'[Value] ),
            FILTER ( Data_Rollup_KPI_DNR, Data_Rollup_KPI_DNR[DateRoll] = "Quarter" )
        ),
        DATEADD ( 'Data_Rollup_KPI_DNR'[Date].[Date], -1, MONTH )
    )


0 commentaires

3 Réponses :


1
votes

Les fonctions de date fonctionnent bien lorsque vous utilisez @ Jour Niveau.

Le lien suivant serait utile de résoudre votre problème,

HTTPS: // Communauté .powerbi.com / T5 / bureau / plomb-and-lag-in-DAX / TD-P / 649162


0 commentaires

3
votes

Pour tirer parti des fonctions intégrées à Dax Time Intelligence, vous devrez avoir un ensemble contigu de dates. Je recommanderais d'utiliser un tableau de date. Le code suivant peut être utilisé pour créer une table de date / calendrier dans votre modèle: xxx

une fois que cette table existe, marquez-la comme une table "date" et crée une relation avec XXX

Ensuite, vous pouvez écrire la mesure suivante pour obtenir les résultats que vous recherchez: xxx

espère que cela aide!

* édité

Vous pouvez également créer une colonne de classement à indexer dans une mesure: xxx

alors vous pouvez faire référence à un trimestre précédent en utilisant quelque chose Comme ce qui suit: xxx

mais c'est du mal et tout simplement méchant!

 Entrez la description de l'image ici


7 commentaires

Merci, j'ai essayé comme vous avez suggéré. Sa fonction fonctionne sans filtre, filtre (data_rollup_kpi_dnr, data_rollup_kpi_dnr [dateroll] = "Quartier"), mais avec ce dépose, il ne fonctionne pas


@Gokul y a-t-il une raison pour laquelle vous utilisez ce champ [DATEROLL] au lieu du champ du tableau du calendrier?


Oui, ce sont des valeurs sont des moyennes, elles sont roulées séparément à m / q / y dans la couche ETL


Je vois ... alors la table du calendrier peut ne pas vous être très utile. Vous pouvez créer une colonne calculée dans laquelle vous classez chaque catégorie [Datheroll] par [Dataset Date], puis utilisez simplement le rang comme index pour ainsi dire.


@Gokul Voir mes modifications ... Je vous recommande vivement de restructurer votre modèle


Merci pour les modifications. Je vais utiliser cela comme le dernier recours. Vous vous demandez toujours pourquoi DaadDD ne fonctionne pas avec une autre condition de filtrage!


@Gokul La raison est que votre jeu de date n'est pas contigu. Puisque le filtre change le contexte dans la déclaration de calcul, il enfreint l'intelligence temporelle.



1
votes

écho @steliok qu'une dimension de date est la bonne façon de gérer cela; Il existe de nombreux modèles de tableau de date et une dimension de date fonctionnera avec votre modèle de données. Si vous ne pouvez vraiment pas vraiment ajouter à votre structure de données pour une raison quelconque, cela devrait fonctionner:

PriorQuarter =
VAR CurrentDate = MAX ( 'Data_Rollup_KPI_DNR'[Date] )
VAR CurrentYear = YEAR ( CurrentDate )
VAR CurrentMonth = MONTH ( CurrentDate )
VAR FirstMonthOfCurrentQuarter =
    SWITCH (
        TRUE (),
        CurrentMonth IN {1,2,3}, 1,
        CurrentMonth IN {4,5,6}, 4,
        CurrentMonth IN {7,8,9}, 7,
        CurrentMonth IN {10,11,12}, 10
    )
// DATE() does the right thing with negative month args
VAR PriorQuarterDate = DATE ( CurrentYear, FirstMonthOfCurrentQuarter - 3, 1 )
RETURN
    CALCULATE (
        [BaseValue],
        ALL ( 'Data_Rollup_KPI_DNR'[DateRoll], 'Data_Rollup_KPI_DNR'[Date] ),
        'Data_Rollup_KPI_DNR'[Date] = PriorQuarterDate,
        'Data_Rollup_KPI_DNR'[DateRoll] = "Quarter"
    )


6 commentaires

Merci. C'est un cas très spécial que j'ai, je dois fournir une forage (Y / Q / M) dans le fichier Visual, mais je ne devrais pas rouler dans le frontal, car ces valeurs sont des kpis réels avec des calculs complexes.


Mes résultats - si les dates ne sont pas continues, la dateDDD fonctionnera avec. [Date] suffixe de la colonne de date, comme 'data_rollup_kpi_dnr' [date] [date].


Pour simplifier cette approche, j'ai ajouté priorquarterdate à la dimension de date et réécrire la fonction DAX comme celle-ci, mais cela ne fonctionne pas Calculer (Somme ("Data_Rollup_kpi_dnr"), filtre ("DATA_ROLLUP_KPI_DNR" [DATARE_ROLLUP_KPI_DNR '[date] = sapin stdate (Daturaim [Quardedate antérieur])), Filtre (tous (data_rollup_kpi_dnr '[dateroll]),' data_rollup_kpi _dnr '[dateroll] [DATEROLL] = "QUA RTTER")


Si vous avez une dimension de date liée à votre fait, vous souhaitez effectuer votre filtrage tout à la date de la date de la date: var pqdate = FirstDate («Daturdim» [priorquarterdate]) Calculez (... tout (' Dataim '),' Dataim '[Date] = PQDate) Lorsque des dimensions existent, filtrez uniquement sur les dims. Et, en général, vous aurez de meilleures performances avec Calculer (..., tout («DIM»), 'Dim' [champ] = ) que de faire un filtre ('Dim', ...) ou un filtre (tout («DIM '), ...) .


Et en ce qui concerne KPI Rollup, je m'efforce d'être un pragmatiste en premier. S'il est difficile de construire les KPI et qu'ils travaillent, alors roulez avec ce que vous avez. Votre question ici, cependant, indique que ce que vous avez reçu ne fonctionne pas pour vous (sinon, vous n'avez pas de question). Peut-être que c'était la seule question que vous aviez, auquel cas continuer à rouler avec ce que vous avez. À un moment donné, vous devrez faire appel à l'appel s'il est plus difficile de travailler avec une source bizarre, ou s'il est plus difficile de mettre en œuvre vos agrégats contre des faits transactionnels.


@Gregby je suis complètement d'accord. J'ai déjà commencé à repenser le modèle. Merci pour vos suggestions.