Power BI(DAX)对于按日期过滤的空行显示0

时间:2018-09-20 02:13:51

标签: powerbi dax

我正在尝试显示过去12个月中每个EACH的销售总额,但是销售数据缺少某些月份的值。我希望这些显示为0

数据(链接到DimDate表)

SaleDate,Amount
20190101,25
20180201,30
20180301,12
20180501,10
20180502,5
20180701,60

enter image description here

dax非常简单

Failed Measure = 
VAR SelectedMonth = 201808
VAR SameMonthLastYear = SelectedMonth - 100
RETURN
    CALCULATE (
        Sum(sales[Amount]),
        DimDate[MonthInt] >= SameMonthLastYear,
        DimDate[MonthInt] <= SelectedMonth
    )
上面的

SelectedMonth来自用户选择的过滤器,对此进行了简化。

因此dax可以进行工作,但是结果表将只向我显示销售表中数据存在的月份。

if this is all I wanted I wouldn't need dax

如果我向Sum(Sales[Amount])添加0,则它将所有空白月份显示为0,并在DimDate表中显示所有月份。大约是一半,但是那时候我需要过滤日期以仅显示相关的12个月。

close - but needs filtering

因此,以上内容仅显示了2018年8月至2017年8月的数据

这似乎应该很容易或是一个常见问题,但是我没有找到解决办法的运气。

1 个答案:

答案 0 :(得分:1)

尝试:

Hopefully Correct Measure =
VAR SelectedMonth = 201808
VAR SameMonthLastYear = SelectedMonth - 100
RETURN
    SUMX ( VALUES ( 'Date'[MonthInt] ),
           IF ('Date'[MonthInt] >= SameMonthLastYear && 'Date'[MonthInt] <= SelectedMonth,
           SUM ( Sales[Amount] ) + 0 )
    )

工作原理: “失败的度量”(零)的问题是DAX始终为所有MonthYearShort项目计算它。过滤将应用于计算输入,而不应用于数据透视表行上的项目。如果计算结果为空白,则默认为隐藏。如果将零添加到结果,则它们将不再为空白,并且将显示。

要解决该问题,您完全需要避免计算无关月份的金额。有几种方法可以做到这一点。在我的方法中,我使用SUMX遍历MonthInt的列表,测试它是否属于所需时间段,如果是,则计算销售金额,否则将其保留为空白(默认情况下)。