标签: powerquery

在Power Query中编辑SQL

当我从Power Query中的Sql Server导入数据时,我可以粘贴一个要对数据库执行的查询.但是后来当我想在工作簿查询>编辑>高级编辑器中编辑此查询时,我得到这样的结果:

let
    Source = Sql.Database("server", "database", [Query="select#(lf)#(tab)*#(lf)from dbo.SomeView va#(lf)join dbo.SomeTable rm#(lf)#(tab)on rm.CatId=va.CatId#(lf)where 1=1#(lf)#(tab)and Month between 1501 and 1510#(lf)#(tab)and rm.Id in (1,2,3)"])
in
    Source
Run Code Online (Sandbox Code Playgroud)

请注意我正在使用*,但使用明确的列名称,这看起来会更糟.

我希望能够以可读的形式查看查询,然后复制它,在Management Studio中执行,更改内容并粘贴回Power Query.我知道我可以使用视图作为源,或者不使用换行符和缩进,但这不是我的观点.

有关如何以"正常"形式编辑SQL的任何想法?或者也许我错过了一些隐藏的选项.

编辑:如果我不是世界上唯一一个在找到这个选项时遇到问题的人,那就是:

Power Query> Launch Editor> View> Query Settings> Applied Steps> Source> Gear图标

谢谢亚历杭德罗!

excel-2010 powerquery

10
推荐指数
2
解决办法
1万
查看次数

Excel:需要从VBA宏加载Power Query加载项

该方案是Windows Server 2012 R2,64位; Excel 2010,32位.许多用户,只有其中几个拥有管理权限.我从内置管理员安装了Power Query.没有询问任何内容,为所有用户安装了加载项; 我的意思是它的设置可以在HKLM下的注册表项中找到,而不是HKCU.

关键是

HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> Office -> Excel -> AddIns -> Microsoft.Mashup.Client.Excel

而相关的价值是

LoadBehavior (REG_DWORD)

现在只有少数用户真的需要Power Query.每次启动Excel时,我都不希望它为每个人加载.我为LoadBehavior值尝试了一些不同的设置(请参阅链接).我找到了以下内容:

  • 如果LoadBehavior = 2,则不会为任何用户加载加载项.
  • 如果LoadBehavior = 3,则为所有用户加载加载项.但是,如果我为特定用户(在注册表中)创建特定密钥,则用户可以从Excel禁用该加载项.例如,在HKEY_CURRENT_USER中,密钥的路径是:

软件 - > Microsoft - > Office - > Excel - > Addins - > -Microsoft.Mashup.Client.Excel

  • 更具体地说,将用户密钥放入LoadBehavior值就足够了,这允许用户决定是否要加载加载项.值3表示"加载",值2表示"无负载".
  • 我需要恰恰相反:加载项通常不加载,一些用户允许加载它.我发现可以将HKLM中的LoadBehavior设置为9.这意味着"按需加载".即,仅当用户需要操作时才加载加载项,具体取决于加载项本身.对我来说很好.
  • 此时,我可能会忽略特定用户的密钥(例如,在HKCU中).但是,我发现如果我创建它,它优先于HKLM(当后者具有LoadBehavior = 9时).因此,对于特定用户,可以决定在"始终加载"模式下使用加载项.只需在HKCU下的密钥中设置LoadBehavior = 3即可.

这一切似乎都很好.现在问题是我需要从VBA过程调用一些Power Query操作.如果已加载Power Query,则一切正常.但如果未加载,即使使用"按需加载"设置,操作也会失败.为了加载Power Query,必须按下Excel GUI上的某个按钮,该按钮调用Power Query操作.

我发现VBA中有一个加载项对象的属性,它指示加载项是否已加载,并且可以设置为从VBA加载或卸载加载项.它是:

Application.COMAddIns.Item("Microsoft.Mashup.Client.Excel").Connect

如果是True,则加载加载项,如果加载,则加载加载False项.

现在应该可以通过将此属性设置为True来加载加载项.但是,在我的方案中情况并非如此:结果是错误(80004005).这似乎是与没有管理权限的用户相关的问题.查看页面 - 此行为被视为错误.

我将在稍后尝试的最后一个想法是完全删除HKLM下的密钥中的LoadBehavior.我已经检查过这会阻止用户看到加载项,除非创建了特定于用户的密钥,在这种情况下,用户可以自动设置加载项加载行为.我将看到在这种情况下从VBA请求加载时会发生什么.

同时,我很感激任何想法来解决这个问题:Power …

