《power BI视频6》SUMMARIZECOLUMNS CROSSJOIN CONTAINS TREATAS ROW

本文详细介绍了Power BI中的SUMMARIZECOLUMNS、CROSSJOIN、CONTAINS和TREATAS等分组与连接函数的使用方法和应用场景,帮助用户更高效地进行数据分析和数据筛选。
分组与连接函数
  • SUMMARIZECOLUMNS函数

    共有四个参数,后三个参数都可选

    – 分组依据。可重复
    – 对原表进行筛选 可选
    – 新增加的列名 可选
    – 新增加列的内容表达式 可选

    不重复姓名 = SUMMARIZECOLUMNS(‘表’[姓名])
    多列不重复 = SUMMARIZECOLUMNS(‘表’[姓名], ‘表’[日期])

    汇总表 = SUMMARIZECOLUMNS(‘表’[姓名], ‘表’[日期], “总分”, sum(‘表’[成绩]))
    可以将不同日期不同姓名的人的总成绩筛选出来

    还可以在分组的时候使用其他函数来缩小筛选范围
    汇总表 = SUMMARIZECOLUMNS(‘表’[姓名], FILTER(‘表’, ‘表’[科目] = “数学”), “数学”, sum(‘表’[成绩]))

    该函数会忽略空值行,并且这个函数不支持上下文转换发生的计算,所以一般不在度量值中使用。

加上ADDMISSINGITEMS会显示空值行,则显示效果如SUMMARIZE函数相同。
使用方法:

汇总表1 = (‘表’[姓名], ‘表’[日期],
SUMMARIZECOLUMNS(‘表’[姓名], ‘表’[日期], “总分”, sum(‘表’[成绩])),
‘表’[姓名], ‘表’[日期], )


交叉 = INTERSECT (‘表1’ , '表2 ')

除去 = EXCEPT (‘表1’ , '表2 ')

结合 = UNION (‘表1’ , '表2 ')

笛卡尔积 = CROSSJOIN (‘表1’ , '表2 ')


CONTAINS查找,如果满足所有条件,则返回TRUE,否则返回FALSE

