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

Posted

技术标签:

【中文标题】在自定义列中手动插入文本,并且应该在刷新报告时可见【英文标题】:Inserting text manually in a custom column and should be visible on refresh of the report 【发布时间】:2016-11-17 11:02:03 【问题描述】:

我们有一个表格,其中显示了 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 

【问题讨论】:

【参考方案1】:

编辑 29/11/2016:video 现在可用于阐明此解决方案。 该代码与下面的代码有点不同;基本上它仍然是相同的解决方案。

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

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

【讨论】:

哇,我从没想过从自己的输出中读取查询。酷! 嗨,马克,感谢您的回复。所以你想让我在电源查询中添加一个自定义列吗?我对使用电源查询很陌生,所以不知道如何实现您的代码。 所以让我解释一下我的情况,我使用电源查询(通过 sqlserver 数据库连接)提取了一个包含 9 列的表。这里用户将根据 id 列在新列中输入 cmets,我们应该保存 cmets。将来 id 的顺序可能会有所不同,因为它们应该始终以最高收入排序。 应该在 5 分钟内完成编辑 由于您是 Power Query 的新手,因此很难解释,所以我将在今天晚些时候创建一个视频。 视频已创建,链接包含在我的原始答案中。【参考方案2】:

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

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


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

免责声明:我在 Microsoft 工作,与 PowerApps 属于同一业务组。

【讨论】:

【参考方案3】: Marcel Beug 做得很好,找到了解决方案并花时间用示例编辑视频。 经过积极测试后,这是我对他的解释的重述,并附有更多书面细节,希望能帮助对 Excel Power Query 不太熟悉的人。

情况

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

程序

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

【讨论】:

以上是关于在自定义列中手动插入文本,并且应该在刷新报告时可见的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 ListView 中设置按钮的可见性?

jQuery Mobile 1.1.1 自定义选择菜单 - 占位符文本不可见

在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时

在用户重新启动应用程序后,我应该如何在自定义列表视图中反映文本视图的增量值?

无法读取任何文本文件

如何根据文本输入类型在自定义键盘中标记返回键