2017-09-15 34 views
0

很新的PQ,我敢肯定它可以做什么,我需要在这种情况下,但我需要帮助搞清楚如何到达那里。功率查询:添加字符设定的限制跨多个列/行

我有20列占地50行,将需要格式化的Word文档上传到一个独立的系统,一个时间表报告。单元格中的原始数据范围从0到任何负2位数(例如“-20”),但它们需要格式化为以“.00”结尾的7个字符集。

例子: 0将需要成为“0000.00” -4需要成为“-004.00” -25将需要成为“-025.00”

我想我应该可以使用text.insert函数,但是我对M语言不够熟悉,无法让它做我想做的事情。

任何解决方案/建议?

回答

0

这是我以前的答案重访......设置使用一个函数。您可以为每个要重新格式化的列调用一次函数。每次调用函数时,您只需将要重新格式化的列的名称传递给该函数。

创建一个新的空白查询:

enter image description here

打开高级编辑器中的新的查询,并强调它的一切:

enter image description here

粘贴此在在高级高亮文本编辑:

let 

    FormatIt = (SourceColumn) => 

let 

    Base = Number.Round(SourceColumn,2)*.01, 
    Source = try Text.Start(Text.Range(
       if Base < 7 then Text.From(Base) & "001" else 
       Text.From(Base),0,7),2) & Text.Range(Text.Range(
        if Base < 7 then Text.From(Base) & "001" else 
        Text.From(Base),0,7),3,2) & "." & Text.End(Text.Range(
         if Base < 7 then Text.From(Base) & "001" else 
         Text.From(Base),0,7),2) 
      otherwise "0000.00" 

in 
    Source 

in 

    FormatIt 

...并点击完成。

您会看到一个新功能已经创建并列在屏幕左侧的查询列表中。

然后去查询你想重新格式化列(点击包含要在其改变号码查询的名称,在屏幕的左侧)和...

点击调用自定义功能

enter image description here

,并填写弹出这样的:

enter image description here

- 您可以创建与Custom.1不同的新列名称。

- 函数查询是您调用的查询的名称(您刚创建时粘贴代码的那个)...对我来说,它被称为Query1。

- 源列是包含要格式化的数字的列。

...然后单击确定。

您可以为每列调用一次该函数。它会为每个列创建一个新的格式化列。

+0

这适用于所有非零数字,但零怎么办?我收到一个错误,我假设由于基数函数假设为整数。 – JScott

+0

对不起。我在我的答案中更新了函数的代码。我添加了'try'&'否则“0000.00”',所以代码会像以前一样尝试更改数字,但如果由于原始数字为零而遇到错误,它将使用“0000.00”。这应该会使它适合你。 –

+0

这样做!非常感谢你的帮助。 – JScott

0

你可以使用这个公式= Text.PadStart(Text.From([Column1]),4,"0")&".00") PQ中添加新列类似于您的需求。

enter image description here

0

下面是一个公认的 “忙” 的公式来做到这一点:

= Table.AddColumn(#"Changed Type", "Custom", each Text.Start(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2) & Text.Range(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),3,2) & "." & Text.End(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2))

enter image description here

它假设你想格式化你的数字是列1开始。它创建一个新的列...自定义...与格式化的结果。

要尝试一下,开始与列1已填充,并装入电源查询;然后单击添加列选项卡,然后在自定义列按钮,并填充这样的弹出窗口:

enter image description here

...,然后单击确定。

有更多的时间,重复的部分可以用变量进行缩短这个了一下。这也可以在一段时间后变成一个功能。但我现在没有时间,所以我想我至少会给你一些东西。