Reporting Services und Nav-Datentyp DateFormula

18. Januar 2008 21:38

Ich test derzeit die Verwendung der SSRS (SQL Server Reporting Services).

Dabei habe ich festgestellt, das "DateFormula"-Felder nicht korrekt angezeigt werden.
Beispielsweise wird aus '30T' in den Reporting Services eine 30 mit einem kleinen Rechteck dahinter.

Muss ich ein DateFormula-Feld evtl. in der Transact-SQL-Anweisung irgendwie konvertieren?
Kann mir hier jemand helfen?

Gruß
Ralf

18. Januar 2008 21:50

Hm, eine DateFormula wird in SQL zu VARCHAR(32) ... Da wunderts mich schon, dass ein T nicht ein T bleibt ... Hast du ausprobiert, was aus den anderen Einträgen (M usw.) wird?

18. Januar 2008 21:55

Hast du ausprobiert, was aus den anderen Einträgen (M usw.) wird?


Gute Frage!
Werde ich sofort mal ausprobieren und gleich rückmelden.

Gruß
Ralf

18. Januar 2008 22:10

Hab es gerade getestet.

Es ist egal ob das DateFormula-Feld "30T", "30W", "30M", etc. enthält.
In der Reporting-Services-Abfrage wird immer die 30 und ein nachfolgendes Rechteck angezeigt.

Was nun?

Gruß
Ralf

18. Januar 2008 22:26

Bin überfragt ... Als nächstes würde ich mir den Inhalt dieser Felder direkt in der SQL-Tabelle ansehen, nur um zu sehen, ob wenigstens dort noch ein Buchstabe auftaucht ...

18. Januar 2008 22:41

Wenn ich über das "SQL Server Management Studio" die Tabelle direkt öffne, zeigt er mir ebenfalls das "Rechteck" statt T,W oder M an.

Sieht das dann bei Euch anders aus?

Gruß
Ralf

18. Januar 2008 23:05

neckit hat geschrieben:Sieht das dann bei Euch anders aus?


Wahrscheinlich nicht, kann gerade nicht selbst nachsehen ;-)

19. Januar 2008 09:46

neckit hat geschrieben:Sieht das dann bei Euch anders aus?

Nein, bei mir sieht es gleich aus (siehe Abbildung).

Gruß, Marc
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

19. Januar 2008 14:40

Vermutlich setzt der NAV-Client das Quadrat uma also eine Zeichenkonvertierung von T,W,M auf ein nicht leserliches Zeichen.

19. Januar 2008 15:02

MrBurns hat geschrieben:Vermutlich setzt der NAV-Client das Quadrat uma also eine Zeichenkonvertierung von T,W,M auf ein nicht leserliches Zeichen.

Ja, aber welchen Zweck soll das Ganze haben, wenn der Buchstabe als solcher in NAV verwendet werden muss UND das SQL-Feld als VARCHAR sogar darauf ausgelegt ist, "normale Buchstaben" anzuzeigen?

19. Januar 2008 19:26

Natalie hat geschrieben:
MrBurns hat geschrieben:Vermutlich setzt der NAV-Client das Quadrat uma also eine Zeichenkonvertierung von T,W,M auf ein nicht leserliches Zeichen.

Ja, aber welchen Zweck soll das Ganze haben, wenn der Buchstabe als solcher in NAV verwendet werden muss UND das SQL-Feld als VARCHAR sogar darauf ausgelegt ist, "normale Buchstaben" anzuzeigen?


Hmm, Multilanguage?

19. Januar 2008 21:06

Aber wie unterscheidet denn nun NAV, ob das "Rechteck" ein T,W oder M darstellt? Oder sind das verschiedene ASCII-Codes?
Irgendwie weiss ich jetzt immer noch nicht, wie ich so ein DateFormula-Feld z.B. in den Reporting Services verwenden kann.

Hat noch jemand einen Tip?

Gruß
Ralf

20. Januar 2008 11:23

Oups :>

Ja, es sind verschiedene Binärwerte. Diese müssen im Report später entsprechend in Klartext umgesetzt werden. Erstmal hilft dir ggf. die (undokumentierte) SP fn_varbintohexstr() weiter. Damit kannst du die verschiedenen Werte ermitteln.

Code:
SELECT [No_], [Lead Time Calculation], master.dbo.fn_varbintohexstr(CONVERT(varbinary, [Lead Time Calculation])) AS LtcAsHex
FROM [Company$Item]

20. Januar 2008 12:52

Danke SilverX!

Bei dem aktuellen Report komme ich damit erstmal weiter.

Auf Dauer ist das allerdings sehr umständlich.
Falls also jemand mal den Ergeiz hat, das einfacher umzusetzen, wäre das für viele zukünftigen SSRS-Anwender bestimmt sehr hilfreich;
und für mich natürlich auch :wink:
Ich selbst bin leider bezüglich TSQL und Stored Procedures noch ein ziemlicher Newbie.

Gruß
Ralf

20. Januar 2008 20:14

Auf Dauer ist das allerdings sehr umständlich.


Es gibt bei den Datenbankeinstellungen das Häkchen "Sichen erstellen" oder so ähnlich. Dort werden für jede zugelassene Sprache die entsprechenden Sichten erstellt gemäß folgenden Schema: Language Code$Company Name$Table Caption. Es wäre zu prüfen, ob diese Sichten nicht schon automatisch den Binärwert in lesbare Zeichen umsetzen.

