就上下文而言,我不是SSAS专家,也不是狂热用户,我主要是Java开发人员。我们有一个使用SSAS编写,开发和测试各种模型的数据科学团队。
为了将这些模型的输出与其他非Microsoft系统集成,我正在构建一个基于Java的服务,该服务可以使用Olap4j / XMLA运行MDX查询从多维数据集中查询某些字段。但是这种表现(或缺乏表现)使我感到困惑。
如果打开MSS Studio,“浏览”多维数据集,将多个度量拖到度量窗格中,切换“显示空单元格”(否则由于某种原因,我没有结果),然后单击“执行”,将获得预期结果几乎是瞬间。如果我单击红色正方形以关闭“设计模式”,则会将我带到看起来像以下的MDX代码:
SELECT { } ON COLUMNS, { (
[Main].[Measure01].[Measure01].ALLMEMBERS *
[Main].[Measure02].[Measure02].ALLMEMBERS *
[Main].[Measure03].[Measure03].ALLMEMBERS *
[Main].[Measure04].[Measure04].ALLMEMBERS
) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM (
SELECT ( {
[Main].[Measure01].&[1]
} ) ON COLUMNS FROM [Model])
CELL PROPERTIES VALUE
如果我使用此MDX查询并将其粘贴到我的Java应用程序中并运行它,则使用以下代码将花费30秒钟以上的时间来返回结果:
Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
Connection connection = DriverManager.getConnection(cubeUrl);
OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
olapConnection.setCatalog(catalog);
OlapStatement statement = olapConnection.createStatement();
LOG.info("Running Cube query");
CellSet cellSet = statement.executeOlapQuery("<<The MDX Query here>>");
我添加的度量越多,它得到的速度就越慢。我曾尝试在代码中放置一些日志记录和调试断点,但实际上似乎是SSAS本身在返回我的数据时很慢。
请记住,我对SSAS知之甚少,该怎么办? Olap4j是否有一些我未设置的配置选项? MSS Studio是否在幕后做了一些我无法复制的优化?
编辑1:
我突然安装了Wireshark来监视我的网络流量,并且在查询运行时,我看到膝上型计算机和SSAS服务器之间有成千上万(即使不是数百万)的数据包。网络数据包很难解释,但是许多数据包似乎都在发送带有度量值的HTTP数据。诸如:
<Member Hierarchy="[Main].[Measure01]">
<UName>[Main].[Measure01].&[0]</UName>
<Caption>0.00</Caption>
<LName>[Main].[Measure01].[Measure01]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_CAPTION>0.00</MEMBER_CAPTION>
<MEMBER_UNIQUE_NAME>[Main].[Measure01].&[0]</MEMBER_UNIQUE_NAME>
<MEMBER_NAME>0</MEMBER_NAME>
<MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure02]">
<UName>[Main].[Measure02].&[0]</UName>
<Caption>0</Caption>
<LName>[Main].[Measure02].[Measure02]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_CAPTION>0</MEMBER_CAPTION>
<MEMBER_UNIQUE_NAME>[Main].[Measure02].&[0]</MEMBER_UNIQUE_NAME>
<MEMBER_NAME>0</MEMBER_NAME>
<MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure03]">
<UName>[Main].[Measure03].&</UName>
<Caption/>
<LName>[Main].[Measure03].[Measure03]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_UNIQUE_NAME>[Main].[Measure03].&</MEMBER_UNIQUE_NAME>
<MEMBER_VALUE xsi:nil="true"/>
</Member>
因此,看来速度缓慢实际上可能全是网络流量!有没有一种方法可以使olap4j / IIS / SSAS压缩流量,以便在olap4j中获得与MSS相似的性能,在一秒钟之内可以检索到相同数量的数据?