在自定义列中手动插入文本,并且在刷新报表时应该可见

时间:2016-11-17 11:02:04

标签: excel powerquery

我们有一个表格,显示OpprId,收入,区域等数据,其中表格根据最高收入进行排序。此表是使用电源查询构建的。在这里,用户想要添加一个新列并将其作为状态列并保存状态。刷新报表连接时应显示此状态。那么是否有任何自定义列公式来保存输入的文本,并且此状态应该与OppId汇总,因为将来可能会添加新的OppId,因此排序顺序可能会发生变化。

OppId   ServiceLineServiceRevenueCUS    Status 
1       101584729.9                     Good
2       62272199                        let u know
3       11000000                        dfghd
4       9000000                         fdgdf
5       8200000                         fdgf 
6       7500000                         fgdf 
7       6000000                         fgdf
8       5650000 

3 个答案:

答案 0 :(得分:4)

编辑29/11/2016:现在可以使用video来澄清此解决方案。 代码与下面的代码略有不同;基本上它仍然是相同的解决方案。

在另一个论坛上,我回答了类似的问题。 首先,输入数据(名字和姓氏)由Power Query查询读取并输出。 在该输出中添加了一列(年龄 - 手动维护)。 现在我创建了一个从Input表读取数据的查询,左边用Output表连接它,然后将结果写回Output表。 因此,输出表是该查询的输入和输出。

let
    Source1 = Excel.CurrentWorkbook(){[Name="Input"]}[Content],
    Typed1 = Table.TransformColumnTypes(Source1,{{"Last Name", type text}, {"First Name", type text}}),
    Source2 = Excel.CurrentWorkbook(){[Name="Output"]}[Content],
    Typed2 = Table.TransformColumnTypes(Source2,{{"Last Name", type text}, {"First Name", type text}, {"Age" , type number}}),
    Renamed2 = Table.RenameColumns(Typed2,{{"Last Name", "Last"}, {"First Name", "First"}}),
    Join1and2 = Table.Join(Typed1,{"Last Name", "First Name"},Renamed2,{"Last", "First"}, JoinKind.LeftOuter),
    Removed = Table.RemoveColumns(Join1and2,{"Last", "First"})
in
    Removed

答案 1 :(得分:0)

如果我理解你的问题是正确的,你想要使用Power Query生成一个表,让用户在一个单元格中输入info,然后每次刷新用户的自定义单元格时都不会被覆盖?

只要您的用户输入的单元格不是Power Query加载列的一部分,这应该只是工作"今天。如果您修改Power Query表中的单元格,那么每次刷新时都会被覆盖。

这不是您提出的问题,但听起来您可能希望使用Microsoft PowerApps来构建此报告。 Power Query不会在同一文件的不同版本之间同步...

免责声明:我在Microsoft工作,与PowerApps在同一个业务部门工作。

答案 2 :(得分:0)

  • Marcel Beug出色地完成了工作,找到了解决方案,并花时间编辑了一个带有示例的视频。
  • 经过积极测试之后,这里是我对他的解释的重新整理,其中包含更多的书面详细信息,以希望能帮助对Excel Power Query不太熟悉的人。

情况

  • Excel工作簿,其中包含现有工作表(例如“ SQLdbOrigin”) 原始SQL查询数据
  • 您希望将带有手动输入值的额外列添加到此原始数据,以保持它们与查询数据的关系 刷新原始SQL查询数据

过程

  1. 从现有原始数据表(例如,从DB查询获得)中的单元格中,将此表Power查询到新的输出表:
    • 菜单:“数据>来自表”(原始数据表将自动命名为“表1”)
    • 打开Power Query Editor窗口,显示查询的数据
    • 在“应用步骤”中:将“更改的类型”(通过F2)重命名为例如“ SQLdata”,查询名称为“ SQLoutput”
    • 点击“关闭并加载”菜单,该菜单会自动使用输出表“ SQLoutput”创建新表
    • 可以选择重命名工作表和表格
  2. 为“ SQLoutput”附加的手动字段添加(表格外的行,在各处设置格式,并在其中)列,并填写数据
    • 注意:表格的定义将自动调整为 包括这些新列
  3. 从“ SQLoutput”表中的单元格中,Power查询此输出数据表:
    • 菜单:“数据>来自表格”
    • 在“应用步骤”中:将“更改的类型”(通过F2)重命名为例如“ FullData”,查询名称为“ SQLoutput”
  4. 单击“高级编辑器”,这将打开一个用于SQLoutput的新窗口(2)
    • 复制“ let”和“ in”之间的两行
    • 点击“完成”
    • 关闭Power Query编辑器窗口,然后单击“放弃”
  5. 在“工作簿查询”列中,右键单击“ SQLoutput”查询>“编辑”
  6. 在此Power Query Editor窗口中,修改SQLoutput的查询以与自己的输出表FullData合并:
    • 点击“高级编辑器”
    • 在“ in”之前的行末添加一个逗号
    • 粘贴,在“ in”行之前,之前的2行 复制(来自Table1_2的查询)
    • 将“来源”重命名为例如新添加的2行中的“ Source2”
    • 在“输入”之后将表从“ SQLdata”重命名为“ FullData”(如前所述)
    • 单击“完成”(并观察右侧的“查询设置”列)
    • 点击“合并查询”
    • 选择(唯一可能的)表'SQLoutput (当前)”
    • 选择两个表中对应的“关键字”列
    • 选择“加入种类”:“左外”
    • 点击“确定”
    • 在Power Query编辑器的公式栏中(如果需要,请在“菜单”>“视图”中设置复选框):
      • 将第一个“ FullData”重命名为“ SQLdata”(以重新定义要连接的两个表)
    • 在最右边的新列标题中,点击“展开”图标“ <>”
      • 取消选中第一个复选框“(选择所有列)”
      • 在列表中选择添加的列(带有手动值)
      • 取消选中“使用原始列名作为前缀”复选框
      • 点击“确定”
    • 菜单:“关闭并加载”
  7. 测试:
    • 在SQLdbOrigin表的表中添加和/或删除行以模拟数据库中的更改
    • 刷新查询(通过右键单击表格;可以关闭右侧的“工作簿查询”)
    • 观察结果还可以
    • 微笑。
  8. 注意:
    • 要使计算的单元格保留其功能,请在原始SQLdbOrigin表中添加它们;注意:它们只会对原始表中的单元格表现出预期的作用
    • 要使计算出的单元格在SQLoutput表中正常工作,请首先在表的右侧添加一个空列(然后可以将其隐藏),然后再添加计算字段的列。刷新查询不会更改它们,并且将保持其功能不变(当然,对于相对地址)
    • 请勿在表SQLdbOrigin中重命名原始Table1表中的列标题,因为它们在查询中使用,除非您相应地更新所有查询…
    • 出于同样的原因,请注意不要更改查询或表的名称……
    • SQLoutput表的格式似乎可以保留 刷新,除了行高总是重置。