从 SSAS 中的 OLAP Drill 中删除重复项
Remove duplicates from OLAP Drill in SSAS
我正在使用 Visual Studios BIDS 修改现有的 OLAP 多维数据集。
在 SSMS
中:有一个基础事实 table (FactTableMain) 具有非常精细的粒度,包含 10 种不同的措施来跟踪应用程序的状态(它们几乎像一个标志) .这些度量要么具有个人的 ID 值,要么是 NULL
.
在SSAS
Visual StudioOLAP
中:
- 有 10 个度量值组。每个度量值组都基于 FactTableMain 的 selects 1 度量的 DSV 命名查询,其中 MeasureName
IS NOT NULL
.
- 每个度量值组的钻取操作,只有 PersonName 和 PersonID 列被 returned。
每个措施组的演练:
- 显示重复项(因为并非所有事实 table 列都是用于钻取的 return 列)
- 不要return度量计数显示的预期行数
我试过:
- 多个
MDX
条件在追溯操作中使用过滤器和 distinct,但它们要么没有任何区别,要么操作完全消失
- 创建一个 select 与 FactTableMain 不同 ID 的垃圾钻取维度,并将其设置为钻取操作的唯一 return 列(对钻取 return行)
- 创建新的(标准)动作作为行集和数据集,使用
MDX
动作表达式
我想我需要一个带有 MDX
动作表达式的新(标准)动作,该动作表达式具有以下属性:
- 目标类型 = 细胞
- 目标对象=所有单元格
- 操作内容类型 = 行集
我当前的 MDX 查询有 return 个结果,但仅针对第一个度量的总和,而且格式根本不正确。如果我 select 在客户端应用程序中使用不同的度量、重新运行查询并再次钻取,它就不起作用。我找了又找,但我没有想法,坐在一个黑暗的厄运坑里。 :(
我当前的 MDX
查询是:
WITH
SET [person] AS
NonEmpty([person].[person].[person])
MEMBER CurrentMeasure AS
[Measures].CurrentMember
SELECT
NonEmpty
(
Filter
(
[Quarter].[Quarter].[Quarter].MEMBERS
,[Quarter].[Quarter].CurrentMember
)
) ON COLUMNS
,(
[person]
,NonEmpty([person].[person ID].[ID])
) ON ROWS
FROM [Applications];
目标:
我最终希望钻取动作足够动态,以了解用户正在 selecting 的当前度量,并根据 rows/columns.
的用户维度 selection 进行过滤
问题:
- 有没有一种方法可以使用原始追溯操作的条件来过滤不同的或非空的行?我知道演练存在局限性,但是有什么方法可以解决演习的局限性吗?
- 我如何创建一个标准的 Rowset 操作,它动态地适应用户的 selections(我的目标)。
- 有什么想法吗?
URL 操作类型不符合我们的业务需求。
编辑:我从 DSV 中删除了所有不必要的内容,并且 select 只编辑了不同的行。每个 ID 可以有超过 1 个应用程序,一个应用程序可以有超过 1 个感兴趣的领域。现在,每个 ID、应用程序和感兴趣的区域演练 return 1 行。我们只希望钻取 return 不同的 ID,而不管应用程序或感兴趣的领域有多少。我不知道从这里去哪里。我可以在演练中过滤我们的申请号 and/or 感兴趣的领域吗?
我相信你说得太快太快了。
DSV 应在浏览器中无重复地显示数据。如果不是,请返回 DSV 并检查它是什么。也许在事实 table 之上创建一个视图(索引视图),这样您就可以确保只查询所需的数据。另外:您确定您的维度链接正确吗?有时会出现重复,因为维度设置不正确,链接键错误。
在 MDX 中:
如果您在“计算”选项卡中创建一个计算,您可以在其中进行钻取。否则,您每次都必须编写正确的 MDX 查询。
HTH.
查看最后一个示例:
http://asstoredprocedures.codeplex.com/wikipage?title=Drillthrough&referringTitle=Home
您必须将该 ASSP 程序集部署到 SSAS。它用于在执行操作期间获取所有属性的当前上下文。但它会 return 员工对用户启动操作的任何衡量标准进行总计。
"select {[Measures].CurrentMember} on 0, NON EMPTY [person].[person].[person].Members on 1 from (select (" + ASSP.CurrentCellAttributes([Measures].CurrentMember) + ") on 0 from [Application])"
我正在使用 Visual Studios BIDS 修改现有的 OLAP 多维数据集。
在 SSMS
中:有一个基础事实 table (FactTableMain) 具有非常精细的粒度,包含 10 种不同的措施来跟踪应用程序的状态(它们几乎像一个标志) .这些度量要么具有个人的 ID 值,要么是 NULL
.
在SSAS
Visual StudioOLAP
中:
- 有 10 个度量值组。每个度量值组都基于 FactTableMain 的 selects 1 度量的 DSV 命名查询,其中 MeasureName
IS NOT NULL
. - 每个度量值组的钻取操作,只有 PersonName 和 PersonID 列被 returned。
每个措施组的演练:
- 显示重复项(因为并非所有事实 table 列都是用于钻取的 return 列)
- 不要return度量计数显示的预期行数
我试过:
- 多个
MDX
条件在追溯操作中使用过滤器和 distinct,但它们要么没有任何区别,要么操作完全消失 - 创建一个 select 与 FactTableMain 不同 ID 的垃圾钻取维度,并将其设置为钻取操作的唯一 return 列(对钻取 return行)
- 创建新的(标准)动作作为行集和数据集,使用
MDX
动作表达式
我想我需要一个带有 MDX
动作表达式的新(标准)动作,该动作表达式具有以下属性:
- 目标类型 = 细胞
- 目标对象=所有单元格
- 操作内容类型 = 行集
我当前的 MDX 查询有 return 个结果,但仅针对第一个度量的总和,而且格式根本不正确。如果我 select 在客户端应用程序中使用不同的度量、重新运行查询并再次钻取,它就不起作用。我找了又找,但我没有想法,坐在一个黑暗的厄运坑里。 :(
我当前的 MDX
查询是:
WITH
SET [person] AS
NonEmpty([person].[person].[person])
MEMBER CurrentMeasure AS
[Measures].CurrentMember
SELECT
NonEmpty
(
Filter
(
[Quarter].[Quarter].[Quarter].MEMBERS
,[Quarter].[Quarter].CurrentMember
)
) ON COLUMNS
,(
[person]
,NonEmpty([person].[person ID].[ID])
) ON ROWS
FROM [Applications];
目标: 我最终希望钻取动作足够动态,以了解用户正在 selecting 的当前度量,并根据 rows/columns.
的用户维度 selection 进行过滤问题:
- 有没有一种方法可以使用原始追溯操作的条件来过滤不同的或非空的行?我知道演练存在局限性,但是有什么方法可以解决演习的局限性吗?
- 我如何创建一个标准的 Rowset 操作,它动态地适应用户的 selections(我的目标)。
- 有什么想法吗?
URL 操作类型不符合我们的业务需求。
编辑:我从 DSV 中删除了所有不必要的内容,并且 select 只编辑了不同的行。每个 ID 可以有超过 1 个应用程序,一个应用程序可以有超过 1 个感兴趣的领域。现在,每个 ID、应用程序和感兴趣的区域演练 return 1 行。我们只希望钻取 return 不同的 ID,而不管应用程序或感兴趣的领域有多少。我不知道从这里去哪里。我可以在演练中过滤我们的申请号 and/or 感兴趣的领域吗?
我相信你说得太快太快了。 DSV 应在浏览器中无重复地显示数据。如果不是,请返回 DSV 并检查它是什么。也许在事实 table 之上创建一个视图(索引视图),这样您就可以确保只查询所需的数据。另外:您确定您的维度链接正确吗?有时会出现重复,因为维度设置不正确,链接键错误。
在 MDX 中: 如果您在“计算”选项卡中创建一个计算,您可以在其中进行钻取。否则,您每次都必须编写正确的 MDX 查询。
HTH.
查看最后一个示例: http://asstoredprocedures.codeplex.com/wikipage?title=Drillthrough&referringTitle=Home
您必须将该 ASSP 程序集部署到 SSAS。它用于在执行操作期间获取所有属性的当前上下文。但它会 return 员工对用户启动操作的任何衡量标准进行总计。
"select {[Measures].CurrentMember} on 0, NON EMPTY [person].[person].[person].Members on 1 from (select (" + ASSP.CurrentCellAttributes([Measures].CurrentMember) + ") on 0 from [Application])"