簡體   English   中英

如何創建一個 DAX 度量來計算累積總和並響應 Power BI 中的評估上下文

[英]How to create a DAX measure that computes cumulative sum and is also responsive to the evaluation context in Power BI

讓我們考慮一個項目管理場景,其中項目狀態從 Open (1) 變為 In-Progress (2),最后是 Closed (3)。 在這個例子中,我有 10 個項目。 我的要求是根據日期和/或狀態類型生成項目計數。 這里的關鍵是度量返回的值與評估上下文相關。

這是項目狀態表:

在此處輸入圖像描述

現在看看下面的表格,至少部分是預期的結果。

在此處輸入圖像描述

例如:2 月 6 日,我們在系統中有 4 個項目,其中 2 個處於打開狀態,1 個正在進行中,1 個已關閉。 截至 2 月 6 日,這給了我總共 4 個項目。它查看 7 行的數據,即 self 和前 6 行。 如果我想知道截至今天的項目狀態,我們只需要查看 12 月 24 日的最后一個條目,它會給我 10 個。

當我在沒有日期和狀態類型列的表上顯示計算項目數量的度量時,我希望值為 10。在這種情況下,我的上下文過濾器沒有日期和狀態類型可供過濾。

如果我的可視化(矩陣)只有狀態類型作為我期望的列字段:

在此處輸入圖像描述

如果我的矩陣將日期作為行字段,將狀態類型作為列字段,那么我希望看到我之前顯示的內容。

我懇切地要求您就應對這一挑戰的最佳方式提出建議。 作為第一次嘗試,我想出了一些東西,它並沒有讓我沒有達到我的期望,而是試圖解決我所擁有的東西,如果我以正確的方式解決這個問題,我將不勝感激。

Project Status Count = 

VAR MaxKnownDate =
    MAX ( 'Project Status'[Status Date] )

VAR StatusSummaryBase =
    SUMMARIZE (
        'Date'
        ,'Date'[Date]
    )
    
 VAR StatusSummary =
    CALCULATETABLE (
        ADDCOLUMNS (
            StatusSummaryBase,
              "Latest Count", 
              VAR DateSnapshot = 'Date'[Date]
              RETURN
                CALCULATE (
                    COUNTX (
                         'Project Status',
                          'Project Status'[Project Id]
                          ),
                    LASTNONBLANK (
                        FILTER(
                            ALL('Date'),
                            'Date'[Date] <= DateSnapshot
                        ),
                        COUNTROWS(RELATEDTABLE('Project Status'))
                    )
                )
            
        )
        ,FILTER (
            ALL ( 'Project Status'[Status Date] ),
            'Project Status'[Status Date] <= MaxKnownDate
        )
    )       

VAR Result =
    SUMX(StatusSummary, [Latest Count])
    
RETURN
    Result

我知道我可能仍需要檢查上下文過濾器(例如數據和狀態類型)的存在,以便生成正確的計算。

請按照以下步驟實現您所需的輸出 -

步驟 1:使用以下代碼創建一個計算列-

date_part = 
DATE(
    YEAR(your_table_name[status date]),
    MONTH(your_table_name[status date]),
    DAY(your_table_name[status date])
)

第 2 步:現在在以下 4 個措施下創建 -

Open (1) = 

var current_row_pid = MIN('your_table_name'[project id])
var current_row_date_part = MIN('your_table_name'[date_part])

var _table1 = 
SUMMARIZE(
    FILTER(
        ALL('your_table_name'),
        'your_table_name'[date_part] <= current_row_date_part
    ),
    'your_table_name'[project id],
    "project status id", MAX('your_table_name'[project status id])
)

var _table2 = 
ADDCOLUMNS(
    _table1,
    "status type id", 
    LOOKUPVALUE(
        'your_table_name'[status type id],
        'your_table_name'[project id],[project id],
        'your_table_name'[project status id],[project status id]
    )
)

RETURN 
COUNTROWS(
    FILTER(
        _table2,
        [status type id] = 1
    )
) + 0
in-progress (2) = 

var current_row_pid = MIN('your_table_name'[project id])
var current_row_date_part = MIN('your_table_name'[date_part])

var _table1 = 
SUMMARIZE(
    FILTER(
        ALL('your_table_name'),
        'your_table_name'[date_part] <= current_row_date_part
    ),
    'your_table_name'[project id],
    "project status id", MAX('your_table_name'[project status id])
)

var _table2 = 
ADDCOLUMNS(
    _table1,
    "status type id", 
    LOOKUPVALUE(
        'your_table_name'[status type id],
        'your_table_name'[project id],[project id],
        'your_table_name'[project status id],[project status id]
    )
)

RETURN 
COUNTROWS(
    FILTER(
        _table2,
        [status type id] = 2
    )
) + 0
closed (3) = 

var current_row_pid = MIN('your_table_name'[project id])
var current_row_date_part = MIN('your_table_name'[date_part])

var _table1 = 
SUMMARIZE(
    FILTER(
        ALL('your_table_name'),
        'your_table_name'[date_part] <= current_row_date_part
    ),
    'your_table_name'[project id],
    "project status id", MAX('your_table_name'[project status id])
)

var _table2 = 
ADDCOLUMNS(
    _table1,
    "status type id", 
    LOOKUPVALUE(
        'your_table_name'[status type id],
        'your_table_name'[project id],[project id],
        'your_table_name'[project status id],[project status id]
    )
)

RETURN 
COUNTROWS(
    FILTER(
        _table2,
        [status type id] = 3
    )
) + 0
total_project = [Open (1)] + [in-progress (2)] + [closed (3)]

這是最終的輸出 -

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM