我为这个含糊不清的问题道歉。我正在与一个数据工程师合作一个项目,我在这个项目上的背景知识有限。
我们正在使用Azure事件中心来流Power中的数据。数据大致遵循此路径,Azure事件中心>流数据流> Dataset > Power 。问题是,在Power (或直接在模型中)中运行的任何DAX查询的性能都很差。
这似乎不是DAX本身的问题。相同的DAX代码与Azure Analysis连接在相同数目的行上运行良好。但是,当它使用事件中心连接运行时,性能会显著下降(~3秒vs >1分钟)。实际上,在不涉及DAX的情况下加载的可视化具有相当好的性能,这使我认为这个问题与DAX交互有关,而不是整个连接。
有没有人在Power中经历过类似的事件中心连接?有办法解决这个连接的DAX性能问题吗?
发布于 2022-05-27 22:43:14
使用以下建议编写优化的DAX表达式和设计报告:
DAX措施
带变量的DAX
SELECTEDVALUE ()与HASONEVALUE ()
一个常见的场景是使用HASONEVALUE()检查在应用切片器和过滤器之后列中是否只有一个值,然后使用值(列名) DAX函数获得单个值。
SELECTEDVALUE ()在内部执行上述两个步骤,如果该列中只有一个不同的值,则获取该值,或者在有多个可用值时返回空白。
DISTINCT () vs VALUES ()
Power为列添加一个空白值,以防它发现引用完整性冲突。对于直接查询,Power默认为列添加一个空白值,因为它没有检查违规的方法。
DISTINCT ():当遇到完整性冲突时,不会返回空白。只有当它在原始数据的一部分时才返回空白。
值():包含空白,因为它是由Power添加的,这是由于引用完整性违规造成的。
在整个报告中,这两项职能的使用应是相同的。如果可能的话,在整个报表中使用value (),这样空白值就不会成为问题。
有效计算比
与变量一起使用(A)/b,而不是(a/b)-1。通常两种情况下的性能是相同的,但是在边缘情况下,当a和b都是空值时,前者将返回空白并过滤掉日期,而后者将返回-1并增加查询空间。
避免IFERROR ()和ISERROR ()
IFERROR ()和ISERROR ()有时用于度量。这些函数迫使引擎一步一步地执行行,以检查错误。因此,只要有可能,就用内置的函数来代替错误检查.
例如: DIVIDE ()和SELECTEDVALUE ()在内部执行错误检查并返回预期的结果。
有关更多信息,您可以参考Power BI性能调优工作流。
https://stackoverflow.com/questions/72405643
复制