在Power 双 中使用SWITCH()和ISINSCOPE()DAX函数突出显示每个层次结构平均销售额以下

在Power 双 中使用SWITCH()和ISINSCOPE()DAX函数突出显示每个层次结构平均销售额以下

不久前,我在一个项目上工作,客户对柱形图有条件格式要求。
他们希望根据基于您所处的层次结构的平均值,有条件地对图表中的列设置格式。
在这种情况下,我的日历层次结构如下:

  • 日历层次结构:
    • 学期
    • 25美分硬币

我用“Adventure Works DW2017,互联网销售”Excel作为Power 双 Desktop中的源。如果我想形象化“Total Sales” over the above “Calendar Hierarchy”我得到这样的东西:

Line Chart in Power 双 , 总销售额 by 年

现在我激活“Average Line” from “Analytics”折线图标签。

Adding 平均线 to Line Chart in Power 双

当我在折线图中向下钻取时,“平均”线显示了我所在的特定层次结构级别的平均值。这很酷,我可以根据我所获得的级别获得平均值’m in code free.

Power 双 ,折线图中的钻井

容易吧?

现在,要求是在一个“柱形图”(是的!用柱形图可视化时间序列,’则是客户的期望值),然后用橙色突出显示值低于平均值的列,其余的保留为默认主题颜色。

因此,我需要创建度量以有条件地格式化柱形图。我还需要在以下方面增加一些智能:

  • 检测我所在的层次结构级别
  • 计算该特定层次结构级别的平均销售额
  • 更改低于平均值的列的颜色

让’s get it done!

使用ISINSCOPE()DAX函数检测层次结构级别

微软介绍 ISINSCOPE() 达克斯功能 2018年11月版本 的。宣布后不久“Kasper de Jonge” wrote a concise 博客文章 关于它。

因此,我尝试使其尽可能简单。这是工作原理,ISINSCOPE()函数返回“True”当指定的列在层次结构级别中时。如前所述,我们有一个“Calendar Hierarchy”包括以下5个级别:

  • 学期
  • 25美分硬币

因此,要确定我们是否处于上述每个层次结构级别中,我们只需要创建如下的DAX度量即可:

ISINSCOPE年		=	ISINSCOPE('Date'[Year])
ISINSCOPE 学期	=	ISINSCOPE('Date'[Semester])
ISINSCOPE 25美分硬币	=	ISINSCOPE('Date'[Quarter])
ISINSCOPE 月		=	ISINSCOPE('Date'[Month])
ISINSCOPE 天		=	ISINSCOPE('Date'[Day])

现在让’做一个简单的实验。

  • 在画布上放置一个矩阵
  • 放在“Calendar Hierarchy” to “Rows”
  • 采取上述措施“Values”
Detecting 年, 学期, 25美分硬币, 月 and 天 hierarchy levels with ISINSCOPE in Power 双 桌面

如你所见“ISINSCOPE 年” shows “True” for the “Year” level. 让’扩展到下一个级别,并查看其他度量如何工作:

继续阅读 “在Power 双 中使用SWITCH()和ISINSCOPE()DAX函数突出显示每个层次结构平均销售额以下”

使用“IN” Operator in 达克斯

达克斯中的IN运算符

如果您是一名SQL专家,那么我敢打赌,您已经使用过无数次“ IN”运算符。您可能还会在DAX中寻找相同的功能,并且我确定您找到了许多精彩的博客文章,向您展示了如何在DAX中模仿相同的功能。的 10月发行 充满了新的分析功能,例如 分组,装箱和TOPN 过滤。最重要的是,DAX中的“ IN”运算符是本文撰写时尚未记录的一项新功能,或者至少我在互联网上找不到任何功能。在本文中,我将向您展示如何在DAX表达式中使用它。

要求

注1: 您需要安装SSMS2016才能编写本文中提供的DAX查询。或者,您可以使用 达克斯 Studio 。如果出于任何原因您不能使用SSMS 2016或DAX Studio,而仅拥有Power 双 Desktop,请不用担心,我也会在Power 双 Desktop中提供一些示例。

笔记2: 如果您运行早期版本的SQL Server,那绝对没问题。对于AdventureWorksDW2016CTP3,本文没有什么特别之处,您没有从示例数据库的旧版本中获得。但是请记住,SQL Server 2016 Developer Edition现在是免费的,您可以非常轻松地下载它。 看一下这个 如果您有兴趣了解操作方法。

入门

下载最新版本的run之后

  • 从SQL Server“获取数据”
  • 从AdventureWorksDW2016CTP3将“ FactResellerSales”,“ DimProduct”,“ DimProductCategory”,“ DimProductSubCategory”和“ DimDate”加载到Power 双 Desktop模型
  • 通过从以下路径打开“ msmdsrv.port.txt”文件,找到Power 双 Desktop的本地端口:

“%UserProfile%\ AppData \ Local \ Microsoft \ Power 双 桌面 \ AnalysisServicesWorkspaces \ AnalysisServicesWorkspaceXXXXXXXX\数据”

注意: XXXXXXXX后缀是一个随机数。 

  • 打开SSMS 2016并连接到Power 双 Desktop模型作为Analysis Services本地服务器。您是否想了解更多有关如何通过不同软件连接Power 双 Desktop模型的信息?然后 看一下这个.

SSMS连接到模型

  • 打开一个MDX新查询
  • 运行以下DAX查询
EVALUATE
    SUMMARIZE('FactResellerSales'
                , DimDate[CalendarYear]
                , "Total Reseller Sales"
                , SUM('FactResellerSales'[SalesAmount])
                )

结果如下:

在SSMS中编写DAX

现在,我们要过滤“ CalendarYear”,以便查询仅显示2011年和2012年的销售值。在先前版本的Power 双 Desktop,Power Pivot或SSAS表格模型中,我们必须执行的一种常见方案是使用逻辑OR运算符“||如下所示:

EVALUATE
FILTER(SUMMARIZE(FactResellerSales
                    , DimDate[CalendarYear]
                    , "Total Reseller Sales"
                    , sum(FactResellerSales[SalesAmount])
                    ) , DimDate[CalendarYear] = 2011 || DimDate[CalendarYear] = 2012
                    )

从现在开始,我们可以使用DAX中的“ IN”运算符编写上述查询,如下所示:

EVALUATE
    FILTER(
        SUMMARIZE(FactResellerSales
                    , DimDate[CalendarYear]
                    , "Total Reseller Sales"
                    , sum(FactResellerSales[SalesAmount])
                    ) 
            , DimDate[CalendarYear] 
                IN (2011, 2012)
            )

结果如下:

达克斯中的IN运算符

继续阅读 “Using “IN” Operator in 达克斯”