Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 计算本月和上月';power bi中基于切片器选择的s值_Powerbi_Dax_Powerquery - Fatal编程技术网

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)和
  • 使用主表中的日期创建的日期表

我想根据从日期表中选择的日期切片器计算两个字段/度量值

  • 当月收入
  • 上月收入
示例:如果我选择第4个月,则第4个月客户A和B的不同收入之和应为当前月收入,第3个月客户A和B的不同收入之和应为前一个月收入

我尝试编写以下度量来计算当前月收入,它运行良好,但它没有给出前一个月收入的正确结果。 我也得到了上个月相同的值

“衡量上月收入”=
如果(
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')是缺失的部分。你能帮助我理解为什么我们使用这一行吗?我们需要删除日期表和主表之间的关系引入的过滤。这是因为切片器中的选择从日期表传播到遵循关系的主表。但是我们想要