PowerBI DAX 衡量每个类别最新值的总和

问题描述 投票:0回答:1

我在PowerBI中有一个表,其中保存了不同日期不同类别的库存水平。示例数据:

库存表

类别 日期 库存
A 2023年10月31日 15
E 2023年10月31日 61
A 2023年12月31日 1
B 2023年12月31日 13
A 2024 年 1 月 31 日 39
B 2024 年 1 月 31 日 72
B 2024年2月29日 38
A 2024 年 3 月 31 日 46

更具可读性,InventoryTable 看起来像这样

类别 2023年10月31日 2023年12月31日 2024 年 1 月 31 日 2024年2月29日 2024 年 3 月 31 日
A 15 1 39 46
B 13 72 38
E 61

DAX 度量“最新库存”现在应该从每个类别的选定时间片(或更早时间段)中获取最新值,并将它们在类别中求和。

预期输出:

最新库存

类别 2023 2024 总计
A 1 46 46
B 13 38 38
E 61 61 61
总计 75 145 145

深入到月份,这应该看起来像

最新库存

类别 十月 十一月 十二月 2023 总计 一月 二月 三月 2024 总计 总计
A 15 15 1 1 39 39 46 46 46
B 13 13 72 38 38 38 38
E 61 61 61 61 61 61 61 61 61
总计 76 76 75 75 172 138 145 145 145

我绝对无法理解这个问题。大多数方法要么失败,要么因为不同类别具有不同的记录日期,或者类别之间的划分未反映在总数中。有那么难吗

编辑1:

更多地考虑一下,我假设我需要将 DateTable 带入模型中,并沿着日期列对齐我的库存记录。类似于随着时间的推移累积值的做法 - 只是在这种情况下,我不需要随着时间的推移进行求和,而只需要最新的值。

我只是不明白该怎么做。

编辑2:

我现在可能更接近解决方案了。这就是我所拥有的:

Latest Inventory = CALCULATE(
    LASTNONBLANKVALUE('InventoryTable'[Date], SUM('InventoryTable'[Inventory])),
    DateTable[Date] <= MAX(DateTable[Date]),
    ALL(DateTable[Date])
)

它确实计算每个类别的正确值。但是,如果我对类别进行总结,则总数仅包含所有类别的最新日期记录的值的总和。如果之前已记录某一类别,则该类别不会包含在总计中。

已经尝试过

SUMX
超过
VALUES('InventoryTable'[Category])
,但这搞乱了整个事情。

powerbi dax measure
1个回答
0
投票

与数据透视表结合使用,这应该适用于您的每月和每年数据

MostRecentMonthlyInventory = 
VAR CurrentCategory = SELECTEDVALUE('Table'[Category])
VAR CurrentYear = YEAR(MAX('Table'[Date]))
VAR CurrentMonth = MONTH(MAX('Table'[Date]))
RETURN
CALCULATE(
    MAX('Table'[Inventory]),
    FILTER(
        ALL('Table'),
        'Table'[Category] = CurrentCategory &&
        YEAR('Table'[Date]) = CurrentYear &&
        MONTH('Table'[Date]) = CurrentMonth &&
        'Table'[Date] = CALCULATE(MAX('Table'[Date]),
            ALLEXCEPT('Table', 'Table'[Category])
        )
    )
)

我首先编写了这段代码,然后改变了我对最佳方法的看法。显示 23 的总数和最近的 24 的总数,并将其包括在内,因为

MostRecentInventory2023 = 
CALCULATE(
    MAX('Table'[Inventory]),
    FILTER(
        ALL('Table'),
        'Table'[Date] = CALCULATE(
            MAX('Table'[Date]),
            FILTER(
                ALL('Table'),
                YEAR('Table'[Date]) = 2023 && 
                'Table'[Category] = EARLIER('Table'[Category])
            )
        )
    )
)

MostRecentInventory2024 = 
CALCULATE(
    MAX('Table'[Inventory]),
    FILTER(
        ALL('Table'),
        'Table'[Date] = CALCULATE(
            MAX('Table'[Date]),
            FILTER(
                ALL('Table'),
                YEAR('Table'[Date]) = 2024 && 
                'Table'[Category] = EARLIER('Table'[Category])
            )
        )
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.