在自定义列中手动插入文本,并且应该在刷新报告时可见
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 表的格式似乎保留了下来
刷新,除了行高总是重置。
【讨论】:
以上是关于在自定义列中手动插入文本,并且应该在刷新报告时可见的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Mobile 1.1.1 自定义选择菜单 - 占位符文本不可见
在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时