我正忙着用这个来撕我的头发。我有一个包含 1 个事实和大约 9 个维度的立方体。事实表中只有大约 120k 行,因此无论如何它都不是一个大数据库。
问题是,使用我正在使用的报告软件 (Microstrategy),它生成的 MDX 会获取所有数据并将其用作数据源(而不是在操作报告时生成 MDX)。 无论哪种方式,当添加几个字段时,查询很快就会变得不可用,并且实际上会耗尽内存。我怀疑这和我的立方体设计有关。
首先,它对所有属性进行交叉连接,即使它们位于同一维度,就好像它没有意识到它们之间存在关系一样。
我在 BIDS 中尝试过属性关系(尽可能使关系变得严格),但这似乎没有任何区别。
生成的MDX如下所示。我没有自定义 MDX 的选项,但我确信我没有告诉它这些关系是正确的。
我曾尝试在 Microstrategy 支持网站上发帖,但没有太高兴。
任何帮助将不胜感激。
谢谢
WITH SET AS '{[Dim Date].[Date].[Date].AllMembers}'
...
(all my dimensions appear here)
...
select {[Measures].[Total Purchases], [Measures].[New Cards Issued], [Measures].[New Applications Received], [Measures].[New Applications Declined], [Measures].[New Applications Approved], [Measures].[New Accounts Activated]} on columns,
non empty CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(C ROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN([dim0_select_members], [dim1_select_members]), [dim2_select_members]), [dim3_select_members]), [dim4_select_members]), [dim5_select_members]), [dim6_select_members]), [dim7_select_members]), [dim8_select_members]), [dim9_select_members]), [dim10_select_members]), [dim11_select_members]), [dim12_select_members]), [dim13_select_members]), [dim14_select_members]), [dim15_select_members]), [dim16_select_members]), [dim17_select_members]) on rows
from [Cards_Transactions]
最佳答案
如果您能详细说明您的需求,那就太好了。
是针对最终用户还是开发人员? 您想要允许用户在 mdx 多维数据集上执行自助服务吗? 他们查询的数据是否需要实时(更新到现在)或者可以更新到前一小时\天...?
有 2 种方法可以连接到 MSTR 中的 MDX 源。
一种方法是 - 通过导入数据接口(interface)直接连接。
通过这种方式 - mstr 根据您的选择即时生成 mdx 查询。这就是为什么在 Visual Insight 中将某些属性拖到屏幕之前使用一些过滤器很重要。
第二个选项是connect MSTR to the MDX cube at the schema level 。 它读取多维数据集定义并创建多维数据集中存在的属性和度量。它还允许您将 MDX 属性映射到项目属性以强制执行安全过滤器。 通过这种方式,您可以构建定期报告(您还可以使用提示和过滤器...),并且可以从 mdx 多维数据集构建 i-cubes。
您可能会发现第二个选项更适合您的需求。
由于您的 MDX 立方体非常小,我建议您创建一个 i-cube + 增量刷新报告来更新它(例如 - 每 5 分钟更新一次今天的数据)。
关于SSAS Cube 设计 - MDX 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18332663/