标签: ssas

仅使用 Excel 读取 SSAS Cube 的安全权限

我在 SQL Server 2008 服务器上设置了 SSAS 数据库。我为一组用户设置了一个角色,我希望能够访问该数据库中的多维数据集。无论它说什么,我都设置了“读取定义”和“读取访问”,但这似乎不起作用。

用户可以打开我之前设置的数据透视表,但不会显示任何时间,但维度数据会显示得很好(用户、部门等)。

然后我设置了一个个人用户并给了他们完全控制权(管理员),效果很好。我缺少什么可以让他们正确访问多维数据集?进程数据库?还有什么?

sql-server-2008 security ssas pivot

4
推荐指数
1
解决办法
7335
查看次数

如何动态备份给定实例上的所有 SSAS 数据库?

我想使用 SQL 代理作业(这很可能涉及执行 SSIS 包)动态备份给定 SSAS 实例上的所有数据库。这是一个动态过程,这一点势在必行——如果用户添加数据库或多维数据集,我想一次性设置一项可以自动检测所有现有 SSAS 元数据的作业。

不幸的是,我没有看到任何东西告诉我如何以干净的方式自动和动态地备份 SSAS 实例上的所有数据库。“干净”,我的意思是:

backup ssas ssis

4
推荐指数
1
解决办法
9058
查看次数

如何比较不同商店的前几周或几个月的交易数量

我需要比较不同商店自开业以来每周和每月的交易次数。问题是这些商店的开业日期不同。

所以,这个想法是比较前几周或几个月的交易数量

这就是我所拥有的:

 Canal Key 1

   Recount FactTransactions

                              Month1-2015 Month2-2015 Month3-2015 Month4-2015 Month5-2015 Month6-2015

 Type of store     Cod Store 

Spain     
         2          Store 1                                              5         6        10
                    Store 2      10          20            40            50        60       85        
         4          
                    Store 3      31          45            100           315       441      625              
                    Store 4                                10            20        32       45
Portugal
        1       
                    Store 5                                                                 12
Run Code Online (Sandbox Code Playgroud)

这就是我想要获得的(比较自开业之日起的不同商店):

    Canal Key 1

   Recount FactTransactions

                              Month1 (or Week) Month2 Month3 Month4 Month5 Month6

 Type of store     Cod Store 

Spain     
         2          Store 1       5              6      10 …
Run Code Online (Sandbox Code Playgroud)

sql-server ssas

4
推荐指数
1
解决办法
249
查看次数

具有 2 个度量值组(与维度具有不同关系)的多维数据集在报表中返回过多维度成员

我有一个包含来自零售业务的库存盘点数据的多维数据集。它有 2 个度量组 - 一个包含在每个盘点批次中计算的库存单位数(与产品、批次和时间维度相关),另一个包含产品价格(仅与产品维度相关)。

price 度量组中的度量使用 Min 和 Max 运算符(即它们显示 Products 维度的选定成员的最低或最高价格)。

我似乎已经正确配置了多维数据集和维度(价格度量按预期显示)......除了以下情况:

如果我在 Excel 中查询多维数据集并按时间和批次获取单位,我会看到预期的结果(见下图,按时间 = 2015 过滤,并隐藏没有数据的行),即仅包含所选单位事实数据的批次时间维度成员。

按时间和批次划分的单位

如果我现在添加一个价格度量(不更改任何过滤器),Units total 不变(如预期),但我现在可以看到Batch 维度中的每个成员(见下图)。这对最终用户来说是一个问题,因为他们只想查看先前选择的批次中产品的价格。

在此处输入图片说明

从技术角度来看,这是有道理的 - 价格事实与时间无关,因此不能像单位那样被我的时间过滤器过滤。

我可以做些什么(在多维数据集设计或 Excel 中)消除给定过滤器没有单位的 Batch 成员?注意:我无法让用户编写 MDX 查询 - 报告构建需要保持“点击”!

编辑 27/1(添加额外的屏幕截图以说明根据 TomV 的回答设置 Ignore Unrelated Dimensions = False 的奇怪副作用)

在此处输入图片说明

sql-server ssas cube dimensional-modeling

4
推荐指数
1
解决办法
4085
查看次数

针对分析服务器的 OPENQUERY 中的 8000 个字符限制

我有一个类似的查询

SELECT column1, column2 FROM OPENQUERY(AnalysisServerName, 'MDX QUERY ...').
Run Code Online (Sandbox Code Playgroud)

它位于存储过程中。MDX 查询是动态内置的,查询的长度远远超过 8000 个字符(最多可以达到 400 000 个符号)。

MDX 查询返回大约 200 列,我只需要其中的一些。由于尺寸复杂,我无法减少数量。

因此,我必须将结果写入临时表或直接将SELECT它们作为程序的结果。我决定给SELECT他们。但是,当我尝试使用 省略 8000 个字符的限制时EXEC OPENQUERY(AnalysisServerName, 'MDX QUERY ...') AT AnalysisServerName,我无法SELECT甚至将它们保存到临时表中,因为它发生在存储过程内部并且不允许嵌套(遵循此线程)。

我希望我能做到

SELECT column1, column2 FROM (EXEC OPENQUERY(AnalysisServerName, 'MDX Query') AT AnalysisServerName)
Run Code Online (Sandbox Code Playgroud)

即使我可以直接在分析服务器上执行很长的 MDX 查询

DECLARE @myStatement VARCHAR(MAX)
SET @myStatement = 'OPENQUERY(AnalysisServerName, 'MDX Query')'

