ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] excel中power query动态筛选条件筛选行,出现无法将值...转换为类...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-29 22:07 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 saicik 于 2019-5-31 07:17 编辑

我需要对“设备运行记录”表进行筛选 1559134782(1).png
RQ代表日期,JH代表设备编号,RCYL代表设备运行记录。
需要筛选的是:不同设备所对应不同时间段的设备记录
1559135103(1).png
我做了一个表“需筛选设备及其运行时间段”
1559135615(1).png
将这个表通过“从表格”的方式进入查询编辑器
查询命名为:所有设备筛选条件
新建列“筛选条件”,自定义列公式为:
=if [结束运行时间]=null
  then "([JH]="""&[设备]&""""&" and [RQ]>=#date("&Text.From(Date.Year([开始运行时间]))&","&Text.From(Date.Month([开始运行时间]))&","&Text.From(Date.Day([开始运行时间]))&"))"
  else "([JH]="""&[设备]&""""&" and [RQ]>=#date("&Text.From(Date.Year([开始运行时间]))&","&Text.From(Date.Month([开始运行时间]))&","&Text.From(Date.Day([开始运行时间]))&")"&" and "&"[RQ]<=#date("&Text.From(Date.Year([结束运行时间]))&","&Text.From(Date.Month([结束运行时间]))&","&Text.From(Date.Day([结束运行时间]))&"))"
每行对应该设备的筛选条件,类似:([JH]="DX02-06C" and [RQ]>=#date(2018,9,15))
1559136213(1).png
通过在高级编辑器里添加语句:分组的行 = Table.Group(已添加自定义, {}, {{"条件", each Text.Combine([筛选条件]," or ")}}),
使用Text.Combine将所有设备所对应的筛选条件用“ or ”连接起来,形成类似:([JH]="DX02-06C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-01C" and [RQ]>=#date(2018,9,15)) or ...的筛选条件(因为我的excel用不了textjoin()函数,所以使用了这个方法)
列重命名为:所有设备筛选条件
1559136485(1).png
然后将“设备运行记录”通过“从表格”的方式进入查询编辑器
1559137228(1).png
通过在高级编辑器里添加语句:筛选的行 = Table.SelectRows(更改的类型, each 所有设备筛选条件{0}[所有设备筛选条件])
出现错误:
Expression.Error: 无法将值 "([JH]="DX02-06C" and..." 转换为类型 Logical。
详细信息:
    Value=([JH]="DX02-06C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-01C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-03C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-04" and [RQ]>=#date(2017,12,14)) or ([JH]="DX03-06"
无法实现筛选。

1559137087(1).png

而通过直接将在查询“所有设备筛选条件”组合形成的筛选条件:([JH]="DX02-06C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-01C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-03C" and [RQ]>=#date(2018,9,15)) or ([JH]="DX03-04" and [RQ]>=#date(2017,12,14)) or...
复制到:筛选的行 = Table.SelectRows(更改的类型, each (....))语句中,可以实现筛选。

因为需要筛选的设备及其所对应的运行时间段,根据不同需要会发生变化,我想要通过仅更改“需筛选设备及其运行时间段”工作表里的设备和运行时间段,然后使用“数据”标签页里的刷新来实现“设备运行记录”的筛选,以便进行后续的数据分析工作。
我遇到的问题是
查询“所有设备筛选条件”里组合的筛选条件,通过:筛选的行 = Table.SelectRows(更改的类型, each 所有设备筛选条件{0}[所有设备筛选条件])语句不能实现筛选功能,我在网上查了好多资料,没有找到这个问题的解答,我刚学习power query没多久,一直在不断摸索中,问题描述中如有问题,请勿见笑,还望论坛大神不吝赐教,多谢。
数据分析.zip (100.31 KB, 下载次数: 2)




TA的精华主题

TA的得分主题

发表于 2019-5-30 14:22 | 显示全部楼层
上传示例数据,模拟想要的结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-30 19:11 | 显示全部楼层
本帖最后由 saicik 于 2019-5-31 07:18 编辑
wdx223 发表于 2019-5-30 14:22
上传示例数据,模拟想要的结果

谢谢提醒,附件已上传

TA的精华主题

TA的得分主题

发表于 2019-5-31 10:09 | 显示全部楼层
效率不是太好,但是想不出更好的了
  1. let
  2.     Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="表1"]}[Content],{"RQ",type date}),
  3.     ctrn = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="表9"]}[Content],{{"开始运行时间",type date},{"结束运行时间",type date}}),
  4.     Custom1 = Table.ReplaceValue(Table.NestedJoin(Source,"JH",ctrn,"设备","n",JoinKind.LeftOuter),each [RQ],null,(x,y,z)=>Table.RowCount(Table.SelectRows(x,(m)=> m[开始运行时间]<=y and (if m[结束运行时间]=null then true else m[结束运行时间]>=y))),{"n"}),
  5.     Custom2 = Table.SelectRows(Custom1, each [n]>0),
  6.     #"Removed Columns" = Table.RemoveColumns(Custom2,{"n"})
  7. in
  8.     #"Removed Columns"
复制代码


数据分析.zip

109.24 KB, 下载次数: 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-31 21:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
通过合并查询实现,学习到了,非常感谢,
另外custom1语句不太理解,Table.ReplaceValue函数是否是将each [RQ]赋值给y,n列每一个表赋值给了x,null赋值给了z,each [RQ]和null只是传递参数,用意并不是用作函数的old value和new value,通过“(x,y,z)=>Table.RowCount(Table.SelectRows(x,(m)=> m[开始运行时间]<=y and (if m[结束运行时间]=null then true else m[结束运行时间]>=y))”,给n列赋值。n列每一行的表为空表,或者RQ不符合if语句条件,返回空表,行计数为0,n赋值为0;RQ符合if语句条件,返回只有一行有内容的表,行计数为1,n赋值为1。
刚开始学习,不知道理解的对不对
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-14 14:45 , Processed in 0.040028 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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