是否买过 = CONTAINS(‘表

本课程是PowerBI系列课程之DAX函数专题讲解,包含以下内容 1.  DAX函数基础知识什么是DAX函数数学函数:ABS、DIVIDE、MOD、RAND、ROUND、FIXED等日期和时间函数: CALENDAR、CALENDARAUTO、MONTH、YEAR、DATE、DT等信息函数:USERNAME、USERPRINCIPALNAME、HASONEFILTER、HASONEVALUE、ISFILTERED、ISCROSSFILTERED、ISINSCOPE、ISBLANK、SELECTEDMEASURE、SELECTEDMEASURENAME等逻辑函数:AND、OR、IF、IFERROR、SWITCH、TRUE、FALSE、COALESCE(官方文档含糊不清-结合实例)等关系函数:CROSSFILTER、RELATED、RELATEDTABLE等筛选器函数:FILTER、CALCULATE、ALL、ALLEXCEPT、ALLSELECTED、EARLIER、KEEPFILTERS、REMOVEFILTERS、SELECTEDVALUE、LOOKUPVALUE等父子函数:PATH、PATHCONTAINS、PATHITEM、PATHLENGTH等统计函数:AVERAGE、COUNT、MAX、MIN、SUM等迭代统计函数:AVERAGEX、COUNTX、MAXX、MINX、SUMX、RANKX等表函数: FILTERS 、ADDCOLUMNS、 SELECTCOLUMNS、 CROSSJOIN、 EXCEPT、 GENERATE、 GROUPBY、 SUMMARIZE、 SUMMARIZECOLUMNS、 TOPN、 TREATAS、 UNION、 VALUES、DISTINCT、DATATABLE、NATUALINNERJOIN、NATRUALLEFTOUTERJOIN等文本函数: EXACT、MID、 FIND、 LEN、 REPT、 LOWER、 UPPER、 UNICHAR等时间智能函数:DATEADD、DATESMTD、FIRSTDATE、LASTDATE、SAMEPERIODLASTYEAR等财务函数:2020.7之后发布的,和Excel中财务函数相似,网页和demo pbix简单介绍其他函数:BLANK、ERROR、IFERROR等 DAX函数初体验:Max、Sum、Divide、if、Values等值函数表函数以及表和列的概念DAX函数术语、语法、运算符DAX运算符和引擎中字母大小写问题DAX编程注释和快捷键DAX与Excel函数的共同点和区别(PPT)DAX、xmSQL与SQL表达式的区别(PPT)DAX函数的自学途径 2.  PowerBI中数据建模知识维度建模关系传递和交叉筛选器方向-理解表关系(1v1, 1vM, Mv1,MvM)两个方向上应用安全筛选器关闭关系自动检测新建计算列新建度量值新建计算表:辅助表(五种方式)、日历表数据类型讲解数据格式控制:%、$、千位分隔符、小数位、日期格式Format函数自定义数据格式Convert函数做数据类型转换解决中文数字单位 万 的显示问题Date和DT函数定义固定日期值显示和隐藏列DAX代码分析器阅读DAX表达式方法:从上至下、由内到外(注意Calculate的计算顺序)调试DAX表达式方法:分布输出或VAR输出3.  DAX函数原理 Vertipaq列式数据库原理理解度量值和计算列理解行上下文和筛选上下文:Calculate示意图行上下文中使用VAR替代EARLIERVAR变量在定义时的上下文中计算VAR变量是采用惰性计算(使用时计算)理解扩展表和RELATED函数理解数据沿袭Lineage 4.  开始感知DAX函数的强大DAX函数实现特殊符号的使用DAX函数实现切片器默认当前月或天DAX函数使切片器默认代表无任何选择DAX函数使切片器仅显示有数据的选项DAX函数使切片器反向筛选和计算DAX函数使切片器之间取并集DAX函数使关系中多端的切片器筛选一端的切片器 DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标5.  理解重点DAX函数重中之重FILTER 和 CALCULATE和CALCULATETABLE详解调节器REMOVEFILTERS和ALL、ALLEXCEPT函数调节器ALL、ALLSELECTED和ISINSCOPE占比分析调节器AllSELECTED和KEEPFILTERS的比较调节器USERELATIONSHIP激活关系调节器TREATAS动态建立关系调节器CROSSFILTER改变筛选器方向重点之ISFILTERED和ISCROSSFILTERED重点之HASONEVALUE和ISINSCOPE的区别重点之表函数SELECTEDCOLUMNS和ADDCOLUMNS重点之表函数NATUALINNERJOIN和NATRUALLEFTOUTERJOIN重点之表函数FILTERS和VALUES比较重点之VALUES和DISTINCT的区别重点之分组函数SUMMARIZECOLUMNS详解重点之函数LOOKUPVALUE vs RELATED vs VLOOKUP 重点之集合函数UNION、INTERSECT、EXCEPT重点之集合函数CROSSJOIN和GENERATE 笛卡尔积重点之值合并、列合并、表合并CONCATENATEX重点之BLANK行产生的原因和BLANK相关函数重点之COALESCE函数处理空重点之FIRSTNOBLANK和FIRSTNOBLANKVALUE函数重点之使用VAR变量表中的列重点之Error和IfError函数6.  实际案例-日期时间和时间智能相关关键点-日期表和事实表关联问题时间智能-同比环比分析时间智能-累计聚合、滚动聚合、移动平均时间智能-期初期末库存分析日期分析-计算任意所选月份的环比日期分析-周的同比环比和周聚合日期分析-指定月份的同比环比和季度环比日期分析-计算季末或季末月份的数据日期分析-趋势图中根据最近月份取TopN日期分析-动态指定某个日期区间分析日期分析-动态任意区间段做数据对比日期分析-实现两个日期列的范围筛选日期分析-按工作日计算日期差日期分析-计算最近两次购买日期差日期分析-根据历史数据做销售预测日期时间函数和时间智能函数使用总结7.  实际案例-DAX函数进阶进阶-解决列排序对计算的影响进阶-实现切片器筛选之间的OR逻辑进阶-矩阵Matrix中高亮显示最大值最小值进阶-DAX列转行 vs 矩阵列转行和逆透视进阶-非日期类型的累计聚合进阶-排名逻辑的4种实现-RANKX详解进阶-分组内排名的实现和理解迭代函数进阶-TopN/BottomN和Others的实现进阶-TopN中实现动态指标进阶-TopN中实现N的动态进阶-分组内动态TopN和Others 进阶-商品折上折-迭代函数SUMX详解 进阶-分析客户购买行为进阶-找出无购买行为的客户进阶-客户购买商品关联度分析 进阶-新客户分析进阶-流失客户分析进阶-回流客户分析进阶-客户购买频次和区间分析进阶-RFM客户价值分析进阶-帕累托分析进阶-盈亏平衡分析报表性能优化思路(PPT)  
<think>我们有一个新问题:在Power BI中筛选排除同时满足两个条件的数据项。根据之前的对话历史,用户已经了解如何排除包含特定字符的项,现在需要排除同时满足两个条件的项。 分析需求:排除同时满足两个条件的项,即逻辑上相当于“条件A AND 条件B”时排除。 解决方案思路: 1. 在Power Query中,可以使用M语言的Table.SelectRows函数,结合逻辑运算符(and, or, not)进行筛选。 2. 在DAX中创建度量值或计算列,通过筛选器上下文调整,但通常更推荐在Power Query中处理,因为这是数据清洗阶段的工作。 我们将提供两种主要方法: 方法1:在Power Query中使用M语言(数据转换阶段处理,推荐) 方法2:在DAX中创建度量值(报表层处理,适合动态计算) 根据引用[4]中提到的CALCULATE函数和逻辑运算符,我们可以参考其逻辑来构建DAX度量值。 具体步骤: 方法1:Power Query (M语言) 步骤:进入Power Query编辑器 -> 使用自定义筛选条件 示例:假设我们有一个销售表,需要排除“产品类别”为“家电”且“销售额”大于10000的记录。 M代码示例: ```powerquery let 源 = Excel.CurrentWorkbook(){[Name="Sales"]}[Content], // 筛选条件:不满足(类别为家电且销售额>10000) 筛选行 = Table.SelectRows(源, each not ([产品类别] = "家电" and [销售额] > 10000)) in 筛选行 ``` 解释:使用`and`连接两个条件,然后用`not`取反,即可排除同时满足两个条件的行。 方法2:DAX度量值(适用于动态计算,比如在可视化中排除) 场景:在报表中,我们可能想显示总销售额,但排除同时满足两个条件的记录(注意:这里不是排除原始数据行,而是在计算时排除)。 示例度量值: ```dax 过滤后的销售额 = CALCULATE( SUM(Sales[销售额]), // 使用FILTER函数筛选出不符合排除条件的行 FILTER( ALL(Sales), NOT (Sales[产品类别] = "家电" && Sales[销售额] > 10000) ) ) ``` 注意:如果是在整个报表级别排除,可能需要使用页面级或视觉对象级筛选器,但这里我们通过度量值实现动态计算。 另外,根据引用[3]中提到的,我们可以使用报表筛选器窗格中的“排除”功能,但该功能通常用于单个字段的排除,对于多条件排除(同时满足两个条件)可能不够直接。因此,我们更推荐上述两种方法。 特殊情况:如果两个条件分别来自不同的列,且需要同时满足,那么上述方法都适用。 高级情况:如果条件复杂,比如需要同时满足三个条件,只需在条件表达式中用`and`连接即可。 注意事项: 1. 在M语言中,条件表达式中的字段名需要用方括号括起来,并且字符串比较要区分大小写(除非使用Comparer函数忽略大小写)。 2. 在DAX中,逻辑运算符是`&&`(和)和`||`(或)。 问题:如何排除满足条件A或条件B的项? 只需将`and`改为`or`,例如:`not ([条件A] or [条件B])` 表示排除满足任意一个条件的项。 根据引用[4]中的例子,我们可以类比:排除冰箱的销量是通过`NOT(Sales[商品名称]="冰箱")`,而这里我们扩展为两个条件。 下面我们给出一个具体案例: 案例:销售数据表,包含字段:产品类别、产品名称、销售额。 要求:排除产品类别为“家电”且产品名称包含“测试”字样的所有记录。 方法1(Power Query): ```powerquery Table.SelectRows(源, each not ([产品类别] = "家电" and Text.Contains([产品名称], "测试"))) ``` 方法2(DAX度量值): ```dax 过滤后的销售额 = CALCULATE( SUM(Sales[销售额]), FILTER( ALL(Sales), NOT (Sales[产品类别] = "家电" && CONTAINSSTRING(Sales[产品名称], "测试")) ) ) ``` 注意:DAX中判断文本包含使用`CONTAINSSTRING`函数(不区分大小写)或`SEARCH`函数(区分大小写)。 总结: 根据需求,选择在数据清洗阶段(Power Query)或报表计算阶段(DAX)进行排除。 相关问题: 1. 如何排除满足两个条件中任意一个条件的数据项(即逻辑或)? 2. 在Power BI中,如何实现动态的条件排除(比如通过切片器选择要排除的条件)? 3. 在DAX中,使用FILTER函数进行复杂条件筛选时,如何避免性能问题?</think>在 Power BI 中排除同时满足两个条件的数据项,可以通过以下方法实现: ### 方法1:Power Query 筛选(推荐用于数据清洗阶段) ```powerquery let 源 = Excel.CurrentWorkbook(){[Name="SalesData"]}[Content], // 排除同时满足两个条件的行 筛选行 = Table.SelectRows(源, each not ([产品类别] = "家电" and [销售额] > 10000) // 条件1 AND 条件2 ) in 筛选行 ``` > **逻辑说明**: > - `not (条件A and 条件B)` 表示排除**同时满足两个条件**的记录 > - 使用`and`连接两个条件表示逻辑"与"关系 > - 支持任意复杂条件组合:`not (条件A or 条件B)` 表示排除满足任一条件的记录 ### 方法2:DAX 度量值(用于动态计算) ```dax 过滤后销售额 = CALCULATE( SUM('Sales'[销售额]), FILTER( ALL('Sales'), NOT ( // 排除同时满足两个条件的记录 'Sales'[产品类别] = "家电" && 'Sales'[区域] = "华东" ) ) ) ``` > **公式解析**: > 1. `FILTER`遍历所有行 > 2. `&&` 表示逻辑AND运算符 > 3. `NOT`包裹整个条件组实现排除 > 4. 支持在报表中动态交互[^4] ### 方法3:可视化筛选器(快速交互) 1. 在"筛选器"窗格添加字段 2. 选择**高级筛选**模式 3. 设置"且"条件: ``` 产品类别 等于 "家电" 且 销售额 大于 10000 ``` 4. 点击右上角"排除"按钮[^3] ### 多条件排除的通用模式 ```powerquery // 逻辑结构 Table.SelectRows(源, each not ( (条件1) and // 必须同时满足 (条件2) and (条件3) )) ``` ### 性能优化建议 1. **优先在Power Query处理**:减少数据集大小 2. **条件顺序优化**:将过滤性强的条件放前面 ```powerquery not ([高过滤性字段] = 值 and [低过滤性字段] > 阈值) ``` 3. **避免全表扫描**:对关键字段建立索引 4. 大数据集使用二分搜索: ```powerquery Table.SelectRows(源, (row) => not (row[产品类别] == "家电" and row[销售额] > 10000), [IsSorted = true, Key = [索引列]] ) ``` ### 常见错误处理 ```powerquery // 空值保护 Table.SelectRows(源, each [产品类别] <> null and [销售额] <> null and not ([产品类别] = "家电" and [销售额] > 10000) ) // 错误捕获 Table.SelectRows(源, each try not ([产品类别] = "家电" and [销售额] > 10000) otherwise true ) ``` > **最佳实践**: > - 简单条件 ➜ 可视化筛选器 > - 复杂逻辑 ➜ Power Query处理 > - 动态计算 ➜ DAX度量值[^4] > - 超过100万行数据 ➜ 在数据源层预处理 --- [^1]: Power BI 的条件格式设置功能支持对任意字段进行复杂规则设置 [^3]: 筛选器窗格支持直接创建包含/排除筛选器 [^4]: CALCULATE函数配合FILTER可实现动态条件排除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值