首页 文章

带日期过滤器的DAX累计总计

提问于
浏览
1

我正在尝试计算一个运行总计,其中订单仅在特定日期范围内有效 . 每个订单都有一个值,一个开始日期和一个结束日期 . 我想仅在订单开始日期和结束日期之间的日期计算订单 Value 的累计总和 .

我已经阅读累计总数的this article并且有一个运行总计的等式,但是一旦日期表超过订单的结束日期,我就可以't figure out how to filter the equation so that it filter'发出订单 . 我当前的衡量标准是 Cumulative Value:=CALCULATE(SUM(Orders[Vaue]), FILTER(ALL('Date'), [Date] <= MAX([Date]))) ,我想添加一个过滤器,过滤掉任何结束日期超过当前日期行的订单,类似于 Filter('Order', 'Orders'[Order_End_Date] < 'Date'[Date]) . 当我尝试添加此过滤器时,我收到错误,因为'Date' [Date]未在任何聚合中使用 .

下面是我正在使用的数据模型和a link to the Excel File与数据模型 .

Example Data Model

样本数据:
+-----------+ | Date | +-----------+ | 1/1/2015 | | 1/2/2015 | | 1/3/2015 | | 1/4/2015 | | 1/5/2015 | | 1/6/2015 | | 1/7/2015 | | 1/8/2015 | | 1/9/2015 | | 1/10/2015 | +-----------+

+----------+------+------------------+----------------+ | Order_Id | Vaue | Order_Start_Date | Order_End_Date | +----------+------+------------------+----------------+ | 1 | 1 | 1/1/2015 | 1/3/2015 | | 2 | 3 | 1/2/2015 | | | 3 | 6 | 1/3/2015 | 1/7/2015 | | 4 | 7 | 1/5/2015 | | +----------+------+------------------+----------------+

并且我有当前测量的输出以及正确测量的输出应该是什么 .
+-----------+-----------------+--------------------------+ | Date | Current Measure | Desired Measure's Output | +-----------+-----------------+--------------------------+ | 1/1/2015 | 1 | 1 | | 1/2/2015 | 4 | 4 | | 1/3/2015 | 10 | 9 | | 1/4/2015 | 10 | 9 | | 1/5/2015 | 17 | 16 | | 1/6/2015 | 17 | 16 | | 1/7/2015 | 17 | 10 | | 1/8/2015 | 17 | 10 | | 1/9/2015 | 17 | 10 | | 1/10/2015 | 17 | 10 | +-----------+-----------------+--------------------------+

2 回答

  • 0
    Cumulative Value2:=CALCULATE(
        SUM(Orders[Vaue])
        ,FILTER(
            VALUES(Orders[Order_Start_Date])
            ,Orders[Order_Start_Date] <= MAX('Date'[Date])
        )
        ,FILTER(
            VALUES(Orders[Order_End_Date])
            ,ISBLANK(Orders[Order_End_Date])
                || Orders[Order_End_Date] >= MAX('Date'[Date])
        )
    )
    

    模型图(注意我取出了你的日期关系 - 对于你提供的有限用例,它只会使事情变得更复杂):

    enter image description here

    注意:我将在位置上引用函数参数,第一个参数由(1)表示 .

    所以,我们所做的与您尝试的类似 . 我们有两个FILTER(),每个都作为我们的CALCULATE()的参数 . CALCULATE()将其参数(2) - (n)组合在一个逻辑和 .

    第一个FILTER()基本上完成了你已经在做的事情,除了我们过滤[Order_Start_Date]的不同值,将它们与数据透视表的当前过滤器上下文进行比较 .

    第二个FILTER()循环[Order_End_Date]的不同值,检查逻辑或组合的两个条件 . 我们必须处理BLANK [Order_End_Date]的情况 . 此BLANK通常隐式转换为0 == 1899-12-30,这比我们考虑的任何日期都要少 . 在BLANK的情况下,我们从ISBLANK()获得一个真值,并且该行作为FILTER()的结果集的一部分返回 . 另一个测试只是检查[Order_End_Date]是否大于pivot中的当前过滤器上下文日期 .

  • 2

    您正在寻找的通常被称为“正在进行中的事件”问题 . 以下是一些可以帮助您解决问题的帖子 .

    我希望这有帮助 .

    -Tom

相关问题