EXECUTE (@myStatement) AT AnalysisServerName
Run Code Online (Sandbox Code Playgroud)

我无法对存储过程中的结果做任何事情,因为

DECLARE @myStatement VARCHAR(MAX)
SET @myStatement = 'SELECT column1, column2 FROM OPENQUERY(AnalysisServerName, 'MDX …
Run Code Online (Sandbox Code Playgroud)

sql-server ssas mdx

4
推荐指数
1
解决办法
76
查看次数

SCD Type 2 Dimension -> 对于存在此类数据的 type 2 scd,这是正确的布局吗?

这是我的布局的示例图片。

在此处输入图片说明

如您所见,我有我的 SCD 类型(状态/开始日期/结束日期/businesskey)。

我的密钥是标识每条记录的代理密钥。

我的问题是我的层次结构似乎出错了,这可能是由于布局不正确。这是我当前的关键列结构。

等级制度

LineOfBusinessId(关键列:LineOfBusinessId)(名称列:LineOfBusinessName)

WorkerDivisionId(关键列:LineOfBusinessId、WorkerDivisionId)(名称列:WorkerDivisionName)

WorkerId(关键列:LineOfBusinessId、WorkerDivisionId、WorkerId)(名称列:WorkerName)

此维度出错是因为工作人员名称发生更改,并且在完整处理期间发生 select distinct 时,它会发现重复项。我只是想知道针对这种特定情况设置键列的最佳方法是什么。名称是否需要成为关键列的一部分,或者我的层次结构完全不正确。我确信我的设置是正确的,但我现在显然在质疑自己。

我收到了一些建议,在这种情况下最好的做法是使用代理键作为我的键列的一部分,但后来发现这会导致问题,因为我只希望在查询我的 SCD 时显示一条记录。后来,我收到了更多建议,说我不应该在 id 键列中使用代理,而应该在名称键列中使用代理,特别是在 Worker 级别。

在没有听到建立这种类型层次结构的人的意见的情况下,我对使用此设置更新所有多维数据集感到相当不安。当我看到这个设置时,我不得不认为其他人已经建立了这种类型的层次结构,因为它相当简单。非常感谢任何关于此的建议/方向。

谢谢。

ssas slowly-changing-dimension

3
推荐指数
1
解决办法
4200
查看次数

使事实和维度变小后,SSAS 多维数据集处理时间增加

我有一个 55 GB 大小的立方体,需要大约 2 小时才能完成处理。因为我有过去 4 年的数据,但我们的业务只需要 2 年的数据。为此,我已将维度和事实视图更改为仅包含最近两年的数据。现在,我的立方体大小减少到 32 GB,但处理时间增加了 30 分钟(即 2 小时 30 分钟)。我期望它会更少,因为我限制了进入多维数据集的大量数据。为什么处理时间增加了而实际上应该减少?我现在怎样才能减少处理时间?

PS:我已经尝试过多维数据集分区,并且由于尺寸较大,它也增加了处理时间。

我正在使用通过 WHERE 子句限制数据的视图。

我的观点基本上是这样的:

SELECT V.Col1, V.Col2.... V.Col13 
FROM DimeTable V 
WHERE <my filter clause>
Run Code Online (Sandbox Code Playgroud)

它从维度表中选择几乎所有列,因此我无法在所有这些列上创建非聚集索引,因为它可能会减慢插入操作并且对我没有太大帮助

process sql-server ssas olap sql-server-2012

3
推荐指数
1
解决办法
4568
查看次数

MDX - 动态获取过去 6 个月

我有一个 Dim 表,名为DimAccounts. 它描述了一个用户帐户和该帐户的创建日期。例如:

在此处输入图片说明

我想动态获取过去 6 个月内创建的帐户列表。例如今天是 09\01\2016。所以我的帐户列表将是从01-08-2015直到创建的帐户09-01-2016。请注意,此CreatedOn字段没有层次结构,它是帐户维度的一个属性。

sql-server ssas mdx dimension

3
推荐指数
1
解决办法
4643
查看次数

如何计算维度属性的百分比并获得正确的聚合?

我们有一个事实表,其中包含卡车/司机/天运输的重量。

以及每辆卡车最大重量的尺寸。

我们希望运输重量的百分比,所以我们从

create MEMBER CURRENTCUBE.[Measures].[% WT]
 AS [Measures].[Weight]/[Dim Truck].[Max_weight].currentmember.properties("key"), 
FORMAT_STRING = "Percent";
Run Code Online (Sandbox Code Playgroud)

这仅适用于一辆卡车在特定日期和司机只有一片叶子的个别行。

如果卡车一天行驶两次,而不是 sum(weight)/sum(max_weight) 或者如果您更喜欢 sum(weight)/(n*max_weight) 我们得到的是 sum(weight)/max_weight,则它不起作用

在任何聚合级别都会发生完全相同的情况。例如,月或年或总计。或者只是在卡车级别。

我们一直在玩各种公式和范围,但没有成功。

知道如何定义它以便聚合按预期工作吗?

ssas mdx dimension

3
推荐指数
1
解决办法
769
查看次数

SSIS / SSAS:处理年龄列

我有一些列代表表格中的年龄,取值从 0 到 100,但也有 -1 表示“缺失值”。我不想将它们存储为字符串以便能够找到平均年龄等,但是 SSAS 默认将 0 变为 NULL,并且我也想将 -1 替换为 NULL,因此有经典的“重复属性键”错误。

是否有正确的方法/类型来处理年龄值?

null sql-server ssas ssis

3
推荐指数
1
解决办法
132
查看次数