Muistiinpano
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoja.
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoja.
Note
DAX Käyttäjän määrittämät funktiot ovat tällä hetkellä esikatselussa.
DAX Käyttäjän määrittämien funktioiden (UDF) avulla voit pakata DAX logiikkaa ja käyttää sitä uudelleen kuten mitä tahansa muuta DAX funktiota. UDF:t esittelevät uuden FUNCTION avainsanan, valinnaiset parametrit (skalaari, taulukko ja viittaukset) ja tekstintarkistusapuohjelmat , jotka tekevät sisällönluokittelusta turvallisempaa ja selkeämpää. Kun olet määrittänyt UDF:n, voit käyttää sitä mittarissa, lasketussa sarakkeessa, visuaalisessa laskutoimituksessa tai jopa muissa käyttäjän määrittämissä funktioissa. Käyttäjät voivat keskittää liiketoimintasääntöjä, parantaa ylläpidettävyyttä ja kehittää laskelmia turvallisesti ajan myötä. Funktiot ovat ensiluokkaisia malliobjekteja, joita voit luoda ja hallita kyselynäkymässäDAX ja TMDL-näkymässä, ja niitä voi tarkastella MallinhallinnanFunktiot-solmun alla.
Ota käyttöön käyttäjän määrittämät toiminnot
UDF:ien kokeileminen työpöydällä:
- Siirry kohtaan Tiedostoasetukset > ja asetukset > Asetukset.
- Valitse Esikatsele ominaisuuksia ja tarkista DAX käyttäjän määrittämät toiminnot.
- Valitse OK ja käynnistä Power BI Desktop uudelleen .
Määritä ja hallitse käyttäjän määrittämiä toimintoja
Funktioita voidaan määrittää ja hallita useissa paikoissa:
- DAX kyselynäkymä (DQV). Määritä ja muokkaa funktioita DQV:ssä. DQV sisältää myös pikavalikon pikakyselyt (Arvioi, Määritä ja arvioi ja Määritä kaikki tämän mallin funktiot), joiden avulla voit testata ja hallita UDF:iä nopeasti.
- TMDL-näkymä. UDF:iä voidaan myös luoda ja muokata TMDL:ssä. TMDL-näkymä sisältää myös pikavalikon Script TMDL to.
- Mallin tutkimusmatkailija. Aiemmin luotuja funktioita voi tarkastella Mallinhallinnan Funktiot-solmussa .
Kun määrität UDF:ää, noudata näitä nimeämisvaatimuksia:
Toimintojen nimet:
- On oltava hyvin muotoiltu ja ainutlaatuinen mallissa.
- Voi sisältää pisteitä (pisteitä) nimivälille (esim. Microsoft.PowerBI.MyFunc). Ei voi alkaa tai päättyä jaksoon tai olla peräkkäisiä jaksoja.
- Pisteiden lisäksi nimet voivat sisältää vain aakkosnumeerisia merkkejä tai alaviivoja. Välilyöntejä tai erikoismerkkejä ei sallita.
- Ei saa olla ristiriidassa sisäänrakennettujen DAX funktioiden tai varattujen sanojen kanssa (esim. mittaa, funktio, määritellä).
Parametrien nimet:
- Voi sisältää vain aakkosnumeerisia merkkejä tai alaviivoja. Jaksot eivät ole sallittuja.
- Ei saa olla varattu sana.
Kyselynäkymän käyttäminen DAX
Voit määrittää, päivittää ja arvioida käyttäjän määrittämiä funktioita kyselynäkymässä DAX . Lisätietoja kyselynäkymästä DAX on kyselynäkymässäDAX.
Yleinen lomake
DEFINE
/// Optional description above the function
FUNCTION <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>
Vihje
Käytä /// toimintojen kuvauksiin. Yksiriviset (//) tai moniriviset (/* */) kommentit eivät näy IntelliSense-funktioiden kuvauksissa.
Esimerkki: Yksinkertainen verofunktio
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax =
( amount : NUMERIC ) =>
amount * 1.1
EVALUATE
{ AddTax ( 10 ) }
// Returns 11
Tallentaminen malliin
UDF:n tallentaminen kyselynäkymästä DAX malliin:
- Valitse Päivitä malli muutoksilla , jos haluat tallentaa kaikki kyselyn UDF:t.
- Voit myös valita Päivitä malli: Lisää uusi funktio määritetyn funktion yläpuolelle tallentaaksesi yhden UDF:n.
TMDL-näkymän käyttäminen
Voit määrittää ja/tai päivittää käyttäjän määrittämiä toimintoja TMDL-näkymässä. Lisätietoja TMDL-näkymästä on kohdassa TMDL-näkymä.
Yleinen lomake
createOrReplace
/// Optional description above the function
function <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>
Esimerkki: Yksinkertainen verofunktio
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax =
(amount : NUMERIC) =>
amount * 1.1
Tallentaminen malliin
Napsauta näkymän yläreunassa olevaa Käytä-painiketta tallentaaksesi kaikki komentosarjan UDF:t malliin.
TMDL-komentosarjan käyttäminen Power BI -projektissa
UDF:t sisältyvät myös semanttisen mallin TMDL-komentosarjaan, kun käytetään Power BI -projektia. Ne löytyvät functions.tmdlmäärityskansiosta .
Mallinhallinnan käyttäminen
Voit tarkastella kaikkia mallin käyttäjän määrittämiä funktioita Mallinhallinnan Toiminnot-solmun alla. Lisätietoja mallinhallinnasta on kohdassa Mallinhallinta.
KyselynäkymässäDAX voit käyttää Pikakyselyt UDF:n hiiren kakkospainikkeen valikossa Mallinhallinnassa funktioiden määrittämiseen ja arviointiin helposti.
TMDL-näkymässä voit luoda komentosarjoja vetämällä ja pudottamalla funktioita pohjalle tai käyttämällä komentosarjaa TMDL UDF:n hiiren kakkospainikkeella Mallinhallinnassa.
DMV:iden käyttäminen UDF:ien tarkastamiseen
Voit tarkistaa mallisi UDF:t dynaamisten hallintanäkymien (DMV) avulla. Näiden näkymien avulla voit kysellä tietoja funktioista, mukaan lukien UDF:t.
Voit käyttää INFOA. FUNCTIONS-toiminto mallin UDF:ien tarkastamiseksi. Jos haluat rajoittaa tuloksen vain UDF:iin, määritä parametriksi ORIGIN .2
EVALUATE INFO.FUNCTIONS("ORIGIN", "2")
Tämä kysely palauttaa taulukon kaikista mallissa tällä hetkellä olevista UDF:istä, mukaan lukien niiden nimen, kuvauksen ja niihin liittyvät metatiedot.
Käyttäjän määrittämän funktion käyttäminen
Kun UDF on määritetty ja tallennettu malliin, voit kutsua sitä mittareista, lasketuista sarakkeista, visuaalisista laskutoimituksista ja muista UDF:istä. Tämä toimii samalla tavalla kuin sisäisten DAX funktioiden kutsuminen.
UDF:n kutsuminen mittarissa
Käytä UDF:ää mittarissa, jos haluat käyttää uudelleenkäytettävää logiikkaa täydessä suodatinkontekstissa.
Total Sales with Tax = AddTax ( [Total Sales] )
Esimerkkimittari on esitetty alla olevassa taulukossa:
UDF:n kutsuminen lasketussa sarakkeessa
UDF:iä voidaan käyttää lasketussa sarakkeessa uudelleenkäytettävän logiikan soveltamiseen taulukon jokaiseen riviin.
Note
Kun käytät UDF:ää lasketussa sarakkeessa, varmista, että funktio palauttaa yhdenmukaisen skalaarin. Katso lisätietoja kohdasta Parametrit . Muunna tulos tarvittaessa haluttuun tyyppiin käyttämällä CONVERT tai vastaavia funktioita.
Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )
Näemme tämän esimerkkitoimenpiteen alla olevassa taulukossa:
UDF:n kutsuminen visuaalisessa laskutoimituksessa
UDF:ien avulla voit käyttää logiikkaa suoraan visualisoinnissa. Lisätietoja visuaalisista laskutoimituksista on kohdassa Visuaaliset laskutoimitukset.
Note
Visuaaliset laskutoimitukset toimivat vain visualisoinnissa olevissa kentissä. He eivät voi käyttää malliobjekteja, jotka eivät ole osa visualisointia, etkä voi välittää malliobjekteja (kuten sarakkeita tai mittareita, jotka eivät ole visualisoinnissa) UDF:ään tässä yhteydessä.
Sales Amount with Tax = AddTax ( [Sales Amount] )
Näemme tämän esimerkkitoimenpiteen alla olevassa taulukossa:
UDF:n kutsuminen toisessa UDF:ssä
Voit sijoittaa UDF:iä sisäkkäin kutsumalla funktiota toisesta. Tässä esimerkissä määrittelemme yksinkertaisen AddTax UDF:n ja kutsumme sitä toisessa UDF:ssä, AddTaxAndDiscount.
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax =
( amount : NUMERIC ) =>
amount * 1.1
FUNCTION AddTaxAndDiscount =
(
amount : NUMERIC,
discount : NUMERIC
) =>
AddTax ( amount - discount )
EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8
Parametrit
DAX UDF:t voivat hyväksyä nolla tai useampia parametreja. Kun määrität parametreja UDF:lle, voit halutessasi määrittää tyyppivihjeitä kullekin parametrille:
-
Tyyppi: minkä tyyppisen arvon parametri hyväksyy (
AnyVal,Scalar,Table, taiAnyRef). -
Alatyyppi (vain skalaarityyppi): tietty skalaaritietotyyppi (
Variant,Int64, ,DecimalDouble,String,DateTime, ,BooleantaiNumeric). -
ParameterMode: kun argumentti evaluoidaan (
valtaiexpr).
Tyyppivihjeet ovat muodossa: [type] [subtype] [parameterMode]
Voit sisällyttää jokaiseen parametriin kaikki, osan tai ei lainkaan näistä vihjeistä, jotta funktioistasi tulee turvallisempia ja ennustettavampia puhelusivustoissa. Jos jätät kaiken pois ja kirjoitat vain parametrin nimen, se käyttäytyy muodossa AnyVal val, mikä tarkoittaa, että argumentti arvioidaan välittömästi kutsun aikana. Tämä on hyödyllistä yksinkertaisissa toiminnoissa.
Tyyppi
Tyyppi määrittää parametrin hyväksymän argumenttiluokan ja sen, välitetäänkö se arvona vai lausekkeena.
UDF-parametreissa DAX on kaksi tyyppiperhettä: arvotyypit ja lauseketyypit:
-
Arvotyypit: tämä argumentti arvioidaan välittömästi (innokas arviointi), kun funktiota kutsutaan ja tuloksena oleva arvo välitetään funktioon.
-
AnyVal: Hyväksyy skalaarin tai taulukon. Tämä on oletusarvo, jos jätät parametrin tyypin pois. -
Scalar: Hyväksyy skalaariarvon (voi lisäksi lisätä alityypin). -
Table: Hyväksyy taulukon.
-
-
Lauseketyypit: tämä argumentti välittää arvioimattoman lausekkeen (laiska arviointi). Funktio päättää, milloin ja missä yhteydessä se arvioidaan. Tämä on tarpeen viiteparametreille ja hyödyllinen, kun haluat hallita suodatinkontekstia (esim. CALCULATE).
exprTyypit voivat olla viittauksia sarakkeeseen, taulukkoon, kalenteriin tai mittariin.-
AnyRef: Hyväksyy viittauksen (sarakkeen, taulukon, kalenterin tai mittarin).
-
Alatyyppi
Alityypin avulla voit määrittää tietyn Scalar tietotyypin. Jos määrität alityypin, sinun ei tarvitse määritellä parametria Scalar eksplisiittisesti tyypiksi, tämä oletetaan automaattisesti.
Alatyypit ovat:
-
Variant: Hyväksyy minkä tahansa skalaarin. -
Int64: Hyväksyy kokonaisen numeron. -
Decimal: Hyväksyy kiinteän tarkkuuden desimaaliluvun (kuten Valuutta tai Raha). -
Double: Hyväksyy liukuluvun desimaalimäärän. -
String: Hyväksyy tekstin. -
DateTime: Hyväksyy päivämäärän ja kellonajan. -
Boolean: Hyväksyy TRUE/FALSE. -
Numeric: Hyväksyy kaikki numeeriset arvot (Int64,DecimaltaiDoublealatyypit)
Parametrin tila
ParameterMode määrittää, milloin ja missä parametrilauseke arvioidaan. Ne ovat seuraavat:
-
val(innokas arviointi): Lauseke evaluoidaan kerran ennen funktion käynnistämistä. Tuloksena oleva arvo välitetään sitten funktioon. Tämä on yleistä yksinkertaisille skalaari- tai taulukkosyötteille. Tämä on oletusarvo, jos jätät parametrin parametrin pois. -
expr(laiska arviointi): Lauseke arvioidaan funktion sisällä, mahdollisesti eri kontekstissa (esim. rivikontekstissa tai suodatinkontekstissa) ja mahdollisesti useita kertoja, jos siihen viitataan useita kertoja tai iteraatioiden sisällä. Tämä on tarpeen viiteparametreille ja hyödyllinen, kun haluat hallita arviointikontekstia.
Tyyppi Scalar voi käyttää joko val tai expr. Käytä tätä val , kun haluat, että skalaari arvioidaan kerran kutsujan kontekstissa. Käytä tätä expr , kun haluat lykätä arviointia ja mahdollisesti käyttää kontekstia funktion sisällä. Katso esimerkki: Taulukkoparametri esimerkkinä.
Tyypin AnyRef on oltava expr sellainen, että sen viittaukset (sarakkeet, taulukot, mittarit jne.) on arvioitava funktion kontekstissa.
Esimerkki: Tyyppi Casting
DEFINE
/// returns x cast to an Int64
FUNCTION CastToInt = (
x : SCALAR INT64 VAL
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
Tämä käyttää tyyppiä, Scalar alatyyppiä Int64 ja val parametritilaa, joka mahdollistaa ennustettavan pyöristyksen ja tekstin pakottamisen numeroksi sekä varmistaa, että kaikki lausekkeet arvioidaan innokkaasti. Voit saavuttaa tämän myös sisällyttämällä Int64 alatyypin alla olevan esimerkin mukaisesti. Ei-numeeriset merkkijonot aiheuttavat virheen.
DEFINE
/// returns x as an Int64
FUNCTION CastToInt = (
x : INT64
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
Esimerkki: Taulukkoparametri (arvo vs. lauseke)
Jos haluat havainnollistaa, miten UDF-parametriMode vaikuttaa suodatuskontekstiin, tarkastele kahta funktiota, jotka molemmat laskevat Sales-taulukon rivejä. Molemmat käyttävät CALCULATETABLE(t, ALL('Date')) kehossaan, mutta toinen parametri ilmoitetaan ( val innokas arviointi) ja toinen expr (laiska arviointi):
DEFINE
/// Table val: receives a materialized table, context can't be changed
FUNCTION CountRowsNow = (
t : TABLE VAL
) =>
COUNTROWS ( CALCULATETABLE ( t, ALL ( 'Date' ) ) )
/// Table expr: receives an unevaluated expression, context CAN be changed
FUNCTION CountRowsLater = (
t : TABLE EXPR
) =>
COUNTROWS ( CALCULATETABLE ( t, ALL ( 'Date' ) ) )
EVALUATE
{
CALCULATE ( CountRowsNow ( 'Sales' ), 'Date'[Fiscal Year] = "FY2020" ),
CALCULATE ( CountRowsLater ( 'Sales' ), 'Date'[Fiscal Year] = "FY2020" )
}
// returns 84285, 121253
CountRowsNow palauttaa vain tilikauden 2020 myynnin määrän. Myynti-taulukko on suodatettu jo vuoden mukaan ennen funktioon siirtymistä, joten ALL('Date') funktion sisällä ei ole vaikutusta.
CountRowsLater palauttaa kaikkien vuosien myyntimäärän. Funktio vastaanottaa arvioimattoman taulukon lausekkeen ja arvioi sen kohdassa ALL('Date'), poistaen ulkoisen vuosisuodattimen.
Tyypin tarkistus
UDF:ien tyyppitarkistus voidaan tehdä uusilla ja olemassa olevilla tyypintarkistusfunktioilla, joita voit kutsua funktion rungossa vahvistaaksesi välitettyjen parametrien suorituksenaikaisen tyypin. Tämän avulla UDF:t voivat käyttää kontekstinhallintaa, vahvistaa parametreja etukäteen ja normalisoida syötteet ennen laskentaa.
Note
ParameterMode-parametrien expr tyyppitarkistukset tapahtuvat, kun parametriin viitataan funktion tekstissä (ei funktion kutsun aikana).
Käytettävissä olevat tyypin tarkistustoiminnot
UDF:t voivat käyttää seuraavia funktioita skalaariarvojen testaamiseen. Kukin palautus TRUE/FALSE riippuu siitä, onko annettu arvo kyseistä tyyppiä.
| Luokka | Funktiot |
|---|---|
| Numeerinen | NUMEERINEN, ISNUMBER |
| Kaksinkertainen | KAKSINKERTAINEN |
| Kokonaisluku | ISINT64, ISINTEGER |
| Desimaaliluku | ISDECIMAL, VALUUTTA |
| Merkkijono | MERKKIJONO, ISTEXT |
| totuusarvo | ISBOOLEAN, ISLOGICAL |
| Päivämäärä ja aika | ISDATETIME |
Esimerkki: Tarkista, onko parametri merkkijono
DEFINE
/// Returns the length of a string, or BLANK if not a string
FUNCTION StringLength = (
s
) =>
IF ( ISSTRING ( s ), LEN ( s ), BLANK () )
EVALUATE
{ StringLength ( "hello" ), StringLength ( 123 ) }
// Returns: 5, BLANK
Tämä estää virheet ja antaa sinun päättää, miten funktioon käsitellään ei-merkkijonosyötettä (tässä esimerkissä palauttaa BLANK).
Esimerkki: Hyväksy useita parametrityyppejä
DEFINE
/// Helper 1: get currency name by int64 key
FUNCTION GetCurrencyNameByKey = (
k : INT64
) =>
LOOKUPVALUE ( 'Currency'[Currency], 'Currency'[CurrencyKey], k )
/// Helper 2: get currency name by string code
FUNCTION GetCurrencyNameByCode = (
code : STRING
) =>
LOOKUPVALUE ( 'Currency'[Currency], 'Currency'[Code], code )
/// Accepts key (int64) or code (string) and returns the currency name
FUNCTION GetCurrencyName = (
currency
) =>
IF (
ISINT64 ( currency ),
GetCurrencyNameByKey ( currency ),
GetCurrencyNameByCode ( currency )
)
EVALUATE
{ GetCurrencyName ( 36 ), GetCurrencyName ( "USD" ) }
// returns "Euro", "US Dollar"
Tässä esimerkissä näytetään, miten voit käyttää UDF:ien tyypin tarkistusta useiden syötetyyppien turvalliseen hyväksymiseen ja yhden ennustettavan tuloksen palauttamiseen.
GetCurrencyName ottaa yhden argumentin currency, joka voi olla joko kokonaislukuinen valuutta-avain tai tekstin valuuttakoodi. Funktio tarkistaa argumentin tyypin komennolla ISINT64. Jos syöte on kokonaisluku, se kutsuu auttajaa GetCurrencyNameByKey , joka etsii valuutan nimen valuutta-avaimen perusteella. Jos syöte ei ole kokonaisluku, se kutsuu apua GetCurrencyNameByCode , joka etsii valuutan nimen valuuttakoodin perusteella.
Määritä useita funktioita kerralla
UDF:ien avulla voit määrittää useita funktioita yhdessä kyselyssä tai komentosarjassa, mikä helpottaa uudelleenkäytettävän logiikan järjestämistä. Tämä on erityisen hyödyllistä, kun haluat kapseloida toisiinsa liittyviä laskutoimituksia tai apurutiineja yhteen. Funktioita voidaan arvioida yhdessä tai yksittäin.
DEFINE
/// Multiplies two numbers
FUNCTION Multiply = (
a,
b
) =>
a * b
/// Adds two numbers and 1
FUNCTION AddOne = (
x,
y
) =>
x + y + 1
/// Returns a random integer between 10 and 100
FUNCTION RandomInt = () =>
RANDBETWEEN ( 10, 100 )
EVALUATE
{ Multiply ( 3, 5 ), AddOne ( 1, 2 ), RandomInt () }
// returns 15, 4, 98
Edistynyt esimerkki: Joustava valuuttamuunnos
Osoittaaksemme, miten DAX UDF:t pystyvät käsittelemään monimutkaisempaa logiikkaa, tarkastelemme valuuttamuunnosskenaariota. Tässä esimerkissä käytetään tyypin tarkistusta ja sisäkkäisiä funktioita tietyn summan muuntamiseen kohdevaluutaksi käyttämällä joko tietyn päivämäärän keskimääräistä tai päivän lopun vaihtokurssia.
createOrReplace
function ConvertDateToDateKey =
(
pDate: scalar variant
) =>
YEAR ( pDate ) * 10000 + MONTH ( pDate ) * 100 + DAY ( pDate )
function ConvertToCurrency =
(
pCurrency:scalar variant,
pDate: scalar variant,
pUseAverageRate: scalar boolean,
pAmount: scalar decimal
) =>
var CurrencyKey =
EVALUATEANDLOG (
IF (
ISINT64 ( pCurrency ),
pCurrency,
CALCULATE (
MAX ( 'Currency'[CurrencyKey] ),
'Currency'[Code] == pCurrency
)
)
, "CurrencyKey"
)
var DateKey =
EVALUATEANDLOG (
SWITCH (
TRUE,
ISINT64 ( pDate ), pDate,
ConvertDateToDateKey ( pDate )
)
, "DateKey"
)
var ExchangeRate =
EVALUATEANDLOG (
IF (
pUseAverageRate,
CALCULATE (
MAX ( 'Currency Rate'[Average Rate] ),
'Currency Rate'[DateKey] == DateKey,
'Currency Rate'[CurrencyKey] == CurrencyKey
),
CALCULATE (
MAX ( 'Currency Rate'[End Of Day Rate] ),
'Currency Rate'[DateKey] == DateKey,
'Currency Rate'[CurrencyKey] == CurrencyKey
)
)
, "ExchangeRate"
)
var Result =
IF (
ISBLANK ( pCurrency ) || ISBLANK ( pDate ) || ISBLANK ( pAmount ),
BLANK (),
IF (
ISBLANK ( ExchangeRate ) ,
"no exchange rate available",
ExchangeRate * pAmount
)
)
RETURN Result
Toiminto ConvertToCurrency hyväksyy joustavat syöttötyypit sekä valuutalle että päivämäärälle. Käyttäjät voivat antaa joko valuutta-avaimen tai päivämääräavaimen suoraan tai antaa valuuttakoodin tai vakiopäivämääräarvon. Funktio tarkistaa kunkin syötteen tyypin ja käsittelee sitä sen mukaisesti: jos pCurrency se on kokonaisluku, sitä käsitellään valuutta-avaimena, muussa tapauksessa funktio olettaa valuuttakoodin ja yrittää selvittää vastaavan avaimen.
pDate noudattaa samanlaista kaavaa, jos se on kokonaisluku, sitä käsitellään päivämääräavaimena; Muussa tapauksessa funktio olettaa, että se on vakiopäivämääräarvo ja muunnetaan päivämääränäppäimeksi apufunktiolla ConvertDateToDateKey . Jos funktio ei pysty määrittämään kelvollista vaihtokurssia, se palauttaa viestin "vaihtokurssia ei ole saatavilla".
Tämän logiikan avulla voidaan sitten määrittää mittari, kuten Kokonaismyynti paikallisessa valuutassa.
Total Sales in Local Currency =
ConvertToCurrency (
SELECTEDVALUE ( 'Currency'[Code] ),
SELECTEDVALUE ( 'Date'[DateKey] ),
TRUE,
[Total Sales]
)
Tämä voidaan valinnaisesti yhdistää dynaamisen muotoilun merkkijonoon , jotta tulos näytetään sopivassa valuuttamuodossa.
CALCULATE (
MAX ( 'Currency'[Format String] ),
'Currency'[Code] == SELECTEDVALUE ( 'Currency'[Code] )
)
Esimerkkitulos näkyy alla olevassa kuvakaappauksessa.
Huomioitavat asiat ja rajoitukset
Käyttäjän määrittämät funktiot ovat tällä hetkellä esikatselussa, ja esikatselun aikana ota huomioon seuraavat seikat ja rajoitukset:
Yleiset:
- UDF:iä ei voi luoda tai mallintaa DAX palvelussa.
- UDF:ää ei voi piilottaa/tuoda näkyviin mallissa.
- UDF-tiedostoja ei voi sijoittaa näyttökansioihin.
- Nauhassa ei ole "luo toiminto" -painiketta.
- UDF:iä ei voi yhdistää käännöksiin.
- UDF:iä ei tueta malleissa, joissa ei ole taulukoita.
UDF:n määrittäminen:
- Rekursiota tai molemminpuolista rekursiota ei tueta.
- Toimintojen ylikuormitusta ei tueta.
- Eksplisiittisiä palautustyyppejä ei tueta.
UDF-parametrit:
- Valinnaisia parametreja ei tueta.
- Parametrien kuvauksia ei tueta.
- UDF:t eivät voi palauttaa arvoa
enum. Valmiit funktiot, jotka hyväksyvätenumarvoja funktioparametreikseen, eivät voi käyttää UDF:iä tässä kontekstissa. - Vihje-tyyppisiä
exprsitomattomia parametreja ei arvioida.
IntelliSense-tuki:
- Vaikka UDF-tiedostoja voidaan käyttää reaaliaikaisissa yhteys- tai yhdistelmämalleissa, IntelliSense-tukea ei ole.
- Vaikka UDF:iä voidaan käyttää visuaalisissa laskutoimituksissa, visuaalisten laskutoimitusten kaavarivillä ei ole IntelliSense-tukea UDF:ille.
- TMDL-näkymässä ei ole asianmukaista IntelliSense-tukea UDF:ille.
Tunnetut virheet
Seuraavat ongelmat ovat tällä hetkellä tiedossa ja voivat vaikuttaa toiminnallisuuteen:
- Viittauksia taulukkomalliobjektiin (esim. mittari, taulukko, sarake) UDF:ssä ei päivitetä automaattisesti, kun kyseiset objektit nimetään uudelleen. Jos nimeät uudelleen objektin, josta UDF on riippuvainen, funktion runko sisältää edelleen vanhan nimen. Sinun on muokattava UDF-lauseketta manuaalisesti, jotta kaikki viittaukset uudelleennimettyyn objektiin päivittyvät.
- Tietyt edistyneet skenaariot, joissa käytetään UDF:iä, voivat johtaa jäsentimen epäjohdonmukaisuuksiin. Käyttäjät voivat esimerkiksi nähdä punaisia alleviivauksia tai vahvistusvirheitä, kun he välittävät sarakkeita
exprparametreina tai käyttävät hyväksymättömiä sarakeviittauksia.