手记

Power BI教程:制作动态斜率图进行年同比变化百分比对比

在本文中,我将向您展示如何在 Power BI 中创建一个动态斜率图,以显示年对年百分比变化。您只需要两个 DAX 度量值即可构建此可视化效果,还有可选的第三个 DAX 度量值用于条件格式化(本文末尾附有 .pbix 文件)。

静态与动态的斜率图

什么是坡度图呢?

斜图是一种线形图,用来显示两个时间点或两种状态之间的变化。通过专注于每个类别的两个点,它简化了绝对和相对变化的对比。 斜图在类别数量较少时最为有效。

静态斜率图

创建 Power BI 中的坡度图的一个简单方法是从 x 轴上排除不需要的数据点。例如,要比较 2021 年和 2024 年的收入,可以排除 2022 年和 2023 年。但使用年份切片器时,这种方法就会遇到问题,因为这个图表不会根据所选年份动态调整。

静态坡度图

动态斜率图(动态图)

为解决这个问题并创建一个根据切片器的选择变化的动态坡度图,我们可以使用下面的DAX公式:

Sales_Slope 图 =   
VAR 第一年 = MINX(ALLSELECTED(日期维度), 日期维度[年份]) -- 最早的一年  
VAR 最后一年 = MAXX(ALLSELECTED(日期维度), 日期维度[年份]) -- 最晚的一年  
RETURN  
    IF(  
        SELECTEDVALUE(日期维度[年份]) = 第一年 || SELECTEDVALUE(日期维度[年份]) = 最后一年,  
        SUM(糖果销售金额[销售额]),  
        BLANK() -- 确保中间年份返回空白值  
    )

以下DAX公式旨在创建一个斜率图,用于比较选定的第一年和最后一年的总销售额。斜率图是一种用来比较两个时间点之间变化的图表。以下是对公式的分解说明。

1., 确定起止年份:

  • FirstYearLastYear 变量使用 MINXMAXX 函数来确定筛选范围内的年内最小和最大年份。这确保公式能根据用户在切片器或筛选器中的选择进行调整。

2. 条件计算:

  • IF语句检查当前年份是否是第一年或最后一年的话。
  • 如果是第一年或最后一年的话,则计算SUM(Candy_Sales[Sales])以得到该年的总销售额。
  • 如果不是第一年或最后一年,则返回BLANK(),从而将这些年份从可视化中排除。

创建了 DAX 计量后,创建一个折线图。将 x 轴设置为 DimDate[Year]格式化为分类),将 y 轴设置为 Sales_Slope Graph 计量。这将显示第一年和最后一年的值,突出显示随时间的变化趋势。

添加百分比比较在斜率图中的重要性

虽然很容易通过观察斜率的陡峭程度来识别数值变化最大的情况,但这并不一定意味着百分比变化也是最大的。为了进行更准确的百分比变化比较,我们可以在每个类别的斜率图上添加百分比变化的标签。这将让我们看到数值的相对变化,而不仅仅是绝对值的变化。

    Revenue_YoY_Change_Graph =   
    VAR FirstYear =   
        CALCULATE(  
            MIN(DimDate[Year]),  
            ALLSELECTED(Candy_Sales)  
        )  

    VAR LastYear =   
        CALCULATE(  
            MAX(DimDate[Year]),  
            ALLSELECTED(Candy_Sales)  
        )  

    VAR LastYearValue =   
        CALCULATE(  
            SUM(Candy_Sales[Sales]),  
            DimDate[Year] = LastYear  
        )  

    VAR FirstYearValue =   
        CALCULATE(  
            SUM(Candy_Sales[Sales]),  
            DimDate[Year] = FirstYear  
        )  

    VAR YoYChange =   
        IF(  
            FirstYearValue > 0,  
            DIVIDE(LastYearValue - FirstYearValue, FirstYearValue, 0),  
            0  
        )  

    返回   
        IF(  
            选定值(DimDate[Year]) = FirstYear,   
            空值(),   
            IF(  
                YoYChange > 0,   
                "▲ " & FORMAT(YoYChange, "0.0%"),   
                IF(  
                    YoYChange < 0,   
                    "▼ " & FORMAT(YoYChange, "0.0%"),   
                    空值()  
                )  
            )  
        )

//此代码用于计算年对年销售额的变化,并用符号“▲”表示增长,“▼”表示下降。

此 DAX 公式的首要目标是计算每年同比(YoY)收入的变化,并以视觉上吸引人的方式展示结果,用上下箭头指示变化的方向。

一步一步来:

1. 确定起止年份:

1. 找出开始和结束的年份:

  • FirstYearLastYear 变量利用 CALCULATEALLSELECTED 函数来确定当前筛选范围内的年份最小值和最大值。这确保计算基于所选时间段。

2. 计算第一年和最后一年的收入

  • LastYearValueFirstYearValue 分别表示去年和第一年的总收入。

3. 计算同比变化的方法如下:

  • 这个 YoYChange 变量计算从第一个年份到最后一个年份的百分比变化。它通过使用 DIVIDE 函数,并设置默认值为 0 来处理可能出现的除零错误。

4. 格式化输出部分:

返回语句RETURN根据年同比增长情况有条件地格式化输出:

  • 若当前年份为首年,则返回空值(注:为了确保百分比变化仅在最后一年显示,首年的数据点从趋势图中被省略)
  • 若年同比增长率为正,则显示上箭头以及格式化的百分比数值。
  • 若年同比增长率为负,则显示下箭头以及格式化的百分比数值。
  • 若无变化,则返回空值。
可选:使用条件格式

为了进一步增强可视化,我们可以对百分比比较标签使用条件格式。增长可以用绿色表示,而负的变化则用红色表示。

    CF_Revenue_YoY Change =   
    VAR FirstYear =   
        CALCULATE(  
            MIN(DimDate[Year]),  
            ALLSELECTED(Candy_Sales)  
        )  

    VAR LastYear =   
        CALCULATE(  
            MAX(DimDate[Year]),  
            ALLSELECTED(Candy_Sales)  
        )  

    VAR LastYearValue =   
        CALCULATE(  
            SUM(Candy_Sales[Sales]),  
            DimDate[Year] = LastYear  
        )  

    VAR FirstYearValue =   
        CALCULATE(  
            SUM(Candy_Sales[Sales]),  
            DimDate[Year] = FirstYear  
        )  

    VAR YoYChange =   
        IF(  
            FirstYearValue > 0,  
            DIVIDE(LastYearValue - FirstYearValue, FirstYearValue, 0),  
            0  
        )  

    RETURN   
        IF(  
            YoYChange > 0,   
            "#6A994E",  -- 正增长绿色  
            IF(  
                YoYChange < 0,   
                "#BC4749",  -- 负增长红色  
                BLANK()     -- YoYChange 为 0 或未定义时不显示颜色  
            )  
        )

通过实施这两项措施,我们会得到以下结果。

具有同比功能的动态斜率图

为什么需要新的日期表?

日期表

在这个案例研究中,我们有一个关于糖果销售的表格,其中包含一个 Order_Date 列。你可能会想,既然我们的数据中已经有了日期信息,为什么还需要一个单独的 日期表。这里就是原因所在。

1. 时间智能

如果你想做这样的计算,比如:

  • 年同比增长(比如,今年的销售额和去年相比)
  • 月度变化(比如,每月销售额的变化情况)
  • 累计总销售额(比如,从一月到现在为止的总销售额)

Power BI 自带的工具需要一个正确的时间表来处理这类基于时间的分析。没有它,这些计算将无法正常工作,或者需要花费大量额外的时间和精力。

2. 处理缺失或不规范的日期

在你的糖果销售表格中,订单日期列可能:

  • 包含空档(例如,在没有下单的日子里缺少日期)。
  • 存在重复(例如,同一天有多个订单)。
  • 缺少完整的日期范围,无法进行适当的分组和筛选。

日期表通过包含所有日期的连续日期来解决这个问题,即使某些日期没有订单。这确保了您的报告展示了完整的日期范围,而不仅仅是你销售数据里的日期。

要创建一个新的日期表(也称作日期维度日历表),可以参考这篇文章:

在Power BI中,这篇文章构建并利用DimDate日期表进行KPI衡量和图表清理。这篇文章讨论如何在Power BI中构建并利用DimDate日期表进行KPI衡量和图表清理。

在这里下载 .pbix 文件。这里。

谢谢大家的阅读!

我希望这个案例分析能提供一些有价值的洞察。如果有问题,欢迎联系。

如果你对更多数据故事和可视化内容感兴趣,欢迎关注。我不断分享相关内容在我的Patreon页面和LinkedIn页面。

别忘了订阅哦

👉 Power BI 发布动态

👉 Power BI 通讯报

以及加入我们的 Power BI 社区

[Microsoft Power BI 大师课 | Twitter, Instagram | 链接树

一起来分享我们在 Microsoft Power BI 上的经验,一起学习,一起成长。
](https://linktr.ee/powerbi.masterclass?source=post_page-----2f7e0b4f8807--------------------------------)

0人推荐
随时随地看视频
慕课网APP