静态与动态的斜率图
什么是坡度图呢?斜图是一种线形图,用来显示两个时间点或两种状态之间的变化。通过专注于每个类别的两个点,它简化了绝对和相对变化的对比。 斜图在类别数量较少时最为有效。
静态斜率图创建 Power BI 中的坡度图的一个简单方法是从 x 轴上排除不需要的数据点。例如,要比较 2021 年和 2024 年的收入,可以排除 2022 年和 2023 年。但使用年份切片器时,这种方法就会遇到问题,因为这个图表不会根据所选年份动态调整。
静态坡度图
动态斜率图(动态图)为解决这个问题并创建一个根据切片器的选择变化的动态坡度图,我们可以使用下面的DAX公式:
Sales_Slope 图 =
VAR 第一年 = MINX(ALLSELECTED(日期维度), 日期维度[年份]) -- 最早的一年
VAR 最后一年 = MAXX(ALLSELECTED(日期维度), 日期维度[年份]) -- 最晚的一年
RETURN
IF(
SELECTEDVALUE(日期维度[年份]) = 第一年 || SELECTEDVALUE(日期维度[年份]) = 最后一年,
SUM(糖果销售金额[销售额]),
BLANK() -- 确保中间年份返回空白值
)
以下DAX公式旨在创建一个斜率图,用于比较选定的第一年和最后一年的总销售额。斜率图是一种用来比较两个时间点之间变化的图表。以下是对公式的分解说明。
1., 确定起止年份:
FirstYear
和LastYear
变量使用MINX
和MAXX
函数来确定筛选范围内的年内最小和最大年份。这确保公式能根据用户在切片器或筛选器中的选择进行调整。
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. 找出开始和结束的年份:
FirstYear
和LastYear
变量利用CALCULATE
和ALLSELECTED
函数来确定当前筛选范围内的年份最小值和最大值。这确保计算基于所选时间段。
2. 计算第一年和最后一年的收入
LastYearValue
和FirstYearValue
分别表示去年和第一年的总收入。
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页面。
[Microsoft Power BI 大师课 | Twitter, Instagram | 链接树别忘了订阅哦
以及加入我们的 Power BI 社区
一起来分享我们在 Microsoft Power BI 上的经验,一起学习,一起成长。
](https://linktr.ee/powerbi.masterclass?source=post_page-----2f7e0b4f8807--------------------------------)