如何解决强大的查询-如何根据条件将列的某些行加载到Buffer中
我必须将一系列步骤复制到许多文件。这些文件作为名为“ main”的表加载到power query中。第1列是一个索引,第2列和第3列的变量名称取决于文件。
另一方面,我有一个名为CLDR的表,该表具有三列:字符,类别和语言。类别列值之一是``主要字母''。
在空白查询中,我要缓冲以下内容:
- 第二字母=“字符”列的行,其中“语言”列中包含“主要”第二列的名称,并且“类别”部分等于“主要字母”。
- Second.Simbols =“字符”列的行,其中“语言”列中包含“主要”第二列的名称,并且“类别”部分与“主要字母”不同。 li>
- Third.Letters =“字符”列的行,其中“语言”列中包含“主要”第三列的名称,并且“类别”部分等于“主要字母”
- Third.Simbols =列“字符”的行,其中“语言”列中包含“主要”第三列的名称,并且“类别”部分等于“主要字母”
我在https://drive.google.com/drive/folders/1uxFMcvqB6lTS7OCb_YF7_iD6A-jqa1Nx?usp=sharing
处附加了文件对不起,如果我要的东西太复杂了。
解决方法
我假设对于第4点,您说:
Third.Simbols = ...,并且“类别”部分等于“主要字母”
您的意思是:
Third.Simbols = ...,并且“类别”部分与“主要字母” 不相等
如果我的假设是错误的,则只需在Third.Symbols
中将<>
更改为=
。
尝试将以下代码复制粘贴到您的Buffer
查询中-看看它是否能为您提供期望的输出。
let
mainColumnNames = Table.ColumnNames(main),Second.Letters = Table.SelectRows(CLDR,each "Main Letters" = [Category] and Text.Contains([Languages],mainColumnNames{1})),Second.Symbols = Table.SelectRows(CLDR,each [Category] <> "Main Letters" and Text.Contains([Languages],Third.Letters = Table.SelectRows(CLDR,mainColumnNames{2})),Third.Symbols = Table.SelectRows(CLDR,mainColumnNames{2}))
in
Third.Symbols
当前,当为某些特定语言(例如Languages
)过滤CLDR
表的.en
列时,搜索/比较区分大小写和文本。其含义是:
- 包含
.EN
的行将不被视为匹配项(因为比较是区分大小写的,需要精确匹配.en
。)
(如果您不希望这种行为,可以使用类似Comparer.OrdinalIgnoreCase
的方法来解决,这种方法在比较时会忽略大小写。) - 将匹配
.fr.ent.de.se
这样的行(比较不会关心“语言”是.ent
而不是.en
,因为它只查找.en
任意位置)。 (如果这对您来说是个问题,一种解决方法可能是将值除以.
,然后分别检查fr
,ent
,{{ 1}},de
表示se
区分大小写。)
旁注:我不知道您的情况如何,但是如果您有许多类似于en
和main.csv
的文件,则可能要使用CLDR.csv
并创建一个接受两个表(Folder.Files
和main
)的函数,可以重复使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。