首页 > 解决方案 > Dax 度量以正确计算前一周的类别和小计

问题描述

我在 powerbi 中使用矩阵表来显示不同区域(类别)的前一周总数。我的大部分工作都在工作,但我无法正确地让表格上的小计工作。我相信这与我正在使用的过滤有关 - 我无法纠正它。

屏幕截图

如您所见,我之前第 24 周的总计丢失了

达克斯代码是:

VAR Area =
    MAX ( 'SumTable'[Area Name] )
VAR CurrentWeek =
    SELECTEDVALUE ( SumTable[WeekofYear] )
VAR CurrentYear =
    SELECTEDVALUE ( SumTable[Year] )
VAR MaxWeekNumber =
    CALCULATE ( MAX ( SumTable[WeekofYear] ), ALL ( SumTable ) )
RETURN
    IF (
        HASONEVALUE ( SumTable[Area Name] ),
        SUMX (
            FILTER (
                ALL ( SumTable ),
                IF (
                    CurrentWeek = 1,
                    SumTable[WeekofYear] = MaxWeekNumber
                        && SumTable[Year] = CurrentYear - 1
                        && SumTable[Area Name] = Area,
                    SumTable[WeekofYear] = CurrentWeek - 1
                        && SumTable[Year] = CurrentYear
                        && SumTable[Area Name] = Area
                )
            ),
            SumTable[BOE]
        ),
        SUMX (
            FILTER (
                ALLSELECTED ( SumTable ),
                IF (
                    CurrentWeek = 1,
                    SumTable[WeekofYear] = MaxWeekNumber
                        && SumTable[Year] = CurrentYear - 1,
                    SumTable[WeekofYear] = CurrentWeek - 1
                        && SumTable[Year] = CurrentYear
                )
            ),
            SumTable[BOE]
        )
    )

数据表: 示例表格式

谢谢,第一次发贴!

标签: powerbidaxpowerbi-desktop

解决方案


我将从我的日期表中拆分我的数据表开始。

而且我猜你不需要所有的整个表,只需要年份和周数的列,并将区域保持在上下文中,这样你就不必担心 HASONEVALUE 是否可以正常工作。

SELECTEDVALUE 仅在上下文中只有该列的单个值时返回,而不是总计和小计的情况。

MyMeasure = 
VAR CurrentWeek =
    MAX( SumTable[WeekofYear] )
VAR CurrentYear =
    MAX( SumTable[Year] )
VAR MaxWeekNumber =
    CALCULATE ( MAX ( SumTable[WeekofYear] ), SumTable[Year] = CurrentYear-1  )
RETURN
    IF(
       CurrentWeek = 1,
       CALCULATE(
           SUM(SumTable[BOE]),
           FILTER (
               ALL ( SumTable[Year],SumTable[WeekofYear]),
               SumTable[WeekofYear] = MaxWeekNumber
               && SumTable[Year] = CurrentYear - 1
           )
       ),
       CALCULATE (
           SUM ( SumTable[BOE] ),
           FILTER (
               ALL ( SumTable[WeekofYear] ),
               SumTable[WeekofYear] = CurrentWeek-1
           )
       )
)

我没有机会确认此代码。


推荐阅读