快速提示:在单次幂查询函数中将十六进制,十进制和二进制转换为十进制

强大的查询功能,可将HEX,OCT和BIN值转换为DEC

前一段时间我写了一篇关于如何使用的博客文章 Power BI中的Unicode字符。在该博文中,我使用了递归Power Query函数将十六进制值转换为Dec值。几周前,我的一位访问者好心地分享了 他的Power Query函数的非递归版本 做得很好。大声喊着 罗科·卢波(Rocco Lupoi) 共享他的代码。因此,我决定与所有人共享它,以便更多的人可以利用他出色的Power Query功能。虽然我已经触及了他的代码,但这只是表面上的变化,因此本博文的所有功劳归Rocco所有。他的代码的好处不仅限于非递归。 下面的代码在基数小于16时(例如Binary和Oct)转换任何基数的数字,因此它是 仅限于 十六进制 价值观 只要。以下代码的另一个好处是它不区分大小写(请注意 digits 踩下面的代码)。

这里是 fnHex2Dec 电源查询功能:

(input as text, optional base as number) as number =>
let
        价值观 = [
                0=0,
                1=1,
                2=2,
                3=3,
                4=4,
                5=5,
                6=6,
                7=7,
                8=8,
                9=9,
                A=10,
                B=11,
                C=12,
                D=13,
                E=14,
                F=15
        ],
        digits = Text.ToList(Text.Upper(input)),
        dim = List.Count(digits)-1,
        exp = if base=null then 16 else base,
        Result = List.Sum(
                        List.Transform(
                                {0..dim}
                                , 每 Record.Field(values, digits{_}) * Number.Power(exp, dim - _)
                                )
                        )
in
        Result

As you see in the code above, the base parameter is optional, so if 不 provided base 16 would be the default.

这就是我们可以调用上面的函数的方式:

fnHex2Dec("AbCdEf", null)
调用fnHex2Dec函数将任意基数转换为十进制
继续阅读 “快速提示:在单次幂查询函数中将十六进制,十进制和二进制转换为十进制”

快速提示: 时间 Dimension with 时间 Bands at Seconds Granularity in Power BI 和 SSAS表格

时间 Dimension with 时间 Bands at Seconds Granularity in Power BI 和 SSAS表格

过去我也写过其他有关此主题的文章,您可以找到它们 这里 这里。在第一篇文章中,我解释了如何创建“Time”时间带的维度 分钟 粒度。然后,我的一位客户要求“Time”几秒钟内的尺寸,这鼓励了我写第二篇博客文章。在第二篇博文中,虽然我没有’t做时间带,所以我在这里写第三篇文章,这是第二篇文章支持5分钟,15分钟,30分钟,45分钟和60分钟的时间带的变体。“Time”尺寸降至秒。在这篇快速文章中,我直接跳到重点,向您展示如何生成“Time”维度以三种不同的方式,即在SQL Server中使用T-SQL,使用Power Query(M)和DAX。然后是这里:

时间 Dimension at Second Grain with 功率查询 (M) Supporting 时间 Bands:

在查询编辑器中复制/粘贴以下代码’s Advanced Editor to generate 时间 dimension in 功率查询:

