首页 > 解决方案 > FILTER DAX 函数在前一天的销售不可用的情况下缺少行

问题描述

我必须显示前一天的销售以及当前的销售。问题是没有前一天销售的那一天,该行被跳过。我正在使用以下 DAX 函数:

SumInRange = 
var sel = selectedvalue('Table'[Date])
return
CALCULATE(SUMX(DISTINCT('Table'[Date]),CALCULATE(MAX('Table'[Sale]))),FILTER(all('Table'),'Table'[Date] = sel -1))

要复制场景,第一步是使用 -> 创建Dim Date

Dim Date = GENERATESERIES(date(2019,01,01),date(2019,12,31),1)

第二步是创建DataTable ->

Table = DATATABLE("Date",DATETIME,"Flag1",STRING,"Flag2",STRING,"Sale",INTEGER,{
{"8/1/2019","True","True",200},
{"8/2/2019","False","True",80},
{"8/2/2019","False","True",80},
{"8/2/2019","False","True",80},
{"8/2/2019","False","True",80},
{"8/2/2019","False","True",80},
{"9/3/2019","False","True",60},
{"9/4/2019","False","True",10},
{"9/5/2019","False","True",100},
{"9/6/2019","False","True",30},
{"9/7/2019","False","True",60},
{"9/8/2019","False","False",150},
{"9/9/2019","False","False",80},
{"9/10/2019","False","False",90},
{"9/11/2019","False","False",30},
{"9/12/2019","False","False",20},
{"10/13/2019","False","True",50},
{"10/14/2019","False","True",60},
{"10/15/2019",BLANK(),BLANK(),BLANK()},
{"10/16/2019",BLANK(),BLANK(),BLANK()}
})

第三步 - 在日期列上创建这些表之间的关系

第 4 步 - 创建 Measure 使用 -

SumInRange = 
var sel = selectedvalue('Table'[Date])
return
CALCULATE(SUMX(DISTINCT('Table'[Date]),CALCULATE(MAX('Table'[Sale]))),FILTER(all('Table'),'Table'[Date] = sel -1))

此输出作为屏幕截图附加。您会观察到没有前一天销售的日期被省略,例如 - 08/01/2019。此日期的行被跳过,因为它没有前一天的销售?如何让跳过的行再次返回上一个日期的 0 销售?

在此处输入图像描述

标签: powerbidax

解决方案


您应该为此使用度量,而不是计算列。SUMX 也绝对是矫枉过正 - 你不必要地迭代每一行Table

SumInRange = CALCULATE(SUM('Table'[Sale]),DATEADD('Dim Date'[Value],-1,DAY))

在此处输入图像描述


推荐阅读