excel vba excel-addins powerquery

10
推荐指数
1
解决办法
639
查看次数

导入数据后替换所有列的所有错误值(同时保留行)

作为数据源的Excel表可能包含错误值(#NA,#DIV/0),这可能会影响Power Query中转换过程中的某些步骤.
根据以下步骤,我们可能没有输出但是错误.那么如何处理这种情况呢?

我在Power Query中发现了两个标准步骤来捕获它们:

  • 删除错误(UI:主页/删除行/删除错误) - >将删除所有带错误的行
  • 替换错误值(UI:转换/替换错误) - >首先要选择列来执行此操作.

第一种可能性对我来说不是解决方案,因为我想保留行并只是替换错误值.

在我的情况下,我的数据表将随时间变化,意味着列名称可能会更改(例如年),或者出现新列.所以第二种可能性太静态了,因为我不想每次都改变脚本.

所以我试图通过动态方式清除所有列,独立于列名(和列数).它用空值替换错误.

let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],

    //Remove errors of all columns of the data source. ColumnName doesn't play any role
    Cols = Table.ColumnNames(Source),
    ColumnListWithParameter = Table.FromColumns({Cols, List.Repeat({""}, List.Count(Cols))}, {"ColName" as text, "ErrorHandling" as text}),
    ParameterList = Table.ToRows(ColumnListWithParameter ),
    ReplaceErrorSource = Table.ReplaceErrorValues(Source, ParameterList)
in
    ReplaceErrorSource
Run Code Online (Sandbox Code Playgroud)

在我向源添加了两个新列(有错误)之后,这里有三个不同的查询消息:

如果有人有其他解决方案来进行此类数据清理,请在此处写下您的帖子.

excel powerquery

8
推荐指数
1
解决办法
7033
查看次数

如果工作簿包含数据透视表,则在添加数据后无法保存Excel工作表

我们正在尝试构建一个默认的Excel仪表板,我们的用户可以下载.下载Excel工作表时,我们希望使用其数据填充文件中的工作表.

我们使用EPPlus来处理Excel工作表.

简而言之,表的结构如下:

  1. Sheet A 带有报告元素(数据透视表,数据透视图和切片器)
  2. Sheet B 其中包含整个数据集
  3. 定义的命名范围,=OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1))它只是适应我们插入到该工作表中的数据集的大小
  4. 无论命名范围包含我加载到Power Query并添加到工作簿数据模型
  5. 所有报告元素Sheet A都配置为从数据模型加载数据

总的来说,只要我们手动填充Sheet B数据,这就行得很好.当我们尝试使用EPPlus填充数据时,我们在尝试保存文件时出错:

The cachesource is not a worksheet
Run Code Online (Sandbox Code Playgroud)

通过反复试验,我们剥去了它的部件,以找出问题的原因.我们怀疑它可能是切片器,Power Query/Data Model的使用或命名范围的技巧.但是,这些都不是问题 - 如果我们从工作表中删除所有数据透视表,那么我们就可以保存工作簿了.令我惊讶的是,我们能够很好地使用数据透视图,它只是引起问题的表格.

有关如何使用EPPlus避免此问题的任何建议?现在,我们继续不使用数据透视表,我们希望让他们在某些时候返回:)

c# excel epplus powerquery

8
推荐指数
1
解决办法
1022
查看次数

如何等待Power Query刷新完成?我用"BackgroundQuery = False"尝试了"DoEvents",而且更多,没有任何效果

建立:

  • Windows 7(在工作中)
  • Windows 10(在家)
  • Excel 2016(在工作中构建4627)
  • Excel 2016(在家建8730)
  • Power Query设置为导入,追加和转换Excel文件的文件夹.这一步有效.

问题描述

使用任何技术的任意组合后,等待Power Query完成刷新,如下面所示的"我尝试过的东西:"部分所述.根据"查询和连接"窗格中显示的刷新指示器(微调器?)图标,可以在Power Query表完成更新之前显示消息框并执行任何其他代码.

上述语句的例外是Application类的"OnTime"方法,如下面的"代码"部分所示,它似乎不会中断电源查询刷新的轮询.但是,此方法的问题在于它使用硬编码的时间来暂停VBA代码,并且这并不总是有效,因为查询的数据的大小,数量和持续时间将随时间而变化.

