日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别

發(fā)布時(shí)間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

許多剛開始使用DAX的小伙伴在使用LASTDATE搜索某個(gè)時(shí)間段內(nèi)的最后日期。或者他們使用NEXTDAY檢索給定日期之后的日期。盡管這些函數(shù)可以實(shí)現(xiàn)它們所承諾的功能,但它們并不打算在簡(jiǎn)單的表達(dá)式中使用。相反,它們是設(shè)計(jì)用于時(shí)間智能計(jì)算的表函數(shù)。錯(cuò)誤地使用它們會(huì)導(dǎo)致代碼效率低下。此外,以未設(shè)計(jì)的方式使用這些功能是一個(gè)明顯的信號(hào),表明開發(fā)人員仍未掌握DAX的某些細(xì)節(jié)。

在本文中,我們將詳細(xì)介紹該主題,以便了解這些時(shí)間智能功能的作用。我們還想了解在日期上將它們與簡(jiǎn)單的數(shù)學(xué)混淆如此容易的原因。我們想通過例子來詳細(xì)闡述這個(gè)話題。因此,我們從無聊的理論開始,而不是從一個(gè)計(jì)算開始,盡管這種計(jì)算工作得很好,但它本質(zhì)上是錯(cuò)誤的。

計(jì)算給定選擇中包含的天數(shù),并生成如下所示的報(bào)告。

計(jì)算DaysInPeriod很簡(jiǎn)單:天數(shù)是時(shí)間段中第一個(gè)日期和最后一個(gè)日期之間的差。DAX提供了兩個(gè)功能:FIRSTDATE和LASTDATE,這似乎是完美的候選者:

Days in period :=INT ( LASTDATE ( 'Date'[Date] ) - FIRSTDATE ( 'Date'[Date] ) )

這項(xiàng)措施可以正常工作并產(chǎn)生正確的結(jié)果。因此,我們很高興!對(duì)?錯(cuò)誤。我們不滿意,因?yàn)槲覀兪褂肔ASTDATE來檢索一個(gè)時(shí)間段內(nèi)最后一個(gè)可見日期的值。LASTDATE完全執(zhí)行此作業(yè),但它返回一個(gè)包含最后日期的表-不僅是日期。讓我重復(fù)一遍:它不返回日期。它返回一個(gè)包含日期的表。

這樣做的原因是LASTDATE是時(shí)間智能功能。其主要目的是用作CALCULATE中的過濾器參數(shù)。CALCULATE過濾器參數(shù)是表。因此,要使函數(shù)在以下度量中使用,它需要返回一個(gè)表:

SalesOfLastDay =CALCULATE ( [Sales Amount], LASTDATE ( 'Date'[Date] ))

您可以使用DAX Studio 再次檢查L(zhǎng)ASTDATE的結(jié)果。LASTDATE返回一個(gè)表。這就是為什么您可以在EVALUATE語句中使用它的原因,該語句需要一個(gè)表作為結(jié)果。

如您所見,結(jié)果是一個(gè)表,其中包含一列(Date)和最后一個(gè)日期的值。

在DAX中,可以使用僅包含一行和一列的表(即您從LASTDATE獲得的結(jié)果)代替內(nèi)部的值。實(shí)際上,單行一列的表僅包含一個(gè)值。這就是DAX允許您將表自動(dòng)轉(zhuǎn)換為值的原因。這也是您可以在我們的度量中減去兩個(gè)表的原因:

Days in period :=INT ( LASTDATE ( 'Date'[Date] ) - FIRSTDATE ( 'Date'[Date] ) )

實(shí)際上,LASTDATE和FIRSTDATE都返回表。因?yàn)槲覀兪褂玫氖菧p法運(yùn)算符,所以DAX會(huì)將兩個(gè)表轉(zhuǎn)換為標(biāo)量值,然后計(jì)算表內(nèi)包含的值之間的差。

