- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我们的 SSAS 表格项目研究自动化测试工具。我找到了 NBi,觉得它真的很酷。我尝试设置它并成功运行了一些基本测试。但是,当我尝试测试 dax 计算时,它显示“找不到函数”(见屏幕截图)。听起来它不支持 SUM,但鉴于 SUM 是一个基本函数,我想它应该可以工作。因为我是这个工具的新手,所以我想仔细检查我是否做错了什么,或者这只是错误所说的......(不支持的功能)。
我回去查看了 NBi 文档,它提到要检查他们的 NCAL.dll 以获取所有可用的表达式。不幸的是,我无法打开该 dll 文件的可读版本。感谢您的帮助。
这是我要测试的公式:
=SUMX(FILTER(MyTable, AND(MyTable[Date] = EARLIER(MyTable[Date]), MyTable[Account] = EARLIER(MyTable[Account]))), MyTable[Amount])
XML 代码 (nbits) 文件
<test name="My second test: Calculated column compared to DAX formula">
<system-under-test>
<execution>
<query connectionString="Provider=MSOLAP.7;Data Source...">
<![CDATA[
EVALUATE
SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], MyTable[CalculatedAmount])
]]>
</query>
</execution>
</system-under-test>
<assert>
<evaluate-rows>
<variable column-index="0">Date</variable>
<variable column-index="1">Account</variable>
<variable column-index="2">Amount</variable>
<variable column-index="3">CalculatedAmount</variable>
<expression column-index="3" type="numeric" tolerance="0.01"> = SUMX(FILTER(MyTable, AND(MyTable[Date] = EARLIER(MyTable[Date]), MyTable[Account] = EARLIER(MyTable[Account]))), MyTable[Amount])</expression>
</evaluate-rows>
</assert>
</test>
最佳答案
NBi 支持在查询标签中评估 DAX 查询,但不支持在表达式标签中评估。 Expression 和 evaluate-rows 标签不是为比较两个查询而设计的。为此,请更改您的测试以在两个查询之间使用断言 equalTo。它会更容易并且会起作用。
I guess a better question would be how do I test a measure and a calculated column in term of ensuring that another developer doesn't accidentally change the calculation/expression I entered when designing the Tabular model?
我将从三个层面回答:概念、逻辑和技术。
在概念层面,你的测试是错误的:你不应该在你的断言和你的被测系统中使用相同的实现。这不是特定于 NBi 或任何框架,而是所有自动化测试。测试的作用不是确保某人不改变某些东西,而是确保某些东西给出正确的结果。即使您的实现是错误的,将工件与自身进行比较也总是会导致绿色测试。在这种情况下,您必须使用具体的静态结果更改您的断言,或者您需要创建一个 sql 语句来对您的数据库进行相同的计算,或者在 MDX 中找到另一个产生相同结果的查询。
下面这句话逻辑上不正确
Here is the formula I want to test:
您已在 assert
中而不是在 system-under-test
中定义了此公式。这意味着它不是您要测试的内容,而是您的引用(您 100% 确定它是正确的)。您要测试的是查询 EVALUATE SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], MyTable[CalculatedAmount])
。
在技术层面,使用评估行不是正确的选择。此断言不需要函数或查询,而是基于行变量的表达式(无 DAX,无 SQL,...)。 EARLIER
的使用清楚地表明这是不可能的。在您的情况下,您必须比较两个查询可能是:
<assert>
<equalTo>
<column index="0" role="key" type="dateTime"/>
<column index="1" role="key" type="numeric"/>
<column index="2" role="value" type="numeric"/>
<column index="3" role="value" type="numeric" tolerance="0.01"/>
<query>
EVALUATE SUMMARIZE (MyTable, MyTable[Date], MyTable[Account], MyTable[Amount], SUMX(FILTER(MyTable, AND(MyTable[Date] = EARLIER(MyTable[Date]), MyTable[Account] = EARLIER(MyTable[Account]))), MyTable[Amount])
</query>
</equalTo>
</assert>
PS:我显然不是 DAX 专家,从语法的角度来看,我不确定上面的查询是否有效。
关于automated-tests - 使用 NBi 测试 DAX 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231412/
我不知道这是否可行,但我希望能够创建一个计算列,其中每一行都依赖于它上面的行。 一个典型的例子是 Fibonacci sequence ,其中序列由递推关系 F(n) = F(n-1) + F(n-2
我有以下 case when 语句: case when ts.wgt_kg / ((hgt_cm / 100) * (hgt_cm / 100)) 30.0 then 'Obese > 30.0'
我有一个文本列,想将其转换为正确的。有没有办法只使用 DAX 来做到这一点?我不想使用内置的 powerbi 功能 适当的大小写是将每个单词的每个第一个字母都大写的任何文本。例如,“这是一个适当案例的
我需要对由 Summarize Function 产生的表产生的列的值求和。 例如我的数据集“标签”是这样的 Type Value A 10 A
我是 DAX 公式的新手。我正在寻找如何为以下数据执行与 SUMPRODUCT 等效的 excel: Id | Metric | Weight | Metric times Weight | 1 |
我在 Power BI Desktop 中有以下切片器,其中 客户数量 计算为 计数(不同(Fact.EHRTransaction.ClientFK))在我的数据模型中: 我的目标是计算占总数的百分比
。此公式有时命中/未命中返回正确值。在图片中,您可以看到50%的时间是正确返回的……
我有一个多步骤过程,可以将汇总基表的表变量分阶段到匹配的粒度。 过程(简而言之): 删除选定的日期过滤器 使用计算值创建过滤器 然后汇总新过滤的表以使粒度匹配 将结果表连接起来形成一个覆盖率表 为此,
我在 Power BI 中有一个如下表,其中包含类别和子类别两列。我正在尝试将每个类别的 subcategory="S2"计数放入计算列中(如 S2_count)。 Category Subca
我有一个涉及两个表格的问题,一个有一些成本(表格停止在值(value)处,我已经输入了我想在我的显式度量中看到的预期值),一个是按集群排序的城市。 我需要创建一个显式度量,该度量返回给定集群和费用的第
我正在努力在 DAX 中重新创建以下 Excel 逻辑: Cont 和 CF 都是数据列(来自 SQL 数据库),而 A 值是动态的,因为它来自 What-if分析: 正如您在屏幕截图中看到的那样,A
我想知道这两个 DAX 表达式之间有什么区别,每个表达式都返回我需要的内容: (1) =calculate([PctMkt], FILTER ( ALL ( BondDim), BondDim[Qua
我有一个事实表,其中存储项目、管理项目的公司以及项目应向其收费的公司: | Project | Company original | Company to display | Perc. | | A
在电源查询中,我有一个这样的表: date | month | 01/01/2017 | jan 2017 | 02/01/2017 | jan 2017 | 03/01/2017
使用 PowerPivot 功能创建度量。 列中有两种类型的值:整数和 NULL(字符串)。 试图弄清楚如何创建一个 DAX 公式来计算仅采用包含整数的单元格的列的平均值。 感觉下一个基本公式会起作用
我在 PowerPivot 上的数据集中进行了计算: SUM:=CALCULATE(SUM([Data]),FILTER(ALL(Table[Month]),[Month]=[CURRENTMONTH
我的表包含大量针对个别卖家的重复销售信息,我基本上创建了一个列和一个度量来标记用户他们拥有的 View 是否包含重复的销售信息。 这是我的表格的一个非常简单的例子 SalesManager Sale
这是我正在尝试的查询。 EVALUATE SELECTCOLUMNS('MyTable',"col1",DISTINCT(VALUES('MyTable'[Email]))) 最佳答案 如果您想简单地
我有两个相同的表格视觉效果和一个计算类别百分比的度量。 % = DIVIDE( [m_SalesValue] ,CALCULATE([m_SalesValue], ALLSELECTE
我有这张 table 我想创建度量以获取每天的最后交易值(value)。例如。 DAX查询应如何显示? 最佳答案 您必须创建两个度量。一个用于每个日期的最后一次,另一个用于获取该日期和时间的值。 La
我是一名优秀的程序员,十分优秀!