Powerbi 计算本月和上月';power bi中基于切片器选择的s值
我有两张桌子Powerbi 计算本月和上月';power bi中基于切片器选择的s值,powerbi,dax,powerquery,Powerbi,Dax,Powerquery,我有两张桌子 主表包含以下数据(Pic)和 使用主表中的日期创建的日期表 我想根据从日期表中选择的日期切片器计算两个字段/度量值 当月收入 上月收入 示例:如果我选择第4个月,则第4个月客户A和B的不同收入之和应为当前月收入,第3个月客户A和B的不同收入之和应为前一个月收入 我尝试编写以下度量来计算当前月收入,它运行良好,但它没有给出前一个月收入的正确结果。 我也得到了上个月相同的值 “衡量上月收入”= 如果( ISFILTERED('日期'[年\月]), VAR myTable=
- 主表包含以下数据(Pic)和
- 使用主表中的日期创建的日期表
- 当月收入
- 上月收入
“衡量上月收入”=
如果(
ISFILTERED('日期'[年\月]),
VAR myTable=
总结(
“主表”,
“主表”[ClientName],
“主表”[Mon],
“主表”[收入]
)
返回
算计(
萨姆克斯(
我的桌子,
“主表”[收入]
),
滤器(
“主表”,
“主表”[周一]
=SELECTEDVALUE('Date'[月]-1)
)
),
VAR myTable=
总结(
“主表”,
“主表”[收入],
“主表”[Mon],
“主表”[收入]
)
返回
萨姆克斯(
滤器(
我的桌子,
“主表”[周一]
=月(
今天()
) - 1
),
“主表”[收入]
)
)
计算不会影响您已经定义的变量,因此过滤器不会对第一个SUMX执行任何操作。有关更多详细信息,请参阅
我建议将度量写得更简单一些。大概是这样的:
Previous Month Revenue =
VAR PrevMonth =
SELECTEDVALUE (
'Date'[Month],
MONTH ( TODAY () )
) - 1
RETURN
CALCULATE (
SUM ( 'Main Table'[Revenue] ),
'Main Table'[Mon] = PrevMonth
)
CALCULATE不会影响您已经定义的变量,因此FILTER不会对第一个SUMX执行任何操作。有关更多详细信息,请参阅
我建议将度量写得更简单一些。大概是这样的:
Previous Month Revenue =
VAR PrevMonth =
SELECTEDVALUE (
'Date'[Month],
MONTH ( TODAY () )
) - 1
RETURN
CALCULATE (
SUM ( 'Main Table'[Revenue] ),
'Main Table'[Mon] = PrevMonth
)
我从代码中看到“Date”表有一个名为Month的数字列,我假设它与“Main table”中的Mon列的类型相同 此外,由于“主表”中没有年份,我假设不考虑年份 从日期表的切片器中,我们可以使用SELECTEDVALUE()直接获取所选的“日期”[Month]。作为默认参数,我们使用由TODAY()函数获得的当前月份 然后,我们从所选月份中减去上一个月,我们可以使用它对按CustomerName、Mon和Revenue分组的表进行切片。需要分组以删除同一客户当月的重复收入,并使用summary()实现 最后一步,我们可以使用SUMX聚合过滤和分组表的“主表”[Revenue]
'Measure Previous Month Revenue' =
VAR CurrentMonth =
MONTH(
TODAY()
)
VAR SelectedMonth =
SELECTEDVALUE(
'Date'[Month],
CurrentMonth
)
VAR PrevMonth = SelectedMonth - 1
VAR MyTable =
CALCULATETABLE(
SUMMARIZE(
'Main Table',
'Main Table'[ClientName],
'Main Table'[Mon],
'Main Table'[Revenue]
),
'Main Table'[Mon] = PrevMonth,
REMOVEFILTERS( 'Date' )
)
VAR Result =
SUMX(
MyTable,
'Main Table'[Revenue]
)
RETURN
Result
可以为当前月份编写与Previus Month计算相同的代码
'Measure Current Month Revenue' =
VAR CurrentMonth =
MONTH(
TODAY()
)
VAR SelectedMonth =
SELECTEDVALUE(
'Date'[Month],
CurrentMonth
)
VAR MyTable =
CALCULATETABLE(
SUMMARIZE(
'Main Table',
'Main Table'[ClientName],
'Main Table'[Mon],
'Main Table'[Revenue]
),
'Main Table'[Mon] = SelectedMonth,
REMOVEFILTERS( 'Date' )
)
VAR Result =
SUMX(
MyTable,
'Main Table'[Revenue]
)
RETURN
Result
设置“日期”表和“主表”之间的关系可以实现更好的解决方案。
根据业务需求,可以使用月份级粒度的日期表,使用YearMonth列代替Mon,或使用Day列代替Mon列。我从代码中看到“Date”表有一个称为month的数字列,我假设它与“主表”中的Mon列的类型相同 此外,由于“主表”中没有年份,我假设不考虑年份 从日期表的切片器中,我们可以使用SELECTEDVALUE()直接获取所选的“日期”[Month]。作为默认参数,我们使用由TODAY()函数获得的当前月份 然后,我们从所选月份中减去上一个月,我们可以使用它对按CustomerName、Mon和Revenue分组的表进行切片。需要分组以删除同一客户当月的重复收入,并使用summary()实现 最后一步,我们可以使用SUMX聚合过滤和分组表的“主表”[Revenue]
'Measure Previous Month Revenue' =
VAR CurrentMonth =
MONTH(
TODAY()
)
VAR SelectedMonth =
SELECTEDVALUE(
'Date'[Month],
CurrentMonth
)
VAR PrevMonth = SelectedMonth - 1
VAR MyTable =
CALCULATETABLE(
SUMMARIZE(
'Main Table',
'Main Table'[ClientName],
'Main Table'[Mon],
'Main Table'[Revenue]
),
'Main Table'[Mon] = PrevMonth,
REMOVEFILTERS( 'Date' )
)
VAR Result =
SUMX(
MyTable,
'Main Table'[Revenue]
)
RETURN
Result
可以为当前月份编写与Previus Month计算相同的代码
'Measure Current Month Revenue' =
VAR CurrentMonth =
MONTH(
TODAY()
)
VAR SelectedMonth =
SELECTEDVALUE(
'Date'[Month],
CurrentMonth
)
VAR MyTable =
CALCULATETABLE(
SUMMARIZE(
'Main Table',
'Main Table'[ClientName],
'Main Table'[Mon],
'Main Table'[Revenue]
),
'Main Table'[Mon] = SelectedMonth,
REMOVEFILTERS( 'Date' )
)
VAR Result =
SUMX(
MyTable,
'Main Table'[Revenue]
)
RETURN
Result
设置“日期”表和“主表”之间的关系可以实现更好的解决方案。
根据业务需求,可以使用月份级别粒度的日期表,使用YearMonth列而不是Mon,或者使用Day级别的日期表,使用日期列而不是Mon列。这将有助于回答者以文本形式而不是图像形式呈现数据。这将有助于回答者以文本形式而不是图像形式呈现数据。使用上述方法,如果切片器上未选择任何内容,则测量结果将是正确的,但如果我选择其他月份,我会变得空白。注意:我的切片器是使用Date Table中的Year Month字段创建的是,Date Table和Main Table之间存在关系,它们在Date键OK上连接,因此“Main Table”上有一个日期列,该列与“Date”[Date]之间存在关系。然后,可以通过在“日期”之后移除过滤器来更改此测量值!!它起作用了,谢谢@sergiom谢谢你的帮助。REMOVEFILTERS('Date')是缺失的部分。你能帮助我理解为什么我们使用这一行吗?我们需要删除日期表和主表之间的关系引入的过滤。这是因为切片器中的选择从日期表传播到遵循关系的主表。但是我们想要