表格立方体 - Excel 过滤在节点级别不起作用

Tabular Cube - Excel Filtering Doesn't Function At Node Level

我遇到了 this post. 中描述的问题 我有两个支持它们的数据相同的多维数据集,一个是多维多维数据集,第二个是表格多维数据集。如果我使用 excel 连接到多维数据集并将层次结构的顶层(在此示例中为“公司”)拖到多维多维数据集中的过滤器类别中,然后在 [=147 中的搜索栏中输入一些文本=]:

(层次结构 - 在 Excel)

(层次结构 - 在 Visual Studio 中)

(多维 - 在 Excel 作为过滤器)

以下级别将按文本过滤,结果将 returned。但是,如果我在表格立方体中筛选相同的层次结构,结果会有所不同:

(表格 - 在 Excel 中作为过滤器)

我没有收到任何结果,搜索似乎没有正常运行。如果我正在查看层次结构的叶级别,我可以让它工作,但它看起来好像 excel 中表格多维数据集的层次结构搜索功能的节点级别不起作用。

之前有没有其他人遇到过这个问题,我很想 post 多维数据集的模型,但它是专有的,我在多个服务器和客户端上的多种类型的专有多维数据集中遇到过同样的问题.这是我可以更改的模型中的某种配置吗?或者我可以更改 excel 中的某些内容?

更新 1

我一直在做更多的挖掘工作,我在执行搜索时针对我的 SSAS 服务器将 SQL Profiler 设置为 运行,似乎它正在生成 MDX 查询(这次是在我的“项目”层次结构):

WITH MEMBER [Measures].cChildren As 'AddCalculatedMembers([Item].[I1 - Category].currentmember.children).count' 
Set FilteredMembers As 'Head (Filter(AddCalculatedMembers([Item].[I1 - Category].[Category].Members), InStr(1, [Item].[I1 - Category].currentmember.member_caption, "Per")>0),10001)' 
Select {[Measures].cChildren} on ROWS, 
Hierarchize(Generate(FilteredMembers, Ascendants([Item].[I1 - Category].currentmember))) DIMENSION PROPERTIES PARENT_UNIQUE_NAME, 
MEMBER_TYPE ON COLUMNS FROM [XXX_Test_TabularPro]

但是当 运行 对着我的立方体时,它似乎出错了(可以解释为什么我在 excel 中没有得到任何结果):

Either you do not have permission to access the specified member, or the specified member does not exist.

这是一个有趣的错误消息,实际上我以前从未见过它,而且互联网上也没有太多关于它的信息,just a few dead ends.我很确定我没有权限问题,我可以通过 运行 在该服务器上以管理员身份查询来重现错误。我认为它与查询中的某些内容或多维数据集的格式有关,但我不太确定是哪个问题,而且我对 MDX 不是很熟悉。有人见过这个吗?我可以用立方体改变什么来避免这种情况发生吗?这是查询的语法问题吗?如果是,为什么 excel 会生成无效查询?

另一个有趣的注意事项,我注意到叶级层次结构的搜索功能在 excel 中工作(如上所述)所以我将“I1 - 项目类别”换成了“IA - 项目名称” ”和查询 运行s 没有问题(当然我们现在正在搜索叶级别),在这种情况下,它是关于在非叶级别上 运行 宁此查询“I1 - 项目类别" 导致此错误发生。

更新 2

好的,我取得了一些突破,我更改了我的查询以查看输入的任何组合是否允许它工作,并且我找到了一个,如果我将我的过滤器从“Per " 到 "GL" 我得到一个结果,事实证明上面概述的查询实际上是 NOT returning 来自“I1 - 项目类别”的结果,它实际上是 returning 来自“[Item].[IA - Item Name].Members”的结果,其中包含不同的项目名称列表。

我实际上也可以在 excel 中证明这一点:

这毫无意义,在我上面显示的查询(从 excels 搜索生成的查询)中,我没有提到项目名称,你清楚地看到什么是“[Item].[ I1 - Category].[Category].Members" 应该在上面的屏幕截图中 returning(以及多维立方体 returned 的内容),它只是不在表格中,最糟糕的是我捕获(使用 SQL 探查器)来自 excel 的查询,用于搜索我的多维数据集的相同表格版本和多维版本的项目层次结构,它们生成完全相同的 MDX 查询,唯一的区别是名称立方体。

我不得不得出结论,如果一个生成两个相同的立方体(尽可能相同),一个是表格的,另一个是多维的,并且 运行 对它们的上述查询(假设这个层次结构存在),它们 return 不同的结果 ,而表格会 return 不正确的结果。

有人见过这个问题吗?我觉得表格立方体 return 为指定的 MDX 创建了不正确的记录集,这是怎么发生的,我可以做些什么来修改查询或立方体来解决这个问题吗?

更新 3

传奇还在继续,我想在这里回答的核心问题之一是:这是我生成的多维数据集特有的东西,还是它会影响所有多维数据集,我相信我有答案了.. .

重现步骤:

  1. 打开 Visual Studio,新建项目,Select“Analysis Services 表格项目”,下一步,创建,(弹出窗口将显示“表格模型设计器”I select编辑“Workspace Server”将其指向我的表格立方体服务器并设置兼容模型 1200)

  2. 将以下数据添加到 CSV 文件或将其放入 SQL table:

Category_Description Sub Category_Description LeafName

Professional 10 Series Filter

Performance 10 TTR GL

Professional 10 Series Series 1

Unassigned Unassigned AUTOMOTIVE

Performance 500 S RACING

  1. 右键单击“数据源”select“从数据源导入”,浏览菜单以导入上面定义的数据源。

  2. 作为第 3 项的一部分,您应该导入步骤 2 中列出的 table,您应该会在 table 的新 table 中看到它来自您的数据源:

  1. 打开新的 table 并创建以下层次结构:

  1. 在 VS 中右键单击“TabularProject”,select“在 Excel 中分析”,这应该会弹出一个 excel window

  2. 将“Hierarchy1”层次结构拉入“过滤器”,在 excel 中下拉此层次结构并尝试搜索“Per”:您会看到没有显示任何结果。

重要说明:如果我将工作区更改为“集成”,重建并处理多维数据集,我不再看到错误,它一定与服务器处理此模型的方式有关,在某种程度上它一定是不同的那么VS是如何在本地实现的呢

我在稍微不同的环境中对此进行了测试。我使用 Power BI 构建了模型,效果非常好。

然后我将模型上传到 SSAS 并再次测试,它仍然适用于我。我是 SQL 2019 年的 Power BI。

最后,我用VS 2019原生开发的模型和工作区服务器进行了测试。此外,这没有任何问题。

好的,我想我终于明白这里发生了什么,我检查了我的 SSAS 版本号:

15.0.32.55

这已经很旧了,所以我更新到“15.0.35.15”,看起来问题现在已经解决了(在 excel 中搜索现在有效),我相信这个版本升级引入了一个修复解决了这个错误,很可能 this one, or this one.