在分享了用Excel自动更新和分发Office文件分析的基本方法之后,微信返利,这个博客介绍了我从最初的文章中学到的一些知识。
文章1:通过VBA/VBscript自动更新Excel文件(BEX&AO)中的BW数据帖子2:通过VBA/VBscript自动更新Excel文件(BEX&AO)中的BW数据–第2部分帖子3:通过VBA分析Office变量和过滤器
在过去的几周里,我一直在改进和修改主模板,主要是针对我在工作中的具体需求,但您可能也会发现它很有用。
我在几周前购买了SAP BusinessObjects Analysis Office–Tobias Meyer的综合指南,发现它非常有用非常有用。
随着我在分析之旅中的进一步发展,我肯定会借鉴他书中提到的许多观点。特别是在各种查询中操纵数据的视觉显示。
他的网站上也有很多关于分析的好博客文章。看看吧。
我也非常感谢伊万·邦达连科。他指出了我在改进模板时缺少的一些东西。主要是使用CDO来简化邮件发送方面的工作,更好地使用其中一个过滤功能。
Ivan自己也有一个很好的解决方案,可以在github上找到。当然值得一谈。
让我们继续改进。
注意,所有这些都包含在这个博客文章底部的模板的新版本中。如果您只想获取最新版本并了解它是如何完成的,请跳到底部。
技术改进#1:要获得更清晰的筛选器列表,请使用SAPListOfDynamicFilters而不是SAPListOfEffectiveFilters技术改进#2:使用CDO在Excel中发送电子邮件技术改进#3:正确确定数组中的维数功能改进#1:在AO文件中分发单个工作表功能改进#2:刷新文件中的任何数据透视功能改进#3:更多的动态数据计算
这是由Ivan Bondarenko提供的。
有效过滤器也再次显示变量(因为变量是过滤器的一种形式)。实际上我们并不希望这样,因为我们是分开处理变量的。没有必要重复处理所有的事情。
因此,免费大数据,在我们的Get\u Active\u Variables\u and\u Filters子例程中没有这个:
我们现在使用这个:
这个也是由Ivan Bondarenko提供的。
CDO已经有一段时间了,最好总结一下:Ron de Bruin Excel Automation
它真正需要的是指向smtp服务器。它不需要安装Outlook或任何其他第三方软件,如SwithMail。
它甚至可以与Gmail的SSL一起工作(查看Ron de Bruin Excel Automation页面上的示例文件)。
在我们的模板中,我们现在允许用户选择CDO,然后调用以下子例程(注意CDO\U Server是我们在上定义的常量)模块顶部):
第三个技术改进是在处理数组方面,特别是在计算数组有多少个维度的部分,以便我们可以相应地处理它。
前面的代码是一个黑客。这是最基本的,网站建站平台,最开始起作用,但后来被证明是不可靠的,并在某些情况下产生"Runtime error 13 Type Mismatch"(感谢Carolyne证明这也发生在她身上)。
下面的函数返回数组中的维数(从一维) :
将该函数添加到模块底部。
然后在"获取\活动\变量\和\过滤器"子例程中进行以下更改。
添加到例程顶部:
替换为:
对同一子例程中的过滤器部分执行相同操作。它会更可靠,现在正正确地使用LBound和UBound功能在数组中循环。
对我来说,海量数据,一个真实的场景是一个单独的AO文件,该文件中的不同业务领域有单独的表。
单独的表都是从该文件中的另一个表上的同一个共享BW查询中提取数据。
我需要刷新来自BW的文件,更新所有相应工作表上的轴,然后以PDF格式将每个工作表发送到不同的电子邮件地址。
要通过电子邮件发送每个工作表,我在参数文件中添加了一个新列。
保存或通过电子邮件发送时,如果填充了工作表列,云服务器租用,则将执行以下操作:
1。将整个文件保存到临时文件名中。
2。加载新文件并删除其中任何不是我们想要的工作表的工作表。
3。保存和/或通过电子邮件发送新文件。
为什么我们要先将整个文件保存到临时文件中?因为我们仍然希望对原始文件进行更多操作。
如果我有10张工作表要处理,我希望在处理完当前工作表后,原始刷新的文件仍然可用。
添加了一个新操作,"RefreshAllPivots"。
如果在参数文件中选择了该操作,它在VBA代码中执行以下操作:
它所做的只是刷新AO文件中的任何轴。
当前动态日期计算列表如下。
今天:今天日期。格式年月日
昨天:昨天。格式年月日
当前日期:今天,但只是当天。格式DD
当前月:当前日历月。格式年月日
当前年份:当前日历年。格式YYYY
lastmount:与今天相比的上一个日历月。格式年月日. 与上一个日历月相同。
ENDOFLASTMONTH:上一个日历月的最后一天的日期。格式年月日
上一日历周:上周的日历周数。以星期一开始的一周为基础。格式WW.yyy年
上一日历周:与上一日历周相同,但为上一年。格式WW.yyy年
上月:与上月相同。格式年月日
上一日历月上一年:与上一日历月相同,但为上一年。格式年月日
上周日:最近一个周日的日期。格式年月日
上周日:与上周日相同,但为上一年。格式年月日
财务年度:当前会计年度。格式YYYY.
财务年度的第一天:当前财务年度的第一天(假设是7月至6月的财务年度)。格式年月日
上一年度第一日:与上一年度第一日相同。格式年月日
你可能会看到他们中的一些人想知道他们什么时候会被使用。这里有一个例子。
我需要得到今年迄今为止的数字,但要到最近一周的结束(星期天结束的一周)。然后还需要将其与上一个财政年度的相同情况进行比较。
我不能使用日历周,因为其中一周开始于财政年度开始之前。
而是使用参数文件中的变量,如下所示:
FirstDayOffFinancialYear–LASTSUNDAY;财务年度的第一天去年-上周日年度
VBA代码将此转换为:
01.07.2016–19.02.2017;01.07.2015–19.02.2016
仍有需要学习和改进的地方,但是上面的更改有助于更全面地解决问题并提高其稳定性。
下面是模板的版本0.7以及一个示例参数文件。我把两个都压缩了,只需下载一次