Power BI / DAX — 变化时间段的动态比较

Power BI / DAX — Dynamic comparison for changing time period

首先,让我告诉你我正在处理的数据。它是来自 Google Analytics 的过去 6-8 周的网络数据,所以我有日期、值和很多维度。这是我在 Power Bi 中尝试使用它进行的操作。

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

这是我目前所了解的(下)。我查阅了这个解决方案 ,老实说我只理解了一半。

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

我请求社区帮助我优化此脚本,或者针对我的问题提出不同的解决方案。

非常感谢!

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])
))))

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

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

  1. 创建日历 table 并将其命名为 日期。最简单的方法是使用以下公式创建计算的 table:Date = CALENDARAUTO()
  2. 'Date'[Date]ci_dashboard_v7[Date][=28=之间创建一对多关系]
  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 )
    )