代码之家  ›  专栏  ›  技术社区  ›  Leniel Maccaferri

当日期没有值(过去和将来)时,如何使用相同的度量来计算?

  •  0
  • Leniel Maccaferri  · 技术社区  · 6 年前

    查看此矩阵:

    enter image description here

    WeekDate 表中的列名为 Planning . 它与另一个日期时间列有关 Week_Imported 在另一个名为 Export .

    表中只有日期的值: 19年12月23日、19年12月30日和20年1月6日 鉴于 表中的日期跨越过去和未来的多个星期。

    Cumulative Plan Count 只要表之间有匹配的日期,计算就正确 出口

    现在我想继续计算,即使没有日期匹配。我想得到价值 32 FIRSTDATE 32 .

    LASTDATE (20年1月6日)值 89 .

    像这样:

    WeekDate          Cumulative Plan Count
    .
    .
    .
    25-Nov-19         32
    02-Dec-19         32 
    09-Dec-19         32
    16-Dec-19         32
    23-Dec-19         32 <= First WeekDate which has data [backfill past with 32]
    30-Dec-19         57
    06-Jan-19         89 <= Last WeekDate which has data [fill future with 89]
    13-Jan-20         89
    20-Jan-20         89
    27-Jan-20         89
    .
    .
    .
    

    用于累计 SUM

    Cumulative Plan Count = 
    
    CALCULATE (
        ROUNDUP([1 - Target] * MAX(Planning[1 - Plan]), 0)
        ,
        FILTER (
            ALL ( Planning[WeekDate] ),
            Planning[WeekDate] <= MAX(Planning[WeekDate])
        )
    )
    

    #######编辑1#######

    1 - Target = 
    
    VAR minWeek = MIN(Export[Week_Imported])
    
    VAR targetCount =
    CALCULATE (
            COUNT( 'Export'[1 - Plan]),
            FILTER('Export', OR(Export[1 - Plan]="YES", Export[1 - Plan]="_")))
    
    var minTarget = CALCULATE (
            COUNT( 'Export'[1 - Plan]),
            FILTER('Export', OR(Export[1 - Plan]="YES", Export[1 - Plan]="_")
            && Export[Week_Imported] = minWeek))
    
    RETURN
    
    SWITCH(TRUE,
    targetCount = BLANK(),  1, // Here is where I need to get the 1st row value (32) and fill up the column up above...
    targetCount)
    

    问题是,无论我做什么,我都无法获取2019年12月23日(32)的第一个值来填充累计计划计数列。

    这是我使用上述公式得出的结果:

    WeekDate          Cumulative Plan Count
    .
    .
    .
    25-Nov-19         1
    02-Dec-19         1 
    09-Dec-19         1
    16-Dec-19         1
    23-Dec-19         32 <= First WeekDate which has data
    30-Dec-19         57
    06-Jan-19         89 <= Last WeekDate which has data
    13-Jan-20         89
    20-Jan-20         89
    27-Jan-20         89
    .
    .
    .
    

    #######编辑2#######

    我整理了一个简化的Sample.pbix,它显示了我正在尝试的内容 用最少的数据完成测试: https://drive.google.com/drive/folders/1zxS_2VE9_0JEMXvsg9Dq196BK552RbNo?usp=sharing

    此屏幕截图包含更多详细信息: https://drive.google.com/open?id=1_-IMEpLwuWWN6vrrT_TNWbeqZ7f1LOan

    0 回复  |  直到 6 年前
        1
  •  1
  •   Kosuke Sakai    6 年前

    在数据模式中, Planning Export 规划 出口 每周有更多的行。

    Relationship diagram

    在此基础上,采取措施统计出 规划 这周就这么简单。

    Plan Count (Basic) = COUNTROWS ( 'Export' )
    

    当你经过的时候 Planning[WeekDate] ,此度量返回 出口 对应周的行。

    实际上,你需要 FILTER 只计算你感兴趣的行。

    Plan Count =
    COUNTROWS (
        FILTER (
            'Export',
            OR ( 'Export'[Plan] = "YES", 'Export'[Plan] = "_" )
        )
    )
    

    Result 1

    以这个度量作为起点,我们需要将计算扩展到数据不存在的时期。为了做到这一点,我们需要处理过滤器上下文,其中 [Plan Count] 进行评估。

    出口 数据存在。下面是一个公式,它返回数据的第一个日期,与切片器无关。

    First Data Week =
    CALCULATE (
        MIN ( Planning[WeekDate] ),
        REMOVEFILTERS ( Planning[WeekDate] ),
        TREATAS (
            CALCULATETABLE (
                VALUES ( 'Export'[Week_Imported] ), -- Foreign key referencing Planning[WeekDate]
                REMOVEFILTERS ( Planning )
            ),
            Planning[WeekDate]
        )
    )
    

    First Data Week

    我们可以使用此日期修改筛选器上下文以计算 第一个数据周。实际上,below measure总是返回1064,这是 2019年12月30日。

    First Week Plan Count = 
    VAR _FirstDataWeek = CALCULATE (
        MIN ( Planning[WeekDate] ),
        REMOVEFILTERS ( Planning[WeekDate] ),
        TREATAS (
            CALCULATETABLE (
                VALUES ( 'Export'[Week_Imported] ),
                REMOVEFILTERS ( Planning )
            ),
            Planning[WeekDate]
        )
    )
    RETURN
    CALCULATE (
        [Plan Count],
        Planning[WeekDate] = _FirstDataWeek
    )
    

    First Week Plan Count

    使用此技术,我们可以展开 [计划计数] 规划 表,并应用不同的筛选器上下文进行计算 [计划计数] .

    Extended Plan Count = 
    
    -- Planning[WeekDate] values where Export data exists
    VAR _DataWeeks = CALCULATETABLE (
        VALUES ( Planning[WeekDate] ),
        REMOVEFILTERS ( Planning[WeekDate] ),
        TREATAS (
            CALCULATETABLE (
                VALUES ( 'Export'[Week_Imported] ), -- Foreign key referencing Planning[WeekDate]
                REMOVEFILTERS ( Planning )
            ),
            Planning[WeekDate]
        )
    )
    
    -- First and last Planning[WeekDate] where Export data exists
    VAR _FirstDataWeek = MINX ( _DataWeeks, [WeekDate] )
    VAR _FinalDataWeek = MAXX ( _DataWeeks, [WeekDate] )
    
    -- [Plan Count] values of first and last weeks
    VAR _FirstDataWeekPlanCount = CALCULATE ( [Plan Count], Planning[WeekDate] = _FirstDataWeek )
    VAR _FinalDataWeekPlanCount = CALCULATE ( [Plan Count], Planning[WeekDate] = _FinalDataWeek )
    
    RETURN
    SUMX (
        Planning,
        SWITCH (
            TRUE,
            Planning[WeekDate] < _FirstDataWeek, _FirstDataWeekPlanCount,
            Planning[WeekDate] > _FinalDataWeek, _FinalDataWeekPlanCount,
            [Plan Count]
        )
    )
    

    Final Result

    推荐文章