簡體   English   中英

在 Power BI 中滾動 6 個月未結合同

[英]Rolling 6 month Open Contracts in Power BI

我需要顯示我們在過去 6 個月中每個月有多少活躍合約。 我試圖找出一種方法來顯示這個。 這是我的桌子

Machine Enrollment# StartDate   EndDate
A       1           1/2/2016    6/18/2019
B       2           12/15/2012  5/12/2034
C       3           3/25/2019   4/25/2021
D       4           1/7/2000    7/15/2019
A       5           10/1/2019   10/1/2025

我有數千行。 我希望能夠顯示滾動 6 個月的視覺效果,了解有多少機器正在簽訂合同。 所以在這個小例子中它看起來像這樣

Apr-19  June-19  Jul-19  Aug-19  Sep-19  Oct-19
4       4        3       2       2       3

我什至從哪里開始創建這個? 過去,我們只是查看了當月的數字,並將這些結果添加到 static 表的末尾,並刪除了 6 個多月前的列。 我已被分配在 Power BI 中自動執行此報告。 我猜我需要創建一個列/度量來查看 EndDate 並將其與視覺中的過濾日期(即:8 月 19 日)進行比較,並確定當時合同是否打開。 但是我不知道。 任何幫助深表感謝。 提前致謝!

我想我找到了您正在尋找的解決方案。 您可以在此處找到示例 pbix 文件。

1.創建日歷表

需要一個日歷表來過濾/切片時間段。 日歷表需要有一個唯一的Date列,以及YearQuarterMonth等可選列,具體取決於您在分析中需要的期間單位。

日歷表可以最輕松地創建為 DAX 計算表。 這是此用例中所需的最小日歷表的示例。

Calendar = 
ADDCOLUMNS(
    CALENDAR( MIN( Contracts[StartDate] ), MAX( Contracts[EndDate] ) ),
    "Year Month", FORMAT( [Date], "mmm-yy" ),
    "Year Month Number", YEAR( [Date] ) * 100 + MONTH( [Date] )
)

2. 創建一個度量來計算未平倉合約的數量

報告中計算和顯示的每個數字都需要定義為度量

讓我們考慮一下 May-19 的數量。 當前篩選上下文包括日歷表中 2019-05-01 和 2019-05-31 之間的所有 31 個日期。 在這種情況下,我們怎么能想到一個開放的合約呢? 如果合約在 2019-05-31 之后開始,則不開放。 如果合約在 2019 年 5 月 1 日之前結束,它也不會開放。 因此,未平倉合約滿足此條件。

  • 在 2019-05-31 或之前開始,並且
  • 於 2019-05-01 或之后結束

以下是基於此條件計算合同數量的度量定義。

# Open Contracts = 
VAR MinDate = MIN( 'Calendar'[Date] )
VAR MaxDate = MAX( 'Calendar'[Date] )
RETURN COUNTROWS(
    FILTER(
        Contracts,
        Contracts[StartDate] <= MaxDate
            && Contracts[EndDate] >= MinDate
    )
)

3.添加最近6個月的動態過濾器

如果我理解正確,要求是顯示過去 6 個日歷月的月數,不包括本月。 我找不到一個直接的方法。 我的解決方案可能包含一些 hacky 氣味。

Power BI 沒有基於相對於現在的日歷月的內置篩選器支持。 我們需要構建一個自定義邏輯來實現這一點。 我通過創建一個指示當前過濾器上下文是否在所需時間段內的度量來做到這一點。 如果過濾器上下文是過去 6 個日歷月中包含的單個日歷月,則此度量是一個標志,該標志返回 1,否則返回 BLANK。

__Last6MonthFlag = 
VAR YearMonths = CALCULATETABLE(
    VALUES( 'Calendar'[Year Month] ),
    REMOVEFILTERS( 'Calendar'[Year Month] ),
    'Calendar'[Date] > EOMONTH( TODAY(), -7 )
        && 'Calendar'[Date] <= EOMONTH( TODAY(), -1 )
)
RETURN IF(
    HASONEVALUE( 'Calendar'[Year Month] )
        && SELECTEDVALUE( 'Calendar'[Year Month] ) IN YearMonths,
    1
)

然后我像這樣在視覺過濾器中使用了這個度量。

您需要執行以下活動才能實現您的要求。

  1. 定義一個包含報告所有日期的日歷表。 為月-年定義一個計算列。 Month-Year = FORMAT('CalendarTable'[Date], "MM-YYYY")

  2. 您可以定義一個計算度量,如果合同的結束日期距離當前日期 < 6 個月,它將返回 1(您可以使用TODAY()函數)。 此 function 將有助於根據當前日期進行滾動計算。 否則,此計算的度量將返回 NULL 並對它們求和。

  3. 您可以拖動在步驟號中定義的月-年計算列。 1、到柱軸。 您可以將步驟 2 中定義的計算度量拖到值部分。 PowerBI 控件默認過濾掉 NULL 值。 因此,當您使用步驟號中定義的計算度量時。 2,您將僅獲得最近 6 個月的值。 由於計算是基於TODAY()定義的,因此它將是一個運行計算。

暫無
暫無

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

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