21. Januar 2008 09:55

die frage ist, warum willst du für Reporting Services ein solches feld verwenden? ev. gibt es ja eine einfachere Möglichkeit, als solche Felder darzustellen.

Darf man fragen, was für Tabellen denn diesen Eintrag enthalten? Ich kenne in NAV nur Tabellen, welche Datumswerte enthalten... (sind das extra-Tabellen, oder bin ich noch nie über die gestolpert?)

21. Januar 2008 10:03

Bender hat geschrieben:die frage ist, warum willst du für Reporting Services ein solches feld verwenden? ev. gibt es ja eine einfachere Möglichkeit, als solche Felder darzustellen.

Darf man fragen, was für Tabellen denn diesen Eintrag enthalten? Ich kenne in NAV nur Tabellen, welche Datumswerte enthalten... (sind das extra-Tabellen, oder bin ich noch nie über die gestolpert?)


Das sind Standardfelder und ein Standard-Datentyp, zu finden z.B. in Tabelle Item (Artikel, 27), Feld "Lead Time Calculation" (Beschaffungszeit), aber auch in VK-Zeilen (Feld "Shipping Time").

21. Januar 2008 10:20

ok, wieder was gelernt. liegt wohl daran, dass ich die Dinger noch nie in einem Report darstellen musste...

Für die Reporting Services könntest du es ja auch so machen:
Eine neue Tabelle anlegen, in der nur diese paar Umrechnungen drin sind mit den Quadraten, und dann die Reports über diese Tabelle verknüpfen, dann machst du die verknüpfung 1x und danach könntest du diese für andere Reports einfach kopieren...

21. Januar 2008 10:59

Zur Info

Es gibt bei den Datenbankeinstellungen das Häkchen "Sichen erstellen" oder so ähnlich. Dort werden für jede zugelassene Sprache die entsprechenden Sichten erstellt gemäß folgenden Schema: Language Code$Company Name$Table Caption. Es wäre zu prüfen, ob diese Sichten nicht schon automatisch den Binärwert in lesbare Zeichen umsetzen.

In der "Sicht" wird das Feld auch nicht korrekt dargestellt.

Für die Reporting Services könntest du es ja auch so machen:
Eine neue Tabelle anlegen, in der nur diese paar Umrechnungen drin sind mit den Quadraten, und dann die Reports über diese Tabelle verknüpfen, dann machst du die verknüpfung 1x und danach könntest du diese für andere Reports einfach kopieren...

Das macht es leider nicht wirklich leichter.

Trotzdem - Danke für die Tips!

Gruß
Ralf

Re: Reporting Services und Nav-Datentyp DateFormula

17. Juli 2009 14:34

Hi!

Gibt's hierzu schon was Neues? Bin auch erst kürzlich über dieses Problem gestolpert ... ich habe hier die "Sonderzeichen" in der Abfrage quasi "zu Fuss" übersetzt ... funktioniert aber wohl nur begrenzt ...

Code:
SELECT
[No_],
[Lead Time Calculation],
[Lead Time Calculation (Text)] =
  CASE
    WHEN ISNULL(CHARINDEX('', [Lead Time Calculation]), 0) <> 0 THEN REPLACE([Lead Time Calculation], '', 'T')  -- Tag
    WHEN ISNULL(CHARINDEX('', [Lead Time Calculation]), 0) <> 0 THEN REPLACE([Lead Time Calculation], '', 'W')  -- Woche
    WHEN ISNULL(CHARINDEX('', [Lead Time Calculation]), 0) <> 0 THEN REPLACE([Lead Time Calculation], '', 'M')  -- Monat
    WHEN ISNULL(CHARINDEX('', [Lead Time Calculation]), 0) <> 0 THEN REPLACE([Lead Time Calculation], '', 'Q')  -- Quartal
    WHEN ISNULL(CHARINDEX('', [Lead Time Calculation]), 0) <> 0 THEN REPLACE([Lead Time Calculation], '', 'J')  -- Jahr
  END
FROM [CRONUS 403$Item]
WHERE [Lead Time Calculation] <> ''

Re: Reporting Services und Nav-Datentyp DateFormula

21. Juli 2009 10:07

Hi nochmal!

Habe dazu jetzt was in MIBUSO gefunden (http://www.mibuso.com/forum/viewtopic.php?t=4660) und daraus folgendes Script abgeleitet:

Code:
SELECT
[No_],
[Lead Time Calculation],
[Lead Time Calculation (Text)] =
  REPLACE(
    REPLACE(
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE([Lead Time Calculation],
              CHAR(7), 'Y'),  -- Year (DEU: J)
            CHAR(6), 'Q'),  -- Quarter (DEU: Q)
          CHAR(5), 'M'),  -- Month (DEU: M)
        CHAR(4), 'W'),  -- Week (DEU: W)
    CHAR(2), 'D'),  -- Day (DEU: T)
  CHAR(1), 'C') -- Current (DEU: L)
FROM [CRONUS 403$Item]
WHERE [Lead Time Calculation] <> ''
GO


Damit sollten sich auch komplexere Formeln korrekt darstellen lassen ...