问题标签 [excel-pivot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
40 浏览

excel - SQL Server 表格模型 (v2) 的意外 Excel 数据透视行为

我们将 Office 365 中的 Excel 与 SQL Server 2019 表格模型一起使用

关于从 DAX 请求计算的级别,我有 Excel Pivot 的“奇怪”行为。

我创建了 3 个简单 (SQL Server) 表,MyDim、DimColour 和 MyFact

基表

MyDim 表中的 BrandName 和 ItemName 之间存在隐式层次结构(未强制执行)。

我无法强制执行这一点,因为没有任何东西可以说一件物品只能属于一个品牌。

我创建了一个非常基本的度量来汇总事实,尽管我在这里并不需要它

我还创建了 2 个更有趣的附加措施

最低级别总是返回一个值,无论事实表中是否有行。

只要我们不过滤 ItemName,LowestLevelButItem 就会返回一个值

现在,这是困扰我们的行为......

在 Excel 数据透视表中打开多维数据集,过滤颜色蓝色和黄色

结果1,好的

结果1,好的

这是正确的结果。这里没问题。

添加度量 LowestLevelButItem...

结果 2,出乎意料

结果 2,意外

现在,这不是我们想要的结果……我根本不希望在这个结果中看到“品牌 A”

它表明 D4 中显示的度量已在与 D5 和 D6 不同的级别进行评估。

D5 和 D6 在项目级别进行评估,正如预期的那样,而 D4 在更高级别进行评估,因为在项目级别没有匹配的行......

现在,添加度量 LowestLevel

结果3,好的

结果3,好的

现在,我明白了这个结果。

因为 LowestLevel 总是返回一个值,所以它使 Brand A / Item 1 可见,这会强制在 Item 级别评估度量 LowestLevelButItem,因此为 blank()。

我遇到的问题是第二个结果......

问题

如果下面没有合适的项目,我怎么能强制数据透视表不归还品牌?

SSMS 行为

如果我在 SSMS 中浏览我的多维数据集,我会得到我期望的结果,即我的度量始终只在叶级别进行评估,并且除非它们具有叶级别成员,否则不会返回行。

SSMS 结果 1,相同

SSMS 结果 1

SSMS 结果 2

SSMS 结果 2,与 Excel 不同

SSMS 没有返回没有项目成员的“品牌 A”行

SSMS 结果 3

SSMS 结果 3

重现的 SQL 脚本

为结果 2 查询生成的 MDX

  • 通过 SSMS(产生我想要的结果)

SSMS MDX

  • Excel MDX

Excel MDX