在哪里写"部分 - 文件"在Excel中使用电源查询?

时间:2016-11-19 05:51:28

标签: powerquery

我可以写"表达文件"提前编辑。 但是把"部分文件"会导致错误。

根据PDF Power Query for Excel Formula Language Specification, Aug 2015Page 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查询表
  • 中找到该单元格
  • 转到菜单"数据",点击"连接属性..",
  • 在页面标签中,"定义",单击"导出连接文件",
  • 创建一个* .odc。
  • 检查* .odc文件中的标记

以下是找到

<Formula><![CDATA[let
Query3 = #sections,
in
Query3]]></Formula>

这4个发现让我觉得一本工作簿总会只创建一个&#34;部分&#34;名称&#34; section1&#34;。如果工作簿可以&#34;参考&#34;对于一个或多个其他工作簿,允许多部分。这些有两个问题:

  • 如何推荐?
  • 如何重命名始终为&#34; Section1&#34;换个名字?

我想知道如何使用 - &#34;部分&#34;在Excel Power Query中。

2 个答案:

答案 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存档。