首页 > 解决方案 > 在 power BI 中使用 ISO 年和 ISO 周计算同比变化

问题描述

我的后端表有一周级别的数据。它包含当前 ISO 年份和当前 ISO 周,以及应与当年数据进行比较的上一年的 ISO 年和周数。

对于每个 signup_iso_year-signup_iso_week 组合,只存在一个 iso_prev_year-iso_prev_yearweek 组合。iso_prev_year、iso_prev_yearweek 列说明了由于某些年份有 53 周而不是 52 周而可能发生的偏移。

数据表

(我无法嵌入图像,所以我也在这里添加了一个表格,尽管它的信息比“数据表”中的图像少得多)。

Number_of_signups signup_iso_year 注册iso_week iso_prev_year iso_prev_yearweek 国家 Grade_level
5 2020 18 2019 18 中学
7 2020 18 2019 18 我们 中学
6 2021 17 2018 18 中学
8 2021 17 2018 18 我们 中学

我想使用 signup_iso_year、signup_iso_week、iso_prev_year、iso_prev_yearweek 列计算 number_of_signups 的 Year-Over_Year 变化。

我已经尝试创建一个计算列,其中包含上一年的 number_of_signups 的总和,但是由于上一年或今年可能不存在 country、grade_level、subject、email_type 的每个组合,因此一些值会丢失,因此给出结果不正确。

我正在寻找的答案是一种Power BI 度量,它可以根据 signup_iso_year 和 signup_iso_week 为我提供 YOY 变化。

编辑:我之前应该提到过这个,但我忘记了。该表包含 2018 年至今的数据。因此,数据量非常大。此外,我需要这个 YoY 度量来获得时间序列视觉效果,这意味着我无法使用简单的 MAX/MIN 函数为上一年分配 ISOyear/ISOweek 值。它需要从 iso_prev_year、iso_prev_yearweek 列中选择值,但由于 EARLIER 函数不能用于度量,我无法弄清楚如何做到这一点。

这就是为什么我试图创建一个计算列,并使用 EARLIER 函数来计算前一年的 number_of_signups。但由于数据中存在其他列,即国家/地区、等级_级别、主题、电子邮件类型,实际 number_of_signups 和计算出的 previous_year_number_of_signups 存在差异。这些差异是由于并非这些列的每个组合每周都存在,因此我们在计算 previous_year_number_of_signups 时可能会遗漏一些数据。

编辑 2:被要求包含预期结果的示例,因此添加了一些图片。

总体水平、国家水平、年级水平的同比

国家+年级的YOY

标签: powerbidax

解决方案


如果我理解你的要求是正确的,你需要一个像下面这样的措施。请记住,这可能不是您需要的确切内容,但这肯定会帮助您达到所需的输出。

prev_signup = 

var iso_prev_year = MIN(your_table_name[iso_prev_year])
var iso_prev_year_week = MIN(your_table_name[iso_prev_yearweek])

RETURN
CALCULATE(
    SUM(your_table_name[Number_of_signups]),
    FILTER(
        ALL(your_table_name),
        your_table_name[signup_iso_year] = iso_prev_year
            && your_table_name[signup_iso_week] = iso_prev_year_week
    )
) + 0

您还可以在Power Query 编辑器中进行一些转换,并使用您的列连接同一个表。这种情况下,您可以将上一年的值放在同一行中。休息只是比较表中的 2 列来计算 YOY


推荐阅读