表格上未显示 DAX 滚动平均值总计

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

在此 SQLBI 视频上,滚动平均值不会对总计行计算任何内容?这是为什么?希望有快照值用于卡上的滚动值等

https://www.youtube.com/watch?v=ACvYaXnpyCM&t=214s

Rolling 6M Sales Amount = 
VAR numOfMonths = 6
VAR lastSelectedDate = MAX(Dim_DateTable[dte])
VAR period = DATESINPERIOD(Dim_DateTable[dte], lastSelectedDate,-numOfMonths,MONTH)

VAR result =
    CALCULATE(
        AVERAGEX(
            VALUES(Dim_DateTable[Month Of Year]),
            [Sales Amount]
        ),
        period
    )

VAR lastSalesDate = MAX(Fact_SalesInvoice[Value Date])
VAR firstVisibleDate = MAX(Dim_DateTable[dte])

RETURN
    IF(
        firstVisibleDate <= lastSalesDate, 
        result
    )

我也尝试过这个

Rolling 6M Sales Amount B = 
VAR numOfMonths = 6
VAR rollingSum =
    CALCULATE(
        [Sales Amount],
        DATESINPERIOD(Dim_DateTable[dte], MAX(Dim_DateTable[dte]), -numOfMonths, MONTH)
    )

RETURN
    rollingSum/numOfMonths

所以我想了解为什么这些不会为“总计”行提供任何内容,但例如简单的 SUM 函数会为总计行提供值。否则我确实理解这两项措施...

dax average rolling-computation
1个回答
0
投票

这段代码似乎对我有用,我会尝试解释发生了什么:

首先,可视化中的每个单元格都是行和列过滤器的组合,以便针对特定月份和特定日历年评估表达式。除了总数之外,其中任何一个都没有单一值。

我们需要告诉DAX如何评估总数。通常,您可以使用

HASONEVALUE=FALSE()
来标识 IF 语句中的总计列。在本例中,因为它具有层次结构,所以我使用
ISINSCOPE()
告诉 PowerBI 计算原始问题中的结果,其中月份或日历年在评估范围内。

如果不指定两者,则不会计算中间小计。

接下来,我们需要告诉 PowerBI 在这两个都不在范围内(即不在总计线上)的情况下该怎么做。可能有更优雅的方法来处理此模型,但我根据 Sales 表中的 OrderDate 字段设置了过去 12 个月的并行计算。该字段与日期字段相关。

如果不这样做,结果最终会是空白。我认为这与日期表中的日期多于销售表中匹配的日期记录有关。销售表转到 2009 年 12 月,但日期表扩展到 2011 年。这将导致全局期间 -12 个月内出现一堆空白日期,这些日期在销售表中没有匹配项,并且结果为空。

通常,我通过在 PowerQuery 中将日期表截断为当前日期或前一天来处理此类缺失的关键问题,这样我就不必担心返回的日期超出我的销售表中的日期范围。

在任何情况下,如果我们将总列的期间计算基于销售表中的 OrderDate,似乎都是可行的,这样就不会担心丢失日期。

Sales R12M = 
VAR NumOfMonths = 12
VAR LastCurrentDate =
    MAX ( 'Date'[Date] )
VAR Period =
    DATESINPERIOD ( 'Date'[Date], LastCurrentDate, - NumOfMonths, MONTH )

VAR GlobalMax = CALCULATE(MAX('Sales'[Order Date]), ALL('Date'))
VAR RecentPeriod = DATESINPERIOD ( 'Sales'[Order Date], GlobalMax, - NumOfMonths, MONTH )

VAR Result = IF(OR(ISINSCOPE('Date'[Month]), ISINSCOPE('Date'[Calendar Year])),
    CALCULATE ( 
        AVERAGEX ( 
            VALUES ( 'Date'[Calendar Year Month] ), 
            [Sales Amount] 
        ),
        Period
    ),
    CALCULATE(
            AVERAGEX ( 
                VALUES ( 'Date'[Calendar Year Month] ), 
                [Sales Amount] 
            ),
            RecentPeriod

))
VAR FirstDateInPeriod = MINX ( Period, 'Date'[Date] )
VAR LastDateWithSales = MAX ( Sales[Order Date] )
RETURN
Result
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.