盡管此行為是透明的,但它是有代價(jià)的。表示先前計(jì)算的一種更好的方法是使用標(biāo)量函數(shù),例如MIN而不是FIRSTDATE和MAX而不是LASTDATE。MIN和MAX不返回表:它們返回第一個(gè)和最后一個(gè)日期的值。因此,以下是對(duì)措施的更好表述:

Days in period MIN MAX :=INT ( MAX ( 'Date'[Date] ) - MIN ( 'Date'[Date] ) )

同樣,您可以使用DAX Studio 再次檢查MIN和MAX的結(jié)果。如果您嘗試使用MAX而不是LASTDATE作為EVALUATE語句的結(jié)果,則會(huì)出現(xiàn)錯(cuò)誤。

為了獲得EVALUATE的結(jié)果,您需要構(gòu)建一個(gè)包含最大日期的表。例如,您可以使用表構(gòu)造函數(shù)執(zhí)行此操作。

如前所述,DAX自動(dòng)將具有一行和一列的表轉(zhuǎn)換為值。但是這種行為是有代價(jià)的。此外,LASTDATE和FIRSTDATE都在查找第一個(gè)和最后一個(gè)日期之前執(zhí)行上下文轉(zhuǎn)換。此行為不會(huì)影響我們的簡(jiǎn)單示例,但是僅由于此方面,在更復(fù)雜的情況下性能可能會(huì)很差。

本文是DAX 101;因此,它應(yīng)該在這里結(jié)束。但是,當(dāng)然,我們不禁為您中最好奇的人提供更多詳細(xì)信息。您如何檢查公式的兩個(gè)版本之間的行為差異?

通過使用DAX Studio,您可以分析此查詢的服務(wù)器時(shí)間:

---- This version uses FIRSTDATE and LASTDATE--EVALUATESUMMARIZECOLUMNS ( 'Date'[Year Month], "Daysin period", [Days in period])

盡管速度非常快,但是可以從服務(wù)器計(jì)時(shí)中看到引擎必須兩次實(shí)現(xiàn)Date表:一次用于Date [Date]列,一次用于兩列Date [Date]和Date [Calendar Year Month],生成兩個(gè)具有2,556行的數(shù)據(jù)緩存。公式引擎(FE)隨后掃描這些數(shù)據(jù)緩存以計(jì)算所需的結(jié)果。

通過這種簡(jiǎn)單的計(jì)算,當(dāng)查詢使用優(yōu)化版本MIN MAX內(nèi)的天數(shù)?時(shí),查詢不會(huì)更快。仍然,在實(shí)現(xiàn)方面要好得多,因?yàn)閷⒄麄€(gè)計(jì)算下推到存儲(chǔ)引擎(SE),該引擎將生成具有87行的單個(gè)數(shù)據(jù)緩存:與查詢結(jié)果相同的行數(shù)。因此,期間MIN MAX中的天數(shù)將通過SE執(zhí)行的完整計(jì)算產(chǎn)生最佳實(shí)現(xiàn)。在較大的模型或更復(fù)雜的場(chǎng)景中,實(shí)現(xiàn)上的這種微小差異可能會(huì)產(chǎn)生巨大的影響。

請(qǐng)注意,大多數(shù)時(shí)間智能功能(例如FIRSTDATE,LASTDATE,NEXTDAY,PREVIOUSDAY …)都顯示相同的行為:它們返回一個(gè)可以自動(dòng)轉(zhuǎn)換為標(biāo)量值的表。但是轉(zhuǎn)換的代價(jià)是不值得付出的。

了解函數(shù)的一些本質(zhì)也是變相的改善報(bào)告的性能,就也是為什么我在之前的文章中一再強(qiáng)調(diào)某些函數(shù)是如何運(yùn)算,可能很多小伙伴只注重結(jié)果正確而忽略了一些細(xì)節(jié)。

總結(jié)

以上是生活随笔為你收集整理的中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。