首页 > 解决方案 > Power BI / DAX - 变化时间段的动态比较

问题描述

首先,让我告诉你我正在使用的数据。它是来自 Google Analytics 过去 6-8 周的网络数据,因此我有日期、值和许多维度。这就是我在 Power Bi 中尝试做的事情。

我想将特定时期的价值总和与相应时期进行比较。但!正常的并行周期公式不适用于我的情况(或者我错了,我可以以某种方式使用它们),因为我在比较中需要以下逻辑:如果在过滤器中选择小于或等于 7 天而不是比较与 7 天前的 vales(因此,如果选择两天与一周前的两天相比)如果选择超过 7 天,则与相同大小的前一个时期相比(因此,如果选择 13 天,则直接与 13 天相比之前)另外,我希望此措施能够响应维度方面的过滤。我需要一个百分比差异,但我目前正在研究至少可以根据上述逻辑返回给我的值的措施。

这是我到目前为止所得到的(下)。我在这里查看了这个解决方案,老实说,我只了解其中的一半。

这里的问题是,当我尝试添加要在此度量中考虑的所有这些维度(解决方案的底部)时,计算变得非常慢并且无法真正使用。

我要求社区帮助我优化这个脚本,或者想出不同的解决方案来解决我的问题。

提前非常感谢!

Sessions Past Period = 
CALCULATE(SUM (ci_dashboard_v7[Sessions]), FILTER ( ALL ( ci_dashboard_v7 ),  
COUNTROWS (FILTER ( ci_dashboard_v7, EARLIER ( ci_dashboard_v7[Date] ) = DATEADD (  ci_dashboard_v7[Date],IF(DISTINCTCOUNT(ci_dashboard_v7[Date])<7,-7,DISTINCTCOUNT(ci_dashboard_v7[Date])), DAY )
&& ci_dashboard_v7[WMC_partner_lvl1]=EARLIER(ci_dashboard_v7[WMC_partner_lvl1])
&& ci_dashboard_v7[WMC_partner_lvl2]=EARLIER(ci_dashboard_v7[WMC_partner_lvl2])
&& ci_dashboard_v7[Campaign]=EARLIER(ci_dashboard_v7[Campaign])
&& ci_dashboard_v7[cd003]=EARLIER(ci_dashboard_v7[cd003])
&& ci_dashboard_v7[cd135]=EARLIER(ci_dashboard_v7[cd135])
&& ci_dashboard_v7[Channel]=EARLIER(ci_dashboard_v7[Channel])
&& ci_dashboard_v7[Channel_simple]=EARLIER(ci_dashboard_v7[Channel_simple])
&& ci_dashboard_v7[Date]=EARLIER(ci_dashboard_v7[Date])
&& ci_dashboard_v7[Country]=EARLIER(ci_dashboard_v7[Country])
&& ci_dashboard_v7[Domain]=EARLIER(ci_dashboard_v7[Domain])
&& ci_dashboard_v7[Week]=EARLIER(ci_dashboard_v7[Week])
&& ci_dashboard_v7[Week_day]=EARLIER(ci_dashboard_v7[Week_day])
&& ci_dashboard_v7[Year_current]=EARLIER(ci_dashboard_v7[Year_current])
&& ci_dashboard_v7[Week_current]=EARLIER(ci_dashboard_v7[Week_current])
&& ci_dashboard_v7[Week_before_current]=EARLIER(ci_dashboard_v7[Week_before_current])
&& ci_dashboard_v7[is_CRM]=EARLIER(ci_dashboard_v7[is_CRM])
&& ci_dashboard_v7[WMC_tm]=EARLIER(ci_dashboard_v7[WMC_tm])
&& ci_dashboard_v7[Platform]=EARLIER(ci_dashboard_v7[Platform])
&& ci_dashboard_v7[Device]=EARLIER(ci_dashboard_v7[Device])
&& ci_dashboard_v7[OS]=EARLIER(ci_dashboard_v7[OS])
&& ci_dashboard_v7[WMC_type]=EARLIER(ci_dashboard_v7[WMC_type])
&& ci_dashboard_v7[Source_Accengage_Pigeon]=EARLIER(ci_dashboard_v7[Source_Accengage_Pigeon])
&& ci_dashboard_v7[WMC_tool]=EARLIER(ci_dashboard_v7[WMC_tool])
&& ci_dashboard_v7[WMC_full]=EARLIER(ci_dashboard_v7[WMC_full])
&& ci_dashboard_v7[Source]=EARLIER(ci_dashboard_v7[Source])
))))

标签: ms-officepowerbidax

解决方案


此解决方案假定您在 ci_dashboard_v7[Date] 列中只有日期(没有时间)。

以下是您可以尝试的方法:

  1. 创建一个日历表并将其命名为Date。最简单的方法是使用以下公式创建一个计算表:Date = CALENDARAUTO()
  2. 在'Date'[Date]ci_dashboard_v7[Date]之间创建一对多关系
  3. 隐藏ci_dashboard_v7[Date]列,仅在切片器中使用'Date'[Date]
  4. 创建以下度量:

    Sessions Past Period =
    CALCULATE (
        SUM ( ci_dashboard_v7[Sessions] ),
        DATEADD ( 'Date'[Date], - MAX ( 7, COUNTROWS ( 'Date' ) ), DAY )
    )

推荐阅读