何时使用计算列和计算字段
何时使用计算列和计算字段
在学习Power Pivot时,用户经常会遇到如何聚合或计算数据的问题。本文将通过具体案例,详细介绍计算列和计算字段(度量值)的使用场景和区别,帮助用户更好地掌握Power Pivot的功能。
计算列的使用场景
示例1:为Product表添加产品类别名称
假设我们有一个Product表,其中包含产品名称、颜色、尺寸、经销商价格等信息,同时还有一个Product Category表,包含产品类别的名称。我们希望在Product表的每一行都添加产品类别的名称。
我们可以在Product表中创建一个名为"产品类别"的计算列,使用RELATED DAX函数从相关的产品类别表中获取ProductCategoryName列的值:
这个示例展示了如何使用计算列为每一行添加固定值,这些值可以在数据透视表的"行"、"列"或"筛选器"区域中使用。
示例2:计算产品类别的利润率
假设我们有一个Sales表,其中包含销售金额和成本数据,同时Sales表与产品类别表之间存在关系。我们希望计算每个产品类别的利润率。
我们可以在Sales表中创建一个计算列,通过从SalesAmount列中减去COGS列中的值来计算每行的利润金额:
但是,这种方法存在效率问题。计算列会为Sales表中的每一行计算利润,即使我们最终只需要按产品类别聚合的结果。此外,如果刷新数据模型,还需要重新计算所有值。
度量值的使用场景
示例1:计算总利润
我们可以创建一个名为"总利润"的度量值,避免创建利润计算列:
在Sales表的计算区域中,创建一个名为"总利润"的度量值:
总利润:=[Total SalesAmount] - [Total COGS]
将新的"总利润"度量值的格式更改为货币后,我们可以将其添加到数据透视表。可以看到,我们新的"总利润"度量值返回的结果与创建利润计算列,然后将其置于VALUES中相同。区别在于,"总利润"度量值的效率要高得多,并且使得数据模型更简洁。
示例2:计算销售额百分比
如果我们创建一个名为"销售额百分比"的计算列,公式为:
对于Sales表中的每一行,将SalesAmount列中的金额除以SalesAmount列中所有金额的总和。
当我们添加"日历年"切片器并选择一年时,会发现百分比总和不等于100%。这是因为计算列中的值是固定的,不会根据筛选器的变化而变化。
相反,我们可以创建一个度量值,用于正确计算总销售额的百分比,而不考虑应用了任何筛选器或切片器:
总销售额的百分比:= ([Total SalesAmount]) /CALCULATE ([Total SalesAmount],ALLSELECTED () )
这个度量值将始终产生总销售额的百分比,而不考虑应用了任何切片器或筛选器。
使用指南
使用计算列:
如果希望新数据显示在数据透视表中的行、列或筛选器中,或者显示在Power View可视化效果的AXIS、LEGEND或平铺BY上,则必须使用计算列。
如果希望新数据是行的固定值,例如,你有一个包含日期列的日期表,并且需要另一个仅包含月份数的列。
如果要将每行的文本值添加到表中,请使用计算列。
使用度量值:
如果计算结果将始终依赖于在数据透视表中选择的其他字段。
如果需要执行更复杂的计算,例如基于某种类型的筛选器计算计数,或者计算同比或方差,请使用计算字段。
如果要将工作簿的大小保持在最小并最大化其性能,请创建尽可能多的计算,以度量值。
虽然创建计算列与使用利润列一样,然后将其聚合到数据透视表或报表中没有任何问题,但随着对Power Pivot功能的深入了解,建议创建尽可能高效、最准确的数据模型。