我尝试过的事情:

  • 我已阅读所有国家使用的"调​​用DoEvents"的StackOverflow上(和其他网站的资源),"BackgrgoundQuery =假",并CalculateUntilAsyncQueriesDone方法和属性.
  • 我已经尝试按照此链接的建议创建一个类来创建查询前/后查询更新事件(下面的代码示例中未显示).
  • 我已经尝试使用Do Until/While循环使用QueryTable方法的.Refreshing = True/False属性来等待刷新完成.
  • 我曾尝试设置在Excel菜单中BackgroundQuery属性(菜单栏- >数据- >连接- >属性)以虚假的"subro"这里的建议:等到ActiveWorkbook.RefreshAll完成- VBA,随着图像菜单在这里:

用于设置BackgroundQuery属性的Excel菜单.

码:

Private Sub sht_sub_Refresh_AllConnections_dev()
'Name: sht_sub_Refresh_AllConnections_dev
'Purpose: An attempt at using VBA to wait for Queries to finish updating before displaying a message.
'Description: Waits for a hard coded period of time before dislpaying the message box.
'State: WIP.
'Dev: Needs a way to look at …
Run Code Online (Sandbox Code Playgroud)

excel vba refresh doevents powerquery

8
推荐指数
1
解决办法
4902
查看次数

使用 Excel Power Query 针对 .Net Odata Web Api 进行身份验证

我正在尝试使用 Power Query 下载我使用 .net Web Api 2 和 OData v4 nuget 包创建的 Odata 源。

我正在尝试访问需要身份验证的 Odata 提要。当我在电源查询中编辑身份验证类型时,我从未在请求​​中看到身份验证密钥。

如何配置 Power Query 以使用特定类型的身份验证?

奖励:我正在使用 OAuth,那么我将如何配置电源查询以发送包含“Authorization Bearer:token_here”的带有身份验证数据的标头

在此处输入图片说明

.net oauth odata powerquery

7
推荐指数
2
解决办法
1万
查看次数

Power Query Formula Language(非正式地称为"M")是否有一个不是"M"的简称?

一如既往,命名事情很难.

Power Query Formula Language

M 是短

有一个很好的中间地带还是我们坚持'M'?

例如,在创建诸如Sublime Text中的语法高亮显示包之类的内容时可能存在冲突m.tmTheme.在v1更改名称的人的示例.或者我们是否满意powerqueryformulalanguage.thTheme.

我知道这个问题可能会被标记为主观,但严重的是,它是早期的,所以希望很快它就是一个简单的答案.

BTW我会用这个问题做什么标签?:/

m - M Modeling Language是Microsoft"Oslo"项目的一个组件,后来称为SQL Server Modeling CTP.该项目于2010年底取消.

powerqueryformulalanguage - 不存在...

m powerquery powerbi

7
推荐指数
1
解决办法
760
查看次数

如何在字符串中搜索多个字符串?

如果字符串"This is a test string"包含任何字符串列表项,我想检查powerquery新列{"dog","string","bark"}.

我已经尝试过Text.PositionOfAny("This is a test string",{"dog","string","bark"}),但该函数只接受单字符值

Expression.Error: The value isn't a single-character string.
Run Code Online (Sandbox Code Playgroud)

对此有何解决方案?

powerquery powerbi

7
推荐指数
2
解决办法
9299
查看次数

"启用加载"和"包含在报告刷新中"是什么意思/做什么?

在Power Query中,当我右键单击查询的名称时(在Power Query窗口的最左侧窗格中),我看到"启用加载"和"包含在报表刷新中"的选项.

我无法找到这两个选择实际意义和做法的解释.我非常感谢一个简短的教程.

powerquery powerbi

7
推荐指数
1
解决办法
1万
查看次数

如何将R数据帧导出到Power Query表

我在Power Query中使用R脚本进行一些数据转换并返回一个缩放表。我的R代码是这样的:

# 'dataset' contém os dados de entrada neste script

library(dplyr)

df_normal <- log(dataset+1) %>%
select(c(2:4)) %>%
scale
df_normal <-cbind(dataset[,c(1)], df_normal)
output <- df_normal 
Run Code Online (Sandbox Code Playgroud)

这在R Studio中可以正常工作,并且按预期方式获得了df_normal数据框。

但是,在Power Query中,我得到了一个空表!

[R

如何将数据框导出到表?

r powerquery powerbi

7
推荐指数
1
解决办法
141
查看次数

标签 统计

powerquery ×10

excel ×4

powerbi ×4

vba ×2

.net ×1

c# ×1

doevents ×1

epplus ×1

excel-2010 ×1

excel-addins ×1

m ×1

oauth ×1

odata ×1

r ×1

refresh ×1