PowerBI/DAX之理解UNION函数

UNION函数属于集合函数,可以对表实现数学定义上的取并集操作,将返回多个表纵向追加后的所有行形成的单个表。


语法和作用

语法:

UNION ( <Table1>, <Table2>, [<TableN> ...] )

作用:对参数指定的多个表取并集,将返回多个表纵向追加后的所有行形成的单个表。

注意:

1、参数指定的每个表的列数都要一致。

2、所有表在进行纵向追加合并时,不会按照列名来进行合并,而是按列的顺序来合并的,即第一列与第一列合并,以此类推。

3、最终返回的结果表的列名与参数中定义的第一个表的列名一致。

4、返回的结果表包含参数指定的所有表的所有行,如果存在重复行也会被保留。

5、每个列在合并的所有表中的数据类型如果不一致,那么DAX引擎会根据数据类型转换规则自动确定合适的数据类型。

6、UNION函数会尽可能保留每个列的数据沿袭,如果某个列在合并的所有表中的数据沿袭都一致,那么结果表中的这个列就会继承数据沿袭。反之,如果某个列在合并的所有表中的数据沿袭存在不一致的情况,那么结果表中的这个列就会丢失数据沿袭。因此,结果表中可能会出现某些列存在数据沿袭而某些列不存在数据沿袭的情况。

7、返回的结果表不会包含扩展表,即使参数指定的表存在扩展表。


辅助理解的例子

1、如下图所示,UNION函数将合并参数指定的所有表的所有行,并且返回的结果表的列名与参数中定义的第一个表的列名一致。

2、用作参数的所有表必须具有相同列数,否则会报错,如下图所示:

3、在多个表进行合并时,是按照列的顺序来合并的,如果列顺序不一致,那么就可能会出现同一个列中存在多个类型的数据,导致合并后的结果无意义,如下图所示:

4、合并后的结果表中,每个列的数据类型取决于合并的所有表在该列的内容,如果合并的所有内容都具有相同数据类型,那么结果表中的这个列也会保持相同的数据类型,但如果存在数据类型不一致的情况,那么DAX引擎会根据数据类型转换规则自动确定合适的数据类型。

比如下图所示的查询,由于UNION函数合并的两个表的数据类型都是数值,因此在结果表中也保持了数值类型。:

但如果将数值2的数据类型更改为文本,那么根据数据类型转换规则,数值与文本在合并后的数据类型将变成文本,如下图所示:

5、如果某个列在合并的所有表中的数据沿袭都一致,那么结果表中的这个列就会继承数据沿袭。反之,如果某个列在合并的所有表中的数据沿袭存在不一致的情况,那么结果表中的这个列就会丢失数据沿袭。

如下图所示,由于合并的两个列的数据沿袭一致,因此结果表中的该列也继承了数据沿袭,所以行上下文转换后得到的筛选器能够正常筛选。

如下图所示,破坏其中一个列的数据沿袭后,由于合并的列的数据沿袭不一致,因此结果表中的该列将丢失数据沿袭,所以行上下文转换后得到的筛选器无法正常筛选,导致整列都是总计值。

6、UNION函数返回的结果表不会包含扩展表,即使参数指定的表存在扩展表。如下图所示:

7、UNION函数由于可以追加合并数据,因此最常见的应用场景就是与表构造器语法配合来构造辅助表,比如下面所示的动态维度切换案例中要用到的辅助表:

动态维度 = 
UNION(
    UNION(
        SELECTCOLUMNS(Customer,"Item",'Customer'[CountryRegion],"Type","地区"),
        {("Others","地区")}
    ),
    UNION(
        SELECTCOLUMNS('Product',"Item",'Product'[Subcategory],"Type","产品子类"),
        {("Others","产品子类")}
    ),
    UNION(
        SELECTCOLUMNS('Promotion',"Item",'Promotion'[Promotion],"Type","促销活动"),
        {("Others","促销活动")}
    )
)

总结

UNION函数的行为类似于数学定义上的取并集,经常用于构造辅助表等场景,使用频率很高且不可替代,建议掌握。

