ms-office - 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])
))))
解决方案
此解决方案假定您在 ci_dashboard_v7[Date] 列中只有日期(没有时间)。
以下是您可以尝试的方法:
- 创建一个日历表并将其命名为Date。最简单的方法是使用以下公式创建一个计算表:
Date = CALENDARAUTO()
- 在'Date'[Date]和ci_dashboard_v7[Date]之间创建一对多关系
- 隐藏ci_dashboard_v7[Date]列,仅在切片器中使用'Date'[Date]
创建以下度量:
Sessions Past Period = CALCULATE ( SUM ( ci_dashboard_v7[Sessions] ), DATEADD ( 'Date'[Date], - MAX ( 7, COUNTROWS ( 'Date' ) ), DAY ) )
推荐阅读
- c# - 在 Blazor 中本地化 DateTime(和数字)
- python - 在 python 3 中解析 Json,从 API 获取电子邮件
- python - 如何使用用户输入停止while循环?
- reactjs - 如何从formik datePicker将dateFormat发送到api
- ios - 找不到 GoogleMobileAds.h 文件
- django - CORS 策略已阻止从源 [domain] 访问 [Img Link] 上的图像
- gcc - GCC DLL 使用完整文件路径转发导出
- javascript - 从 React Hook 复制数组
- google-cloud-platform - 我的虚拟机是否使用 GPU、承诺 GPU 和抢占式 GPU?
- node.js - Node.js 集群共享缓存