ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 象山海鲜

[原创] 强大的FILTERXML——文本处理函数(完结)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-3-5 13:12 | 显示全部楼层
本帖已被收录到知识树中,索引项:FILTERXML
我虽看不懂,但还是要点赞!

TA的精华主题

TA的得分主题

发表于 2022-7-11 14:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 onthetrip 于 2022-7-11 15:10 编辑
象山海鲜 发表于 2019-8-5 17:50
很精彩~!
下面是预设的,请多多指教~!

哪位路过的老师能否帮忙解释一下怎么理解:(/a/b>.),我怎么觉得/a/b.表达的是一个意思呢,都表示b节点
1657520079673.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-11 17:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
onthetrip 发表于 2022-7-11 14:13
哪位路过的老师能否帮忙解释一下怎么理解:(/a/b>.),我怎么觉得/a/b和.表达的是一个意思呢,都表示b节点

a/b[not(/a/b>.)]

注意上下文
/a/b指a节点的子节点b的集合
.是外面a/b谓词中的节点,这里的.是外面a/b集合历遍时的当前节点,也就是 每次只有一个节点

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-7-12 08:00 | 显示全部楼层
象山海鲜 发表于 2022-7-11 17:24
a/b[not(/a/b>.)]

注意上下文

感谢版主,又遇到神奇的上下文,学DAX的时候就没把这个概念搞清楚。还是没理解:
1、a/b[/a/b>.]:比如,当遍历到1的时候,是不是1要和集合中的所有节点比较,那明显1是大于负数的,为什么结果中会有1?
2、a/b[/a/b>.]a/b[/a/b<.]为啥不是相反的结果
3、 a/b[not(/a/b>.)=.*0+1]为什么能得出正确的结果,我理解数值*0+1后应该等于1啊。
1657584000653.png

TA的精华主题

TA的得分主题

发表于 2022-7-12 08:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这是个好东西啊!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-12 13:31 | 显示全部楼层
本帖最后由 象山海鲜 于 2022-7-12 15:20 编辑
onthetrip 发表于 2022-7-12 08:00
感谢版主,又遇到神奇的上下文,学DAX的时候就没把这个概念搞清楚。还是没理解:
1、a/b[/a/b>.]:比如 ...

针对你的提问回复
问题一:
a/b[/a/b>.]
1.你已经理解的上下文在谓词内历遍,谓词内的 /a/b 是集合(可以看做数组),. 看做数外面的 a/b 集合中的历遍到的一个元素(节点)
2.运算逻辑:谓词内的单值和集合的比较是集合每个元素和单值比较后的逻辑集合 然后再 or 处理为一个结果。
   你的问题历遍到1的时候,在 /a/b 集合中比较有比1大的值(7.009,51,3,9)所以用 or聚合 /a/b>.的结果为 true。所以数字1是符合条件的 属于需要返回的结果之一。

问题二:
理解了问题一的第2点的运算逻辑,就会知道两者的结果差异了
a/b[/a/b>.] 去除最大值剩下的数值集合
a/b[/a/b<.] 去除最小值剩下的数值集合

问题三:
a/b[not(/a/b>.)=.*0+1]
1.  /a/b>. 最大值和文本 返回 false
      文本用数值比较符(>、>=、 <、 <=)结果直接就是 false
2.  not(/a/b>.) 结果取反 最大值和文本 返回  true
3.  .*0+1  结果就是 1 或 错误值(可看做false 或 0 )
4.  not(/a/b>.)=.*0+1
     true =1  或 false =1  
   逻辑值和数值比较规则为:逻辑值转为数值(尽量转为同类型比较)
     true =1  false =0
   not(/a/b>.)  中只有 最大值和文本 true 其余都为false
   当. 为文本时 not(/a/b>.)=.*0+1  =>true = false  =>false
   当. 为最大值时 not(/a/b>.)=.*0+1  =>true= 1  =>1=1  =>true
   当. 为不是最大值时 not(/a/b>.)=.*0+1  =>false= 1  =>0=1  =>false

  .*0+1 是为了排除文本特意加的。全数值 用 a/b[not(/a/b>.)] 即可。
5. a/b[not(/a/b>.)=.*0+1] 最后结果为返回最大值的集合(多个会一起返回)

问题四: 图片公式      a/b[.*0+1]
   1. 谓词[] 内为数值结果的只能是返回历遍当前的索引才能返回当前的节点。[]中的数值=索引,返回当前节点。
    2.   .*0+1 除了文本的错误值(false)其他都为数值1
        当前恰巧索引1是文本,结果刚好是错误值(false),其余的索引和数值不对应,所有没有符合结果,返回空集合。
        也就是说 a/b[.*0+2]返回 1
        a/b[.*0+3] 返回 7.009
        ........
        a/b[.*3-1] 第2个 1*3-1=2 第8个 3*3-1=8 刚好索引对应 返回{1;3}
其他:a/b[.] 谓词内的.没有运算,那么就是当前节点,谓词内不是按照节点的值和索引对应关系来算的,而是节点是否存在定的,所以这里谓词内返回的都是true,最后返回a/b的集合,a/b[.] 等价 a/b。
      

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-7-13 08:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 onthetrip 于 2022-7-13 08:32 编辑
象山海鲜 发表于 2022-7-12 13:31
针对你的提问回复
问题一:
a/b[/a/b>.]

感谢版主的耐心回复。
1、之前压根没想到是用or聚合。潜意识认为是and,只要有一个结果为false,结果为false。
2、第3个问题想岔了,前面Not的结果是true或false,我思维中的结果认为是文本和51,所有怎么都没想通51怎么可能等于1呢
3、第4个问题:完全没想到是这样的运算机制。
再次感谢。

TA的精华主题

TA的得分主题

发表于 2022-7-16 16:11 | 显示全部楼层
象山海鲜 发表于 2019-8-7 14:51
3.1.条件取值高阶实例习题、公式

又有疑惑了,还请版主释疑^^:

一、图片1:
1、a/b[not(/a/b/c>.)]a/b[not(/a/b/c>c)]有什么区别?
2、a/b[not(a/b/c>c)]a/b[not(/a/b/c>c)]有什么区别?
二、图片2:preceding::*=.+0是怎样比较的,为什么会得出这样的结果,为什么要+0
谢谢。
图片1.png
图片2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-16 16:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 象山海鲜 于 2022-7-16 17:05 编辑
onthetrip 发表于 2022-7-16 16:11
又有疑惑了,还请版主释疑^^:

一、图片1:

我上一贴你没理解透
1、a/b[not(/a/b/c>.)]a/b[not(/a/b/c>c有什么区别?
    /a/b/c 谓词内最前面是/的为根目录开始的,否则就是当前节点开始的
    .就是上下文本b节点 c 是上下文当前节点的子节点c

2、a/b[not(a/b/c>c)]a/b[not(/a/b/c>c)]有什么区别?
  a/b/c 上下文中当前节点下的a/b/c的子孙节点c 这里就是空集合
  
3、
preceding::*=.+0
       再看上次回复 问题三的第4点和 最后【其他】 的内容

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-7-17 17:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
象山海鲜 发表于 2022-7-16 16:56
我上一贴你没理解透
1、a/b[not(/a/b/c>.)]和a/b[not(/a/b/c>c有什么区别?
    /a/b/c 谓词内最前面是 ...

谢谢版主。1、2理解了,那个preceding还是理解不了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 02:45 , Processed in 0.049820 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表