我可以写"表达文件"提前编辑。 但是把"部分文件"会导致错误。
根据PDF Power Query for Excel Formula Language Specification, Aug 2015
,Page 15, 2.1 Documents
文档要么只包含一个表达式,要么包含一组 定义分为几个部分。
当我把"部分定义"如下所示,在" Advance Editor"中,错误信息为" Invalid Expression":
section SectionA;
A = 1;
很明显,高级编辑期待"表达文件",而不是" section-document"。 (这两个术语来自PDF第107页,12.2.1文档。"表达文档"只是一个"表达式",12.2.3.1表达式)
我感觉到" Section" PQ中的一个功能是组织代码,就像"模块"。我想用它。
但是,我发现没有办法编码" section-document"。 (规范page 98, 11.Sections
)
一轮工作就是创建一个"查询"如上所述,MyFunSet,它返回许多函数的记录。
Query-Name: MyFunSet has following "expression" in Adv Editor
[ FunA = () => ...,
FunB = (x) => ...
]
在其他"查询"中使用此MyFunSet
时就像跟随。我已经测试过它有效。
let a = MyFunSet[FunA]()
, b = MyFunSet[FunB](1)
in 1
或
let FunA = MyFunSet[FunA]
, FunB = MyFunSet[FunB]
, a = FunA()
, b = FunB(1)
in 1
这项工作可以,但不是很好。
查找#1(#settions)
PDF页面100,PQ表达式#sections
将返回部分记录。创建一个新的值#sections查询,返回的记录有一个名称字段' Section1'和value是Excel工作簿中所有查询的记录。例如,
工作簿
Query1 = ...
Query2 = ...
Query3 = #sections
Query3将返回如下记录:
[ Section1 = [Query1 = ..., Query2 = ..., Query3 = ...] ]
根据这个,我解释说整个Excel工作簿只允许一个部分,名称是" Section1"
查找#2(部分访问表达式) PDF第110页,
12.2.3.13 Section-access expression
section-access-expression: identifier ! identifier
查找#3(文档) PDF第107页,
12.2.1 Documents
document:
section-document
expression-document
"高级编辑"仅接受表达式文档,而不接受部分文档
查找#4(将PQ导出为* .odc)
在Excel 356中,每个loaded
PQ都是工作簿连接,可以导出为* .odc
loaded
查询表以下是找到
<Formula><![CDATA[let
Query3 = #sections,
in
Query3]]></Formula>
这4个发现让我觉得一本工作簿总会只创建一个&#34;部分&#34;名称&#34; section1&#34;。如果工作簿可以&#34;参考&#34;对于一个或多个其他工作簿,允许多部分。这些有两个问题:
我想知道如何使用 - &#34;部分&#34;在Excel Power Query中。
答案 0 :(得分:1)
好问题。您无法直接编辑部分文档。 在Excel / Power Query中,每次编辑某个Query的表达式时,您都要编写部分文档。
如果您将“Query1”定义为letter_dic = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20,
"L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31,
"W": 32, "X": 33, "Y": 34, "Z": 35}
def move_digits_to_back(iban_string):
x = iban_string[0:4]
y = iban_string[4:]
iban_string = y + x
return iban_string
def convert_characters_to_digits(iban_back):
iban_num = (iban_string)[4:][:4]
iban_num = iban_num.upper()
for k, v in letter_dic.items():
iban_num = iban_num.replace(k, str(v))
return int(iban_num)
def is_modulo_correct(iban_num):
if iban_num % 97 != 1:
return True
return False
def validate_iban(iban_string):
move_digits_to_back(iban_string)
iban_num = convert_characters_to_digits(iban_string)
if is_modulo_correct(iban_num) is True:
print("IBAN-nummer {} is correct".format(iban_string))
else:
print("IBAN-Nummer {} is niet correct".format(iban_string))
while True:
iban_string = raw_input("Vul een IBAN-nummer in om te controleren.\n")
validate_iban(iban_string)
并创建一个单独的“Query2”作为1 + 1
,则Excel会写出此部分文档:
Query1 + 1
您的解决方法也应该正常工作。我认为这就是例如这"M" library on GitHub确实如此。
答案 1 :(得分:0)
只是为了澄清 - “section”关键字由excel自动添加。
当您编写作为单独查询显示的查询时,Excel将m语言查询代码保存在一个“М文档”中 - 这些查询被分成多个部分的文件。 包含所有M代码的此文件是base64编码的,并添加到excel工作簿zip存档。