let
Source = Table.FromList({1..86400}, Splitter.SplitByNothing()),
    #"Renamed Columns" = Table.RenameColumns(Source,{{"Column1", "ID"}}),
    #"时间 Column Added" = Table.AddColumn(#"Renamed Columns", "时间", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0,0,0,[ID]))),
    #"Hour Added" = Table.AddColumn(#"时间 Column Added", "Hour", 每 时间.Hour([Time])),
    #"Minute Added" = Table.AddColumn(#"Hour Added", "Minute", 每 时间.Minute([Time])),
    #"5 Min Band Added" = Table.AddColumn(#"Minute Added", "5 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/5) * 5, 0))  +  #duration(0, 0, 5, 0)),
    #"15 Min Band Added" = Table.AddColumn(#"5 Min Band Added", "15 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/15) * 15, 0))  +  #duration(0, 0, 15, 0)),
    #"30 Min Band Added" = Table.AddColumn(#"15 Min Band Added", "30 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/30) * 30, 0))  +  #duration(0, 0, 30, 0)),
    #"45 Min Band Added" = Table.AddColumn(#"30 Min Band Added", "45 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/45) * 45, 0))  +  #duration(0, 0, 45, 0)),
    #"60 Min Band Added" = Table.AddColumn(#"45 Min Band Added", "60 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/60) * 60, 0))  +  #duration(0, 0, 60, 0)),
    #"Removed Other Columns" = Table.SelectColumns(#"60 Min Band Added",{"时间", "Hour", "Minute", "5 Min Band", "15 Min Band", "30 Min Band", "45 Min Band", "60 Min Band"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"时间", type time}, {"Hour", Int64.Type}, {"Minute", Int64.Type}, {"5 Min Band", type time}, {"15 Min Band", type time}, {"30 Min Band", type time}, {"45 Min Band", type time}, {"60 Min Band", type time}})
in
#"Changed Type"
继续阅读 “Quick Tips: 时间 Dimension with 时间 Bands at Seconds Granularity in Power BI 和 SSAS表格”

快速提示:根据Power Query中的其他值有条件地替换值

功率查询(M)使许多数据转换活动变得更加容易,而价值替换就是其中之一。您可以轻松地右键单击Excel或Power BI中的Power Query中的任何所需值,或者通常是Power Platform的其他组件,然后只需用任何所需的替代项替换该值即可。首先,根据某些条件替换值似乎并不那么容易。一世’我们已经看到许多Power Query(M)开发人员添加了新列来完成该任务。但是,添加新列并不总是一个好主意,尤其是当您可以在Power Query中仅一步之遥就可以做到这一点时。在本文中,我向您展示了一种快速简便的方法,可以帮助您处理许多不同的价值替换方案。

假设您有一个如下表,并且如果[A] = [B],则需要用[C]列的值替换[B]列的值。

Power BI中的样本数据

一种方法是使用以下逻辑添加新的条件列:

if [B] = [A] then [C] else [B]

好吧,它工作得很好,但是等等,你’重新添加一个新列吧?不会’最好在不添加新列的情况下处理上述简单情况?如果您的回答是,请继续阅读。

继续阅读 “快速提示:根据Power Query中的其他值有条件地替换值”

快速提示:如何从Power Query中的其他查询中按另一列过滤一列

从Power Query中的不同查询中按列过滤列

不久前,我拜访了一个客户,询问他们是否可以按Power BI中另一个查询的列来过滤查询数据。我当然可以。在这篇文章中,我解释了如何在Power Query中实现。关键是要知道如何引用查询以及如何在Power Query中引用该查询的列。当您有一个可从Power Query中每个受支持的数据源中获取的查找表,并且想要按查找查询中的相关列过滤另一个查询的结果时,这很有用。那样的话’会有一种动态过滤。因此,每当您刷新了模型(如果新记录已更改或添加到查找查询的源中)时,表将在Power Query的过滤步骤中自动包括新值。

引用查询

这很简单,您只需要使用查询的名称。如果查询名称包含特殊字符(例如空格),则需要用数字符号和双引号将其引起来,例如 #”QUERY_NAME”。因此,如果要引用另一个查询,请在一个新的空白查询中使用Power Query(M)脚本,如下所示:

let
    Source = Product
in
    Source

或类似的东西

let
    Source = #"Product Category"
in
    Source

引用列

引用列也很简单。当您引用一列时,您需要在前面提到引用查询名称以及括号中的列名称。因此,格式将如下所示:”QUERY_NAME”[COLUMN_NAME]。结果是该特定列的值的列表。

let
    Source = #"Product Category"[Product Category Name]
in
    Source
在Power Query中引用另一个查询中的列
继续阅读 “快速提示:如何从Power Query中的其他查询中按另一列过滤一列”