- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有人将复杂的 ssas 多维立方体移植到 iccube?对两种工具之间的经验教训/差距等有什么建议吗?
我能看到的主要是 scope()。 iccube中的等价物是什么?嵌套的 if/case 语句?
我这里有一个列表。还有什么吗?
function | SSAS | iccube
------------------------|------------------------|------------------------
multi threaded calcs | no | yes
------------------------|------------------------|------------------------
fix/scope block code | SCOPE() | ??
------------------------|------------------------|------------------------
custom functions | clr.net but it's slow | mdx+
------------------------|------------------------|------------------------
generic date utility | third-party code that | ??
dimensions (eg generic | uses scope() eg |
prior period/prior | datetool |
corresponding period) | |
------------------------|------------------------|------------------------
我们有一个非常 mdx 脚本计算重的立方体,而 SSAS 计算引擎的单线程性质是一个真正的瓶颈。我们看过的其他 olap 工具都不够快,或者没有足够丰富的语言
我们使用断开连接的效用维度来驱动功能,并且需要有一个日期效用维度(我们使用这个 http://sqlmag.com/sql-server-analysis-services/optimizing-time-based-calculations-ssas 的一个版本),广泛使用 AXIS(),并且在层次结构的后代中具有递归求和积一种非附加措施。
我们的多维数据集不是自助报告多维数据集。它是我们应用程序的多维计算引擎,具有固定的通用架构
更新 1:我们如何使用作用域的一个更简单的示例。 ic,你提到存在“强大”的解决方法。对于这样的代码,它们会是什么?
// Assumes the date utility dim has been setup as with the priorperiod function as [Dim Date Calculations].[Date Calculations].[Prior Period]
// DimBenchmark is a single attribute disconnected utility dimension. The initial/default value is DimBenchmark.Benchmark.None ie do nothing. The remainder are dynamically set based on code. hardcoded below for simplicity
Scope(DimBenchmark.BenchMark.PriorPeriod);
THIS = [Dim Date Calculations].[Date Calculations].[Prior Period]; // assign the value of some physical and utility dim members to new benchmark attributes. Allows us to only refer to dimbenchmark in subsequent code, irrespective of number of benchmarks or the src dimension.attribute
END SCOPE;
SCOPE(DimBenchmark.BenchMark.Budget);
THIS = DimScenario.Scenario.Budget; //we also have a budget
END SCOPE;
.... // any number of other benchmarks
Create measure currentcube.measures.ComplexCalc as NULL;
SCOPE (measures.ComplexCalc); // this code will only change how complex calc behaves
SCOPE (DimBenchmark.Benchmark.All - DimBenchmark.Benchmark.None); // this will only change the ComplexCalc when the active benchmark selection is not "none"
this= (some measure,Complex subcube etc);
End Scope;
End Scope;
这样做的好处是 complexcalc 默认为 null。它只有在满足特定条件时才会获得值(value)。使用范围的主要原因是速度。比 if/case block 快得多(而且更容易理解)我不需要明确定义哪些基准是有效的,只是哪些基准不是。
下面是我们如何实现日期实用程序维度。它允许我们做类似的事情(measure,[Dim Date Calculations].[Date Calculations].[Prior Period]) 并且它为 dim date 的当前成员使用度量的前期(月回溯 1 个月,季度回溯 3 个月,学期过去回溯 6 个月,年份回溯 12 个月)。它非常干净、准确且速度非常快。
-- Fiscal Month
Scope( [Dim Date].[Month Key].[Month Key].members);
-- Prior Period
Scope([Dim Date Calculations].[Date Calculations].[Prior Period]);
this =
( [Dim Date].[Month Key].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END scope;
End Scope;
-- Fiscal Quarter
Scope( [Dim Date].[Fiscal Quarter].[Fiscal Quarter].members);
-- Prior Period
SCOPE( [Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS = ( [Dim Date].[Fiscal Quarter].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
END SCOPE;
-- Fiscal Semester
Scope( [Dim Date].[Fiscal Semester].[Fiscal Semester].members);
-- Prior Period
SCOPE( [Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS = ( [Dim Date].[Fiscal Semester].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
End Scope;
-- Fiscal Year
Scope( [Dim Date].[Fiscal Year].[Fiscal Year].members);
-- Prior Period
SCOPE( [Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS =
( [Dim Date].[Fiscal Year].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
End Scope;
最佳答案
[免责声明我在 icCube 工作]
范围不是 icCube 的一部分,尚未计划。这是一个棘手的功能,并不自然地适合 icCube 的架构(参见下面的讨论,稍后......)。 icCube 的优势还在于其研发团队的敏捷性,请随时直接与他们联系,他们将非常乐意改进和添加功能。
在 icCube 中有一些不同于经典 MDX 服务器的功能可能有用,它们是 Categories、SubCubes 和 eval 函数。
Categories .允许定义一个行为类似于经典成员的新成员。这个新成员可以定义为一组成员或一个子多维数据集。例如,在这里我们可以将 [Top10] 类别成员定义为我们的 10 个最重要的客户:
CATEGORY MEMBER [Top10] as TopCount( [Customers], 10, ([Measures].[Sales],[2015]) )
-> so later on ( [Top10], [Sales] ) will return the sales of this top10 customers
SubCubes,允许将更丰富的成员逻辑关系定义为一组元组。 icCube 实现 SubCubeComplement , SubCubeIntersect , SubCubeOthers , SubCubeSymDifference , SubCubeUnion和 SubCubeMinus .所以在没有法国的情况下计算所有(这在这里很微不足道,但考虑具有多对多关系的层次结构)
SubCubeMinus([Geography].[Geo].[All], [Geography].[Geo].[France] )
Eval函数,允许评估子多维数据集上的表达式。这是一个使用 union 求和的简单示例:
MEMBER [US+CH] AS Eval( SubCubeUnion( [Switzerland], [United States]) , [Amount])
最后但同样重要的是,对于日期函数,您可以定义 Function在 icCube 中,您可以在 MDX 中重复使用,无需复制粘贴到任何地方:
CREATE FUNCTION square( Value val ) AS val * val
并结合CompactSet为了更快地评估日期周期(如果此维度上没有 m2m 关系)或调用一些 Java functions (您必须激活默认情况下关闭的此模块)。
--------------------范围------------------------ --
警告:注释可能已过时,因为我对范围的理解是几年前的事了。我们走吧:
Scope 是一个不错的功能,但也有一些缺点,您可以在 Chris Webb 的演示文稿 (link) 中查看,从 47:30 开始查看大约 5 分钟。
问题在哪里/是:
范围允许以某种方式为子多维数据集定义一个新值(记住一个子多维数据集可能是单个不可分割的单元格以及数千个单元格)
1) Scopes 允许定义一个子多维数据集的值,但是如果你想要这个子多维数据集的“一部分”怎么办?
2) 如果两个作用域发生冲突(交集不为空)会怎样?
所有这些都与安全、多对多关系、子查询和 set where 子句混合在一起。
我们不是 SSAS 专家,在更好地理解之后,我们可能会再次尝试实现一个干净的解决方案,但据了解,我们相信还有其他方法可以解决问题(例如使用计算成员或回写)。
希望对您有所帮助。
关于ssas - 将多维 SSAS 移植到 ICCube。范围()等效?其他差距/问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39073918/
我不能解决这个问题。和标题说的差不多…… 如果其他两个范围/列中有“否”,我如何获得范围或列的平均值? 换句话说,我想计算 A 列的平均值,并且我有两列询问是/否问题(B 列和 C 列)。我只希望 B
我知道 python 2to3 将所有 xrange 更改为 range 我没有发现任何问题。我的问题是关于它如何将 range(...) 更改为 list(range(...)) :它是愚蠢的,只是
我有一个 Primefaces JSF 项目,并且我的 Bean 注释有以下内容: @Named("reportTabBean") @SessionScoped public class Report
在 rails3 中,我在模型中制作了相同的范围。例如 class Common ?" , at) } end 我想将公共(public)范围拆分为 lib 中的模块。所以我试试这个。 module
我需要在另一个 View 范围 bean 中使用保存在 View 范围 bean 中的一些数据。 @ManagedBean @ViewScoped public class Attivita impl
为什么下面的代码输出4?谁能给我推荐一篇好文章来深入学习 javascript 范围。 这段代码返回4,但我不明白为什么? (function f(){ return f(); functio
我有一个与此结构类似的脚本 $(function(){ var someVariable; function doSomething(){ //here } $('#som
我刚刚开始学习 Jquery,但这些示例对我帮助不大...... 现在,以下代码发生的情况是,我有 4 个表单,我使用每个表单的链接在它们之间进行切换。但我不知道如何在第一个函数中获取变量“postO
为什么当我这样做时: function Dog(){ this.firstName = 'scrappy'; } Dog.firstName 未定义? 但是我可以这样做: Dog.firstNa
我想打印文本文件 text.txt 的选定部分,其中包含: tickme 1.1(no.3) lesson1-bases lesson2-advancedfurther para:using the
我正在编写一些 JavaScript 代码。我对这个关键字有点困惑。如何在 dataReceivedHandler 函数中访问 logger 变量? MyClass: { logger: nu
我有这个代码: Public Sub test() Dim Tgt As Range Set Tgt = Range("A1") End Sub 我想更改当前为“A1”的 Tgt 的引
我正忙于此工作,以为我会把它放在我们那里。 该数字必须是最多3个单位和最多5个小数位的数字,等等。 有效的 999.99999 99.9 9 0.99999 0 无效的 -0.1 999.123456
覆盖代码时: @Override public void open(ExecutionContext executionContext) { super.open(executio
我想使用 preg_match 来匹配数字 1 - 21。我如何使用 preg_match 来做到这一点?如果数字大于 21,我不想匹配任何东西。 example preg_match('([0-9]
根据docs range函数有四种形式: (range) 0 - 无穷大 (range end) 0 - 结束 (range start end)开始 - 结束 (range start end st
我知道有一个UISlider,但是有人已经制作了RangeSlider(用两个拇指吗?)或者知道如何扩展 uislider? 最佳答案 我认为你不能直接扩展 UISlider,你可能需要扩展 UICo
我正在尝试将范围转换为列表。 nums = [] for x in range (9000, 9004): nums.append(x) print nums 输出 [9000] [9
请注意:此问题是由于在运行我的修饰方法时使用了GraphQL解析器。这意味着this的范围为undefined。但是,该问题的基础知识对于装饰者遇到问题的任何人都是有用的。 这是我想使用的基本装饰器(
我正在尝试创建一个工具来从网页上抓取信息(是的,我有权限)。 到目前为止,我一直在使用 Node.js 结合 requests 和 Cheerio 来拉取页面,然后根据 CSS 选择器查找信息。我已经
我是一名优秀的程序员,十分优秀!