分享

Power BI|高手进阶:聚合迭代器函数,打造精准度量值

 敬锋 2024-05-25 发布于广东

在Power BI的浩瀚宇宙里,度量值是链接数据与洞察的桥梁。聚合迭代器函数,作为度量值的魔法棒,能将看似平凡的数据点石成金,转化成决策的金矿。本文将通过三个生动实例,带你领略聚合迭代器函数的风采,揭秘RELATEDRELATEDTABLEVALUES的使用秘诀,让你的Power BI报告跃升至新高度。

第一章:度量值的基石——简单聚合

聚合迭代器函数及关键概念详解

1. SUMX 函数

  • 功能:对一个表的每一行应用一个表达式,并将结果求和。

  • 语法SUMX(table, expression)

  • 用法示例

    Dax
    1总收入 = SUMX(Sales, Sales[收入])

    这里,对于Sales表中的每一行,Sales[收入]的值会被累加,得到总收入。

2. RELATED 函数

  • 功能:从当前行所在的表查找与之在关系中关联的表中的对应行,并返回指定列的值。

  • 语法RELATED(table[column])

  • 用法示例

    Dax
    1单行折扣 = RELATED(Discounts[折扣额])

    假设当前行属于Sales表,此函数会找到与之通过订单ID关联的Discounts表中的行,并返回该行的折扣额

3. RELATEDTABLE 函数

  • 功能:返回与当前行所在的表在关系中关联的整个表。

  • 语法RELATEDTABLE(table)

  • 用法说明: 当你需要基于关联表中的所有数据进行计算或筛选时,RELATEDTABLE非常有用。例如,它可以与迭代函数结合,遍历关联表的每一行。

4. VALUES 函数

  • 功能:返回当前筛选上下文中指定列的所有唯一值构成的一维表。

  • 语法VALUES(column)

  • 用法示例

    Dax
    1订单列表 = VALUES(Sales[订单ID])

    此函数会根据当前的筛选条件,列出Sales表中所有不同的订单ID。

5. SUMMARIZE 函数

  • 功能:基于一组列对表进行分组,并为每个组计算一个或多个聚合值。

  • 语法SUMMARIZE(table, group_by_column1, ..., aggregation_column, aggregation_function)

  • 用法示例

    Dax
    1订单收入摘要 = SUMMARIZE(Sales, Sales[订单ID], '总收入', SUM(Sales[收入]))

    此函数将Sales表按照订单ID分组,并为每个组计算收入的总和,生成一个新的汇总表。

筛选器上下文

  • 定义:筛选器上下文是指在执行DAX表达式时,应用于数据集的一系列筛选条件。它可以由用户交互(如切片器选择)、视觉对象的设置或度量值内部的逻辑所定义。

  • 作用:决定了哪些数据行会参与到度量值的计算中,从而影响最终结果。

通过综合运用这些函数和理解筛选器上下文的工作原理,你可以构建出既强大又灵活的Power BI度量值,满足复杂的数据分析需求。

示例1:收入总和

一切从基础开始。要统计总收入,只需用聚合函数SUM直接相加收入列即可。

Dax
1总收入 = SUM(Sales[收入])

第二章:迭代的魅力——计算复杂度量

示例2:折扣总和

进入迭代领域,我们需要更精细的操作。假设折扣信息不在主表中,而是关联的折扣表通过订单ID相连。这时,RELATED函数大显身手,它能跨表抓取相关信息。

Dax
1总折扣 = SUMX(Sales, RELATED(Discounts[折扣额]))

这里,SUMX配合RELATED,遍历Sales表中的每一行,取出与之相关的折扣表中的折扣额,最终求和。

第三章:深入迭代——高级计算技巧

示例3:平均收入订单行值

更进一步,我们想计算平均每个订单的收入行值。这要求先对订单分组,然后对每个订单内的收入求和,最后求平均。VALUESSUMMARIZE携手完成此壮举。

Dax
1平均收入订单行 = 
2VAR OrderGroups = SUMMARIZE(Sales, Sales[订单ID], '总收入', SUM(Sales[收入]))
3RETURN AVERAGEX(OrderGroups, [总收入])

这里,SUMMARIZE先按订单ID分组并计算每个组的总收入,生成新的表OrderGroups。然后,AVERAGEX遍历这个新表,计算平均值。

第四章:迭代器与筛选器上下文的联袂演出

RELATEDTABLEVALUES的舞台

RELATEDTABLE允许你访问相关表的所有行,而VALUES则在筛选器上下文中发挥作用,循环访问每个值。

假设我们要在特定条件下计算订单的平均收入,首先确定筛选条件,然后使用VALUES迭代这些条件。

Dax
1特定条件平均收入 = 
2VAR FilteredOrders = VALUES(Sales[订单ID])
3RETURN
4 AVERAGEX(
5 FILTER(Sales, Sales[订单ID] IN FilteredOrders),
6 Sales[收入]
7 )

这里,VALUES首先生成所有订单ID的列表,然后通过FILTER筛选出符合条件的订单,最后计算这些订单的平均收入。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多