内容概要:本文详细介绍了名为MoSca的系统,该系统旨在从单目随意拍摄的视频中重建和合成动态场景的新视角。MoSca通过4D Motion Scaffolds(运动支架)将视频数据转化为紧凑平滑编码的Motion Scaffold表示,并将场景几何和外观与变形场解耦,通过高斯融合进行优化。系统还解决了相机焦距和姿态的问题,无需额外的姿态估计工具。文章不仅提供了系统的理论背景,还给出了基于PyTorch的简化实现代码,涵盖MotionScaffold、GaussianFusion、MoScaSystem等核心组件。此外,文中深入探讨了ARAP变形模型、2D先验到3D的提升、动态高斯表示、相机参数估计等关键技术,并提出了完整的训练流程和性能优化技巧。 适用人群:具备一定计算机视觉和深度学习基础的研究人员和工程师,特别是对动态场景重建和新视角合成感兴趣的从业者。 使用场景及目标:①从单目视频中重建动态场景的新视角;②研究和实现基于4D Motion Scaffolds的动态场景表示方法;③探索如何利用预训练视觉模型的先验知识提升3D重建质量;④开发高效的动态场景渲染和优化算法。 其他说明:本文提供了详细的代码实现,包括简化版和深入扩展的技术细节。阅读者可以通过代码实践加深对MoSca系统的理解,并根据具体应用场景调整和扩展各个模块。此外,文中还强调了物理启发的正则化项和多模态先验融合的重要性,帮助实现更合理的变形和更高质量的渲染效果。
### Power BI 中 TOPN 函数的使用方法 TOPN 是 DAX (Data Analysis Expressions) 的一个重要函数,主要用于返回指定数量或百分比的最大值记录集合。其语法如下: #### 语法结构 `TOPN(<number_of_records>, <table>, <column>, [<order>])` - `number_of_records`: 返回的记录数。 - `table`: 被操作的数据表名称。 - `column`: 进行排序依据的列。 - `[order]`: 可选参数,默认为降序排列 (`DESC`)。 以下是关于如何在 Power BI 中使用 TOPN 函数的具体示例和解释。 --- #### 示例场景:获取销售额最高的前 N 名客户 假设我们有一张名为 `Sales` 的销售数据表,其中包含以下字段: - CustomerName: 客户姓名 - SalesAmount: 销售金额 目标是从这张表格中提取销售额最高的前 5 名客户的列表。 ##### 步骤实现 定义一个新的度量值来应用 TOPN 函数: ```dax TopCustomers = CALCULATETABLE( VALUES(Sales[CustomerName]), TOPN(5, Sales, Sales[SalesAmount], DESC) ) ``` 上述代码的作用是基于 `SalesAmount` 列按降序排列,并选取前五条记录对应的客户名字[^1]。 --- #### 动态图表标题的应用实例 当需要创建动态显示顶部 N 条记录的可视化时,可以结合其他高级技术一起完成。例如,通过变量声明的方式灵活调整展示的数量范围。 下面的例子展示了如何利用 VAR 和 TOPN 结合生成动态筛选条件下的子集表: ```dax FilteredTable = VAR NumberOfSelectedDays = COUNTROWS('DateSelection') VAR SelectedDays = FILTER('Dates', 'Dates'[IsSelected]) RETURN CALCULATETABLE( ALL('Dates'), TOPN(NumberOfSelectedDays - 1, SelectedDays, 'Dates'[DateValue], ASC) ) ``` 这里的关键在于先统计选定日期总数并减去一天作为输入参数传递给 TOPN 函数,从而达到排除最后一天的效果[^3]。 --- #### RANKX 与 TOPN 组合运用技巧 除了单独使用外,还可以配合 RANKX 实现更复杂的业务需求。比如去除汇总行中的数值干扰情况。 考虑这样一个例子——我们需要排出各产品的销量排行但不希望看到总计那一行列入最终结果之中。此时可以通过增加一层逻辑判断达成目的: ```dax RankingWithoutTotalRow = IF ( ISBLANK([Product Name]), BLANK(), RANKX ( ALL ('Products'), SUM ('Products'[Quantity Sold]), , DESC, Skip ) ) ``` 接着再调用此自定义列参与后续过滤过程即可[^4]。 --- #### 数据差异处理注意事项 值得注意的是,在执行 UNION 或 EXCEPT 类型的操作过程中可能会遇到重复项问题。按照官方文档描述,“如果某行同时存在于两个源表里头的话那么它连同它的副本都不会被纳入到输出当中;而要是仅仅属于第一个表达式的部分则依旧保留下来。”因此实际开发期间务必留意此类细节以免影响分析准确性[^5]。 --- ### 总结 综上所述,POWER BI 提供的强大功能使得我们可以轻松构建各种类型的地理空间视图以及复杂查询语句。随着版本迭代更新速度加快,未来还将带来更多可能性等待探索发现[^2]!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值