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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值

發布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章寫起來真的也挺麻煩的。堅持堅持!加油加油!

本次分享的需求描述如下:

在Power BI中創建一個頁面,頁面顯示一個Table和兩個Slicer。其中Slicer的內容也列在Table里。Table里需要一個計算值,這個計算值要求對Table中的一個非Slicer里的字段做匯總計算。

轉換成顯示頁面如圖所示。

熟悉的Product數據表。

兩個Slicer分別是Brand和Color。同時Brand和Color還顯示在Table里面。計算的數值內容是統計不同的Manufacturer生產多少種Product,即針對且只針對Manufacturer做分組(group by)計算Product。當選擇不同的Brand和Color時,數值也要根據實際顯示的Product再計算對Manufacturer做匯總。

DAX分享9效果圖https://www.zhihu.com/video/1110165158554456064

其實這種需求還是很常見的。不知道大家有沒有什么好的方法。目前來說我覺得最簡單的方法就是定義變量了。先把最簡單的方法說一下,然后再把如果不用變量會遇到的問題分享一下。

var test =

VAR manu = MAX('Product'[Manufacturer])

RETURN

COUNTROWS(

FILTER(ALLSELECTED('Product'),'Product'[Manufacturer] <= manu))

就這么定義一下就ok了。so easy!

下面我們聊一聊如果不用變量可能出現的問題。

不考慮變量的話,首先對于針對其中一個字段做group by分組計算的話,這樣改寫filter context的行為,我們首先可以想到的是用CALCULATE函數。因為只針對Manufacturer,所以想到用ALLEXCEPT函數可以得到如下數據值列:

count per manufacturer = CALCULATE(COUNT('Product'[Product Name]),ALLEXCEPT('Product','Product'[Manufacturer]) )

er,這樣做當然是不全面的。因為兩個在Table里但是也顯示在Slicer字段,如果選擇了不同的Slicer數據時,count per manufacturer數據值是不會發生變化的。

比如,選擇了Color的Azure,在Table里面顯示了14條Product Name的的數據,并且都是在一個Manufacturer下面,所以,數據字段我期望的顯示應該是14而不是132.

這個count per manufacturer就像是Manufacturer的屬性一樣了,第一次計算好了之后,就不會變化了。現在我們開始考慮怎么在數據表里面接受外來filter的影響。首先想到的函數是ALLSELECTED()。但是,ALLEXCEPT函數是不能內嵌ALLSELECTED函數的。ALLSELECTED可以考慮到外部的篩選,但是如何做group by分組計算呢?此路不通。然后我想到了萬能的CALCULATE+FILTER,FILTER里面可以有ALLSELECTED函數,但是后面的參數這么實現動態的Manufacturer的抓取呢?

如果看過我之前分享的HASONEVALUE的同學,會不會想到用這個HASONEVALUE呢?我通過HASONEVALUE去抓取Slicer是否被選擇,然后再分情況計算,就像之前DAX分享8里面的做法那樣呢?嘿嘿,挺不錯的吖~~不過,也不對。這里重點說一下!HASONEVALUE或者HASONEFILTER說,如果數據字段被篩選了,就是TRUE,沒有被篩選就是FALSE。什么要被篩選了呢?在Slicer里面選擇算是,在Table里面作為字段也算是~~~也就是說,對于這里的Brand和Color,HASONEVALUE的返回值永遠都是TRUE。是不是很酸爽很好玩。

er,如果按照SQL邏輯來說,我比較期望,讓我的查詢結果,先和Brand,Color做關聯,然后再去計算group by的分組計算。想法是好的,但在實現的時候,報表其實做的是一個over partition的開窗計算,先計算好結果,然后又成為了一個屬性。

好吧,現在你明白了吧。有的時候,比如動態查詢的時候,就是非變量不行的時候了。記住!敲黑板!針對動態的filter context的時候,首選變量表達式。so easy!

歡迎關注DAX Share!

總結

以上是生活随笔為你收集整理的dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。